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)}"}