| import os |
| import uvicorn |
| from fastapi import FastAPI, HTTPException, Request |
| from fastapi.middleware.cors import CORSMiddleware |
| import json |
| import requests |
|
|
| app = FastAPI() |
|
|
| |
| 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") |
|
|
| |
| headers = { |
| "Authorization": f"Bearer {config['nvidia']['api_key']}", |
| "Content-Type": "application/json" |
| } |
| payload = { |
| "model": config["model"], |
| "messages": messages, |
| "stream": False |
| } |
| |
| |
| url = f"{config['nvidia']['base_url']}/v1/chat/completions" |
| |
| 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) |