Skip to content

Provider Registry

chimera.providers.registry is a module-level dictionary that maps provider name strings to factory callables. Built-in providers self-register at import time; plugins use the same API to add custom providers.

FunctionDescription
register_provider(name, factory)Register a factory under name; overwrites any existing entry
get_provider_factory(name)Return the factory for name, or None if not registered
list_providers()Return all registered provider names as a list of strings
unregister_provider(name)Remove a provider; no-op if not registered
_ensure_builtins_registered()Import all built-in provider modules to trigger self-registration (called by create_provider)

ProviderFactory is a type alias for Callable[..., Provider]. Factories receive keyword arguments (model, api_key, base_url, etc.) and return a Provider instance.

Each built-in provider module registers itself at the bottom of the file:

# chimera/providers/anthropic.py (simplified)
from chimera.providers.registry import register_provider
def _anthropic_factory(model: str = "", api_key: str | None = None, **kw):
return AnthropicProvider(model=model, api_key=api_key)
register_provider("anthropic", _anthropic_factory)

_ensure_builtins_registered() imports all seven built-in modules (anthropic, openai, google, ollama, compatible, modal, xai) exactly once.

from chimera.providers.registry import register_provider
from chimera.providers.base import Provider, Response
class MyProvider(Provider):
def complete(self, messages, **kw) -> Response: ...
# ... implement abstract methods
def _my_factory(model: str = "", **kw) -> MyProvider:
return MyProvider(model=model)
register_provider("my-provider", _my_factory)
# Now usable via create_provider:
from chimera.providers.factory import create_provider
provider = create_provider("my-provider", model="my-model-v1")

chimera.providers.catalog._BUILTIN_ENTRIES ships a ModelConfig for every model id Chimera knows out-of-the-box. create_provider() falls through to the catalog when prefix-based inference doesn’t find a match. Pricing is mirrored in chimera.providers.cost.PRICING so CostTracker.record_usage() resolves the right rate.

Catalog refresh — Wave 12 + 13 (13 new model entries)

Section titled “Catalog refresh — Wave 12 + 13 (13 new model entries)”

Wave 12 (W12-1-DEEPSEEK-V4) added the DeepSeek-V4 family. Wave 13 (W13-E2-CATALOG) swept seven more vendors. All entries below ship with documented endpoints, env-var bindings, context windows, and pricing tuples; unknown-model errors now mention every new prefix so misroutes surface eagerly.

Model idRoutes toEndpoint / base_urlAPI-key envContextCost ($/Mtok in/out)Notes
deepseek-v4compatiblehttps://api.deepseek.com/v1DEEPSEEK_API_KEY128k0.55 / 2.19Placeholder pricing; copies deepseek-reasoner until DeepSeek publishes V4 rates.
deepseek-v4-procompatiblehttps://api.deepseek.com/v1DEEPSEEK_API_KEY128k0.55 / 2.19Same family; pro tier.
deepseek-v4-pro:cloudollama$OLLAMA_HOST262k0.55 / 2.19Local Ollama daemon’s cloud passthrough (ollama run deepseek-v4-pro:cloud).
deepseek-v3.1-terminuscompatiblehttps://api.deepseek.com/v1DEEPSEEK_API_KEY128k0.27 / 1.10Hosted V3 line.
deepseek-coder-v3compatiblehttps://api.deepseek.com/v1DEEPSEEK_API_KEY128k0.27 / 1.10Hosted V3 coder SKU.
qwen3-coder / qwen3-coder-30b / qwen3-32bollama$OLLAMA_HOST131k0.0 / 0.0Local-only via the qwen prefix; DashScope users register a compatible factory explicitly.
glm-4.6anthropichttps://api.z.ai/api/anthropicANTHROPIC_AUTH_TOKEN200k0.6 / 2.2Anthropic-compat wire protocol via api.z.ai.
glm-5.1anthropichttps://api.z.ai/api/anthropicANTHROPIC_AUTH_TOKEN200k2.0 / 8.0Same gateway, GLM-5 tier.
gpt-oss-120b / gpt-oss-20bollama$OLLAMA_HOST131k0.0 / 0.0OpenAI open-weights; gpt-oss prefix routes to ollama before the generic gpt- → openai branch.
kimi-k2-0905-previewanthropichttps://api.moonshot.ai/anthropicMOONSHOT_API_KEY200k0.6 / 2.5Moonshot Anthropic-compat.
kimi-k2.5anthropichttps://api.moonshot.ai/anthropicMOONSHOT_API_KEY200k0.6 / 2.5Same family, K2.5 line.
mistral-codestral-2511ollama$OLLAMA_HOST256k0.0 / 0.0Codestral coder line via the mistral prefix.
gemma3-27b-instructollama$OLLAMA_HOST131k0.0 / 0.0Google Gemma 3 open weights; gemma prefix added in W13-E2.

Routing precedence:

  1. Explicit factory passed to create_provider().
  2. Prefix match in _infer_provider() (gpt-oss, gemma, qwen, mistral, phi, llamaollama; gptopenai; claude / glm / kimianthropic; etc.).
  3. ANTHROPIC_BASE_URL + ANTHROPIC_AUTH_TOKEN env-override (always wins for non-gpt-oss ids).
  4. Catalog fallback through ProviderCatalog.create().

Pricing entries flagged with TODO comments in cost.py are placeholders — refresh once vendors publish per-SKU rates. Local Ollama-served weights stay at (0.0, 0.0) because Ollama doesn’t surface a price field.