ADR-006: Option Objects vs Arrays
Status
Superseded by ADR-011 (2024-12)
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
// Option objects only
$options = ChatOptions::creative()
->withMaxTokens(2000)
->withSystemPrompt('Be creative');
$response = $llmManager->chat($messages, $options);
Copied!
Implementation:
- Pure object signatures:
?Chat.Options - 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)