Passer au contenu principal

send() et on() d’une Session

sendAndWait() renvoie immédiatement la réponse et reste simple, mais vous ne récupérez que le dernier message de l’assistant.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

Copilot::start(function (CopilotSession $session) {
    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');
    dump($response->content());
});
Pour recevoir aussi les messages intermédiaires, enregistrez un listener avec on().
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessage()) {
            dump($event->content());
        } else {
            dump($event);
        }
    });

    $message_id = $session->send(prompt: 'Tell me something about Laravel.');

    // Boucle en attente de réception des messages
    $session->wait(timeout: 60.0);
});
Comme cela peut être moins clair en PHP, la combinaison de on() et sendAndWait() est recommandée.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessage()) {
            dump($event->content());
        } else {
            dump($event);
        }
    });

    $response = $session->sendAndWait(prompt: 'Tell me something about Laravel.');

    // La boucle d'attente est déjà gérée par sendAndWait(), le dernier message est donc arrivé ici.
    // Les messages intermédiaires ont été reçus dans on() ci-dessus.

    // Le message final renvoyé par sendAndWait n'est pas nécessaire.
    // dump($response->content());
});

Cibler un type d’événement précis dans on()

Vous pouvez ne vous abonner qu’à un type précis en passant l’enum SessionEventType ou une chaîne.
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Types\SessionEvent;

$session->on(SessionEventType::ASSISTANT_MESSAGE, function (SessionEvent $event): void {
    dump($event->content());
});

$session->on('assistant.message', function (SessionEvent $event): void {
    dump($event->content());
});

S’abonner à tous les types d’événements

Sans type spécifié, tout est reçu.
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Types\SessionEvent;

$session->on(function (SessionEvent $event): void {
});

// Vous pouvez aussi utiliser un argument nommé
$session->on(handler: function (SessionEvent $event): void {
});

// Un type dynamique acceptant null est également possible.
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026