settings.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. """LLM配置API"""
  2. from fastapi import APIRouter
  3. from pydantic import BaseModel
  4. from typing import Optional
  5. from ...services.llm_service import get_llm_config, reload_llm, reset_llm_config
  6. router = APIRouter(prefix="/settings", tags=["设置"])
  7. class LLMConfigResponse(BaseModel):
  8. """LLM配置响应"""
  9. base_url: str
  10. model_id: str
  11. api_key: str # 脱敏后返回
  12. class LLMConfigUpdateRequest(BaseModel):
  13. """LLM配置更新请求"""
  14. base_url: str
  15. model_id: str
  16. api_key: str
  17. class LLMConfigUpdateResponse(BaseModel):
  18. """LLM配置更新响应"""
  19. success: bool
  20. message: str
  21. config: LLMConfigResponse
  22. @router.get("/llm", response_model=LLMConfigResponse)
  23. async def get_llm_config_endpoint():
  24. """获取当前LLM配置"""
  25. config = get_llm_config()
  26. return LLMConfigResponse(**config)
  27. @router.post("/llm", response_model=LLMConfigUpdateResponse)
  28. async def update_llm_config_endpoint(request: LLMConfigUpdateRequest):
  29. """更新LLM配置并重新初始化"""
  30. try:
  31. reload_llm({
  32. "base_url": request.base_url.rstrip("/"),
  33. "model_id": request.model_id,
  34. "api_key": request.api_key,
  35. })
  36. config = get_llm_config()
  37. return LLMConfigUpdateResponse(
  38. success=True,
  39. message="LLM配置已更新",
  40. config=LLMConfigResponse(**config),
  41. )
  42. except Exception as e:
  43. return LLMConfigUpdateResponse(
  44. success=False,
  45. message=f"配置失败: {str(e)}",
  46. config=LLMConfigResponse(
  47. base_url="", model_id="", api_key=""
  48. ),
  49. )
  50. @router.post("/llm/reset", response_model=LLMConfigUpdateResponse)
  51. async def reset_llm_config_endpoint():
  52. """恢复LLM配置到.env默认值"""
  53. try:
  54. reset_llm_config()
  55. config = get_llm_config()
  56. return LLMConfigUpdateResponse(
  57. success=True,
  58. message="已恢复为默认配置",
  59. config=LLMConfigResponse(**config),
  60. )
  61. except Exception as e:
  62. return LLMConfigUpdateResponse(
  63. success=False,
  64. message=f"重置失败: {str(e)}",
  65. config=LLMConfigResponse(
  66. base_url="", model_id="", api_key=""
  67. ),
  68. )