refactor: обновление системы ML-скоринга и переход на RAG API
- Обновлен Dockerfile для использования Alpine вместо Slim, улучшая размер образа. - Удален устаревший RAGService и добавлен RagApiClient для работы с внешним RAG API. - Обновлены переменные окружения в env.example для настройки нового RAG API. - Обновлен ScoringManager для интеграции с RagApiClient. - Упрощена структура проекта, удалены ненужные файлы и зависимости, связанные с векторным хранилищем. - Обновлены обработчики и функции для работы с новым API, включая получение статистики и обработку ошибок.
This commit is contained in:
@@ -66,11 +66,22 @@ async def start_bot(bdf):
|
||||
# Middleware уже добавлены на уровне dispatcher
|
||||
dp.include_routers(admin_router, private_router, callback_router, group_router, voice_router)
|
||||
|
||||
# Получаем scoring_manager для использования в shutdown
|
||||
scoring_manager = bdf.get_scoring_manager()
|
||||
|
||||
# Добавляем обработчик завершения для корректного закрытия
|
||||
@dp.shutdown()
|
||||
async def on_shutdown():
|
||||
logging.info("Bot shutdown initiated, cleaning up resources...")
|
||||
try:
|
||||
# Закрываем ресурсы ScoringManager
|
||||
if scoring_manager:
|
||||
try:
|
||||
await scoring_manager.close()
|
||||
logging.info("ScoringManager закрыт")
|
||||
except Exception as e:
|
||||
logging.error(f"Ошибка закрытия ScoringManager: {e}")
|
||||
|
||||
await bot.session.close()
|
||||
logging.info("Bot session closed successfully")
|
||||
except Exception as e:
|
||||
@@ -78,22 +89,6 @@ async def start_bot(bdf):
|
||||
|
||||
await bot.delete_webhook(drop_pending_updates=True)
|
||||
|
||||
# Загружаем примеры для RAG из базы данных
|
||||
scoring_manager = bdf.get_scoring_manager()
|
||||
if scoring_manager and scoring_manager.rag_service and scoring_manager.rag_service.is_enabled:
|
||||
try:
|
||||
db = bdf.get_db()
|
||||
positive_texts = await db.get_approved_posts_texts(limit=5000)
|
||||
negative_texts = await db.get_declined_posts_texts(limit=5000)
|
||||
|
||||
if positive_texts or negative_texts:
|
||||
await scoring_manager.load_examples_from_db(positive_texts, negative_texts)
|
||||
logging.info(f"RAG: Загружено {len(positive_texts)} положительных и {len(negative_texts)} отрицательных примеров")
|
||||
else:
|
||||
logging.warning("RAG: Нет примеров в базе данных для загрузки")
|
||||
except Exception as e:
|
||||
logging.error(f"Ошибка загрузки примеров для RAG: {e}")
|
||||
|
||||
# Запускаем HTTP сервер для метрик параллельно с ботом
|
||||
metrics_host = bdf.settings.get('Metrics', {}).get('host', '0.0.0.0')
|
||||
metrics_port = bdf.settings.get('Metrics', {}).get('port', 8080)
|
||||
@@ -113,6 +108,14 @@ async def start_bot(bdf):
|
||||
logging.error(f"❌ Ошибка запуска бота: {e}")
|
||||
raise
|
||||
finally:
|
||||
# Закрываем ресурсы ScoringManager перед завершением (на случай если shutdown не сработал)
|
||||
if scoring_manager:
|
||||
try:
|
||||
await scoring_manager.close()
|
||||
logging.info("ScoringManager закрыт в finally")
|
||||
except Exception as e:
|
||||
logging.error(f"Ошибка закрытия ScoringManager в finally: {e}")
|
||||
|
||||
# Останавливаем метрики сервер при завершении
|
||||
try:
|
||||
await stop_metrics_server()
|
||||
|
||||
Reference in New Issue
Block a user