이벤트
이벤트
RealtimeSession을 반복하면 세션의 이벤트 스트림이 나와요. 콘텐츠 파트, 툴 활동, 턴 경계, 재연결, 복구 가능한 오류가요. 오디오, 이미지, 전사에서 묘사한 하이레벨 stream_audio()와 stream_transcripts() 뷰는 같은 스트림에서 파생돼요. 그래서 대부분 애플리케이션은 제어 흐름을 위해 세션을 반복하고 미디어는 뷰에 맡겨요.
아무도 세션을 반복하지 않으면, 세션은 가장 최근 512개 파트 델타 이벤트(오디오, 전사, 텍스트)와 가장 최근 512개 구조적 이벤트를 늦은 async for를 위해 유지해요. 더 오래된 것은 버려져요. 파트의 시작을 버리면 그 파트의 나머지도 함께 버려져서, 늦은 이터레이터는 파트에 붙일 수 없는 델타를 절대 받지 않아요. 소비자를 위해 대기 중인 실패는 절대 버려지지 않아요.
출처: 문서
본문
이벤트 참조
| 이벤트 | 의미 |
|---|---|
PartStartEvent |
음성, 텍스트, 툴 파트가 시작됨 |
PartDeltaEvent |
증가 음성 오디오/전사 또는 텍스트 콘텐츠 |
PartEndEvent |
완성된 파트; 보존된 음성 오디오는 파트 시작이 아니라 여기에 나타남 |
FunctionToolCallEvent |
로컬 함수 툴이 실행을 시작함 |
FunctionToolResultEvent |
로컬 함수 툴이 완료되거나 재시도 프롬프트를 반환함 |
DeferredToolRequestsEvent |
인라인 기능 핸들러가 지연 요청을 해결함 |
DeferredToolResultsEvent |
인라인 지연 결과가 정상 툴 처리를 위해 준비됨 |
EnqueuedMessagesEvent |
큐에 넣은 콘텐츠가 세션 이력으로 전달됨 |
RealtimeInputSpeechStartEvent |
프로파일이 emits_input_speech_events를 선언할 때, 프로바이더가 사용자가 말을 시작했다고 감지함 |
RealtimeInputSpeechEndEvent |
프로파일이 emits_input_speech_events를 선언할 때, 프로바이더가 사용자 음성의 끝을 감지함 |
RealtimeResponseInterruptedEvent |
프로바이더가 중단된 모델 응답을 보고함 |
RealtimeInputTranscriptionErrorEvent |
하나의 사용자 턴을 전사할 수 없음; 세션은 여전히 사용 가능 |
RealtimeOutputSpeechStartEvent / RealtimeOutputSpeechEndEvent |
모델이 들리기 시작하거나 멈춤. 프로바이더가 오디오 재생을 소유하는 WebRTC 사이드밴드에서 방출됨 |
RealtimeTurnCompleteEvent |
모델이 응답을 끝냈고 활성 툴이 없음 |
RealtimeSessionReconnectEvent |
연결이 자동으로 재확립됨 |
RealtimeSessionErrorEvent |
복구 가능한 프로바이더 오류가 발생함; 세션은 여전히 사용 가능 |
공유 및 realtime 전용 이벤트
처음 여덟 행은 pydantic_ai.messages의 AgentStreamEvent 멤버예요. 표준 스트리밍 실행이 산출하는 것과 같은 이벤트예요. 그래서 텍스트 에이전트를 위해 쓴 이벤트 처리 코드(파트 렌더링, 툴 호출 로깅)가 세션에서 그대로 작동해요. Realtime* 행은 세션만 방출하는 RealtimeEvent 멤버예요. 음성 감지, 중단, 턴 완료, 재연결, 복구 가능한 오류는 요청-응답 실행에 대응물이 없어요.
기능의 이벤트 스트림 훅은 두 종류가 같은 스트림을 흐르는 것을 봐요. 기능과 훅 참고.
턴 경계
RealtimeTurnCompleteEvent를 교환 경계로 사용하세요. 모델은 말하고, 툴을 호출하고, 다시 말할 수 있으므로, 음성(또는 툴 결과)을 받는 것이 턴이 끝났다는 뜻은 아니에요.
원시 오디오 이벤트 읽기
오디오 스트림은 본질적으로 이 이벤트들이에요. stream_audio()는 음성 파트 델타에 대한 바운드 뷰이고, 대부분 애플리케이션은 그것을 써야 해요. 고급 대안으로 원시 PartDeltaEvent에서 SpeechPartDelta.audio_chunk를 재생하세요. 모델 오디오는 이력 보존이 활성화되어 있든 없든 전체로 도착해요. 출력 오디오가 보존되면 최종 SpeechPart는 이력을 위해 전체 턴을 다시 WAV 스냅샷으로 담아요. 둘 다 재생하면 턴이 두 번 재생되므로 하지 마세요.