96 lines
2.4 KiB
Python
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))
|