openclaw3 / openclaw.py
syw1516's picture
Update openclaw.py
0b21fa4 verified
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)