OpenAI
openaiEvery model in the catalog calls tools, and most of them take images.
- Models
- 30
- Tool-calling
- 30
- Vision
- 23
- Free tier
- 0
- Max context
- 1,047,576
- Checked
- 2026-06-17
OPENAI_API_KEY
Default when a call names no model: gpt-5.4-nano
10 provider adapters, 9 of them carrying a bundled catalog of 417 models with their context windows, prices and capabilities. The tenth carries none on purpose: point it at a server you already run — vLLM, SGLang, TGI, llama.cpp, Ollama, LM Studio, a proxy, a gateway — and it drives the model that server serves. And 4 local engines run weights in the process, including on Apple Silicon.
$ effgen models browse --limit 10 Model Catalog Models across providers — showing 10 of 417 ┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┓┃ Provider ┃ Model ID ┃ Context ┃ Max Out ┃ $/1M in ┃ $/1M out ┃ Tools ┃ Vision ┃ Free ┃┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━┩│ anthropic │ claude-3-5-sonnet-20240620 │ 200,000 │ 8,096 │ $3 │ $15 │ ✓ │ ✓ │ ││ anthropic │ claude-3-5-sonnet-20241022 │ 200,000 │ 8,096 │ $3 │ $15 │ ✓ │ ✓ │ ││ anthropic │ claude-3-7-sonnet-20250219 │ 200,000 │ 64,000 │ $3 │ $15 │ ✓ │ ✓ │ ││ anthropic │ claude-3-haiku-20240307 │ 200,000 │ 4,096 │ $0.25 │ $1.25 │ ✓ │ ✓ │ ││ anthropic │ claude-3-opus-20240229 │ 200,000 │ 4,096 │ $15 │ $75 │ ✓ │ ✓ │ ││ anthropic │ claude-3-sonnet-20240229 │ 200,000 │ 4,096 │ $3 │ $15 │ ✓ │ ✓ │ ││ anthropic │ claude-haiku-4-5 │ 200,000 │ 64,000 │ $1 │ $5 │ ✓ │ ✓ │ ││ anthropic │ claude-haiku-4-5-20251001 │ 200,000 │ 64,000 │ $1 │ $5 │ ✓ │ ✓ │ ││ anthropic │ claude-opus-4-1 │ 200,000 │ 32,000 │ $15 │ $75 │ ✓ │ ✓ │ ││ anthropic │ claude-opus-4-1-20250805 │ 200,000 │ 32,000 │ $15 │ $75 │ ✓ │ ✓ │ │└───────────┴────────────────────────────┴─────────┴─────────┴─────────┴──────────┴───────┴────────┴──────┘ More: --offset 10 for the next page. Pricing source: catalog snapshot. Update: effgen models refresh · Detail: effgen models info <id>
One table across every provider, so “the cheapest vision model over 128k context” is one command rather than nine browser tabs. Every figure in it comes from the bundled catalog, and the footer names the snapshot it came from and the command that refreshes it.
vLLM, SGLang, TGI, llama.cpp’s server, Ollama, LM Studio, LiteLLM and most corporate gateways all expose the OpenAI chat-completions API. Give effGen a base_url and it talks to the model you are already serving, instead of loading a second copy of the weights inside the agent’s process.
from effgen.models import load_model
model = load_model(
"gemini:gemini-3.1-flash-lite",
provider="openai_compatible",
base_url="http://127.0.0.1:8000/v1",
)
print(model.generate("What is 6 times 7?").text)42
from effgen import Agent, AgentConfig
with Agent(AgentConfig(
model="gemini:gemini-3.1-flash-lite",
base_url="http://127.0.0.1:8000/v1",
)) as agent:
print(agent.run("What is 6 times 7?").output)42
Both were run against an effgen serve on this machine — which speaks the same protocol as everything in the list, and is the easiest one to reproduce. A base_url with no provider named is the whole instruction: it selects this adapter rather than falling through to a local download of the model id.
continuous batching on your own GPUs
structured generation and prefix caching
Hugging Face's inference server
its bundled server, on CPU or a laptop GPU
the local runner, at /v1
a desktop server on a workstation
a proxy in front of several providers
your company's, with its own key and quota
Loading in-process means one copy of the weights per agent process, no sharing between agents, no continuous batching across callers, and a GPU tied to the agent’s lifetime. A shared server fixes all four: the weights load once, every caller’s requests batch together, and the GPU outlives any individual run.
It is also the only way to have several frameworks — or several versions of your own service — generate under identical settings, which is what a fair comparison needs.
from effgen.models import load_model
model = load_model(
"gemini:gemini-3.1-flash-lite",
provider="openai_compatible",
base_url="http://127.0.0.1:8000/v1",
)
print(model.list_served_models())['gpt-4', 'gpt-4-turbo', 'gpt-4o', 'gpt-4o-mini', 'gpt-3.5-turbo', 'gpt-3.5-turbo-instruct', 'default', 'effgen-default', 'gemini:gemini-3.1-flash-lite']
An endpoint that does not implement /models returns an empty list rather than failing — some minimal servers have nothing to say about themselves.
| Order | Type | Description |
|---|---|---|
1 | — | base_url= passed to load_model(), AgentConfig or the adapter |
2 | — | EFFGEN_BASE_URL |
3 | — | OPENAI_BASE_URL |
4 | — | OPENAI_API_BASE |
effGen's own variable is consulted first, so pointing effGen at a server does not redirect every other OpenAI client on the machine.
provider="openai" with a base_url routes here too, because a URL of your own means the model ids, the context window and the pricing are the server’s rather than OpenAI’s. Without one it stays on OpenAI, so a machine-wide OPENAI_BASE_URL set for something unrelated cannot silently reroute a plain OpenAI call.
All accepted spellings of the same provider.
The protocol carries no way for a server to publish its window, so effGen assumes 32,768 and warns once, naming the value, the model and the endpoint. effGen plans compaction against that number, so a server started with a smaller window fails later, at the call, far from where the number was chosen.
assumed = load_model(
"gemini:gemini-3.1-flash-lite",
provider="openai_compatible",
base_url="http://127.0.0.1:8000/v1",
)
print("assumed:", assumed.get_context_length())
told = load_model(
"gemini:gemini-3.1-flash-lite",
provider="openai_compatible",
base_url="http://127.0.0.1:8000/v1",
context_length=1_000_000,
)
print("told: ", told.get_context_length())WARNING effgen.models.openai_compatible_adapter: No context_length given for 'gemini:gemini-3.1-flash-lite' at http://127.0.0.1:8000/v1; assuming 32768 tokens. If the server was started with a smaller window (vLLM's --max-model-len, TGI's --max-total-tokens), pass context_length=<the real number> — planning against a window the server does not have fails later, at the call. assumed: 32768 told: 1000000
A call through this adapter reports no price. What your own server costs is not something effGen can derive from a token count, so it states nothing — and counts the call as unpriced rather than adding zero to a total.
with Agent(AgentConfig(
model="gemini:gemini-3.1-flash-lite",
base_url="http://127.0.0.1:8000/v1",
)) as agent:
r = agent.run("Reply with the single word ok.")
print("tokens:", r.metadata["total_tokens"])
print("cost: ", r.metadata.get("cost_usd"))
print("unpriced calls:", r.metadata.get("unpriced_calls"))tokens: 33 cost: None unpriced calls: 1
The server serves its own model ids, so no OpenAI catalog is consulted for any of them. The full sampling surface — top_p, top_k, seed, the penalties — is offered, which every implementation of the protocol accepts. Pass supports_reasoning=True if what you serve emits a reasoning stream.
A local server that authenticates nothing needs no credential — effGen sends a placeholder, which vLLM, SGLang, TGI, llama.cpp and Ollama all accept. Pass a real one for a gateway that checks it.
Both numbers are true and they mean different things, so this page says which one it means. Every row below — the model count, the capability counts, the largest context window, the default model, the date the catalog was last checked against the provider’s live API and the environment variable the adapter reads — is read out of the installed package.
openaiEvery model in the catalog calls tools, and most of them take images.
OPENAI_API_KEY
Default when a call names no model: gpt-5.4-nano
anthropicEvery model in the catalog calls tools and takes images — no exceptions either way.
ANTHROPIC_API_KEY
geminiThe only bundled catalog carrying audio input, and the one with the most free-tier models.
GOOGLE_API_KEY
Default when a call names no model: gemini-3.1-flash-lite
groqSmall open models served fast, on a short catalog; about half of them call tools.
GROQ_API_KEY
Default when a call names no model: llama-3.1-8b-instant
cerebrasTwo models, both free-tier and rate-limited, at a 64K context window.
CEREBRAS_API_KEY
Default when a call names no model: gpt-oss-120b
togetherThe largest bundled catalog, and the widest range of open weights.
TOGETHER_API_KEY
Default when a call names no model: Qwen/Qwen3.5-9B
fireworksOpen models with a serverless tier, several of them vision-capable.
FIREWORKS_API_KEY
Default when a call names no model: accounts/fireworks/models/gpt-oss-120b
hfHosted inference over the Hub, with the second-largest catalog here.
HF_TOKEN · HUGGINGFACE_API_KEY
Default when a call names no model: Qwen/Qwen2.5-7B-Instruct
replicateHosted open models, many of them billed by hardware time rather than by token.
REPLICATE_API_TOKEN
Default when a call names no model: meta/meta-llama-3-8b-instruct
openai_compatibleNo bundled catalog at all: it serves whatever the endpoint you point it at serves.
EFFGEN_BASE_URL · OPENAI_BASE_URL · OPENAI_API_BASE
$ effgen models list Available Models Provider Registry (bundled catalog) ┏━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━┓┃ Provider ┃ Models ┃ Default ┃ Auth ┃ Verified ┃┡━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━┩│ openai │ 30 │ gpt-5.4-nano │ key │ 2026-06-17 ││ anthropic │ 17 │ — │ — │ 2026-06-08 ││ gemini │ 8 │ gemini-3.1-flash-lite │ — │ 2026-08-13 ││ cerebras │ 2 │ gpt-oss-120b │ key │ 2026-06-08 ││ groq │ 15 │ llama-3.1-8b-instant │ — │ 2026-08-07 ││ together │ 168 │ Qwen/Qwen3.5-9B │ — │ 2026-08-07 ││ fireworks │ 16 │ accounts/fireworks/models/gpt-oss-120b │ — │ 2026-08-07 ││ replicate │ 37 │ meta/meta-llama-3-8b-instruct │ — │ 2026-08-07 ││ hf │ 124 │ Qwen/Qwen2.5-7B-Instruct │ — │ 2026-06-08 │└───────────┴────────┴────────────────────────────────────────┴──────┴────────────┘ Detail: effgen models list --provider <name> · Filter: --free / --tools · Update: effgen models refresh Local HuggingFace cache (47 ready) ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━┓┃ Model ┃ Size ┃ Status ┃┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━┩│ BAAI/bge-m3 │ 4.3 GB │ ready ││ CohereLabs/aya-expanse-32b │ 60.2 GB │ ready ││ CohereLabs/aya-expanse-8b │ 15.0 GB │ ready ││ FinLang/finance-embeddings-investopedia │ 0.4 GB │ ready ││ FremyCompany/BioLORD-2023 │ 0.0 GB │ incomplete ││ Qwen/Qwen2.5-0.5B-Instruct │ 0.9 GB │ ready ││ Qwen/Qwen2.5-1.5B-Instruct │ 2.9 GB │ ready ││ Qwen/Qwen2.5-14B-Instruct │ 27.5 GB │ ready ││ Qwen/Qwen2.5-32B-Instruct │ 61.0 GB │ ready ││ Qwen/Qwen2.5-3B-Instruct │ 5.8 GB │ ready ││ Qwen/Qwen2.5-7B-Instruct │ 14.2 GB │ ready ││ Qwen/Qwen3-0.6B │ 1.4 GB │ ready ││ Qwen/Qwen3-1.7B │ 3.8 GB │ ready ││ Qwen/Qwen3-14B │ 27.5 GB │ ready ││ Qwen/Qwen3-32B │ 61.0 GB │ ready ││ Qwen/Qwen3-4B │ 7.5 GB │ ready ││ Qwen/Qwen3-4B-Instruct-2507 │ 7.5 GB │ ready ││ Qwen/Qwen3-8B │ 15.3 GB │ ready ││ Qwen/Qwen3-Embedding-0.6B │ 1.1 GB │ ready ││ Qwen/Qwen3-Embedding-8B │ 14.1 GB │ ready ││ Qwen/Qwen3.5-0.8B │ 1.6 GB │ ready ││ Qwen/Qwen3.5-27B │ 51.8 GB │ ready ││ Qwen/Qwen3.5-2B │ 4.3 GB │ ready ││ Qwen/Qwen3.5-9B │ 18.0 GB │ ready ││ Qwen/Qwen3.6-27B │ 51.8 GB │ ready ││ Systran/faster-whisper-base │ 0.1 GB │ ready ││ antofuller/CROMA │ 0.7 GB │ ready ││ cis-lmu/glotlid │ 1.6 GB │ ready ││ google/gemma-2-2b-it │ 4.9 GB │ ready ││ google/gemma-3-12b-it │ 0.0 GB │ incomplete ││ google/gemma-3-4b-it │ 8.0 GB │ ready ││ ibm-esa-geospatial/TerraMind-1.0-Tokenizer-S1GRD │ 1.1 GB │ ready ││ ibm-esa-geospatial/TerraMind-1.0-Tokenizer-S2L2A │ 1.1 GB │ ready ││ ibm-esa-geospatial/TerraMind-1.0-base │ 1.4 GB │ ready ││ ibm-esa-geospatial/TerraMind-1.0-large │ 3.5 GB │ ready ││ meta-llama/Llama-3.1-8B-Instruct │ 15.0 GB │ ready ││ meta-llama/Llama-3.2-1B-Instruct │ 2.3 GB │ ready ││ meta-llama/Llama-3.2-3B-Instruct │ 12.0 GB │ ready ││ meta-llama/Llama-3.3-70B-Instruct │ 0.0 GB │ incomplete ││ microsoft/Phi-3.5-mini-instruct │ 7.1 GB │ ready ││ microsoft/Phi-4-mini-instruct │ 7.2 GB │ ready ││ microsoft/Phi-4-mini-reasoning │ 7.2 GB │ ready ││ microsoft/Phi-4-reasoning │ 27.3 GB │ ready ││ microsoft/Phi-4-reasoning-plus │ 27.3 GB │ ready ││ microsoft/phi-4 │ 27.3 GB │ ready ││ mistralai/Mistral-Small-24B-Instruct-2501 │ 87.8 GB │ ready ││ openai/gpt-oss-120b │ 182.3 GB │ ready ││ openai/gpt-oss-20b │ 38.5 GB │ ready ││ sentence-transformers/all-MiniLM-L6-v2 │ 0.1 GB │ ready ││ zss01/PixelCraft-3B │ 7.6 GB │ ready │└──────────────────────────────────────────────────┴──────────┴────────────┘
A provider adapter calls someone else’s server. A local engine loads the weights where your code is running — no key, no network, and the model id is the repository id. 4 engines cover a GPU box, a throughput server, a laptop with no GPU and Apple Silicon.
engine="transformers"The default. Runs the weights in-process on a local GPU, or on the CPU.
engine="vllm"Higher throughput on the same weights, for a machine serving many requests.
engine="gguf"Quantised GGUF weights through llama.cpp — a laptop, or a box with no GPU.
engine="mlx"Apple Silicon, through MLX. A vision-language variant runs multimodal models.
from effgen.models import load_model
model = load_model("Qwen/Qwen2.5-0.5B-Instruct", engine="transformers")
print(model.generate("Name one primary colour.", max_tokens=16).text.strip())One primary color is blue.
Run for this page on a machine with the weights already in the local cache. The same call with engine="vllm" serves the same weights at higher throughput, engine="gguf" takes a quantised file through llama.cpp, and engine="mlx" runs on Apple Silicon.
effgen models browse --include-local adds what is already downloaded in the local Hugging Face cache to the table, so the zero-key option is visible beside the hosted ones.
A published rate is shown as it is. A genuine free tier reads free. A model billed by something other than tokens reads metered. Anything else — including a catalog entry that carries an explicit zero with no free tier behind it — reads unpriced, because a fabricated $0 is the one answer that makes a spend total wrong without looking wrong.
$ effgen models browse -t --max-price-in 0.10 --sort price-in --limit 10 Model Catalog Models across providers — showing 10 of 55 ┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┓┃ Provider ┃ Model ID ┃ Context ┃ Max Out ┃ $/1M in ┃ $/1M out ┃ Tools ┃ Vision ┃ Free ┃┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━┩│ hf │ CohereLabs/c4ai-command-a-03-2025 │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ │ ││ hf │ CohereLabs/c4ai-command-r-08-2024 │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ │ ││ hf │ CohereLabs/c4ai-command-r7b-12-2024 │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ │ ││ hf │ CohereLabs/c4ai-command-r7b-arabic-02 │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ │ ││ │ -2025 │ │ │ │ │ │ │ ││ hf │ CohereLabs/command-a-reasoning-08-202 │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ │ ││ │ 5 │ │ │ │ │ │ │ ││ hf │ CohereLabs/command-a-translate-08-202 │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ │ ││ │ 5 │ │ │ │ │ │ │ ││ together │ deepcogito/cogito-v1-preview-llama-70 │ 131,072 │ 4,096 │ unpriced │ unpriced │ ✓ │ │ ││ │ B │ │ │ │ │ │ │ ││ together │ deepcogito/cogito-v1-preview-llama-70 │ 131,072 │ 4,096 │ unpriced │ unpriced │ ✓ │ │ ││ │ B-Turbo │ │ │ │ │ │ │ ││ together │ deepcogito/cogito-v1-preview-llama-8B │ 131,072 │ 4,096 │ unpriced │ unpriced │ ✓ │ │ ││ hf │ google/gemma-3-27b-it │ 8,192 │ 8,192 │ unpriced │ unpriced │ ✓ │ ✓ │ │└──────────┴───────────────────────────────────────┴─────────┴─────────┴──────────┴──────────┴───────┴────────┴──────┘ More: --offset 10 for the next page. Pricing source: catalog snapshot. Update: effgen models refresh · Detail: effgen models info <id>
A price ceiling drops every model whose rate the catalog does not carry at all. What survives here are entries carrying an explicit zero — and the table refuses to call those $0.
$ effgen models browse --free -t --limit 10 Model Catalog Models across providers — showing 5 of 5 ┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┓┃ Provider ┃ Model ID ┃ Context ┃ Max Out ┃ $/1M in ┃ $/1M out ┃ Tools ┃ Vision ┃ Free ┃┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━┩│ cerebras │ gpt-oss-120b │ 65,536 │ 32,768 │ free │ free │ ✓ │ │ ✓ ││ gemini │ gemini-2.5-flash │ 1,000,000 │ 16,384 │ $0.3 │ $2.5 │ ✓ │ ✓ │ ✓ ││ gemini │ gemini-2.5-flash-lite │ 1,000,000 │ 16,384 │ $0.1 │ $0.4 │ ✓ │ ✓ │ ✓ ││ gemini │ gemini-3-flash-preview │ 1,000,000 │ 32,768 │ $0.5 │ $3 │ ✓ │ ✓ │ ✓ ││ gemini │ gemini-3.1-flash-lite │ 1,000,000 │ 32,768 │ $0.25 │ $1.5 │ ✓ │ ✓ │ ✓ │└──────────┴────────────────────────┴───────────┴─────────┴─────────┴──────────┴───────┴────────┴──────┘ Pricing source: catalog snapshot. Update: effgen models refresh · Detail: effgen models info <id>
A genuine free tier is a different thing and is labelled as one. Filters compose: a model has to satisfy every one supplied.
$ effgen models browse --vision --min-context 200000 --sort context --desc --limit 10 Model Catalog Models across providers — showing 10 of 58 ┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┓┃ Provider ┃ Model ID ┃ Context ┃ Max Out ┃ $/1M in ┃ $/1M out ┃ Tools ┃ Vision ┃ Free ┃┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━┩│ gemini │ gemini-3.1-pro-preview │ 2,000,000 │ 65,536 │ $2 │ $12 │ ✓ │ ✓ │ ││ gemini │ gemini-2.5-pro │ 2,000,000 │ 32,768 │ $1.25 │ $10 │ ✓ │ ✓ │ ││ hf │ meta-llama/Llama-Guard-4-12B │ 1,048,576 │ 16,384 │ $0.2 │ $0.2 │ │ ✓ │ ││ hf │ meta-llama/Llama-4-Maverick-17B-12 │ 1,048,576 │ 16,384 │ $0.27 │ $0.85 │ │ ✓ │ ││ │ 8E-Instruct-FP8 │ │ │ │ │ │ │ ││ fireworks │ accounts/fireworks/models/kimi-k3 │ 1,048,576 │ 16,384 │ unpriced │ unpriced │ ✓ │ ✓ │ ││ fireworks │ accounts/fireworks/models/inkling │ 1,048,576 │ 16,384 │ unpriced │ unpriced │ ✓ │ ✓ │ ││ openai │ gpt-5.4-pro │ 1,047,576 │ 32,768 │ $30 │ $180 │ ✓ │ ✓ │ ││ openai │ gpt-5.4-nano │ 1,047,576 │ 32,768 │ $0.2 │ $1.25 │ ✓ │ ✓ │ ││ openai │ gpt-5.4-mini │ 1,047,576 │ 32,768 │ $0.75 │ $4.5 │ ✓ │ ✓ │ ││ openai │ gpt-5.4 │ 1,047,576 │ 32,768 │ $2.5 │ $15 │ ✓ │ ✓ │ │└───────────┴────────────────────────────────────┴───────────┴─────────┴──────────┴──────────┴───────┴────────┴──────┘ More: --offset 10 for the next page. Pricing source: catalog snapshot. Update: effgen models refresh · Detail: effgen models info <id>
A missing number sorts last on an ascending sort, so an unknown price never masquerades as the cheapest.
$ effgen models browse --provider cerebras Model Catalog Models across providers — showing 2 of 2 ┏━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┓┃ Provider ┃ Model ID ┃ Context ┃ Max Out ┃ $/1M in ┃ $/1M out ┃ Tools ┃ Vision ┃ Free ┃┡━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━┩│ cerebras │ gpt-oss-120b │ 65,536 │ 32,768 │ free │ free │ ✓ │ │ ✓ ││ cerebras │ zai-glm-4.7 │ 65,536 │ 40,960 │ free │ free │ │ │ ✓ │└──────────┴──────────────┴─────────┴─────────┴─────────┴──────────┴───────┴────────┴──────┘ Pricing source: catalog snapshot. Update: effgen models refresh · Detail: effgen models info <id>
$ effgen models browse --search qwen --limit 10 Model Catalog Models across providers — showing 10 of 99 ┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━┓┃ Provider ┃ Model ID ┃ Context ┃ Max Out ┃ $/1M in ┃ $/1M out ┃ Tools ┃ Vision ┃ Free ┃┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━━╇━━━━━━┩│ fireworks │ accounts/fireworks/models/qwen3-embe │ 40,960 │ — │ $0.1 │ $0 │ │ │ ││ │ dding-8b │ │ │ │ │ │ │ ││ fireworks │ accounts/fireworks/models/qwen3-rera │ 40,960 │ — │ $0.1 │ $0 │ │ │ ││ │ nker-8b │ │ │ │ │ │ │ ││ fireworks │ accounts/fireworks/models/qwen3p7-pl │ — │ 16,384 │ unpriced │ unpriced │ ✓ │ ✓ │ ││ │ us │ │ │ │ │ │ │ ││ groq │ qwen/qwen3.6-27b │ 131,072 │ 16,384 │ $0.6 │ $3 │ ✓ │ ✓ │ ││ hf │ aisingapore/Qwen-SEA-LION-v4-32B-IT │ 8,192 │ 8,192 │ $0.25 │ $0.5 │ ✓ │ │ ││ hf │ deepseek-ai/DeepSeek-R1-Distill-Qwen │ 131,072 │ 16,384 │ $0.1 │ $0.1 │ │ │ ││ │ -1.5B │ │ │ │ │ │ │ ││ hf │ deepseek-ai/DeepSeek-R1-Distill-Qwen │ 131,072 │ 16,384 │ $0.2 │ $0.2 │ │ │ ││ │ -14B │ │ │ │ │ │ │ ││ hf │ deepseek-ai/DeepSeek-R1-Distill-Qwen │ 131,072 │ 16,384 │ $0.3 │ $0.3 │ │ │ ││ │ -32B │ │ │ │ │ │ │ ││ hf │ deepseek-ai/DeepSeek-R1-Distill-Qwen │ 131,072 │ 16,384 │ $0.15 │ $0.15 │ │ │ ││ │ -7B │ │ │ │ │ │ │ ││ hf │ Qwen/Qwen2.5-72B-Instruct │ 32,000 │ 16,384 │ $0.38 │ $0.4 │ ✓ │ │ │└───────────┴──────────────────────────────────────┴─────────┴─────────┴──────────┴──────────┴───────┴────────┴──────┘ More: --offset 10 for the next page. Pricing source: catalog snapshot. Update: effgen models refresh · Detail: effgen models info <id>
browse takes| Flag | Type | Description |
|---|---|---|
--search TEXT | — | Case-insensitive substring match on model id, family, or provider |
--provider PROVIDER | — | Limit to one provider |
--free | — | Only free-tier models |
-t, --tools | — | Only tool-calling models |
--vision | — | Only vision-capable models |
--audio | — | Only audio-capable models |
--min-context N | — | Only models with a context window of at least N tokens |
--max-price-in USD | — | Only models whose input price ($/1M) is at most USD |
--max-price-out USD | — | Only models whose output price ($/1M) is at most USD |
--sort {provider,id,context,max-out,price-in,price-out} | — | Sort order (default: provider then id) |
--desc | — | Sort in descending order |
--limit N | — | Show at most N rows |
--offset N | — | Skip the first N rows (paging) |
--include-local | — | Also list models downloaded in the local HuggingFace cache |
--json | — | Output as JSON |
effgen models browse --help · effGen 1.0.0
$ effgen models info openai:gpt-5-mini Model: openai:gpt-5-mini┌───────────────────────────┬─────────────────┐│ Provider │ openai ││ Display name │ gpt-5-mini ││ Family │ chat ││ Context window │ 1,047,576 ││ Max output │ 32,768 ││ Price ($/1M in / out) │ $0.25/$2 ││ Tool calling │ yes ││ Coding │ suitable ││ Vision │ yes ││ Audio │ no ││ Free tier │ no ││ Rate limits (rpm/tpm/rpd) │ — / — / — ││ Deprecated │ no ││ Price source │ bundled-catalog ││ Verified on │ 2026-06-17 ││ Auth ready │ yes │└───────────────────────────┴─────────────────┘ Use: effgen run --provider openai -m gpt-5-mini "..."

GET /dashboard/catalog.jsonAgentConfig(models=[...]) loads every model named and routes between them. For a policy rather than a list, ModelRouter selects on capability, cost or measured latency, and records why every candidate it rejected was rejected.
from effgen import Agent, AgentConfig
with Agent(AgentConfig(
model="gemini:gemini-3.1-flash-lite",
models=["openai:gpt-5-nano"],
)) as agent:
r = agent.run("Reply with the single word ok.")
print(r.output)
print(r.metadata["total_tokens"], "tokens · $%.6f" % r.metadata["cost_usd"])ok 20 tokens · $0.000006
A model in the list that cannot be loaded is reported and skipped rather than taking the agent down with it, so a list can name a model that is not configured on every machine.
FirstAvailablePolicy takes the first provider with a configured key that supports the capabilities asked for. CostBasedPolicy takes the cheapest that fits the budget, ranking a free tier ahead of a paid one and breaking remaining ties deterministically. LatencyBasedPolicy takes the fastest that meets a latency budget, from measured p50s rather than from seeds once any real measurement exists.
A RouterDecision carries the pair it chose, the policy that chose it, that policy’s score, and eliminated — one entry per rejected candidate with the reason: no key and the variable it would come from, a capability the model does not have, a model that needs a dedicated endpoint, or simply not the cheapest.
When nothing fits the budget, NoCandidateWithinBudgetError is raised carrying the cheapest option that exists, so the caller can say what the budget would have to be.
A task that ran and failed is something you can inspect. A connection that was refused, a host that does not resolve and a route that does not exist are not, and returning one quietly is how a whole batch completes against nothing and looks healthy in the summary. So they raise BackendUnreachableError — whatever raise_on_error says.
from effgen import Agent, AgentConfig
from effgen.models.errors import BackendUnreachableError
agent = Agent(AgentConfig(
model="Qwen/Qwen2.5-7B-Instruct",
base_url="http://127.0.0.1:9/v1",
raise_on_error=False,
))
try:
agent.run("What is 6 times 7?")
except BackendUnreachableError as e:
print(type(e).__name__)
print(str(e).split(". ")[-1])
finally:
agent.close()BackendUnreachableError Nothing answered at that endpoint — check the server is running and the base_url, host and port are right.
curl -s http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"cerebras:llama3.1-8b","messages":[{"role":"user","content":"hello"}]}'{"error":{"message":"cerebras error (model='llama3.1-8b'): Unknown Cerebras model 'llama3.1-8b'. Did you mean: zai-glm-4.7, gpt-oss-120b? Available cerebras models: gpt-oss-120b, zai-glm-4.7. Model id not found — run `effgen models list` to see ids, `effgen models refresh` to update the catalog, and verify the id/provider prefix.","type":"invalid_request_error","param":null,"code":"not_found"}}from effgen.models import load_model
try:
load_model("my-model", provider="openai_compatible")
except ValueError as e:
print(e)An OpenAI-compatible endpoint needs a base_url. Pass base_url='http://host:port/v1', or set EFFGEN_BASE_URL (or OPENAI_BASE_URL) in the environment. To call OpenAI itself, use provider='openai' instead.
The registry and how a model id is resolved, one page per provider with its rate limits and its quirks, the tool-call dialects, and the router with its policies and its capability matrix.
docs/models/openai-compatible.md — pointing effGen at your own server