SessionEvent
Copilot에서 오는 메시지는 모두Revolution\Copilot\Types\SessionEvent 클래스입니다.
이 클래스는 가장 많이 사용되므로 Laravel다운 편리 기능이 추가되어 있습니다.
content()
AI로부터의 가장 중요한 응답 메시지를 가져옵니다.
__toString()에 의한 암묵적 타입 변환으로도 메시지 내용을 반환합니다.
Event type 판정
isAssistantMessage(), isUserMessage(), isIdle(), isAssistantMessageDelta()를 사용할 수 있습니다.
자주 사용하는 Event type이 있다면 추가로 헬퍼가 추가되는 경우가 있습니다.
is()로 임의의 EventType을 판정할 수 있습니다.
type()은 SessionEventType enum의 문자열 값을 반환합니다.
failed() / successful()
이벤트 타입이 SESSION_ERROR일 때는 failed()가 true가 됩니다.
successful()은 그 반대입니다.
Laravel의 명명에 맞추기 위해 isError()에서 개명되었습니다.
throw()
Laravel의 HTTP API나 Process API와 마찬가지로 에러는 보유되며, throw()로 예외를 송출할 수 있습니다.
에러가 없는 경우 아무것도 하지 않으므로 다음과 같이 쓸 수 있습니다.
SESSION_ERROR인 경우 Revolution\Copilot\Exceptions\SessionErrorException을 송출합니다.
타임아웃 시에는 Revolution\Copilot\Exceptions\SessionTimeoutException을 송출합니다.
JSON-RPC의 에러에서는 Revolution\Copilot\Exceptions\JsonRpcException을 송출합니다.
Conditionable
when()과 unless()를 사용할 수 있습니다.
Dumpable
dump()와 dd()를 사용할 수 있습니다.
Tappable
tap()을 사용할 수 있습니다.
InteractsWithData
이 기능은 SessionEvent의$data 프로퍼티에만 적용됩니다.
all(), has(), only(), collect() 등 익숙한 헬퍼를 사용할 수 있습니다.
자세한 내용은 InteractsWithData를 참고하세요.
SessionEvent의 $data는 EventType마다 구조가 다르므로 이벤트별 값 접근에 편리합니다.
content()도 내부적으로 InteractsWithData를 사용합니다.
toArray() / toJson()
SessionEvent 전체를 배열 또는 JSON으로 변환할 수 있습니다.
collect() 메서드는 없습니다.
$data에는 InteractsWithData의 collect()가 있기 때문입니다.
이벤트 전체를 컬렉션 조작하려면 Laravel의 collect() 헬퍼를 사용합니다.
broadcast() / broadcastNow()
Laravel AI SDK의 StreamEvent와 같은 인터페이스로 브로드캐스트할 수 있습니다.
AI SDK에서는 스트리밍 시에 사용되지만, SessionEvent에서는 임의의 EventType에서 사용할 수 있습니다.
broadcastNow()는 큐를 거치지 않고 즉시 브로드캐스트합니다.
최신 정보는 GitHub 저장소를 참고하세요.