---
title: "ADR-006: Option Objects vs Arrays"
manual: "TYPO3 LLM Extension"
version: "0.35"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-llm:adr-006@0.35"
source: "Adr/Adr006OptionObjectsVsArrays.rst"
modified: "2026-09-16T22:09:16+00:00"
---

# ADR-006: Option Objects vs Arrays

-   *Status:* Superseded
-   *Date:* 2024-12
-   *Superseded:* 2024-12 by [ADR-011](https://docs.typo3.org/permalink/netresearch/nr-llm:adr-011@0.35)
-   *Authors:* Netresearch DTT GmbH

## Context

Method signatures like `chat(array $messages, array $options)` lack:

-   Type safety and validation.
-   IDE autocompletion.
-   Documentation of available options.
-   Factory methods for common configurations.

## Decision

Introduce **Option Objects** (initially with array backwards compatibility):

**Example: Using ChatOptions**

```php
// Option objects only
$options = ChatOptions::creative()
    ->withMaxTokens(2000)
    ->withSystemPrompt('Be creative');

$response = $llmManager->chat($messages, $options);
```

Implementation:

-   Pure object signatures: `?ChatOptions`.
-   Factory presets: `factual()`, `creative()`, `json()`.
-   Fluent builder pattern.
-   Validation in constructors.

## Consequences

**Positive:**

-   ● IDE autocompletion for options.
-   ● Built-in validation.
-   ● Convenient factory presets.
-   ●● Type safety enforced.
-   ● Single consistent API.

**Negative:**

-   ◑ Migration required for existing code.
-   ◑ No array syntax available.

**Net Score:** +5.5 (Strong positive impact - developer
experience improvements with backwards compatibility)
