File size: 4,147 Bytes
4ad5efa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import logging
import uuid
from datetime import datetime
import pandas as pd

logger = logging.getLogger(__name__)

def initialize_indices(app):
    """
    Ініціалізує індекси BM25 та FAISS для режиму гібридного чату.
    
    Args:
        app: Екземпляр JiraAssistantApp
        
    Returns:
        dict: Результат ініціалізації
    """
    if not hasattr(app, 'current_data') or app.current_data is None:
        return {"error": "Немає даних для індексування. Спочатку завантажте CSV файл."}
    
    try:
        # Генеруємо унікальний ідентифікатор сесії, якщо він відсутній
        if not hasattr(app, 'current_session_id') or app.current_session_id is None:
            app.current_session_id = f"{uuid.uuid4()}_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
            logger.info(f"Створено новий ID сесії для індексування: {app.current_session_id}")
        
        # Викликаємо метод для створення індексів
        indices_result = app.index_manager.get_or_create_indices(
            app.current_data, 
            app.current_session_id
        )
        
        if "error" in indices_result:
            logger.error(f"Помилка при створенні індексів: {indices_result['error']}")
            return indices_result
        
        # Зберігаємо шлях до індексів у app
        indices_dir = indices_result.get("indices_dir")
        app.indices_path = indices_dir
        app.current_indices_dir = indices_dir
        
        logger.info(f"Індекси успішно створено: {indices_dir}")
        
        # Зберігаємо шлях до індексів глобально для доступу з різних модулів
        try:
            import builtins
            if hasattr(builtins, 'app'):
                builtins.app.indices_path = indices_dir
                logger.info(f"Шлях до індексів збережено глобально: {indices_dir}")
                
                # Якщо також є глобальний index_manager, зберігаємо в ньому
                if hasattr(builtins, 'index_manager'):
                    builtins.index_manager.last_indices_path = indices_dir
                    logger.info(f"Шлях до індексів збережено в index_manager: {indices_dir}")
        except Exception as app_err:
            logger.warning(f"Не вдалося зберегти шлях до індексів глобально: {app_err}")

        # Очищаємо кеш екземплярів чату, якщо він є
        if hasattr(app, 'chat_instances_cache'):
            app.chat_instances_cache = {}
            logger.info("Скинуто кеш екземплярів чату")
        
        # Якщо є клас JiraHybridChat зі статичним кешем, очищаємо його
        try:
            from modules.ai_analysis.jira_hybrid_chat import JiraHybridChat
            if hasattr(JiraHybridChat, 'chat_instances_cache'):
                JiraHybridChat.chat_instances_cache = {}
                logger.info("Скинуто статичний кеш JiraHybridChat")
        except ImportError:
            pass
        
        return {
            "success": True,
            "indices_dir": indices_dir,
            "documents_count": indices_result.get("documents_count", indices_result.get("rows_count", len(app.current_data))),
            "nodes_count": indices_result.get("nodes_count", indices_result.get("rows_count", len(app.current_data)))
        }
        
    except Exception as e:
        import traceback
        error_details = traceback.format_exc()
        logger.error(f"Помилка при ініціалізації індексів: {e}\n{error_details}")
        return {"error": f"Помилка при ініціалізації індексів: {str(e)}"}