Session send()와 on()
sendAndWait()은 응답이 바로 돌아와서 알기 쉽지만 마지막 어시스턴트 메시지만 받을 수 있습니다.
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());
});
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.');
// 루프로 메시지 수신을 대기
$session->wait(timeout: 60.0);
});
on()과 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.');
// 루프로 대기하는 부분은 sendAndWait() 내에서 처리되므로 이 시점에서 마지막 메시지까지 도착해 있음.
// 도중의 메시지는 위의 on()에서 받고 있음.
// sendAndWait로부터의 마지막 메시지는 불필요.
// dump($response->content());
});
on()으로 특정 이벤트 타입 지정
SessionEventType enum이나 문자열로 이벤트 타입을 지정하면 해당 이벤트만 구독할 수 있습니다.
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());
});
모든 이벤트 타입 구독
이벤트 타입을 지정하지 않으면 모두 구독합니다.use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Types\SessionEvent;
$session->on(function (SessionEvent $event): void {
});
// 명명된 인자로 지정할 수도 있음
$session->on(handler: function (SessionEvent $event): void {
});
// null을 허용하는 동적인 타입 지정도 가능.
$type = null;
$session->on(type: $type, handler: function (SessionEvent $event): void {
});
최신 정보는 GitHub 저장소를 참고하세요.