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

4.2 KiB
Raw Blame History

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.