Documentation checked 2026-09-08. The table describes implemented protocol subsets, not universal compatibility with every provider feature or model. All listed adapters have offline contract coverage; see the support summary for current live coverage.
| Kind | Protocol, authentication and example model | Implemented capabilities |
|---|---|---|
openai |
POST https://api.openai.com/v1/responses, Bearer key; gpt-5.6-terra |
Text chat |
openai |
POST /v1/images/generations, /v1/images/edits; gpt-image-2 |
Text-to-image, image-to-image |
anthropic |
POST https://api.anthropic.com/v1/messages, x-api-key, anthropic-version: 2023-06-01; claude-sonnet-5 |
Text chat |
gemini |
POST https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent, x-goog-api-key; gemini-3.5-flash |
Text chat |
gemini |
models/veo-3.1-generate-preview:predictLongRunning, operation GET, authenticated video retrieval |
Text-to-video, image-to-video |
xai |
POST https://api.x.ai/v1/responses, Bearer key; grok-4.6 |
Text chat |
xai |
POST /v1/responses, web_search with enable_image_search; grok-4.6 |
Image search, separate alias |
xai |
POST /v1/videos/generations, GET /v1/videos/{request_id}; grok-imagine-video |
Text-to-video only |
deepseek |
POST https://api.deepseek.com/chat/completions, Bearer key; deepseek-v4-flash |
Text chat |
compatible |
Administrator base URL + /chat/completions; optional Bearer key |
Text chat only |
codex-cli, claude-cli, grok-cli |
Unmodified CLI in an isolated runtime; explicit API key or owner’s native account/plan login | Text chat only; explicit native sessions |
Account login requires a personal bot restricted to that owner. No API fallback,
shared subscription or CLI media path is enabled. See CLI setup and billing
for exact versions, native login commands and deployment restrictions. Native
account login and fixed two-turn text/session tests passed for all three CLIs.
The bot’s Docker Desktop runner and command callbacks also passed real CLI tests,
including reopening SQLite and resuming the explicit session in a new container.
Local status alone checks storage; user-triggered Discord delivery remains a
manual deployment check.
OpenAI uses the Responses API
and GPT-5.6 Terra model contract.
Sol/Terra/Luna API IDs include their version
(gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna); see the
family migration guide.
Existing reasoning.effort=low and Responses text parameters remain valid.
Billing-related 429 errors are classified using bounded, known error codes and
safe fixed messages. Raw diagnostics are never forwarded and paid requests are
not automatically retried. Unknown/malformed errors retain the generic status
message; see the official error guide.
The separate Image API
returns base64 image data; editing uses multipart upload. Organization verification
may be required. Image model IDs are independent of chat model IDs.
Anthropic’s Messages API
requires max_tokens; system instructions are a separate field and response
content is a list of blocks. The adapter concatenates text blocks and excludes
thinking. Example IDs come from the model overview.
Gemini’s generateContent API
receives the full role-translated history once, with systemInstruction separately.
It never sends old user turns as separate new generation requests. The example uses
Gemini 3.5 Flash.
Veo documentation specifies the operation
lifecycle and media retrieval. Image input and generation parameter translations
were also checked against the official Python SDK converters.
xAI now documents Responses text generation
and the Grok model catalog. Only the compatible
Responses subset implemented here is exposed for chat. The separate
image-search adapter enables only
web_search with enable_image_search=true, disables parallel calls and sets
max_turns (default 2) and an output token budget. The
REST schema
documents max_turns on the request; it limits agent turns, not an exact dollar
amount. Failed tools are rejected even when the overall response is completed.
Only source-linked public HTTPS image embeds are exposed; no host URL fetch occurs.
The xAI video adapter
validates request UUIDs, polls pending/done/failed/expired states, requires a
moderation-approved artifact and downloads bounded MP4 data only from vidgen.x.ai.
The CDN receives no API credential. Only text-to-video is implemented for xAI.
Usage is billed separately from CLI plans; consult xAI’s
cost tracking documentation.
DeepSeek documents its own OpenAI-format contract
and Chat Completions fields.
Neither provider is treated as universally equivalent to OpenAI.
The application uses httpx.AsyncClient directly against these official REST
interfaces. Provider SDK installation is unnecessary: this avoids importing old
SDKs, global Gemini SDK configuration, and hidden SDK retries. Official SDKs remain
useful contract references (OpenAI openai, Anthropic anthropic, Google
google-genai, xAI xai-sdk); the deprecated Google SDK was removed. HTTP clients
are pooled, bounded, closed on shutdown, and ignore ambient proxy credentials.
Only administrator configuration supplies parameters. No arbitrary per-message parameter dictionary is accepted.
| Interface | Accepted configuration parameters |
|---|---|
| OpenAI/xAI chat | max_output_tokens, reasoning_effort (low, medium, high) |
| Anthropic chat | max_output_tokens (translated to max_tokens; default 1024) |
| Gemini chat | max_output_tokens, temperature, top_p |
| DeepSeek chat | max_output_tokens → max_tokens, thinking (enabled/disabled), reasoning_effort |
| Compatible chat | max_output_tokens → max_tokens, temperature, top_p |
| CLI text | None; model selection only |
| OpenAI image | size, quality (validated in configuration) |
| xAI image search | max_turns (1–3), max_output_tokens; fixed server-side search tool |
| xAI video | duration_seconds (1–15), resolution (480p, 720p), aspect_ratio (16:9, 9:16) |
| Gemini video | duration_seconds (4, 6, 8), aspect_ratio (16:9, 9:16) |
Model-specific restrictions still apply. If a configured model rejects a parameter, the adapter reports failure without dropping the parameter or changing models. Sampling controls are deliberately not exposed for reasoning families that may ignore or reject them. Truncated text responses fail instead of entering history as complete assistant turns. Chat, search, image and video need separate aliases.
The adapter intentionally uses the widely supported, stateless text Chat Completions subset. It does not infer support for Responses sessions, tools, vision, media or streaming from a server’s “OpenAI-compatible” label.
| Server | Base URL example | Setup reference |
|---|---|---|
| Ollama | http://127.0.0.1:11434/v1 |
Official compatibility documentation |
| LM Studio | http://127.0.0.1:1234/v1 |
Official compatible endpoints |
| vLLM | http://127.0.0.1:8000/v1 |
Official serving documentation |
Run/load a chat-capable model on the server first. Use its installed/served model
ID, including an alias if you configured one. vLLM chat models need a supported
chat template. Server access controls differ; configure auth = "none" only when
the server permits unauthenticated access. No placeholder API key is sent.
[backends.lab]
kind = "compatible"
base_url = "https://inference.example.org/v1"
api_key_env = "LAB_API_KEY"
account = "lab-server-1"
[models.lab]
backend = "lab"
model = "administrator-served-model"
capabilities = ["chat"]
parameters = { max_output_tokens = 2048 }
HTTP is allowed only on loopback; use an HTTPS reverse proxy for other hosts. URLs with embedded credentials, query strings or fragments are rejected. Provider origins are fixed for official adapters. Discord commands can select configured aliases but cannot alter URLs, credentials or model IDs.