Files
telegram-helper-bot/scripts/add_ml_scores_columns.py
2026-02-02 00:13:33 +03:00

88 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Миграция: Добавление колонки для ML-скоринга постов.
Добавляет:
- ml_scores (TEXT/JSON) - JSON с результатами оценки от разных моделей
Структура ml_scores:
{
"deepseek": {"score": 0.75, "model": "deepseek-chat", "ts": 1706198400},
"rag": {"score": 0.90, "model": "rubert-base-cased", "ts": 1706198400}
}
"""
import argparse
import asyncio
import os
import sys
from pathlib import Path
# Добавляем корень проекта в путь
project_root = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(project_root))
import aiosqlite
# Пытаемся импортировать logger, если не получается - используем стандартный
try:
from logs.custom_logger import logger
except ImportError:
import logging
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
DEFAULT_DB_PATH = "database/tg-bot-database.db"
async def column_exists(conn: aiosqlite.Connection, table: str, column: str) -> bool:
"""Проверяет существование колонки в таблице."""
cursor = await conn.execute(f"PRAGMA table_info({table})")
columns = await cursor.fetchall()
return any(col[1] == column for col in columns)
async def main(db_path: str) -> None:
"""
Основная функция миграции.
Добавляет колонку ml_scores в таблицу post_from_telegram_suggest.
Миграция идемпотентна - можно запускать повторно без ошибок.
"""
db_path = os.path.abspath(db_path)
if not os.path.exists(db_path):
logger.error(f"База данных не найдена: {db_path}")
return
async with aiosqlite.connect(db_path) as conn:
await conn.execute("PRAGMA foreign_keys = ON")
# Проверяем и добавляем колонку ml_scores
if not await column_exists(conn, "post_from_telegram_suggest", "ml_scores"):
await conn.execute(
"ALTER TABLE post_from_telegram_suggest ADD COLUMN ml_scores TEXT"
)
logger.info("Колонка ml_scores добавлена в post_from_telegram_suggest")
else:
logger.info("Колонка ml_scores уже существует")
await conn.commit()
logger.info("Миграция add_ml_scores_columns завершена успешно")
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Добавление колонки ml_scores для ML-скоринга"
)
parser.add_argument(
"--db",
default=os.environ.get("DATABASE_PATH", DEFAULT_DB_PATH),
help="Путь к БД",
)
args = parser.parse_args()
asyncio.run(main(args.db))