74 lines
2.4 KiB
Python
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))
|