config.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. """配置相关API路由"""
  2. import logging
  3. from fastapi import APIRouter, HTTPException
  4. from ..models.schemas import ConfigRequest, ConfigResponse, ModelListResponse
  5. from ..services.model_service import ModelService
  6. from ..utils.config_manager import config_manager
  7. from ..utils.errors import AppError
  8. logger = logging.getLogger(__name__)
  9. router = APIRouter(prefix="/api/config", tags=["配置管理"])
  10. @router.post("/save", response_model=ConfigResponse)
  11. async def save_config(config: ConfigRequest):
  12. """保存OpenAI配置"""
  13. try:
  14. success = config_manager.save_config(
  15. api_key=config.api_key,
  16. base_url=config.base_url or "",
  17. model_name=config.model_name,
  18. )
  19. if success:
  20. return ConfigResponse(success=True, message="配置保存成功")
  21. else:
  22. return ConfigResponse(success=False, message="配置保存失败")
  23. except Exception as e:
  24. raise HTTPException(status_code=500, detail=f"保存配置时发生错误: {str(e)}")
  25. @router.get("/load", response_model=ConfigRequest)
  26. async def load_config():
  27. """加载保存的配置"""
  28. try:
  29. config = config_manager.load_config()
  30. return config
  31. except Exception as e:
  32. logger.exception("加载配置失败")
  33. raise HTTPException(status_code=500, detail=f"加载配置时发生错误: {str(e)}")
  34. @router.post("/models", response_model=ModelListResponse)
  35. async def get_available_models(config: ConfigRequest):
  36. """获取可用的模型列表"""
  37. try:
  38. if not config.api_key:
  39. return ModelListResponse(
  40. models=[], success=False, message="请先输入API Key"
  41. )
  42. # 临时保存配置以供模型服务使用
  43. temp_saved = config_manager.save_config(
  44. api_key=config.api_key,
  45. base_url=config.base_url,
  46. model_name=config.model_name,
  47. )
  48. if not temp_saved:
  49. return ModelListResponse(
  50. models=[], success=False, message="保存临时配置失败"
  51. )
  52. # 创建模型服务实例
  53. model_service = ModelService()
  54. # 获取模型列表
  55. models = await model_service.get_available_models()
  56. return ModelListResponse(
  57. models=models, success=True, message=f"获取到 {len(models)} 个模型"
  58. )
  59. except AppError as e:
  60. return ModelListResponse(models=[], success=False, message=e.message)
  61. except Exception as e:
  62. logger.exception("获取模型列表失败")
  63. return ModelListResponse(
  64. models=[], success=False, message=f"获取模型列表失败: {str(e)}"
  65. )