@@ -38,6 +38,12 @@ def get_weather(city: str) -> str:
3838)
3939
4040
41+ def _truncate_str(s: str, max_length: int) -> str:
42+ if len(s) > max_length:
43+ return s[:max_length] + "..."
44+ return s
45+
46+
4147class Example:
4248 def __init__(self) -> None:
4349 self.ui = AppUI()
@@ -70,33 +76,38 @@ async def on_audio_recorded(self, audio_bytes: bytes) -> None:
7076 await self.session.send_audio(audio_bytes)
7177
7278 async def _on_event(self, event: RealtimeSessionEvent) -> None:
73- if event.type == "agent_start":
74- self.ui.add_transcript(f"Agent started: {event.agent.name}")
75- elif event.type == "agent_end":
76- self.ui.add_transcript(f"Agent ended: {event.agent.name}")
77- elif event.type == "handoff":
78- self.ui.add_transcript(f"Handoff from {event.from_agent.name} to {event.to_agent.name}")
79- elif event.type == "tool_start":
80- self.ui.add_transcript(f"Tool started: {event.tool.name}")
81- elif event.type == "tool_end":
82- self.ui.add_transcript(f"Tool ended: {event.tool.name}; output: {event.output}")
83- elif event.type == "audio_end":
84- self.ui.add_transcript("Audio ended")
85- elif event.type == "audio":
86- np_audio = np.frombuffer(event.audio.data, dtype=np.int16)
87- self.ui.play_audio(np_audio)
88- elif event.type == "audio_interrupted":
89- self.ui.add_transcript("Audio interrupted")
90- elif event.type == "error":
91- self.ui.add_transcript(f"Error: {event.error}")
92- elif event.type == "history_updated":
93- pass
94- elif event.type == "history_added":
95- pass
96- elif event.type == "raw_model_event":
97- self.ui.log_message(f"Raw model event: {event.data}")
98- else:
99- self.ui.log_message(f"Unknown event type: {event.type}")
79+ try:
80+ if event.type == "agent_start":
81+ self.ui.add_transcript(f"Agent started: {event.agent.name}")
82+ elif event.type == "agent_end":
83+ self.ui.add_transcript(f"Agent ended: {event.agent.name}")
84+ elif event.type == "handoff":
85+ self.ui.add_transcript(
86+ f"Handoff from {event.from_agent.name} to {event.to_agent.name}"
87+ )
88+ elif event.type == "tool_start":
89+ self.ui.add_transcript(f"Tool started: {event.tool.name}")
90+ elif event.type == "tool_end":
91+ self.ui.add_transcript(f"Tool ended: {event.tool.name}; output: {event.output}")
92+ elif event.type == "audio_end":
93+ self.ui.add_transcript("Audio ended")
94+ elif event.type == "audio":
95+ np_audio = np.frombuffer(event.audio.data, dtype=np.int16)
96+ self.ui.play_audio(np_audio)
97+ elif event.type == "audio_interrupted":
98+ self.ui.add_transcript("Audio interrupted")
99+ elif event.type == "error":
100+ pass
101+ elif event.type == "history_updated":
102+ pass
103+ elif event.type == "history_added":
104+ pass
105+ elif event.type == "raw_model_event":
106+ self.ui.log_message(f"Raw model event: {_truncate_str(str(event.data), 50)}")
107+ else:
108+ self.ui.log_message(f"Unknown event type: {event.type}")
109+ except Exception as e:
110+ self.ui.log_message(f"Error processing event: {_truncate_str(str(e), 50)}")
100111
101112
102113if __name__ == "__main__":
0 commit comments