Spaces:
Running
Running
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)}"} |