SessionEvent
Alle Nachrichten von Copilot sind Instanzen der KlasseRevolution\Copilot\Types\SessionEvent.
Da sie am häufigsten verwendet wird, wurden Laravel-typische Komfortfunktionen ergänzt.
content()
Ruft die wichtigste Antwortnachricht der KI ab.
__toString() liefert den Nachrichteninhalt zurück.
Event-Typ prüfen
isAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta() stehen zur Verfügung.
Für häufig genutzte Event-Typen können weitere Helper hinzugefügt werden.
Mit is() können Sie einen beliebigen EventType prüfen.
type() gibt den String-Wert des Enums SessionEventType zurück.
failed() / successful()
Wenn der Event-Typ SESSION_ERROR ist, wird failed() zu true.
successful() ist die Negation.
Zur Ausrichtung an Laravel-Konventionen wurde die Methode von isError() umbenannt.
throw()
Wie bei Laravels HTTP- und Process-API wird der Fehler beibehalten und kann via throw() als Exception geworfen werden.
Da bei fehlerfreiem Zustand nichts passiert, lässt sich schreiben:
SESSION_ERROR wird Revolution\Copilot\Exceptions\SessionErrorException geworfen.
Bei Timeout wird Revolution\Copilot\Exceptions\SessionTimeoutException geworfen.
Bei JSON-RPC-Fehlern wird Revolution\Copilot\Exceptions\JsonRpcException geworfen.
Conditionable
when() und unless() sind verfügbar.
Dumpable
dump() und dd() sind verfügbar.
Tappable
tap() ist verfügbar.
InteractsWithData
Diese Funktion bezieht sich ausschließlich auf die Eigenschaft$data von SessionEvent.
Sie können vertraute Helper wie all(), has(), only(), collect() verwenden.
Details siehe InteractsWithData.
Da die Struktur von $data je nach EventType unterschiedlich ist, ist dies für den ereignisspezifischen Zugriff auf Werte hilfreich.
Auch content() verwendet intern InteractsWithData.
toArray() / toJson()
Sie können den gesamten SessionEvent in ein Array oder JSON umwandeln.
collect()-Methode für das gesamte Event existiert nicht.
Grund: $data hat bereits collect() aus InteractsWithData.
Wenn Sie das gesamte Event mit Collection-Operationen bearbeiten möchten, nutzen Sie den Laravel-Helper collect().
broadcast() / broadcastNow()
Sie können mit derselben Schnittstelle wie beim StreamEvent des Laravel AI SDK broadcasten.
Beim AI SDK wird es beim Streaming verwendet, beim SessionEvent aber für beliebige EventTypes.
broadcastNow() broadcastet sofort, ohne den Weg über die Queue.
Event-Metadaten
Ab Copilot CLI 1.0.99 enthalten einige Events zusätzliche Metadaten. Das SDK speichert diese Werte unverändert in$data, sodass Sie über $event->data oder die InteractsWithData-Helfer darauf zugreifen können.
Compaction-Events
data.compactionAttemptId in session.compaction_start und session.compaction_complete ist eine ID, die das Start-Event mit dem Abschluss-Event verknüpft.
Wenn ein Modellwechsel beteiligt ist, ist zusätzlich switchTargetModel enthalten.
Wenn das Zielmodell ein anderes Prompt-Token-Budget hat, ist zusätzlich targetPromptTokenLimit enthalten.
Das Abschluss-Event kann unter anderem initialModel, model, outcome, outcomeReason, failureReason und tokenAccountingBasis enthalten.
outcome und die Grund-Felder sind Strings, für die künftig neue Werte hinzukommen können.
Behandeln Sie sie nicht als festes Enum und bewahren Sie unbekannte Werte unverändert auf.
Ein fehlendes Feld bedeutet, dass kein Wert bereitgestellt wurde. Leiten Sie keinen Standardwert ab.
Nutzung bei der Tool-Ausführung
data.toolUsage in tool.execution_complete ist die vom Provider gemeldete Nutzung für Tool-Operationen, die der Runtime gehören.
Sie ist getrennt von assistant.usage des Konversationsmodells.
Auch wenn die Tool-Ausführung fehlschlägt, kann bereits gemeldete Nutzung enthalten sein.
toolUsage.model ist das von der Tool-Operation angeforderte Modell, nicht das Konversationsmodell.
Token-Anzahlen und Abrechnungsinformationen werden möglicherweise nur teilweise bereitgestellt.
Ein fehlendes Feld bedeutet „nicht verfügbar“, nicht null Tokens.
inputTokensDetails und outputTokensDetails sind Aufschlüsselungen, die in den jeweiligen Gesamtwerten enthalten sind. Addieren Sie sie nicht zu den Gesamtwerten.
toolUsage.requestId ist eine ID, mit der die Runtime doppelte Zustellungen und Wiederholungen ausschließt. Sie ist keine Upstream-Abrechnungskennung.
Auch data.toolUsageRequestIds in session.usage_checkpoint und session.shutdown sind runtime-interne Deduplizierungs-Metadaten, die die im Abrechnungs-Snapshot enthaltenen Tool-Operationen identifizieren.
Behandeln Sie sie nicht als Upstream-Abrechnungs-IDs.
Fusion-Resolved-Events
data.selectedRuleId in session.fusion_resolved identifiziert die Serverregel, wenn das serverseitige Routing einen anderen Workflow als die lokale Regel gewählt hat.
Ohne Ersetzung wird das Feld weggelassen.
Events zum Laden der Tools eines MCP-Servers
SessionEventType::SESSION_MCP_SERVER_TOOLS_LOADED (session.mcp_server_tools_loaded) wird ausgelöst, wenn die Tool-Liste eines MCP-Servers verfügbar wird.
Es ist ein ephemeres Event, das einmal pro Verbindung ausgelöst und nicht persistiert wird.
Es enthält data.serverName und data.toolCount.
Dass ein MCP-Server connected erreicht, bedeutet nicht, dass seine Tools fertig geladen sind.
Nachdem der Server den verbundenen Zustand verlassen hat, behandeln Sie ihn als ladend, bis Sie dieses Event erneut empfangen.
Bei Verwendung zwischengespeicherter Tools kann dieses Event vor connected eintreffen.
Aktuelle Informationen finden Sie im GitHub-Repository.