rkui2api / routes.py
1v1's picture
Upload 9 files
19adbbb verified
# routes.py
# 路由模块,处理所有API路由
from fastapi import APIRouter, Request, HTTPException
from fastapi.responses import JSONResponse, StreamingResponse
from auth import require_auth
from models import get_model_list, map_model_name
from api_client import call_api
from response_formatter import format_openai_response
# 创建路由器
router = APIRouter()
@router.get("/v1/models")
async def list_models():
"""获取可用模型列表,兼容OpenAI格式"""
return JSONResponse(content=get_model_list())
@router.post("/v1/chat/completions")
@require_auth
async def chat_completions(request: Request):
"""处理聊天完成请求,兼容OpenAI格式"""
try:
# 获取请求体
body = await request.json()
# 获取并映射模型名称
model_name = body.get("model")
mapped_model = map_model_name(model_name)
# 构造转发请求体
payload = {
"messages": body.get("messages", []),
"model": mapped_model
}
# 检查是否是流式请求
is_stream = body.get("stream", False)
# 调用API
if is_stream:
# 流式响应直接返回
return await call_api(payload, is_stream=True)
else:
# 非流式响应需要格式化
content = await call_api(payload, is_stream=False)
return format_openai_response(content, model=mapped_model)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))