Files
cleveragents-core/docs/reference/providers.md
T

47 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Provider Registry and Defaults
CleverAgents routes every LangGraph workflow through the provider registry defined in `src/cleveragents/providers/registry.py`. The registry inspects configured API keys, publishes capability metadata, and picks a sensible default provider/model whenever the CLI does not specify one.
## Supported providers
| Provider | Required variables | Default model | Streaming | Tool Calls | Vision | JSON mode |
| --- | --- | --- | --- | --- | --- | --- |
| OpenAI | `OPENAI_API_KEY` | `gpt-4o` | ✅ | ✅ | ✅ | ✅ |
| Anthropic | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514` | ✅ | ✅ | ✅ | ❌ |
| Google AI Studio | `GOOGLE_API_KEY` *or* `GOOGLE_GENAI_API_KEY` | `gemini-2.0-flash` | ✅ | ✅ | ✅ | ✅ |
| Azure OpenAI | `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_DEPLOYMENT` | `gpt-4o` | ✅ | ✅ | ✅ | ✅ |
| OpenRouter | `OPENROUTER_API_KEY` (+ optional `CLEVERAGENTS_OPENROUTER_ORGANIZATION`) | `anthropic/claude-sonnet-4-20250514` | ✅ | ✅ | ✅ | ✅ |
| Groq | `GROQ_API_KEY` | `llama-3.1-70b-versatile` | ✅ | ✅ | ❌ | ✅ |
| Together | `TOGETHER_API_KEY` | `meta-llama/Llama-3.1-70B-Instruct-Turbo` | ✅ | ✅ | ❌ | ❌ |
| Cohere | `COHERE_API_KEY` | `command-r-plus` | ✅ | ✅ | ❌ | ❌ |
| Gemini (standalone) | `GEMINI_API_KEY` *or* `GOOGLE_GEMINI_API_KEY` | `gemini-2.0-flash` | ✅ | ✅ | ✅ | ✅ |
See `docs/reference/env_variables.yaml` for the full catalog (including AWS/Vertex-compatible aliases) and machine-readable capability metadata.
## Default selection logic
1. **CLI flags** `agents tell --provider openai --model gpt-4o` and `agents build` accept per-command overrides. These always win.
2. **Environment overrides** export `CLEVERAGENTS_DEFAULT_PROVIDER` and/or `CLEVERAGENTS_DEFAULT_MODEL` to set global defaults.
3. **Settings object** `Settings.default_provider` / `Settings.default_model` (for example via Hatch profile) are next in line.
4. **Auto fallback** when nothing is pinned, the registry chooses the first configured provider in this order: `openai → anthropic → google → azure → openrouter → groq → together → cohere → gemini`. The providers published default model is used automatically.
The `agents diagnostics` command prints whether credentials were discovered along with the selected provider/model. Behave scenarios in `features/provider_registry_coverage.feature` cover every branch of this flow.
## OpenRouter header semantics
If `CLEVERAGENTS_OPENROUTER_ORGANIZATION` is set, the OpenRouter adapter mirrors that value into the `HTTP-Referer` and `X-Title` headers (see `src/cleveragents/providers/llm/openrouter_provider.py`). This keeps OpenRouter quotas segmented per organization without hard-coding branding elsewhere. Headers are sanitized (converted to strings, trimmed, and only added when non-empty).
## Testing and safety levers
- Set `CLEVERAGENTS_TESTING_USE_MOCK_AI=true` (or `1/yes`) to force the in-repository mock provider. The DI container injects it automatically, guaranteeing that local and CI test runs avoid accidental API calls.
- Use `agents diagnostics` after changing credentials to confirm that the registry sees your keys.
- Provider diagnostics surfaced by `PlanService` include environment hints when required keys are missing; the Behave coverage under `features/plan_service.feature` exercises these messages.
## Troubleshooting checklist
1. **"No AI provider configured"** export at least one API key above or enable the mock provider when testing.
2. **Azure errors** confirm `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_DEPLOYMENT`, and `AZURE_OPENAI_API_VERSION` (or their `CLEVERAGENTS_` aliases) are set together. Validation will fail if any field is missing.
3. **Model mismatch** specify `--model` on the CLI or set `CLEVERAGENTS_DEFAULT_MODEL` to point at a supported ID for your provider.
4. **OpenRouter metadata issues** ensure any custom headers are passed via `CLEVERAGENTS_OPENROUTER_ORGANIZATION`; manual headers are sanitized before invoking LangChains `ChatOpenAI` shim.
5. **Coverage gaps** run `nox -s unit_tests -- features/provider_registry_coverage.feature` to revalidate every scenario after updating credentials or defaults.