""" LLM模型管理API """ from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import List, Dict, Any, Optional from app.services.multi_llm_service import multi_llm_service from app.utils.logger import logger router = APIRouter(prefix="/api/llm", tags=["llm"]) class ModelSwitchRequest(BaseModel): """模型切换请求""" provider: str # 'zhipu' 或 'deepseek' @router.get("/models") async def get_available_models() -> Dict[str, Any]: """ 获取所有可用的模型列表 Returns: { "models": [...], "current": {...} } """ try: models = multi_llm_service.get_available_models() current = multi_llm_service.get_current_model_info() return { "success": True, "models": models, "current": current } except Exception as e: logger.error(f"获取模型列表失败: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.post("/switch") async def switch_model(request: ModelSwitchRequest) -> Dict[str, Any]: """ 切换当前使用的模型 Args: request: 包含provider的请求 Returns: 切换结果 """ try: success = multi_llm_service.switch_model(request.provider) if success: current = multi_llm_service.get_current_model_info() return { "success": True, "message": f"已切换到 {current['name']}", "current": current } else: raise HTTPException(status_code=400, detail="模型不可用") except Exception as e: logger.error(f"切换模型失败: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.get("/current") async def get_current_model() -> Dict[str, Any]: """ 获取当前使用的模型信息 Returns: 当前模型信息 """ try: current = multi_llm_service.get_current_model_info() if current: return { "success": True, "current": current } else: return { "success": False, "message": "没有可用的模型" } except Exception as e: logger.error(f"获取当前模型失败: {e}") raise HTTPException(status_code=500, detail=str(e))