Files
ai-contract-platform/backend/app/api/model_settings.py
T

74 lines
2.4 KiB
Python

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))