from __future__ import annotations from typing import Optional from fastapi import APIRouter, Depends, Header from pydantic import BaseModel, Field from sqlalchemy.orm import Session from app.core.response import success_response from app.db import get_db_session from app.services.auth_service import AuthService from app.services.model_setting_service import ModelSettingService router = APIRouter(prefix="/model-settings", tags=["model-settings"]) ROUTE_PERMISSION_SCOPE = "model_settings" ROUTE_PERMISSION_ACTIONS = { "get": "model_settings:get", "update": "model_settings:update", "runtime_export": "model_settings:runtime_export", } class ModelSettingUpdateRequest(BaseModel): config_format: str = Field(min_length=1, max_length=32) raw_config: str = Field(min_length=1) display_name: Optional[str] = Field(default=None, max_length=100) enabled: bool = True auth_token: Optional[str] = None def get_model_setting_service(db: Session = Depends(get_db_session)) -> ModelSettingService: return ModelSettingService(db) def require_current_user( authorization: Optional[str] = Header(default=None), db: Session = Depends(get_db_session), ): return AuthService(db).require_current_user(authorization) @router.get("") def get_current_model_setting( model_setting_service: ModelSettingService = Depends(get_model_setting_service), current_user: dict = Depends(require_current_user), ): return success_response(model_setting_service.get_current_setting(current_user)) @router.put("") def update_current_model_setting( payload: ModelSettingUpdateRequest, model_setting_service: ModelSettingService = Depends(get_model_setting_service), current_user: dict = Depends(require_current_user), ): return success_response( model_setting_service.upsert_current_setting( current_user, config_format=payload.config_format, raw_config=payload.raw_config, display_name=payload.display_name, enabled=payload.enabled, auth_token=payload.auth_token, ) ) @router.get("/runtime-export") def get_model_setting_runtime_export( model_setting_service: ModelSettingService = Depends(get_model_setting_service), current_user: dict = Depends(require_current_user), ): return success_response(model_setting_service.build_runtime_export(current_user))