Saltar al contenido principal

SessionEvent

Todos los mensajes que llegan desde Copilot son de la clase Revolution\Copilot\Types\SessionEvent. Como es la clase que más se usa, incluye funcionalidades cómodas al estilo Laravel.

content()

Obtiene el mensaje de respuesta más importante de la IA.
$response = Copilot::run('1 + 1');
echo $response->content(); // '2'
// content() puede ser null
Con la conversión implícita a string mediante __toString() también se devuelve el contenido del mensaje.
echo (string) $response; // '2'
// Esta forma no puede ser null

Detección del event type

Puedes usar isAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta(). Si hay algún event type que se usa mucho, puede que se añadan más helpers. Con is() puedes comprobar cualquier EventType.
use Revolution\Copilot\Enums\SessionEventType;

if ($response->is(SessionEventType::HOOK_START)) {
    // Procesado del evento de inicio de hook
}
type() devuelve el valor string del enum SessionEventType.
echo $response->type(); // 'assistant.message'

failed() / successful()

Cuando el tipo de evento es SESSION_ERROR, failed() devuelve true. successful() es lo contrario. Para adecuarse al estilo de nombres de Laravel, se renombró desde isError().

throw()

Igual que en las APIs HTTP y Process de Laravel, el error se conserva y puedes lanzarlo como excepción con throw(). Si no hay error, no hace nada, así que puedes escribir:
$content = $response->throw()->content();
Cuando el tipo de evento es SESSION_ERROR, se lanza Revolution\Copilot\Exceptions\SessionErrorException. En caso de timeout, se lanza Revolution\Copilot\Exceptions\SessionTimeoutException. Ante un error JSON-RPC, se lanza Revolution\Copilot\Exceptions\JsonRpcException.

Conditionable

Puedes usar when() y unless().
$response->when($response->isAssistantMessage(), function (SessionEvent $event) {
    // Procesado cuando es un mensaje del assistant
});

Dumpable

Puedes usar dump() y dd().
$response->dump();

Tappable

Puedes usar tap().
return $response->tap(function (SessionEvent $event) {
    // Alguna operación
    info($event->content());
});

InteractsWithData

Esta función solo se aplica a la propiedad $data de SessionEvent. Puedes usar helpers habituales como all(), has(), only(), collect(). Para más detalles, consulta InteractsWithData. Como la estructura de $data de SessionEvent varía según el EventType, es útil para acceder a los valores según el evento. content() también usa InteractsWithData internamente.
return $this->data('content', $default);

// Si indicas un default, content() no será null
echo $response->content('');

toArray() / toJson()

Puedes convertir todo el SessionEvent en array o JSON.
$array = $response->toArray();
$json = $response->toJson();
No hay un método collect() para el evento completo. Se debe a que $data tiene el collect() de InteractsWithData. Si quieres operar sobre todo el evento como colección, usa el helper collect() de Laravel.
$collect = collect($response->toArray());

broadcast() / broadcastNow()

Puedes emitir con la misma interfaz que StreamEvent de Laravel AI SDK. En AI SDK se usa durante el streaming, pero en SessionEvent puedes usarlo con cualquier EventType.
use Illuminate\Broadcasting\Channel;

$event->broadcast(new Channel('channel-name'));
broadcastNow() emite inmediatamente, sin pasar por la cola.
$event->broadcastNow(new Channel('channel-name'));
Ejemplo de uso durante el streaming:
use Illuminate\Broadcasting\Channel;
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->isAssistantMessageDelta()) {
            $event->broadcastNow(new Channel('copilot'));
        }
    });

    $session->sendAndWait(prompt: 'Tell me something about Laravel.');
}, config: new SessionConfig(streaming: true));
Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026