imetting/backend/app/api/endpoints/admin_settings.py

160 lines
5.0 KiB
Python

from typing import Any
from fastapi import APIRouter, Depends, Query
from pydantic import BaseModel
from app.core.auth import get_current_admin_user
import app.services.admin_settings_service as admin_settings_service
router = APIRouter()
class ParameterUpsertRequest(BaseModel):
param_key: str
param_name: str
param_value: str
value_type: str = "string"
category: str = "system"
description: str | None = None
is_active: bool = True
class LLMModelUpsertRequest(BaseModel):
model_code: str
model_name: str
provider: str | None = None
endpoint_url: str | None = None
api_key: str | None = None
llm_model_name: str
llm_timeout: int = 120
llm_temperature: float = 0.7
llm_top_p: float = 0.9
llm_max_tokens: int = 2048
llm_system_prompt: str | None = None
description: str | None = None
is_active: bool = True
is_default: bool = False
class AudioModelUpsertRequest(BaseModel):
model_code: str
model_name: str
audio_scene: str
provider: str | None = None
endpoint_url: str | None = None
api_key: str | None = None
request_timeout_seconds: int = 300
extra_config: dict[str, Any] | None = None
hot_word_group_id: int | None = None
description: str | None = None
is_active: bool = True
is_default: bool = False
class LLMModelTestRequest(LLMModelUpsertRequest):
test_prompt: str | None = None
class AudioModelTestRequest(AudioModelUpsertRequest):
test_file_url: str | None = None
@router.get("/admin/parameters")
async def list_parameters(
category: str | None = Query(None),
keyword: str | None = Query(None),
current_user=Depends(get_current_admin_user),
):
return admin_settings_service.list_parameters(category, keyword)
@router.get("/admin/parameters/{param_key}")
async def get_parameter(param_key: str, current_user=Depends(get_current_admin_user)):
return admin_settings_service.get_parameter(param_key)
@router.post("/admin/parameters")
async def create_parameter(request: ParameterUpsertRequest, current_user=Depends(get_current_admin_user)):
return admin_settings_service.create_parameter(request)
@router.put("/admin/parameters/{param_key}")
async def update_parameter(
param_key: str,
request: ParameterUpsertRequest,
current_user=Depends(get_current_admin_user),
):
return admin_settings_service.update_parameter(param_key, request)
@router.delete("/admin/parameters/{param_key}")
async def delete_parameter(param_key: str, current_user=Depends(get_current_admin_user)):
return admin_settings_service.delete_parameter(param_key)
@router.get("/admin/model-configs/llm")
async def list_llm_model_configs(current_user=Depends(get_current_admin_user)):
return admin_settings_service.list_llm_model_configs()
@router.post("/admin/model-configs/llm")
async def create_llm_model_config(request: LLMModelUpsertRequest, current_user=Depends(get_current_admin_user)):
return admin_settings_service.create_llm_model_config(request)
@router.put("/admin/model-configs/llm/{model_code}")
async def update_llm_model_config(
model_code: str,
request: LLMModelUpsertRequest,
current_user=Depends(get_current_admin_user),
):
return admin_settings_service.update_llm_model_config(model_code, request)
@router.get("/admin/model-configs/audio")
async def list_audio_model_configs(
scene: str = Query("all"),
current_user=Depends(get_current_admin_user),
):
return admin_settings_service.list_audio_model_configs(scene)
@router.post("/admin/model-configs/audio")
async def create_audio_model_config(request: AudioModelUpsertRequest, current_user=Depends(get_current_admin_user)):
return admin_settings_service.create_audio_model_config(request)
@router.put("/admin/model-configs/audio/{model_code}")
async def update_audio_model_config(
model_code: str,
request: AudioModelUpsertRequest,
current_user=Depends(get_current_admin_user),
):
return admin_settings_service.update_audio_model_config(model_code, request)
@router.delete("/admin/model-configs/llm/{model_code}")
async def delete_llm_model_config(model_code: str, current_user=Depends(get_current_admin_user)):
return admin_settings_service.delete_llm_model_config(model_code)
@router.delete("/admin/model-configs/audio/{model_code}")
async def delete_audio_model_config(model_code: str, current_user=Depends(get_current_admin_user)):
return admin_settings_service.delete_audio_model_config(model_code)
@router.post("/admin/model-configs/llm/test")
async def test_llm_model_config(request: LLMModelTestRequest, current_user=Depends(get_current_admin_user)):
return admin_settings_service.test_llm_model_config(request)
@router.post("/admin/model-configs/audio/test")
async def test_audio_model_config(request: AudioModelTestRequest, current_user=Depends(get_current_admin_user)):
return admin_settings_service.test_audio_model_config(request)
@router.get("/system-config/public")
async def get_public_system_config():
return admin_settings_service.get_public_system_config()