План реализации: Поддержка нескольких информационных баз (ИБ)
Цель
Обеспечить возможность работы с несколькими информационными базами (ИБ) одновременно. Приложение должно считывать конфигурацию из YAML файла, запускать веб-интерфейс для управления ИБ и поиска, и в фоновом режиме обслуживать каждую ИБ (индексация, проверка изменений).
Требования пользователя
Конфигурация: YAML файл со списком ИБ (имя, путь к выгрузке, модель эмбеддингов, настройки векторной БД).
Веб-интерфейс: Запускается первым. Позволяет добавлять/удалять/изменять ИБ, выполнять поиск, вручную запускать индексацию.
Обслуживание: Фоновые процессы запускаются после инициализации UI.
Поиск: Доступен по адресу http://localhost:port/КраткоеИмяИБ.
Язык: Русский.
Предлагаемые изменения
1. Конфигурация и Менеджер ИБ
Создать новую систему конфигурации и управления состоянием.
[NEW] code_search/config_manager.py
Менеджер для загрузки/сохранения config.yaml. Схема конфига:
global:
port: 8000
check_interval: 300
ibs:
- name: "zup3"
title: "ЗУП 3.1"
source_path: "/path/to/xml"
index_path: "/path/to/index"
embedding_model: "cointegrated/rubert-tiny2"
vector_db: "qdrant" # пока только qdrant встроенный
[NEW] code_search/app_context.py
Класс AppContext (или IBManager), который хранит состояние всех активных ИБ.
Содержит словарь ib_contexts: name -> IBContext.
IBContext содержит:
Поля конфигурации.
Экземпляр
IndexEngine
.
Экземпляр
HybridSearch
.
Состояние индексации (
IndexingStatus
).
Фоновые потоки.
2. Рефакторинг ядра
[MODIFY]
code_search/config.py
Убрать глобальные indexing_status, model_state, COLLECTION_NAME.
Оставить только константы по умолчанию.
[MODIFY]
code_search/indexer/engine.py
IndexEngine
должен принимать конфигурацию в
init
(или collection_name и пути).
Убрать зависимость от глобальных indexing_status и model_state. Принимать объекты состояния как аргументы или создать их внутри и предоставлять доступ к ним.
[MODIFY]
code_search/search/hybrid.py
HybridSearch
должен привязываться к конкретному клиенту Qdrant и коллекции.
[NEW] code_search/model_manager.py
Управление загрузкой моделей. Может быть синглтоном, если модель одна на всех (rubert-tiny2), или кэшем моделей, если они разные.
3. Веб-интерфейс
[MODIFY]
code_search/web/
init
.py
(или где лежит app factory)
Обновить create_app для приема IBManager.
Добавить маршруты для управления ИБ (API и UI).
Главная страница: список ИБ со статусами.
Страница ИБ: поиск, управление индексацией, настройки.
4. Точка входа
[MODIFY]
code_search/
main
.py
Загрузка config.yaml (или создание дефолтного).
Инициализация IBManager.
Запуск Web Server.
IBManager запускает фоновые процессы для загруженных ИБ.
План верификации
Автоматизированные тесты (нужно создать инфраструктуру, так как тестов нет)
Создать простую тестовую среду:
Создать временную директорию с парой dummy XML файлов.
Сгенерировать config.yaml.
Запустить приложение в тестовом режиме.
Ручная верификация
Запуск без конфига: Должен создаться пустой конфиг (или дефолтный) и запуститься веб-интерфейс.
Добавление ИБ: Через UI добавить тестовую ИБ (указав путь к 1c-dump).
Проверка служб: Убедиться, что началась индексация (видно в UI).
Поиск: Проверить поиск по этой ИБ.
Вторая ИБ: Добавить вторую ИБ. Убедиться, что они работают независимо.
Перезапуск: Перезапустить приложение, убедиться, что ИБ подтянулись из конфига.
Этапы внедрения (по файлам)
code_search/config_manager.py, code_search/model_manager.py, code_search/app_context.py [NEW]
code_search/indexer/engine.py
[MODIFY]
code_search/search/hybrid.py
[MODIFY]
code_search/web/* [MODIFY]
code_search/
main
.py
[MODIFY]