Spaces:
Running
Running
File size: 7,226 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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import gradio as gr
import logging
import os
logger = logging.getLogger("jira_assistant_interface")
def init_indices_handler(app):
"""
Обробник для кнопки ініціалізації індексів для гібридного чату.
Використовує безпосередньо логіку JiraHybridChat для створення індексів.
Args:
app: Екземпляр JiraAssistantApp
Returns:
str: HTML-повідомлення про результат
"""
if not hasattr(app, 'current_data') or app.current_data is None:
return "<p style='color:red;'>❌ Помилка: спочатку завантажте дані CSV</p>"
try:
# Функція для ініціалізації індексів через JiraHybridChat
def initialize_chat_indices():
try:
from modules.ai_analysis.jira_hybrid_chat import JiraHybridChat
# Визначаємо директорію для індексів
indices_dir = None
if hasattr(app, 'current_session_id') and app.current_session_id is not None:
indices_dir = f"temp/indices/{app.current_session_id}"
os.makedirs(indices_dir, exist_ok=True)
# Створюємо екземпляр JiraHybridChat
chat = JiraHybridChat(
indices_dir=indices_dir,
app=app
)
# Якщо хочемо примусово перезавантажити/створити індекси,
# викликаємо load_indices
success = chat.load_indices(indices_dir)
if not success:
return {"error": "Не вдалося створити або завантажити індекси"}
# Отримуємо потрібні посилання на створені ретривери/індекси
vector_index = chat.index
bm25_retriever = chat.retriever_bm25
if not vector_index or not bm25_retriever:
return {"error": "Не вдалося створити індекси"}
# Зберігаємо шлях до індексів
app.indices_path = indices_dir
# Очищуємо кеш чату для перезавантаження з новими індексами
if hasattr(JiraHybridChat, 'chat_instances_cache'):
JiraHybridChat.chat_instances_cache = {}
return {
"success": True,
"indices_dir": indices_dir
}
except Exception as e:
import traceback
logger.error(f"Помилка при ініціалізації індексів: {e}\n{traceback.format_exc()}")
return {"error": str(e)}
# Викликаємо функцію ініціалізації
result = initialize_chat_indices()
if "error" in result:
return f"<p style='color:red;'>❌ Помилка при створенні індексів: {result['error']}</p>"
# Формуємо HTML для відображення результату
html_result = f"""
<div style='background-color:#e6f7e6; padding:15px; border-left:4px solid #28a745; border-radius:5px;'>
<p style='color:#28a745; font-weight:bold; font-size:16px;'>✅ Індекси успішно створено!</p>
<p>Директорія індексів: {result.get('indices_dir')}</p>
<p><b>Тепер можна використовувати гібридний чат!</b></p>
</div>
"""
return html_result
except Exception as e:
import traceback
error_details = traceback.format_exc()
logger.error(f"Помилка при ініціалізації індексів: {e}\n{error_details}")
return f"<p style='color:red;'>❌ Помилка при ініціалізації індексів: {str(e)}</p>"
def create_ai_assistant_tab(app):
"""
Створює вкладку 'AI Асистенти' у Gradio інтерфейсі.
Спроба завантажити або модифікований, або стандартний AI асистент.
Якщо імпорт не вдається, показується повідомлення про залежності.
"""
with gr.Tab("AI Асистенти"):
try:
# Додаємо секцію для ініціалізації індексів
gr.Markdown("## Ініціалізація індексів для гібридного пошуку")
gr.Markdown("""
Для роботи гібридного чату потрібно створити індекси FAISS і BM25.
Це потрібно зробити один раз після завантаження нових даних.
Кожен рядок CSV буде конвертовано в окрему ноду для пошуку.
""")
init_indices_btn = gr.Button("Ініціалізувати індекси", variant="primary")
indices_status = gr.HTML(label="Статус індексів")
# Прив'язуємо обробник до кнопки
init_indices_btn.click(
fn=lambda: init_indices_handler(app),
inputs=[],
outputs=[indices_status]
)
# Спробуємо модифіковану версію
try:
from modules.ai_analysis.ai_assistant_integration_mod import setup_ai_assistant_tab
setup_ai_assistant_tab(app, gr)
logger.info("Успішно завантажено модифіковану версію AI асистента")
except ImportError:
logger.info("Помилка завантаження модифікованої версії AI асистента")
except ImportError as e:
logger.error(f"Помилка імпорту модулів для AI асистента: {e}")
gr.Markdown("## AI Асистенти для Jira")
gr.Markdown(f"""
### ⚠️ Потрібні додаткові залежності
Для роботи AI асистентів необхідно встановити додаткові бібліотеки:
```bash
pip install llama-index-llms-gemini llama-index llama-index-embeddings-openai llama-index-retrievers-bm25 llama-index-vector-stores-faiss faiss-cpu tiktoken
```
Помилка: {str(e)}
""") |