Vai al contenuto principale

send() e on() della Session

sendAndWait() è chiaro perché restituisce immediatamente la risposta, ma riceve solo l’ultimo messaggio dell’assistente.
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());
});
Se vuoi ricevere anche i messaggi intermedi, registra un listener eventi con 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.');

    // Attendi la ricezione dei messaggi in loop
    $session->wait(timeout: 60.0);
});
In PHP questo risulta poco intuitivo, quindi è consigliata la combinazione di on() e sendAndWait().
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.');

    // Il ciclo di attesa è gestito all'interno di sendAndWait(), quindi a questo punto è arrivato anche l'ultimo messaggio.
    // I messaggi intermedi vengono ricevuti dall'on() sopra.

    // L'ultimo messaggio di sendAndWait non serve.
    // dump($response->content());
});

Specificare un tipo di evento in on()

Puoi sottoscrivere solo un tipo di evento specificando l’enum SessionEventType o una stringa.
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());
});

Sottoscrivere tutti i tipi di evento

Se non specifichi il tipo, li sottoscrivi tutti.
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Types\SessionEvent;

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

// Puoi anche usare argomenti nominati
$session->on(handler: function (SessionEvent $event): void {
});

// È possibile anche una specifica dinamica che ammette null.
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026