stock-ai-agent/backend/app/api/llm.py
2026-02-03 21:16:36 +08:00

96 lines
2.4 KiB
Python

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