Теперь проекты для индексации хранятся отдельно

This commit is contained in:
ki.sagidullin
2026-04-01 09:15:29 +05:00
parent 4816950382
commit 5c8c09720c
2 changed files with 81 additions and 14 deletions

View File

@@ -65,8 +65,11 @@ class AgenticRAGInterface:
self.conversation_history = []
return "История очищена", ""
def index_documents(self, folder_path: str):
"""Индексация документов из указанной папки"""
def index_documents(self, project_name: str, folder_path: str):
"""Индексация документов из указанной папки для проекта"""
if not project_name:
return "❌ Укажите имя проекта", ""
if not folder_path:
return "❌ Укажите путь к папке", ""
@@ -77,17 +80,28 @@ class AgenticRAGInterface:
return f"❌ Указанный путь не является папкой: {folder_path}", ""
try:
# Переключаемся на проект (создаст новую коллекцию)
self.kb.set_project(project_name)
# Индексируем документы
chunks = self.kb.load_documents(folder_path)
return f"Успешно! Индексировано чанков: {len(chunks)}", folder_path
return f"Проект '{project_name}': индексировано чанков: {len(chunks)}", folder_path
except Exception as e:
return f"❌ Ошибка при индексации: {str(e)}", ""
# Инициализируем базу
kb = LocalKnowledgeBase()
# Загружаем документы (если есть)
if os.path.exists("./documents"):
kb.load_documents("./documents")
def switch_project(self, project_name: str):
"""Переключиться на другой проект"""
if not project_name:
return "❌ Укажите имя проекта", ""
try:
self.kb.set_project(project_name)
return f"✅ Переключено на проект: {project_name}", project_name
except Exception as e:
return f"❌ Ошибка: {str(e)}", ""
# Инициализируем базу
kb = LocalKnowledgeBase(project_name="default")
# Создаем интерфейс
interface = AgenticRAGInterface(create_agent_graph(), kb)
@@ -141,9 +155,28 @@ def create_gradio_interface():
label="Примеры запросов"
)
# Секция управления проектами
gr.Markdown("---")
gr.Markdown("### 📂 Управление проектами")
with gr.Row():
with gr.Column(scale=2):
project_input = gr.Textbox(
label="Имя проекта",
placeholder="my_cpp_project",
lines=1
)
switch_btn = gr.Button("🔄 Переключить", variant="secondary")
with gr.Column(scale=1):
project_status = gr.Textbox(
label="Текущий проект",
lines=1,
interactive=False
)
# Секция индексации документов
gr.Markdown("---")
gr.Markdown("### 📂 Индексация документов")
gr.Markdown("### 📥 Индексация документов")
with gr.Row():
with gr.Column(scale=3):
@@ -153,7 +186,7 @@ def create_gradio_interface():
lines=1
)
with gr.Column(scale=1):
index_btn = gr.Button("📥 Индексировать", variant="secondary")
index_btn = gr.Button("📥 Индексировать", variant="primary")
status_output = gr.Textbox(
label="Статус индексации",
@@ -180,10 +213,17 @@ def create_gradio_interface():
outputs=[answer_output, history_output]
)
# Обработчик переключения проекта
switch_btn.click(
fn=interface.switch_project,
inputs=[project_input],
outputs=[project_status, project_input]
)
# Обработчик индексации
index_btn.click(
fn=interface.index_documents,
inputs=[folder_input],
inputs=[project_input, folder_input],
outputs=[status_output, folder_input]
)