import os import uvicorn from fastapi import FastAPI, HTTPException, Request from fastapi.middleware.cors import CORSMiddleware import json import requests app = FastAPI() # CORS配置 app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 读取配置文件(启动时加载) with open("openclaw.json", "r") as f: config = json.load(f) # 健康检查路由 @app.get("/__openclaw__/health") async def health_check(): return {"status": "OK", "model": config["model"]} # 聊天路由 @app.post("/__openclaw__/chat") async def chat_endpoint(request: Request): data = await request.json() password = data.get("password") messages = data.get("messages", []) # 验证密码 if password != config["gateway_password"]: raise HTTPException(status_code=401, detail="Unauthorized") # 构造NVIDIA API请求 headers = { "Authorization": f"Bearer {config['nvidia']['api_key']}", "Content-Type": "application/json" } payload = { "model": config["model"], "messages": messages, "stream": False } # ✅ 正确拼接路径:base_url + /v1/chat/completions url = f"{config['nvidia']['base_url']}/v1/chat/completions" # 注意:base_url不含/v1 try: response = requests.post(url, headers=headers, json=payload) response.raise_for_status() return response.json() except Exception as e: raise HTTPException(status_code=500, detail=f"NVIDIA API error: {str(e)}") if __name__ == "__main__": port = int(os.environ.get("PORT", 8000)) uvicorn.run(app, host="0.0.0.0", port=port)