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