# Configuration

## Arguments nommés

```php
$relai = new RelaiClient(
    baseUrl: 'http://localhost:3000',
    token: getenv('RELAI_APP_TOKEN') ?: '',
    appSlug: 'demo',
    timeoutSeconds: 30,
    defaultProvider: 'ollama',
    defaultModel: null,
    headers: ['X-Client-Version' => 'myapp/1.0'],
);
```

## Objet d'options

```php
$options = new RelaiClientOptions(
    baseUrl: 'http://localhost:3000',
    token: getenv('RELAI_APP_TOKEN') ?: '',
    appSlug: 'demo',
);

$relai = new RelaiClient($options);
```

| Option | Requise | Défaut | Description |
|---|---:|---:|---|
| `baseUrl` | oui | — | URL HTTP(S) absolue, sans `/api/v1` |
| `token` | oui | — | token applicatif bearer |
| `appSlug` | pour chat/structured | — | doit correspondre au token |
| `timeoutSeconds` | non | `30` | timeout Guzzle complet |
| `defaultProvider` | non | Core | provider chat/structured |
| `defaultModel` | non | Core/provider | modèle chat/structured |
| `headers` | non | `[]` | headers additionnels non réservés |

Précédence : valeur du payload, défaut du client, défaut du Core. `Authorization`,
`Accept` et `Content-Type` ne peuvent pas être remplacés par `headers`.

Le constructeur valide l'URL, le token, le timeout et les headers sans faire d'appel
réseau. N'utilisez pas simultanément un objet `RelaiClientOptions` et les options
individuelles.
