DEEIX Chat splits model capability exposure into three independent controls: the model's default options, the option pass-through policy, and provider-native tools. This page shows the exact JSON fields, the real filter order, and how to verify each layer before rollout.

Where to find it#

  • Model defaults, controls, and native tools: Admin console > Models > create or edit a model > Model capabilities.
  • Parameter pass-through: Admin console > Conversation > Option passthrough.
  • Native tool billing: Admin console > Billing > Tool pricing.

Configure in that order. A control can only render what the model declares, and a declared option can only reach the provider if the pass-through policy allows its path.

How an option reaches the model#

Every chat request runs the same filter. The backend applies the steps in this order:

  1. Read the pass-through mode. If it is Disabled, stop here: neither user options nor model defaults are sent.
  2. Start from the model's defaultOptions and merge the user's saved options on top.
  3. For each path in lockedOptionPaths, overwrite the merged value with the value from defaultOptions. A locked path without a default value is ignored.
  4. Pull tools out of the merged options. Keep only tools that match an enabled entry in nativeTools (or the legacy nativeToolKeys) for the active protocol.
  5. Apply the policy. Allowlist copies only paths from default plus the active protocol key. Denylist keeps everything that remains.
  6. Delete every system-blocked path. In Denylist mode, also delete the paths in model_option_denied_paths.
  7. Sanitize values. OpenAI service_tier keeps only default, flex, or priority; image partial_images keeps only 0–3; xAI video fields are normalized.
  8. Reattach the filtered native tools under tools.

Two consequences matter. First, optionControls is read only by the chat page to draw the parameter panel; the backend never sends it. Second, a model's defaultOptions still passes through the policy, so in allowlist mode a default is dropped unless its path is also allowlisted.

Model capabilities JSON#

The visual editor writes these fields into the model's capabilities JSON.

FieldTypeMeaning
defaultOptionsobjectDefault request parameters, nested by path. Used when the user has no saved value; the pass-through policy still applies.
optionControlsarrayParameter panel controls. Each item is {path, type, label?, description?, options?}. type is text, select, number, or boolean; a select should include options.
lockedOptionPathsarrayPaths locked to the defaultOptions value. The user cannot change them.
nativeToolsarrayAllowed provider-native tools. Each item is {key, protocols, type, label, enabled, defaultEnabled, payload}.
nativeToolKeysarrayLegacy shorthand for catalog tools by key. Still read by the backend; the visual editor deletes it on save.
promptCacheobjectOpenAI prompt-cache settings: enabled, mode (implicit or explicit), and ttl (30m for explicit). Only for OpenAI Chat Completions and Responses routes.
image.streambooleanImage streaming. false disables it for image routes; the default is on.

Configure defaults and controls#

Model capabilities
  1. Open Models, then create a model or edit one.
  2. In the model form, open Model capabilities and choose Visual config (Recommended).
  3. On the Parameters tab, add a row per option.
  4. Fill Parameter with the real option path, for example temperature, reasoning.effort, or generationConfig.temperature.
  5. Fill Default value with a JSON value. It is written to defaultOptions and is also used as the request default.
  6. Fill Label and Description so the control is readable in chat.
  7. Choose a Type. For select, add comma-separated Options.
  8. Turn on Locked only when the value must stay fixed. A locked row must have a default value; the editor drops locked rows without one.

To set a default without showing a control, fill the default value and clear the label. To expose a control without a default, leave the default empty.

Use Advanced JSON only when you paste a full configuration or need a structure the form cannot express. If the model generates images, Image streaming calls toggles image.stream.

Model capabilities config

Configure native tools#

Official native tools
  1. Open Model capabilities > Official tools.
  2. Select a catalog tool and turn it on, or choose Custom official tool to add one.
  3. Fill the fields below.
FieldMeaning
Tool keyUnique identifier, for example openai.web_search.
Applicable protocolsOne or more protocols this definition applies to.
TypeTool type sent upstream, for example web_search or code_interpreter. Required unless payload already contains type.
Payload JSONProvider tool object. Must be a JSON object.
Default onAdds the tool to the model's default request options.
ConfigureExpands payload editing for the row.

The built-in catalog covers OpenAI web_search, web_search_preview, shell, image_generation, and code_interpreter; Anthropic web_search, web_fetch, code_execution, advisor, and tool_search; xAI web_search, x_search, and code_interpreter; and Google google_search, code_execution, and url_context.

If the page warns that the current route protocol is not adapted, the definition may not fit the model's source protocol. Force enabling passes the administrator configuration, so test it before release.

When a user hand-writes options.tools, only administrator-allowed official tools are preserved. Parameters on an allowed tool pass through; unknown tools and MCP or function-style tools cannot be injected through JSON. External tools belong in MCP, not here.

Configure the pass-through policy#

Open Conversation > Option passthrough.

Option passthrough
PolicyBehaviorWhen to use
AllowlistOnly listed paths pass; everything else is dropped.Production default.
DenylistEverything passes except the denylist and the system blocklist.Trusted internal users or debugging.
DisabledNo user options and no model defaults are sent.Strict cost or compliance control.

model_option_allowed_paths and model_option_denied_paths are JSON objects. Each key is a protocol; default applies to every protocol, and a protocol key adds paths for that protocol only. Paths use dot notation for nested fields, for example thinking.type or provider.order. A path with a space or an empty segment is ignored.

The system blocklist is always removed, in every mode, and cannot be allowlisted:

model, messages, input, instructions, prompt, system, systemInstruction, headers, api_key, apiKey, base_url, baseURL, stream, previous_response_id, prompt_cache_key, prompt_cache_options, prompt_cache_breakpoint, prompt_cache_retention.

Before saving, read Live preview. It lists the paths that pass (matched allowlist) and the paths that are filtered (matched denylist or system blocked). In denylist mode it shows the remaining fields as passed because they are not on the denylist.

Protocol keys#

The policy is evaluated per protocol. The current keys are:

KeyApplies to
defaultEvery protocol.
openai_chat_completionsOpenAI Chat Completions.
openai_responsesOpenAI Responses.
openai_image_generationsOpenAI image generation.
openai_image_editsOpenAI image editing.
anthropic_messagesAnthropic Messages.
gemini_generate_contentGoogle Generate Content.
google_image_generationGoogle image generation.
gemini_interactionsGoogle Interactions.
xai_responsesxAI Responses.
xai_imagexAI image generation.
xai_image_editsxAI image editing.
xai_videoxAI video generation.
xai_video_extensionsxAI video extension.
openrouter_chat_completionsOpenRouter Chat Completions.
openrouter_responsesOpenRouter Responses.
openrouter_imagesOpenRouter Images.

Put a path under default only when every protocol accepts it. Otherwise scope it to the protocol. Image routes commonly allow size, quality, background, input_fidelity, output_format, and resolution; chat routes commonly allow temperature, top_p, max_tokens, and reasoning.effort.

OpenAI service_tier accepts only default, flex, or priority. Any other value is omitted before the request is sent.

Configure native tool billing#

Open Billing > Tool pricing. Turn on Native tool billing, then set a per-call price per tool.

Native tool pricing
  • Prices are per call. A price of 0 disables billing for that tool but still records usage.
  • Only successfully executed tool calls are billed; failed calls are not.
  • Self-use mode records usage only.
  • Free models are exempt from native tool billing, but not from MCP tool pricing.
  • Model input and output produced around a tool call still follow model pricing.
  • If the upstream does not report a tool call count, no separate tool charge is created.

The switch and prices are stored in billing.native_tool_billing_enabled and billing.native_tool_pricing_json.

Verify the configuration#

Model configuration in chat
  1. In Models, run Test on the model to confirm the platform model and its sources work.
  2. Sign in as a normal user, start a conversation, and select the model.
  3. Open Model configuration and confirm the parameter controls, labels, and defaults.
  4. Change an allowed parameter, send a message, and confirm the result changes.
  5. Change a locked parameter and confirm it stays at the administrator default.
  6. Enable a native tool, send a message, and confirm the model can use it.
  7. Check the Logs and Billing for model usage, tool usage, and cost records.

For a team rollout, open a small set of low-risk paths and one or two tools first, then widen after the logs look correct.

Troubleshooting#

SymptomCauseFix
A parameter is missing in chatThe model has no matching optionControls, or the model is not visible to the user.Add the control and check model status and availability.
A parameter is visible but has no effectIts path is not allowed by the policy.Check the allowlist or denylist and confirm with Live preview.
A model default is not sentIn allowlist mode the default path is not allowlisted.Add the path to model_option_allowed_paths.
A locked parameter changesThe path has no defaultOptions value.Give the locked path a default value.
A native tool is missing in chatThe tool is off, not Default on, or its protocol does not match.Check Official tools, Applicable protocols, and Default on.
A tool works but is not billedBilling is off, the price is 0, the model is free, or no tool count was returned.Enable billing, set a price, and check usage records.
A user-written tool is ignoredIt is not an allowed official tool, or it is MCP/function style.Enable the official tool in the model, or configure it under MCP.

Reference#

ItemKey or field
Pass-through modechat.model_option_policy_mode (allowlist, denylist, disabled)
Allowlistchat.model_option_allowed_paths
Denylistchat.model_option_denied_paths
Native tool billing switchbilling.native_tool_billing_enabled
Native tool pricesbilling.native_tool_pricing_json
Capability JSONdefaultOptions, optionControls, lockedOptionPaths, nativeTools, nativeToolKeys, promptCache, image.stream