123 lines
3.4 KiB
Markdown
123 lines
3.4 KiB
Markdown
# Vercel AI Gateway Provider — Implementation Checklist
|
|
|
|
> **Archived (2026-02-18):** Historical implementation checklist. Canonical status is tracked in `docs/plans/state.json`; unchecked boxes here are not active backlog unless explicitly re-opened.
|
|
|
|
|
|
**Date:** 2026-02-15
|
|
|
|
**Parent roadmap:** `docs/plans/2026-02-15-openclaw-gap-roadmap.md`
|
|
|
|
**Goal:** Close the gap item "Vercel AI Gateway" by adding a first-class model provider that routes through the Vercel AI Gateway using Flynn's existing OpenAI-compatible client path where possible.
|
|
|
|
## Scope
|
|
|
|
- Add a new provider id (`vercel` or `vercel_ai_gateway`).
|
|
- Implement the provider via `OpenAIClient` when the gateway is OpenAI-compatible.
|
|
- Ensure the provider works with:
|
|
- streaming (if supported by OpenAIClient path)
|
|
- tool calling
|
|
- model tier switching via `/model <tier> <provider/model>`
|
|
|
|
Non-goals:
|
|
|
|
- Implementing gateway-specific “extras” (tracing, metadata) unless required.
|
|
|
|
## Design
|
|
|
|
### Provider id
|
|
|
|
Recommended id: `vercel` (short) or `vercel_ai_gateway` (explicit).
|
|
|
|
Pick one and use it consistently in:
|
|
|
|
- `MODEL_PROVIDERS` in `src/config/schema.ts`
|
|
- docs + setup wizard provider list
|
|
- doctor checks
|
|
|
|
### Config fields
|
|
|
|
Use the existing `ModelConfig` fields:
|
|
|
|
- `endpoint`: base URL of gateway (OpenAI-compatible)
|
|
- `api_key`: gateway API key (or env var)
|
|
|
|
Example:
|
|
|
|
```yaml
|
|
models:
|
|
default:
|
|
provider: vercel_ai_gateway
|
|
model: gpt-4.1
|
|
endpoint: "https://gateway.ai.example.com/v1"
|
|
api_key: "${VERCEL_AI_GATEWAY_API_KEY}"
|
|
```
|
|
|
|
## PR Breakdown
|
|
|
|
### PR 1 — Schema + factory wiring
|
|
|
|
Checklist:
|
|
|
|
- [ ] Add provider id to `MODEL_PROVIDERS` in `src/config/schema.ts`.
|
|
- [ ] Update `createClientFromConfig()` in `src/daemon/models.ts`:
|
|
- [ ] map provider -> `new OpenAIClient({ model, apiKey, baseURL })`
|
|
- [ ] require an API key (config or env var)
|
|
- [ ] use `cfg.endpoint` as `baseURL` (or a sensible default if the gateway has one)
|
|
- [ ] Update `/model` strict-tier switching support (should be automatic once provider id is recognized).
|
|
|
|
Tests:
|
|
|
|
- [ ] Update `src/config/schema.test.ts` to accept the new provider enum.
|
|
- [ ] Add case to `src/daemon/clientFactory.test.ts`:
|
|
- asserts the provider returns an OpenAI-compatible client
|
|
- asserts `baseURL` is passed when `endpoint` is set
|
|
|
|
Acceptance:
|
|
|
|
- `pnpm typecheck`
|
|
- `pnpm test:run src/daemon/clientFactory.test.ts src/config/schema.test.ts`
|
|
|
|
---
|
|
|
|
### PR 2 — Doctor + setup wizard + docs
|
|
|
|
Checklist:
|
|
|
|
- [ ] Update `src/cli/doctor.ts` provider key checks:
|
|
- if Vercel gateway requires a key, ensure doctor warns when missing
|
|
- [ ] Update setup wizard provider picker (optional but recommended):
|
|
- `src/cli/setup/providers.ts`
|
|
- `src/cli/setup/providers.test.ts`
|
|
- [ ] Document provider config in `README.md` (one short snippet; avoid long docs).
|
|
|
|
Tests:
|
|
|
|
- [ ] `pnpm test:run src/cli/setup/providers.test.ts` (if changed)
|
|
- [ ] `pnpm test:run src/cli/doctor.test.ts` (if changed)
|
|
|
|
Acceptance:
|
|
|
|
- `flynn doctor` guidance includes Vercel gateway key/env var info.
|
|
|
|
---
|
|
|
|
### PR 3 — Integration validation (optional)
|
|
|
|
Checklist:
|
|
|
|
- [ ] Add a simple smoke test using the `synthetic` provider style or a mocked OpenAI SDK path if possible.
|
|
- [ ] Ensure streaming works end-to-end via gateway.
|
|
|
|
Acceptance:
|
|
|
|
- A real config can run `flynn send "hello"` using the gateway provider.
|
|
|
|
## Final Checks
|
|
|
|
- [ ] `pnpm typecheck`
|
|
- [ ] `pnpm test:run`
|
|
- [ ] Update `docs/plans/state.json` entry to `completed` once implemented (include test status).
|
|
|
|
|
|
|