"""Настройки приложения (LLM-ключи, дефолты пайплайна) — живут в Postgres, переживают перезапуск контейнеров и перезагрузку страницы. """ from __future__ import annotations from fastapi import APIRouter from pydantic import BaseModel from api.db.setting import get_all_settings, set_settings router = APIRouter(prefix="/settings", tags=["settings"]) _KEYS = ( "llm_base_url", "llm_api_key", "llm_model", "summary_max_sentences", "keep_video", "vosk_model_path", ) class SettingsPayload(BaseModel): llm_base_url: str | None = None llm_api_key: str | None = None llm_model: str | None = None summary_max_sentences: int | None = None keep_video: bool | None = None vosk_model_path: str | None = None @router.get("/") async def get_settings(): db = await get_all_settings() return { "llm_base_url": db.get("llm_base_url", ""), "llm_api_key": db.get("llm_api_key", ""), "llm_model": db.get("llm_model", ""), "summary_max_sentences": int(db.get("summary_max_sentences") or 15), "keep_video": db.get("keep_video", "1") != "0", "vosk_model_path": db.get("vosk_model_path", "models/vosk-model-small-ru-0.22"), } @router.put("/") async def put_settings(body: SettingsPayload): values: dict[str, str] = {} for key in _KEYS: v = getattr(body, key) if v is None: continue if key == "keep_video": values[key] = "1" if v else "0" else: values[key] = str(v) if values: await set_settings(values) return await get_settings()