Skip to content

Capabilities

One reference table for what each surface serves. Every capability below is available on a single API key; you pick a wire format, not a feature set.

The same model backs all three surfaces, so the differences here are wire-format conventions, not feature gaps. A capability marked on one surface is reachable from the others by sending that surface’s shape — for example, PDF input is native to the Anthropic surface, and any gemini-* or OpenAI-style id can be sent there too.

CapabilityOpenAIAnthropicGemini
Text generation/chat/completions/v1/messages:generateContent
Streaming (SSE)stream: truestream: true:streamGenerateContent
Function tools (client-defined)toolstoolsfunctionDeclarations
Forced tool / structured outputtool_choicetool_choicefunctionCallingConfig
JSON mode / response schemaresponse_formatoutput_config.formatresponseSchema
Vision (image input)image_url✓ image sourceinlineData
PDF / document inputUse the Anthropic surface✓ document sourceinlineData (PDF)
Usage on a streamstream_options.include_usage✓ in every message_deltausageMetadata
Token counting/v1/messages/count_tokens:countTokens
Prompt cachingcache_controlcache_controlAutomatic where available

DirectInference also serves the OpenAI Responses API at /v1/responses (and /di/v1/responses) — point client.responses.create(...) at the base URL and keep your model id. It is a fourth wire surface translated to the same model, so text, streaming, client-defined function tools, forced tools, JSON / structured output (text.format), and vision (input_image) work exactly as on the Chat Completions surface.

The surface is stateless — it keeps no server-side conversation state. Send the full conversation in input each turn. These shapes are rejected at request time with a typed error that names the field:

  • previous_response_id, background: true, conversation, and prompt templates (stateful — unsupported_parameter).
  • Hosted / server-side tools — web_search, file_search, code_interpreter, computer_use_preview, image_generation, mcp. DirectInference cannot execute these; client-defined function tools are fully served.
  • store: true is accepted but honored as store: false — the response is never made retrievable.

DirectInference serves every request type from the model best suited to it, so the context window and maximum output are whatever the chosen model supports for that request. The figures advertised in the catalog are the conservative minimum guaranteed across every request type — the floor you can always rely on, not a per-call ceiling. A long-context request is served by a long-context model regardless of this floor.

A few request shapes are deliberately not served. Each is rejected at request time with a descriptive error that names the offending element — never a silent drop or a degraded answer. Keep these call sites on their original provider; client-defined function tools are fully served and are the supported way to give the model capabilities.

ShapeRejected identifiers
Provider server-side toolsGemini googleSearch, googleSearchRetrieval, urlContext, codeExecution; Anthropic web_search, code_execution; OpenAI web_search tool type and web_search_options; Responses hosted tools web_search, file_search, code_interpreter, computer_use_preview, image_generation, mcp
Responses API stateful subsetprevious_response_id, background, conversation, prompt templates — see OpenAI Responses API (the surface itself is served, statelessly)
Embeddings/embeddings
Images, audio, moderations, batches, files, fine-tuningthe corresponding endpoints