Feature Matrix
57 capabilities
across every official SDK
What each official SDK actually exposes -- not what the marketing pages claim. Every cell is checked against the pinned source of that provider's own SDK, and clicking one shows you the exact lines it was verified against.
281
cited sources
213
inline snippets
5
API ≠ SDK gaps
0
unverified cells
How this was built
- Nothing is asserted from memory. Every “supported” claim cites a file and line in that provider's own SDK, at a pinned version. A build check fails if a citation stops resolving.
- Accepted is not honoured. Where a parameter is only meaningful if it changes
behaviour, we tested it rather than trusting a
200.top_kis accepted by three providers and actually applied by one. - Two different questions. A capability can exist on a provider's API while its official SDK doesn't expose it — xAI ships a voice API its Python SDK has no module for. Those cells are marked API.
- Gaps are shown, not hidden. Rows where we're weaker than an official SDK are in here too — filter by Our gaps.
Showing 57 of 57 features · click any cell for the evidence
●Supported◐Partial◑Beta / gated○Not supported–Not applicableAPIprovider has it, SDK doesn't expose it
| Feature | ORXA llm-sdk | Anthropic | OpenAI | xAI | |
|---|---|---|---|---|---|
Core completion The shape of a single request/response: what you send, how the turn is framed, and what comes back. | |||||
Single-prompt completion core.prompt · example | |||||
System prompt core.system · example | |||||
Multi-turn conversation core.multi-turn · example | |||||
Output length cap core.max-tokens | |||||
Sampling parameters The knobs that shape token selection. The interesting part is not who has them, but who SILENTLY IGNORES them. | |||||
Temperature / top-p sampling.temperature | |||||
Top-k sampling.top-k | |||||
Presence / frequency penalties sampling.penalties | |||||
Stop sequences sampling.stop | |||||
Deterministic seed sampling.seed | |||||
Streaming Incremental delivery of a turn. Every provider streams text; they diverge sharply on what ELSE is streamable and how events are shaped. | |||||
Streaming text streaming.text · example | |||||
Rich stream events streaming.events | |||||
Tools / function calling Letting the model call your code. Universally supported, and universally spelled differently. | |||||
Function tool definition tools.define · example | |||||
Tool choice control tools.choice · example | |||||
Parallel tool calls tools.parallel · example | |||||
Automatic tool-execution loop tools.loop · example | |||||
Structured output Getting a typed object instead of prose. The gap here is less about support and more about what happens when the model gets it wrong. | |||||
JSON-Schema constrained output structured.schema · example | |||||
Typed parse + failure handling structured.parse · example | |||||
Vision & documents Non-text INPUT. Everyone takes images; they diverge on PDFs, on whether a URL can be passed directly, and on how big an input may be. | |||||
Image input vision.image · example | |||||
PDF / document input vision.document · example | |||||
Audio Speech in and speech out. The widest capability spread of any category — one provider has none of it. | |||||
Speech-to-text audio.stt · example | |||||
Text-to-speech audio.tts · example | |||||
Image generation Producing images rather than reading them. Note how differently the three providers model it: a dedicated endpoint, a normal completion, or both. | |||||
Generate an image imagegen.generate · example | |||||
Edit an existing image imagegen.edit | |||||
Files API Uploading content once and referencing it by id. Same idea everywhere, but the lifetime and the beta status differ sharply. | |||||
Upload & reference by id files.upload · example | |||||
Batch / async jobs Submit many requests for offline processing at a discount. Universally ~50% cheaper, and universally shaped differently. | |||||
Batch submission & polling batch.submit · example | |||||
Prompt caching Reusing computation across requests. The single most divergent category in the matrix: explicit markers, an opaque key, or a first-class resource. | |||||
Prompt / context caching caching.prompt · example | |||||
Server-side conversation state Letting the provider hold the transcript so each turn sends only what is new. | |||||
Server-held conversation state state.previous-response · example | |||||
Hosted (provider-run) tools Tools the PROVIDER executes server-side — you never run any code. The least converged area in the matrix: OpenAI, Google and xAI all offer hosted retrieval over your own corpus (vector stores / File Search Stores / Collections); Anthropic offers none. Tool NAMES and shapes differ everywhere. | |||||
Web search hosted-tools.web-search · example | |||||
Code execution hosted-tools.code-execution · example | |||||
Hosted retrieval / file search hosted-tools.file-search | |||||
MCP (Model Context Protocol) Connecting external tool servers. Two postures: the provider connects (hosted), or your client connects (local). Anthropic and Google both integrate the external `mcp` package for the local case; OpenAI ships hosted MCP only. | |||||
MCP client (you connect) mcp.client · example | |||||
Hosted MCP (the provider connects) mcp.hosted | |||||
Realtime / live Bidirectional low-latency sessions over a socket, usually voice. Only two providers have it, and they share almost no vocabulary. | |||||
Realtime session realtime.session · example | |||||
Embeddings Vector representations. Notable mainly for who does NOT have them. | |||||
Text embeddings embeddings.embed · example | |||||
Agent loop & orchestration Multi-step autonomous runs. IMPORTANT: for OpenAI and Google these live in a SEPARATE package (@openai/agents, google-adk) — not the SDK you install to call the model. Cells cite whichever package actually provides it. | |||||
Multi-step agent loop agent.loop · example | |||||
Guardrails agent.guardrails | |||||
Human-in-the-loop approval agent.approval | |||||
Context management Keeping a long conversation inside the window: measuring it, and compacting it when it grows. | |||||
Automatic context compaction context.compaction | |||||
Usage, tokens & cost Knowing what a call consumed and what it cost. Every provider reports tokens; TWO turn them into money by opposite routes - xAI’s API returns the ACTUAL billed cost, while we price a bundled catalog locally (and can therefore also estimate BEFORE sending). | |||||
Token usage reporting usage.tokens | |||||
Cost calculation usage.cost · example | |||||
Observability Seeing what happened: traces, spans, metrics and events. | |||||
Tracing / spans observability.tracing | |||||
Networking & reliability What happens between your process and the API: retries, timeouts, and whether anything protects you from your own concurrency. | |||||
Retries & timeouts networking.retry | |||||
Client-side rate limiting & queueing networking.queue | |||||
Errors & typing How failures are surfaced, and whether they mean the same thing across providers. | |||||
Typed error hierarchy errors.typed | |||||
Auth & configuration Keys, endpoints and per-request overrides. | |||||
API key & endpoint configuration auth.keys | |||||
Video generation Long-running video jobs. All three that offer it are async (submit → poll → download), and all three shape it differently. | |||||
Generate video videogen.generate | |||||
Moderation & safety Screening content. One provider has a dedicated classifier, one has request-level safety controls, one has neither. | |||||
Content moderation moderation.screen | |||||
Model catalog & discovery Finding out which models exist, what they cost, and what they can do. Every SDK lists ids; none of them tells you anything else. | |||||
List available models catalog.list · example | |||||
Pricing & capability metadata catalog.capabilities | |||||
Routing & fallback Sending a call somewhere else when the first choice fails or costs too much. | |||||
Fallback to another model routing.fallback · example | |||||
Runtime & environment Where the library can actually run, and what it drags in. | |||||
Browser support runtime.browser | |||||
Runtime dependencies runtime.dependencies | |||||
Reasoning / thinking Controls over a model's internal reasoning: whether it runs, how hard, how much comes back, and whether it persists across turns. | |||||
Enable reasoning reasoning.enable · example | |||||
Reasoning effort reasoning.effort · example | |||||
Reasoning visibility reasoning.visibility · example | |||||
Cross-turn reasoning persistence reasoning.context | |||||
Reasoning execution mode reasoning.mode | |||||