Теперь проекты для индексации хранятся отдельно
This commit is contained in:
@@ -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]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user