diff --git a/README.md b/README.md index 72b4aa1..845e40e 100644 --- a/README.md +++ b/README.md @@ -215,6 +215,7 @@ Claw Code is built in the open alongside the broader UltraWorkers toolchain: We welcome contributions! Before filing an issue or pull request: - **Troubleshooting:** See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for common issues and recovery steps +- **Supported providers:** See [docs/SUPPORTED_PROVIDERS.md](./docs/SUPPORTED_PROVIDERS.md) - **For security issues:** See [SECURITY.md](./SECURITY.md) - **For bug reports / features:** Check [ROADMAP.md](./ROADMAP.md) to see if it's already pinpointed - **How to file a pinpoint:** See [CONTRIBUTING.md](./CONTRIBUTING.md) for the exact format diff --git a/docs/SUPPORTED_PROVIDERS.md b/docs/SUPPORTED_PROVIDERS.md new file mode 100644 index 0000000..a53596f --- /dev/null +++ b/docs/SUPPORTED_PROVIDERS.md @@ -0,0 +1,81 @@ +# Supported Providers + +claw-code currently supports the following LLM providers. This is a snapshot of the current code state and may change. The canonical source of truth is `MODEL_REGISTRY` and provider routing logic in `rust/crates/api/src/providers/mod.rs`. + +> **Note:** A declarative `providers` / `models` / `websearch` config in `settings.json` is tracked as pinpoint #285 and is not yet implemented. Until then, provider/model selection is determined by: +> 1. The model name prefix (e.g., `claude-`, `grok-`, `openai/`, `qwen/`, `kimi-`) +> 2. Environment variables (e.g., `ANTHROPIC_API_KEY`, `XAI_API_KEY`, `DASHSCOPE_API_KEY`, `OPENAI_API_KEY`) +> 3. Hard-coded heuristics in `MODEL_REGISTRY` and `detect_provider_kind()` + +## Anthropic + +- **Status:** Primary supported provider +- **Models:** + - `claude-opus-4-6` (alias: `opus`) — 200K context, 32K max output + - `claude-sonnet-4-6` (alias: `sonnet`) — 200K context, 64K max output + - `claude-haiku-4-5-20251213` (alias: `haiku`) — 200K context, 64K max output +- **Auth:** `ANTHROPIC_API_KEY` env var, or OAuth bearer via `claw login` (`ANTHROPIC_AUTH_TOKEN`) +- **Base URL:** `https://api.anthropic.com` (override: `ANTHROPIC_BASE_URL`) +- **Known issues:** Subject to upstream stream-init failures (see #290, #291) + +## xAI (Grok) + +- **Status:** Supported via OpenAI-compatible client +- **Models:** + - `grok-3` (aliases: `grok`, `grok-3`) — 131K context, 64K max output + - `grok-3-mini` (aliases: `grok-mini`, `grok-3-mini`) — 131K context, 64K max output + - `grok-2` — context/output limits not yet registered in token metadata +- **Auth:** `XAI_API_KEY` +- **Base URL:** `https://api.x.ai/v1` (override: `XAI_BASE_URL`) +- **Known issues:** None currently tracked + +## Alibaba DashScope (Qwen / Kimi) + +- **Status:** Supported via OpenAI-compatible client pointed at DashScope compatible-mode endpoint +- **Models:** + - `qwen/*` and `qwen-*` prefix — routes to DashScope (e.g., `qwen-plus`, `qwen-max`, `qwen-turbo`, `qwen/qwen3-coder`) + - `kimi-k2.5` (alias: `kimi`) — 256K context, 16K max output + - `kimi-k1.5` — 256K context, 16K max output + - `kimi/*` and `kimi-*` prefix — routes to DashScope +- **Auth:** `DASHSCOPE_API_KEY` +- **Base URL:** `https://dashscope.aliyuncs.com/compatible-mode/v1` (override: `DASHSCOPE_BASE_URL`) +- **Known issues:** None currently tracked + +## OpenAI / OpenAI-Compatible Endpoints + +- **Status:** Supported via OpenAI-compatible client; also covers local providers (Ollama, LM Studio, vLLM, OpenRouter) +- **Models:** `openai/` prefix (e.g., `openai/gpt-4.1-mini`) or bare `gpt-*` prefix +- **Auth:** `OPENAI_API_KEY` +- **Base URL:** `https://api.openai.com/v1` (override: `OPENAI_BASE_URL` — also used for local providers) +- **Local provider routing:** When `OPENAI_BASE_URL` is set and `OPENAI_API_KEY` is present, unknown model names (e.g., `qwen2.5-coder:7b`) also route here +- **Known issues:** Declarative per-model config tracked in #285 + +## Web Search + +- **Status:** Hard-coded heuristics; declarative `websearch` config tracked in #285 + +## Provider Selection Order + +When the model name has no recognized prefix, `detect_provider_kind()` falls through in this order: + +1. Model prefix match (`claude-` → Anthropic, `grok-` → xAI, `openai/` or `gpt-` → OpenAI, `qwen/` or `qwen-` → DashScope, `kimi/` or `kimi-` → DashScope) +2. `OPENAI_BASE_URL` + `OPENAI_API_KEY` set → OpenAI-compat +3. Anthropic credentials found → Anthropic +4. `OPENAI_API_KEY` found → OpenAI +5. `XAI_API_KEY` found → xAI +6. `OPENAI_BASE_URL` set (no key) → OpenAI-compat (for keyless local providers) +7. Default fallback → Anthropic + +## Reporting Provider Issues + +For provider-specific bugs (e.g., `500 empty_stream` from upstream), see [TROUBLESHOOTING.md](TROUBLESHOOTING.md) for mitigation steps. + +For pinpointing a missing provider feature, file via [ISSUE_TEMPLATE/pinpoint.md](../.github/ISSUE_TEMPLATE/pinpoint.md). + +## Related Pinpoints + +- #245 — Provider declarative config +- #246 — Backend swap +- #285 — Provider/model/websearch source of truth +- #290 — Stream-init failure envelope +- #291 — Repeat-failure circuit-breaker