feat(gateway): add OpenAI-compatible HTTP endpoint
This commit is contained in:
@@ -28,6 +28,7 @@ pnpm gateway:watch
|
||||
- Disable with `gateway.reload.mode="off"`.
|
||||
- Binds WebSocket control plane to `127.0.0.1:<port>` (default 18789).
|
||||
- The same port also serves HTTP (control UI, hooks, A2UI). Single-port multiplex.
|
||||
- OpenAI-compatible HTTP API: [`/v1/chat/completions`](/gateway/openai-http-api).
|
||||
- Starts a Canvas file server by default on `canvasHost.port` (default `18793`), serving `http://<gateway-host>:18793/__clawdbot__/canvas/` from `~/clawd/canvas`. Disable with `canvasHost.enabled=false` or `CLAWDBOT_SKIP_CANVAS_HOST=1`.
|
||||
- Logs to stdout; use launchd/systemd to keep it alive and rotate logs.
|
||||
- Pass `--verbose` to mirror debug logging (handshakes, req/res, events) from the log file into stdio when troubleshooting.
|
||||
|
||||
72
docs/gateway/openai-http-api.md
Normal file
72
docs/gateway/openai-http-api.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
summary: "Expose an OpenAI-compatible /v1/chat/completions HTTP endpoint from the Gateway"
|
||||
read_when:
|
||||
- Integrating tools that expect OpenAI Chat Completions
|
||||
---
|
||||
# OpenAI-compatible HTTP API
|
||||
|
||||
Clawdbot’s Gateway can serve a small OpenAI-compatible endpoint:
|
||||
|
||||
- `POST /v1/chat/completions`
|
||||
- Same port as the Gateway (WS + HTTP multiplex): `http://<gateway-host>:<port>/v1/chat/completions`
|
||||
|
||||
## Authentication
|
||||
|
||||
Uses the Gateway auth configuration. Send a bearer token:
|
||||
|
||||
- `Authorization: Bearer <token>`
|
||||
|
||||
Notes:
|
||||
- When `gateway.auth.mode="token"`, use `gateway.auth.token` (or `CLAWDBOT_GATEWAY_TOKEN`).
|
||||
- When `gateway.auth.mode="password"`, use `gateway.auth.password` (or `CLAWDBOT_GATEWAY_PASSWORD`).
|
||||
|
||||
## Choosing an agent
|
||||
|
||||
Target a specific Clawdbot agent by id:
|
||||
|
||||
- `x-clawdbot-agent-id: <agentId>` (default: `main`)
|
||||
|
||||
Advanced:
|
||||
- `x-clawdbot-session-key: <sessionKey>` to fully control session routing.
|
||||
|
||||
## Session behavior
|
||||
|
||||
By default the endpoint is **stateless per request** (a new session key is generated each call).
|
||||
|
||||
If the request includes an OpenAI `user` string, the Gateway derives a stable session key from it, so repeated calls can share an agent session.
|
||||
|
||||
## Streaming (SSE)
|
||||
|
||||
Set `stream: true` to receive Server-Sent Events (SSE):
|
||||
|
||||
- `Content-Type: text/event-stream`
|
||||
- Each event line is `data: <json>`
|
||||
- Stream ends with `data: [DONE]`
|
||||
|
||||
## Examples
|
||||
|
||||
Non-streaming:
|
||||
```bash
|
||||
curl -sS http://127.0.0.1:18789/v1/chat/completions \
|
||||
-H 'Authorization: Bearer YOUR_TOKEN' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'x-clawdbot-agent-id: main' \
|
||||
-d '{
|
||||
"model": "clawdbot",
|
||||
"messages": [{"role":"user","content":"hi"}]
|
||||
}'
|
||||
```
|
||||
|
||||
Streaming:
|
||||
```bash
|
||||
curl -N http://127.0.0.1:18789/v1/chat/completions \
|
||||
-H 'Authorization: Bearer YOUR_TOKEN' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'x-clawdbot-agent-id: main' \
|
||||
-d '{
|
||||
"model": "clawdbot",
|
||||
"stream": true,
|
||||
"messages": [{"role":"user","content":"hi"}]
|
||||
}'
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user