| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """配置相关API路由"""
- import logging
- from fastapi import APIRouter, HTTPException
- from ..models.schemas import ConfigRequest, ConfigResponse, ModelListResponse
- from ..services.model_service import ModelService
- from ..utils.config_manager import config_manager
- from ..utils.errors import AppError
- logger = logging.getLogger(__name__)
- router = APIRouter(prefix="/api/config", tags=["配置管理"])
- @router.post("/save", response_model=ConfigResponse)
- async def save_config(config: ConfigRequest):
- """保存OpenAI配置"""
- try:
- success = config_manager.save_config(
- api_key=config.api_key,
- base_url=config.base_url or "",
- model_name=config.model_name,
- )
- if success:
- return ConfigResponse(success=True, message="配置保存成功")
- else:
- return ConfigResponse(success=False, message="配置保存失败")
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"保存配置时发生错误: {str(e)}")
- @router.get("/load", response_model=ConfigRequest)
- async def load_config():
- """加载保存的配置"""
- try:
- config = config_manager.load_config()
- return config
- except Exception as e:
- logger.exception("加载配置失败")
- raise HTTPException(status_code=500, detail=f"加载配置时发生错误: {str(e)}")
- @router.post("/models", response_model=ModelListResponse)
- async def get_available_models(config: ConfigRequest):
- """获取可用的模型列表"""
- try:
- if not config.api_key:
- return ModelListResponse(
- models=[], success=False, message="请先输入API Key"
- )
- # 临时保存配置以供模型服务使用
- temp_saved = config_manager.save_config(
- api_key=config.api_key,
- base_url=config.base_url,
- model_name=config.model_name,
- )
- if not temp_saved:
- return ModelListResponse(
- models=[], success=False, message="保存临时配置失败"
- )
- # 创建模型服务实例
- model_service = ModelService()
- # 获取模型列表
- models = await model_service.get_available_models()
- return ModelListResponse(
- models=models, success=True, message=f"获取到 {len(models)} 个模型"
- )
- except AppError as e:
- return ModelListResponse(models=[], success=False, message=e.message)
- except Exception as e:
- logger.exception("获取模型列表失败")
- return ModelListResponse(
- models=[], success=False, message=f"获取模型列表失败: {str(e)}"
- )
|