Provider Models: Current Catalog

Copy Markdown View Source

Scope: live model ID catalog (volatile: refreshed on 404 / retirement). For adapter wiring + behaviour (config snippets, mutual-exclusion quirks, custom adapter callbacks), see PROVIDERS.md.

Tracks which model identifiers each stock adapter is known to accept, plus retired names that the API rejects for new users. Update when an example breaks with a 404 NOT_FOUND / model retired error.

How to refresh: query Context7 or the provider's official docs (URLs in §Sources). Do not guess model names; vendors quietly retire them. If unsure, run a list-models request against the live API.

Last verified: 2026-05-02.


1. Gemini

GA / stable

ModelNotes
gemini-2.5-proTop reasoning, multimodal
gemini-2.5-flashFast + cheap, GA. Default for examples/gemini_example.exs.
gemini-2.5-flash-liteCheapest, lowest latency
gemini-2.5-flash-imageImage generation

Preview (may shift without notice)

Model
gemini-3-flash-preview
gemini-3-pro-image-preview
gemini-3.1-flash-preview
gemini-3.1-flash-lite-preview
gemini-3.1-flash-image-preview
gemini-3.1-pro-preview

Auto-rolling aliases

  • gemini-flash-latest: latest stable flash
  • gemini-pro-latest: latest stable pro

Retired (API rejects for new users)

ModelLast known goodReplacement
gemini-2.0-flashpre-2026-05gemini-2.5-flash
gemini-1.5-*oldergemini-2.5-*

Schema dialect quirks

  • generation_config.response_schema is OpenAPI 3.0 subset. Rejects additionalProperties. CouncilEx's Provider.Adapters.Gemini strips that key via sanitize_for_gemini/1.
  • $ref / $defs not yet exercised; revisit if user schemas with embeds break.

Sources

  • Google AI docs: https://ai.google.dev/gemini-api/docs
  • Live model list: GET https://generativelanguage.googleapis.com/v1beta/models?key=$GEMINI_API_KEY
  • Context7 library ID: /websites/ai_google_dev_gemini-api
  • Pulled 2026-05-02 from Context7 priority-inference + google-search supported-models tables.

2. Anthropic

GA / stable

ModelNotes
claude-sonnet-4-6Default for examples/anthropic_streaming_example.exs and structured-output example
claude-opus-4-7Top reasoning
claude-haiku-4-5Fast + cheap

Retired

ModelReplacement
claude-3-5-sonnet-*claude-sonnet-4-6
claude-3-opus-*claude-opus-4-7
claude-3-haiku-*claude-haiku-4-5

Sources

TODO: refresh against Context7 next time an Anthropic example 404s.


3. OpenAI

GA / stable

ModelNotes
gpt-4oMultimodal flagship (legacy-stable)
gpt-4o-miniCheap, used in TESTING.md tool-calling recipe
o1 / o3 familyReasoning models: verify availability per account

Sources

TODO: refresh via Context7 (/openai/openai-cookbook or platform docs) when next OpenAI example breaks. Catalog above reflects what's hard-coded in examples, not what's currently latest.


4. Ollama (local)

Model names = whatever you've ollama pulled locally. No central catalog. Common defaults used in examples:

ModelPull command
llama3.1ollama pull llama3.1

If 404 model not found, the model isn't pulled. Run ollama list to inspect.

Sources


5. OpenRouter

Adapter

Use CouncilEx.Provider.Adapters.OpenRouter (thin wrapper over the OpenAI adapter). It sets the OpenRouter :base_url default and accepts optional :referer / :title opts that map to HTTP-Referer / X-Title attribution headers.

Application.put_env(:council_ex, :providers,
  openrouter: [
    adapter: CouncilEx.Provider.Adapters.OpenRouter,
    api_key: {:system, "OPENROUTER_API_KEY"},
    referer: "https://example.com",   # optional
    title: "MyApp"                    # optional
  ]
)

Catalog discovery

Unlike vendor-specific providers, OpenRouter's catalog is live and volatile. Models are added, deprecated, and re-priced continuously across hundreds of upstream providers. Do not maintain a static list as authoritative; query the API at lookup time.

  • Live model list: GET https://openrouter.ai/api/v1/models (auth required)
  • Filter by capability: ?supported_parameters=tools, ?output_modalities=image
  • RSS feed for change tracking: ?use_rss=true
  • Live page: https://openrouter.ai/models
IDCost tierCapabilities
google/gemini-2.5-flashCheapText, vision, tools, structured output
openai/gpt-4o-miniCheapText, tools, structured output
openai/gpt-4oMidFlagship multimodal
anthropic/claude-haiku-4-5CheapText, tools
anthropic/claude-sonnet-4-6MidStrong reasoning
google/gemini-2.5-flash-liteCheapestText
meta-llama/llama-3.3-70b-instructCheapStrong open-weight, tools
mistralai/mistral-small-3.2CheapTools + vision + structured output

Special routing aliases

  • openrouter/auto: meta-model that routes to one of ~19 top models based on prompt complexity. Pay the selected model's rate; no premium.
  • openrouter/free: routes to free-tier models matching the request's feature requirements.

IDs to avoid

  • Anything with a date slug (e.g. deepseek/deepseek-chat-v3-0324:free): these change without notice on upstream model updates.
  • Pin a date-suffixed version only if you need exact reproducibility.

Quirks

  • Mid-stream errors arrive as SSE events with HTTP 200 (not 4xx). The adapter currently silently drops them.
  • Auto context compression on models with context <= 8192 tokens unless explicitly disabled via plugins: [{"id": "context-compression", "enabled": false}].
  • Use provider.require_parameters: true in the request body to fail fast when a structured-output / tool-calling request might land on an incapable provider.

Refresh protocol

Do NOT maintain a static table here as authoritative. The catalog is live. When an example breaks or a model is in question, hit GET /api/v1/models or check the live page. Prefer undated IDs in examples.

Sources


Update protocol

When an example fails with 404 / not_found_error / model X is no longer available:

  1. Fetch current catalog (Context7 or vendor docs URL above).
  2. Update the example's model("...") string.
  3. Update this file's table: move the retired model to the Retired row.
  4. Bump Last verified date at the top.
  5. Tests using Bypass mocks don't need updating: the model name is part of the mocked URL path, not a real API call.
  6. OpenRouter exception: do not update §5's recommended-IDs table reactively. The catalog is live. Refresh from GET /api/v1/models or https://openrouter.ai/models at lookup time and prefer undated IDs in the example instead.