---
title: "Model fields"
manual: "LLM Foundation"
version: "0.44"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:configuration-model@0.44"
source: "Configuration/ModelFields.rst"
rendered: "2026-11-12T17:35:48+00:00"
---

# Model fields {#configuration-model}

Models represent specific LLM models available
through a provider.

![Model list showing capabilities and pricing](../Images/backend-models.png)

## Field inventory {#configuration-model-inventory}

| Field | TCA type | Default | Required in TCA | Effect |
| --- | --- | --- | --- | --- |
| `hidden` | check | `0` | no | TYPO3 record visibility; separate from runtime is_active. |
| `identifier` | input | `unset in TCA` | yes | Unique programmatic identifier. |
| `name` | input | `unset in TCA` | yes | Backend display name. |
| `description` | text | `unset in TCA` | no | Description for operators. |
| `provider_uid` | select | `0` | yes | Provider record that owns this model. |
| `model_id` | user | `unset in TCA` | yes | Provider model ID or Azure deployment name. |
| `context_length` | number | `0` | no | Context-window size; zero means unknown. |
| `max_output_tokens` | number | `0` | no | Model output cap used as a default when the configuration inherits. |
| `dimensions` | number | `0` | no | Embedding vector size; zero means unknown. |
| `default_timeout` | number | `120` | no | Model request timeout in seconds. |
| `capabilities` | select | `"chat"` | no | Declared capability vocabulary; see the table below. |
| `capabilities_discovered` | input | `unset in TCA` | no | Last discovered capability set; provenance metadata. |
| `capabilities_confirmed_at` | number | `unset in TCA` | no | Operator confirmation timestamp; provenance metadata. |
| `capabilities_source` | input | `unset in TCA` | no | Discovery source; does not prove the operation succeeded. |
| `reasoning_override` | select | `""` | no | Operator: reasoning model yes/no; empty defers (ADR-275). |
| `reasoning_efforts_override` | select | `""` | no | Operator: accepted reasoning efforts; empty defers. |
| `tool_route_override` | select | `""` | no | Operator: tool calls via Chat Completions or Responses. |
| `reasoning_discovered` | input | `""` | no | Discovered reasoning flag; empty means not measured. |
| `reasoning_efforts_discovered` | input | `""` | no | Discovered effort scale; only from the provider's own list. |
| `reasoning_source` | input | `""` | no | `discovery` or `third_party_catalog`. |
| `reasoning_confirmed_at` | number | `0` | no | When the discovered reasoning profile was recorded. |
| `cost_input` | number | `0` | no | Input price in cents per million tokens; zero is unpriced. |
| `cost_output` | number | `0` | no | Output price in cents per million tokens; zero is unpriced. |
| `is_active` | check | `1` | no | Whether the record is eligible for runtime use. |
| `is_default` | check | `0` | no | Installation default configuration, or default model within its provider. |

## Required {#configuration-model-required}

-   **identifier (model)**

    -   *Type:* string
    -   *Required:* true

    Unique slug (e.g., `gpt-5`, `claude-sonnet`).

-   **name (model)**

    -   *Type:* string
    -   *Required:* true

    Display name (e.g., `GPT-5 (128K)`).

-   **provider**

    -   *Type:* reference
    -   *Required:* true

    Reference to the parent provider.

-   **model_id**

    -   *Type:* string
    -   *Required:* true

    The API model identifier as the provider expects
    it (e.g., `gpt-5.3-instant`,
    `claude-sonnet-4-6`, `gemini-3-flash`).

<a id="confval-model-max-output-tokens"></a>

## Optional {#configuration-model-optional}

-   **context_length**

    -   *Type:* integer
    -   *Default:* 0 (unknown)

    Maximum context window in tokens.

-   **max_output_tokens**

    -   *Type:* integer
    -   *Default:* 0 (unknown)

    Maximum output tokens. Acts as the default
    output cap for requests whose configuration
    sets [max_tokens](https://docs.typo3.org/permalink/netresearch/nr-llm:confval-config-max-tokens@0.44)
    to `0` and whose caller sent no per-call
    `max_tokens` option.

-   **dimensions**

    -   *Type:* integer
    -   *Default:* 0 (unknown)

    Embedding vector dimensionality. Acts as the
    default vector size for embedding requests
    whose options left `dimensions` unset.

-   **capabilities**

    -   *Type:* string (CSV)
    -   *Default:* chat

    Stored capability declarations, not a proof that an adapter implements an
    operation. The vocabulary is complete below. Require only capabilities
    that the chosen discovery path or operator actually populated.

## Capability vocabulary {#configuration-model-capability-vocabulary}

| Value | Meaning and limits |
| --- | --- |
| `chat` | Text conversation; seeded by discoverers. Used by chat eligibility. |
| `completion` | Alias for chat semantics; not seeded automatically. Prefer `chat`. |
| `embeddings` | Vector generation; seeded by Gemini/Ollama discovery. Verify other models. |
| `vision` | Image input; reported or catalogue-derived. Used by vision eligibility. |
| `streaming` | Streaming declaration; missing provenance does not prove no support. |
| `tools` | Tool-calling declaration; used by tool-operation eligibility. |
| `json_mode` | Request-format vocabulary; not seeded or consulted as an operation gate. |
| `audio` | Chat audio modality declaration; current message carriers do not carry arbitrary audio content parts. |
| `image` | Specialized image generation; separate from criteria-mode text calls. |
| `text_to_speech` | Specialized speech synthesis; separate service API. |
| `transcription` | Specialized audio transcription; separate service API. |
| `decision` | Native typed decisions; populated by the decision discoverers. |

Provenance distinguishes reported values, bundled catalogue knowledge,
assumptions and operator confirmation. A checkbox alone is not a successful
provider test. Operation enforcement follows the configured routing policy;
see [Managing models](https://docs.typo3.org/permalink/netresearch/nr-llm:administration-models@0.44).

## Reasoning profile {#configuration-model-reasoning-profile}

The OpenAI adapter decides per model whether it is a reasoning model (then
`temperature` and the other sampling parameters are not sent), which
`reasoning_effort` values it accepts, and whether tool calls go through
Chat Completions or Responses. Each of the three is resolved on its own, in
this order ([ADR-275](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-275@0.44)):

1.  the operator field on the model record, when set;
1.  the bundled table, for an exact model name or a dated snapshot of it;
1.  the discovered profile stored on the record;
1.  the family default in code (for example every other `gpt-6` id is a
    reasoning model whose tools go through Responses), else a
    non-reasoning model.

The tool route skips the discovered profile: no discovery source states it.
The resolved profile applies to a request for the record's own model id
only; a request that names another model id is sent by the table alone.

-   **reasoning_override**

    -   *Type:* string
    -   *Default:* empty

    `yes` or `no`. Empty defers to the table, the discovered profile and
    the family default. Also decides whether the configuration form offers a
    temperature for the model.

-   **reasoning_efforts_override**

    -   *Type:* string (CSV)
    -   *Default:* empty

    The `reasoning_effort` values the model accepts. A requested effort
    outside the list is moved to the nearest one. Empty defers.

-   **tool_route_override**

    -   *Type:* string
    -   *Default:* empty

    `chat_completions` or `responses`. Responses is used only on
    `api.openai.com`, and a configuration's `openai_tools_transport`
    option still wins.

The four discovered fields (`reasoning_discovered`,
`reasoning_efforts_discovered`, `reasoning_source`,
`reasoning_confirmed_at`) are read-only. **Confirm capabilities**
writes them, never the operator fields, and only when the run stated
something; empty means "not measured", not "no". See
[Reasoning models the extension does not know yet](https://docs.typo3.org/permalink/netresearch/nr-llm:administration-models-reasoning@0.44).

-   **cost_input**

    -   *Type:* decimal
    -   *Default:* 0

    Cost per 1M input tokens in cents, with up
    to two decimals — 0.042 USD is `4.2`.
    `0` means unpriced: no cost is recorded.

-   **cost_output**

    -   *Type:* decimal
    -   *Default:* 0

    Cost per 1M output tokens in cents, with up
    to two decimals.

-   **is_default**

    -   *Type:* boolean
    -   *Default:* false

    Mark as default model for this provider.
