jira-ai-assistant / modules /ai_analysis /indices_initializer.py
DocUA's picture
Єдиний коміт - очищення історії
4ad5efa
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)}"}