SessionEvent
Tutti i messaggi provenienti da Copilot sono istanze diRevolution\Copilot\Types\SessionEvent.
Poiché questa classe è la più utilizzata, sono state aggiunte funzionalità comode in stile Laravel.
content()
Recupera il messaggio di risposta più importante dell’AI.
__toString() restituisce il contenuto del messaggio.
Verifica del tipo di evento
Sono disponibiliisAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta().
Per i tipi di evento più usati potrebbero essere aggiunti ulteriori helper.
Con is() puoi verificare qualsiasi EventType.
type() restituisce il valore stringa dell’enum SessionEventType.
failed() / successful()
failed() è true quando il tipo di evento è SESSION_ERROR.
successful() è l’opposto.
Per allinearsi alle convenzioni di naming di Laravel, è stato rinominato da isError().
throw()
Come nelle API HTTP e Process di Laravel, gli errori sono conservati e puoi sollevarli come eccezione con throw().
Se non ci sono errori non fa nulla, quindi puoi scrivere così.
SESSION_ERROR, viene sollevata Revolution\Copilot\Exceptions\SessionErrorException.
In caso di timeout viene sollevata Revolution\Copilot\Exceptions\SessionTimeoutException.
Per errori JSON-RPC viene sollevata Revolution\Copilot\Exceptions\JsonRpcException.
Conditionable
Sono disponibiliwhen() e unless().
Dumpable
Sono disponibilidump() e dd().
Tappable
È disponibiletap().
InteractsWithData
Questa funzionalità si applica solo alla proprietà$data di SessionEvent.
Puoi usare helper familiari come all(), has(), only(), collect().
Per i dettagli consulta InteractsWithData.
Poiché $data di SessionEvent ha struttura diversa per EventType, è comodo per l’accesso ai valori dei singoli eventi.
Anche content() usa internamente InteractsWithData.
toArray() / toJson()
Puoi convertire l’intero SessionEvent in array o JSON.
collect() per l’intero evento.
Il motivo è che $data dispone del collect() di InteractsWithData.
Se vuoi operare sull’intero evento come collezione, usa l’helper collect() di Laravel.
broadcast() / broadcastNow()
Puoi effettuare il broadcast con la stessa interfaccia di StreamEvent di Laravel AI SDK.
Nell’AI SDK si usa durante lo streaming, mentre in SessionEvent è utilizzabile per qualsiasi EventType.
broadcastNow() effettua il broadcast immediato senza passare per la coda.
Metadati degli eventi
A partire da Copilot CLI 1.0.99, alcuni eventi includono metadati aggiuntivi. L’SDK conserva questi valori così come sono in$data, quindi puoi accedervi tramite $event->data o gli helper di InteractsWithData.
Eventi di compaction
data.compactionAttemptId in session.compaction_start e session.compaction_complete è un ID che collega l’evento di inizio a quello di completamento.
Se la compaction comporta un cambio di modello, è incluso anche switchTargetModel.
Se il modello di destinazione ha un budget di token del prompt diverso, è incluso anche targetPromptTokenLimit.
L’evento di completamento può includere initialModel, model, outcome, outcomeReason, failureReason, tokenAccountingBasis e altro.
outcome e i campi di motivazione sono stringhe a cui in futuro potranno essere aggiunti nuovi valori.
Non trattarli come un Enum fisso e conserva i valori sconosciuti così come sono.
L’assenza di un campo indica che il valore non è stato fornito. Non dedurre un valore predefinito.
Utilizzo dell’esecuzione degli strumenti
data.toolUsage in tool.execution_complete è l’utilizzo riportato dal provider per le operazioni degli strumenti gestite dal runtime.
È separato da assistant.usage del modello di conversazione.
Può contenere l’utilizzo già riportato anche quando l’esecuzione dello strumento non riesce.
toolUsage.model è il modello richiesto dall’operazione dello strumento, non il modello di conversazione.
I conteggi dei token e le informazioni di fatturazione possono essere forniti solo in parte.
L’assenza di un campo indica che il dato non è disponibile, non 0 token.
inputTokensDetails e outputTokensDetails sono suddivisioni incluse nei rispettivi totali. Non sommarli ai totali.
toolUsage.requestId è un ID che il runtime usa per eliminare consegne duplicate e replay. Non è un identificativo di fatturazione upstream.
Anche data.toolUsageRequestIds in session.usage_checkpoint e session.shutdown sono metadati di deduplicazione interni al runtime che identificano le operazioni degli strumenti incluse nello snapshot contabile.
Non trattarli come ID di fatturazione upstream.
Eventi di risoluzione Fusion
data.selectedRuleId in session.fusion_resolved identifica la regola del server quando il routing lato server sceglie un workflow diverso dalla regola locale.
Viene omesso se non c’è alcuna sostituzione.
Eventi di caricamento degli strumenti del server MCP
SessionEventType::SESSION_MCP_SERVER_TOOLS_LOADED (session.mcp_server_tools_loaded) viene emesso quando l’elenco degli strumenti di un server MCP diventa disponibile.
È un evento effimero emesso una sola volta per connessione e non viene persistito.
Contiene data.serverName e data.toolCount.
Il fatto che un server MCP sia connected non significa che il caricamento degli strumenti sia completato.
Dopo che il server lascia lo stato connesso, consideralo in caricamento finché non ricevi di nuovo questo evento.
Quando si usano strumenti in cache, questo evento può arrivare prima di connected.
Per le informazioni più recenti fai riferimento al repository GitHub.