from typing import Any from fastapi import APIRouter, Depends from pydantic import BaseModel, Field from sqlalchemy.orm import Session from app.auth.deps import get_current_user from app.db.base import get_db from app.db.models import User from app.settings.service import SETTING_KEYS, SettingsService router = APIRouter() class SettingsPatch(BaseModel): openrouter_model: str | None = None memory_extract_model: str | None = None openrouter_vision_model: str | None = None openrouter_reasoning_effort: str | None = None rag_enabled: bool | None = None rag_top_k: int | None = Field(default=None, ge=1, le=50) @router.get("/settings") def get_settings_route(db: Session = Depends(get_db), user: User = Depends(get_current_user)) -> dict[str, Any]: return SettingsService(db).snapshot() @router.patch("/settings") def patch_settings_route( payload: SettingsPatch, db: Session = Depends(get_db), user: User = Depends(get_current_user), ) -> dict[str, Any]: updates = payload.model_dump(exclude_unset=True) return SettingsService(db).patch(updates)