Per-provider capability matrix
What each provider supports in jangada. The public API features are the
same (complete, parse, stream, transcribe, ...); what changes is what
each provider can do under the hood.
| Feature | OpenAI | Groq | Gemini | Anthropic | Mistral |
|---|---|---|---|---|---|
Text (complete/acomplete) | ✅ | ✅ | ✅ | ✅ | ✅ |
Structured output (parse) | ✅ | ✅ | ✅ | ✅ | ✅ |
| Tools / function calling | ✅ | ✅ | ✅ | ✅ | ✅ |
MCP (mcp_servers=) | ✅ URL | ✅ URL | ✅ session⁴ | ✅ URL | ❌ |
Native tools (web_search()…)⁵ | ✅ (Responses) | ⚠️ compound/gpt-oss | ✅ | ✅ | ✅ (Conversations) |
Embeddings (embed) | ✅ | ❌ | ✅ | ❌ | ✅ |
Streaming (stream/astream) | ✅ | ✅ | ✅ | ✅ | ✅ |
Vision / images (images=) | ✅ | ⚠️¹ | ✅ | ✅ | ⚠️¹ |
Documents (files=)² | ✅ | ✅ | ✅ | ✅ | ✅ |
| Object detection | ✅ | ⚠️¹ | ✅³ | ⚠️ | ⚠️ |
Audio transcription (transcribe) | ✅ | ✅ | ✅ | ❌ | ✅ (Voxtral) |
OCR / Document AI (ocr) | ❌ | ❌ | ❌ | ❌ | ✅ |
top_k param | ❌ | ❌ | ✅ | ✅ | ❌ |
seed param | ✅ | ✅ | ✅ | ❌ | ✅ (random_seed) |
stop param | ✅ | ✅ | ✅ (stop_sequences) | ✅ (stop_sequences) | ✅ |
¹ Depends on the model: vision on Groq requires a vision-capable model (e.g., the
Llama vision family); text-only models don't accept images.
² files= extracts text locally (docx/pdf/csv/xlsx) and sends it as text —
that's why it works everywhere. See Documents.
³ The bounding box convention (0–1000) is native to Gemini, which is the most precise.
⁴ MCP on Gemini is client-side per session and async only (acomplete); the
others are remote per URL (server-side). See MCP.
⁵ Tools run by the provider (web search, url context, code execution, file
search…). Support varies per tool and per model; they also exist on
OpenRouter, Bedrock (Amazon Nova) and Ollama (run by the
adapter). Full matrix in Native tools.
How each one implements structured output
| Provider | Mechanism |
|---|---|
| OpenAI | chat.completions.parse(response_format=Modelo) |
| Groq | response_format={"type":"json_schema",...} + validation |
| Gemini | config.response_schema=Modelo → resp.parsed |
| Anthropic | tool-forcing (tool_choice fixed) → validates tool_use |
| Mistral | native chat.parse(response_format=Model) helper → .message.parsed |
Per-provider detail
The canonical parameters and per-model profiles (gpt-5, gemini-3.x) are in Parameters and profiles.
Providers and API keys
jangada supports several providers (Anthropic, OpenAI, Groq, Gemini, Mistral, OpenRouter and cloud gateways), each isolated in an adapter that translates the normalized types (Message/Completion) to the native SDK.
Use cases
Three real cases from problem to code with jangada: structured document extraction (invoice vision), error-based fallback across providers and support RAG. Each one in a few lines, no boilerplate.