@@ -38,6 +38,12 @@ def get_weather(city: str) -> str:
38
38
)
39
39
40
40
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
+
41
47
class Example :
42
48
def __init__ (self ) -> None :
43
49
self .ui = AppUI ()
@@ -70,33 +76,38 @@ async def on_audio_recorded(self, audio_bytes: bytes) -> None:
70
76
await self .session .send_audio (audio_bytes )
71
77
72
78
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 )} " )
100
111
101
112
102
113
if __name__ == "__main__" :
0 commit comments