Jangada AIJangada AI

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.

FeatureOpenAIGroqGeminiAnthropicMistral
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

ProviderMechanism
OpenAIchat.completions.parse(response_format=Modelo)
Groqresponse_format={"type":"json_schema",...} + validation
Geminiconfig.response_schema=Modelo → resp.parsed
Anthropictool-forcing (tool_choice fixed) → validates tool_use
Mistralnative 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.

On this page