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