---
title: "Option classes"
manual: "TYPO3 LLM Extension"
version: "0.35"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:api-options@0.35"
source: "Api/OptionClasses.rst"
modified: "2026-09-16T22:09:16+00:00"
---

# Option classes

## ChatOptions

-   **class ChatOptions**

    -   *Fully qualified name:* `\Netresearch\NrLlm\Service\Option\ChatOptions`

    Typed options for chat operations.

    -   **static factual()**

        Create options optimized for factual responses (temperature: 0.1).

        -   *returns:* ChatOptions

    -   **static creative()**

        Create options for creative content (temperature: 1.2).

        -   *returns:* ChatOptions

    -   **static balanced()**

        Create balanced options (temperature: 0.7).

        -   *returns:* ChatOptions

    -   **static json()**

        Create options for JSON output format.

        -   *returns:* ChatOptions

    -   **static code()**

        Create options optimized for code generation.

        -   *returns:* ChatOptions

    -   **withTemperature(float $temperature) : self**

        Set temperature (0.0 - 2.0).

    -   **withMaxTokens(int $maxTokens) : self**

        Set maximum output tokens.

    -   **withTopP(float $topP) : self**

        Set nucleus sampling parameter.

    -   **withFrequencyPenalty(float $penalty) : self**

        Set frequency penalty (-2.0 to 2.0).

    -   **withPresencePenalty(float $penalty) : self**

        Set presence penalty (-2.0 to 2.0).

    -   **withSystemPrompt(string $prompt) : self**

        Set system prompt.

    -   **withResponseFormat(string $format) : self**

        Request an output format: `text`, `json` or `markdown`.
        `json` activates the provider's native JSON mode on every
        adapter ([ADR-128](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-128@0.35)).

    -   **withResponseSchema(array $schema) : self**

        Attach a strict-subset JSON schema ([ADR-126](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-126@0.35)) the
        provider should enforce natively where it can. Set automatically
        by `completeStructured()`; the local strict validation remains
        authoritative either way.

    -   **withStopSequences(array $sequences) : self**

        Set stop sequences the model must not generate past.

    -   **withProvider(string $provider) : self**

        Set provider (openai, claude, gemini).

    -   **withModel(string $model) : self**

        Set specific model.

    -   **toArray() : array**

        Convert to array format.
