@@ -25,8 +25,10 @@ python chat.py
2525
2626``` python
2727import asyncio
28+ from typing import cast
29+
2830from copilot import CopilotClient
29- from copilot.session import PermissionHandler
31+ from copilot.generated.session_events import AssistantMessageData
3032
3133async def main ():
3234 # Client automatically starts on enter and cleans up on exit
@@ -38,7 +40,7 @@ async def main():
3840
3941 def on_event (event ):
4042 if event.type.value == " assistant.message" :
41- print (event.data.content)
43+ print (cast(AssistantMessageData, event.data) .content)
4244 elif event.type.value == " session.idle" :
4345 done.set()
4446
@@ -57,7 +59,10 @@ If you need more control over the lifecycle, you can call `start()`, `stop()`, a
5759
5860``` python
5961import asyncio
62+ from typing import cast
63+
6064from copilot import CopilotClient
65+ from copilot.generated.session_events import AssistantMessageData
6166from copilot.session import PermissionHandler
6267
6368async def main ():
@@ -74,7 +79,7 @@ async def main():
7479
7580 def on_event (event ):
7681 if event.type.value == " assistant.message" :
77- print (event.data.content)
82+ print (cast(AssistantMessageData, event.data) .content)
7883 elif event.type.value == " session.idle" :
7984 done.set()
8085
@@ -333,7 +338,15 @@ Enable streaming to receive assistant response chunks as they're generated:
333338
334339``` python
335340import asyncio
341+ from typing import cast
342+
336343from copilot import CopilotClient
344+ from copilot.generated.session_events import (
345+ AssistantMessageData,
346+ AssistantMessageDeltaData,
347+ AssistantReasoningData,
348+ AssistantReasoningDeltaData,
349+ )
337350from copilot.session import PermissionHandler
338351
339352async def main ():
@@ -350,20 +363,20 @@ async def main():
350363 match event.type.value:
351364 case " assistant.message_delta" :
352365 # Streaming message chunk - print incrementally
353- delta = event.data.delta_content or " "
366+ delta = cast(AssistantMessageDeltaData, event.data) .delta_content or " "
354367 print (delta, end = " " , flush = True )
355368 case " assistant.reasoning_delta" :
356369 # Streaming reasoning chunk (if model supports reasoning)
357- delta = event.data.delta_content or " "
370+ delta = cast(AssistantReasoningDeltaData, event.data) .delta_content or " "
358371 print (delta, end = " " , flush = True )
359372 case " assistant.message" :
360373 # Final message - complete content
361374 print (" \n --- Final message ---" )
362- print (event.data.content)
375+ print (cast(AssistantMessageData, event.data) .content)
363376 case " assistant.reasoning" :
364377 # Final reasoning content (if model supports reasoning)
365378 print (" --- Reasoning ---" )
366- print (event.data.content)
379+ print (cast(AssistantReasoningData, event.data) .content)
367380 case " session.idle" :
368381 # Session finished processing
369382 done.set()
0 commit comments