> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Limites de crédits IA de session

> Définissez une limite de crédits IA sur les sessions Copilot avec sessionLimits, et gérez les événements liés aux limites ainsi que les invites de limite épuisée.

Utilisez `sessionLimits` pour définir une limite souple de crédits IA pour la fenêtre de comptabilisation en cours d'une session Copilot. Vous pouvez la définir aussi bien à la création qu'à la reprise d'une session.

## Définir une limite

Passez la limite à `maxAiCredits` sur `SessionLimitsConfig`. La consommation est vérifiée à la fin de chaque appel au modèle : une seule réponse peut donc dépasser la valeur configurée. Une fois la limite dépassée, le runtime bloque l'appel au modèle suivant.

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\ResumeSessionConfig;
use Revolution\Copilot\Types\Rpc\SessionLimitsConfig;
use Revolution\Copilot\Types\SessionConfig;

Copilot::start(function (CopilotSession $session) {
    $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: new SessionConfig(
    sessionLimits: new SessionLimitsConfig(maxAiCredits: 30.0),
));

Copilot::client()->resumeSession(
    'existing-session-id',
    new ResumeSessionConfig(
        sessionLimits: new SessionLimitsConfig(maxAiCredits: 30.0),
    ),
);
```

`SessionConfig` et `ResumeSessionConfig` acceptent tous deux `sessionLimits` sous la forme d'une instance de `SessionLimitsConfig` ou d'un tableau.

## Événements de limite

Écoutez les événements de session pour réagir aux changements de limite et pour solliciter l'utilisateur lorsque la limite est atteinte.

| Événement | Déclenchement | Données principales |
| - | - | - |
| `session.session_limits_changed` (`SessionEventType::SESSION_SESSION_LIMITS_CHANGED`) | Les limites effectives de la session changent. Si `sessionLimits` vaut `null`, aucune limite ne s'applique. | `sessionLimits.maxAiCredits` (facultatif) |
| `session.usage_checkpoint` (`SessionEventType::SESSION_USAGE_CHECKPOINT`) | Le runtime enregistre la consommation agrégée pour la reprise ou la comptabilisation. | `totalNanoAiu`, `totalPremiumRequests` (facultatif) |
| `session_limits_exhausted.requested` (`SessionEventType::SESSION_LIMITS_EXHAUSTED_REQUESTED`) | La limite est atteinte et l'utilisateur doit décider avant que la session ne continue. | `requestId`, `maxAiCredits`, `usedAiCredits` |
| `session_limits_exhausted.completed` (`SessionEventType::SESSION_LIMITS_EXHAUSTED_COMPLETED`) | L'invite de limite épuisée est résolue. | `requestId`, `response.action`, `response.additionalAiCredits` (facultatif), `response.maxAiCredits` (facultatif) |

Par exemple, lorsque vous recevez `SESSION_LIMITS_EXHAUSTED_REQUESTED`, utilisez les données de l'événement pour afficher une interface de confirmation.

```php theme={null}
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Types\SessionEvent;

$session->on(function (SessionEvent $event): void {
    if ($event->is(SessionEventType::SESSION_LIMITS_EXHAUSTED_REQUESTED)) {
        $requestId = $event->data['requestId'];
        $maxAiCredits = $event->data['maxAiCredits'];
        $usedAiCredits = $event->data['usedAiCredits'];

        // Affiche une interface de confirmation à l'aide de $requestId
    }
});
```

## Répondre à une limite épuisée

Renvoyez le choix de l'utilisateur au runtime avec `handlePendingSessionLimitsExhausted()`. Définissez `action` sur un cas de `SessionLimitsExhaustedResponseAction`.

```php theme={null}
use Revolution\Copilot\Enums\SessionLimitsExhaustedResponseAction;
use Revolution\Copilot\Types\Rpc\UIHandlePendingSessionLimitsExhaustedRequest;
use Revolution\Copilot\Types\Rpc\UISessionLimitsExhaustedResponse;

$session->rpc()->ui()->handlePendingSessionLimitsExhausted(
    new UIHandlePendingSessionLimitsExhaustedRequest(
        requestId: $requestId,
        response: new UISessionLimitsExhaustedResponse(
            action: SessionLimitsExhaustedResponseAction::Add,
            additionalAiCredits: 10.0,
        ),
    ),
);
```

Les actions disponibles sont :

* `Add` : ajoute les crédits IA indiqués à la limite actuelle. Définissez `additionalAiCredits`.
* `Set` : remplace la limite par une nouvelle valeur absolue. Définissez `maxAiCredits`.
* `Unset` : supprime la limite de session.
* `Cancel` : annule la requête au modèle bloquée sans modifier la limite.

> [!WARNING]
>
> Le flux d'invite de limite épuisée utilisant `session_limits_exhausted.requested` et `session_limits_exhausted.completed`, ainsi que l'API de réponse associée, sont expérimentaux. Ils peuvent être modifiés ou supprimés à l'avenir.


## Related topics

- [Laravel Agent Detector — package de détection d'agents IA](https://kawax.biz/fr/blog/agent-detector-introduction.md)
- [Les middlewares d'agent de Laravel AI SDK](https://kawax.biz/fr/advanced/ai-sdk-agent-middleware.md)
- [Les agents IA passent du code « correct » au code « idiomatique Laravel » — le prochain cap de Boost Benchmarks](https://kawax.biz/fr/blog/boost-benchmarks-idiomatic-laravel.md)
- [Laravel MCP](https://kawax.biz/fr/mcp.md)
- [Laravel Fortify et les starter kits](https://kawax.biz/fr/advanced/fortify.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.