Skip to main content

Capabilities

A capability is anything a Large Language Model can do beyond plain text generation — search the web, run code, generate an image, return citations, or reason with a larger compute budget. Different vendors expose these as server-side primitives with different names and shapes; Turing ES collapses them into one taxonomy so the admin sees "web search" once, not "OpenAI web_search vs Anthropic web_search_20250305 vs Gemini google_search."

You'd reach for this page when you want an agent to use a provider-native feature — Claude's web search, OpenAI's hosted code interpreter, Gemini's Google Search grounding — rather than (or alongside) Turing's own native tools. The key idea to internalize: a native capability only fires when it is switched on in two places. Miss either gate and the request silently falls back to the standard Spring AI path, as if the capability didn't exist.


Why two gates?

A capability is gated per LLM instance and per agent on purpose:

  1. The instance gate (admin/ops) decides whether this connection is even allowed to use the feature — an operator question about cost, data residency, and contractual access. It lives in the llm_instance_capability matrix.
  2. The agent gate (author) decides whether this particular assistant should use it — a design question about what the agent is for. It lives in the agent's nativeCapabilities selection.

At runtime Turing intersects the two sets: what the agent asked for ∩ what the instance is allowed to do. Only capabilities in that intersection are wired into the provider request.

The most common gotcha

The picker checks the bound instance's vendor, not its capability matrix — so you can select a capability that no instance actually has enabled and it will simply never fire. If a native capability "isn't working," confirm it is enabled in both the instance matrix and the agent picker.


From zero: turn on Claude web search for an agent

  1. Enable it on the instance. Open your Anthropic LLM instance (/admin/llm/instance). In the Capabilities section, toggle on Web Search. (Behind the scenes this PUTs /api/llm/{instanceId}/capability/anthropic-web-search.)
  2. Select it on the agent. Open the agent's Tools & Capabilities picker (/capabilities). Under the Web group, pick the Anthropic web-search option. (This writes the key to the agent's nativeCapabilities.)
  3. Chat. Ask a question that needs fresh information. Claude now runs web search server-side and the answer streams back with citation events.

If nothing changed, re-check step 1 — the instance gate is the one most often forgotten.


The capability taxonomy

Every capability carries a kind that decides which UI surface it appears on. This keeps ~40 capabilities from collapsing into one undifferentiated list.

KindWhat it isWhere it surfaces
TOOLThe model invokes it mid-turn (web search, code interpreter, image gen, plus Turing's own native tool groups).The agent's Tools & Capabilities picker
REQUEST_OPTIONChanges how the call is made; never invocable (reasoning effort, citations, service tier, context caching…).Agent Request Options settings toggles
PLATFORMNot per-agent at all (usage import, evals, distillation, nightly batch).Their own admin screens

Each TOOL/REQUEST_OPTION descriptor also carries:

FieldMeaning
keyStable identifier stored in the matrix / picker (e.g. anthropic-web-search)
functionAbstract function the capability fulfils (e.g. web_search). Capabilities sharing a function are mutually exclusive in the picker — you pick one provider to fulfil a function.
providerThe vendor that executes it (OPENAI / ANTHROPIC / GEMINI / ANY)
categoryCoarse grouping for visual layout (Web, Code, Media, Reasoning…)
ownsTurnWhen true, the capability takes the whole turn (e.g. Computer Use, Realtime Voice)
valueType / optionsFor REQUEST_OPTION rows: BOOLEAN toggle, or SELECT over options

The merged list is served by GET /api/capability/registry; both UIs render from it.


TOOL capabilities (provider-native)

These are the server-side tools a model invokes during a turn, grouped by abstract function. Within a function you choose one provider.

FunctionOpenAIAnthropicGemini
Web searchopenai-web-searchanthropic-web-searchgemini-google-search (grounding)
Web fetch / URL contextanthropic-web-fetchgemini-url-context
Code executionopenai-code-interpreteranthropic-code-executiongemini-code-execution
Image generationopenai-image-generationgemini-image-generation
Computer use (owns turn)openai-computer-useanthropic-computer-usegemini-computer-use
Remote MCPopenai-mcpanthropic-mcp
Text editoranthropic-text-editor
Bashanthropic-bash
Memoryanthropic-memory
Realtime voice (owns turn)openai-realtime-voice
Owns-turn capabilities

Computer Use and Realtime Voice take the entire turn rather than coexisting with other tools. Computer Use across all three vendors runs through one vendor-neutral TurComputerUseDriver seam and ships against a no-op driver — it is matrix-selectable without bundling a browser, and only acts when a real driver bean is configured. See Tool Calling and AI Agents.


REQUEST_OPTION capabilities

Request options never appear in the tool picker — they tune how the call is made and render as toggles/dropdowns on the agent's Request Options page. They are stored per-agent as a JSON map (requestOptionsJson) keyed by capability key.

KeyLabelProviderType
reasoning-effortReasoning EffortOpenAISELECT: minimal / low / medium / high
reasoning-summaryReasoning SummaryOpenAISELECT: auto / concise / detailed
logprobsLog ProbabilitiesOpenAIboolean
structured-outputsStructured OutputsAnyboolean
predicted-outputsPredicted OutputsOpenAIboolean
service-tierService TierOpenAISELECT: auto / default / flex / priority
token-countingToken CountingAnthropicboolean
stored-completionsStored CompletionsOpenAIboolean
citationsCitationsAnthropicboolean
native-pdfNative PDF GroundingAnthropicboolean
context-editingContext EditingAnthropicboolean
compactionCompactionAnthropicboolean
moderationModeration Pre-filterOpenAIboolean
safety-identifierSafety IdentifierOpenAIboolean
gemini-context-cacheContext CachingGeminiboolean
openai-backgroundBackground ModeOpenAIboolean
anthropic-extended-thinkingExtended ThinkingAnthropicboolean
A toggle is a home, not a wire

Switching a request option on stores your choice; the feature engages when the corresponding provider request-builder reads its key from requestOptionsJson. Several of these (citations, native PDF, context caching, extended thinking, background mode) are documented in depth on RAG, Tool Calling, and Generative AI & LLM Configuration.


The union tool loop

When an agent mixes provider-native tools with Turing's own (DSL search, RAG, web crawler…) and MCP tools, they all run in one tool loop rather than competing. The resolver:

  • intersects the agent's selected capabilities with what the instance allows;
  • adds the agent's coexisting Turing/MCP/custom tools — dropping any Turing tool whose abstract function is already claimed by a selected provider-native pick (so you don't get both search_images and native image_generation fighting over the same function);
  • hands the combined set to the vendor's native chat path (OpenAI Responses function tools, Anthropic tool_use/tool_result).
Legacy agents are untouched

An agent whose nativeCapabilities is null (never opened the picker) keeps the pre-capability behaviour exactly — all of the instance's enabled capabilities, zero Turing tools. The two-gate intersection only takes over once the picker writes a selection. Existing agents change nothing until you choose to.


Admin & API reference

Instance capability matrix

The admin gate, on the LLM instance edit form (existing instances only; rows are filtered to the vendor's plugin type).

MethodEndpointPurpose
GET/api/llm/{instanceId}/capabilityList capabilities and their enabled state for an instance
PUT/api/llm/{instanceId}/capability/{key}Enable/disable a capability (body: enabled, optional configJson)
DELETE/api/llm/{instanceId}/capability/{key}Remove a capability row

configJson carries per-capability settings — e.g. the Anthropic MCP connector's serverUrl / serverLabel / authToken / allowedTools.

Registry

MethodEndpointPurpose
GET/api/capability/registryThe full tagged descriptor list both UIs render from
GET/api/capability/matrixPer-instance capability rows (instance id, title, plugin type, enabled keys)
Don't confuse with "Supported Capabilities"

The instance form's free-text Supported Capabilities field (e.g. RESPONSE_FORMAT_JSON_SCHEMA) is a different, unrelated thing — it is not the native-capability matrix. See LLM Instances → Advanced Options.


PageDescription
LLM InstancesWhere the instance capability matrix lives, plus the 11 vendors
Tool CallingTuring's own native tools and how they coexist with provider tools
AI AgentsComposing an agent from an LLM, tools, and capabilities
MCP ServersRemote tool servers (the mcp capability)
Generative AI & LLM ConfigurationHow capabilities fit the broader GenAI surface