@@ -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