@@ -84,7 +84,7 @@ def event_stream(self) -> UIEventStream:
8484
8585 @cached_property
8686 def messages (self ) -> list [ModelMessage ]:
87- return self .request .messages
87+ return self .load_messages ( self . request .messages )
8888
8989 @cached_property
9090 def state (self ) -> dict [str , Any ] | None :
@@ -122,136 +122,75 @@ async def handle_part_end(self, event: PartEndEvent) -> AsyncIterator[str]:
122122
123123 async def handle_text_start (self , part : TextPart , follows_text : bool = False ) -> AsyncIterator [str ]:
124124 yield f'<text>{ part .content } '
125- async for e in super ().handle_text_start (part , follows_text ):
126- yield e
127125
128126 async def handle_text_delta (self , delta : TextPartDelta ) -> AsyncIterator [str ]:
129127 yield delta .content_delta
130- async for e in super ().handle_text_delta (delta ):
131- yield e
132128
133129 async def handle_text_end (self , part : TextPart , followed_by_text : bool = False ) -> AsyncIterator [str ]:
134130 yield '</text>'
135- async for e in super ().handle_text_end (part , followed_by_text ):
136- yield e
137131
138132 async def handle_thinking_start (self , part : ThinkingPart , follows_thinking : bool = False ) -> AsyncIterator [str ]:
139133 yield f'<thinking>{ part .content } '
140- async for e in super ().handle_thinking_start (part , follows_thinking ):
141- yield e
142134
143135 async def handle_thinking_delta (self , delta : ThinkingPartDelta ) -> AsyncIterator [str ]:
144136 yield str (delta .content_delta )
145- async for e in super ().handle_thinking_delta (delta ):
146- yield e
147137
148138 async def handle_thinking_end (self , part : ThinkingPart , followed_by_thinking : bool = False ) -> AsyncIterator [str ]:
149139 yield '</thinking>'
150- async for e in super ().handle_thinking_end (part , followed_by_thinking ):
151- yield e
152140
153141 async def handle_tool_call_start (self , part : ToolCallPart ) -> AsyncIterator [str ]:
154142 yield f'<tool-call name={ part .tool_name !r} >{ part .args } '
155- async for e in super ().handle_tool_call_start (part ):
156- yield e
157143
158144 async def handle_tool_call_delta (self , delta : ToolCallPartDelta ) -> AsyncIterator [str ]:
159145 yield str (delta .args_delta )
160- async for e in super ().handle_tool_call_delta (delta ):
161- yield e
162146
163147 async def handle_tool_call_end (self , part : ToolCallPart ) -> AsyncIterator [str ]:
164148 yield f'</tool-call name={ part .tool_name !r} >'
165- async for e in super ().handle_tool_call_end (part ):
166- yield e
167149
168150 async def handle_builtin_tool_call_start (self , part : BuiltinToolCallPart ) -> AsyncIterator [str ]:
169151 yield f'<builtin-tool-call name={ part .tool_name !r} >{ part .args } '
170- async for e in super ().handle_builtin_tool_call_start (part ):
171- yield e
172152
173153 async def handle_builtin_tool_call_end (self , part : BuiltinToolCallPart ) -> AsyncIterator [str ]:
174154 yield f'</builtin-tool-call name={ part .tool_name !r} >'
175- async for e in super ().handle_builtin_tool_call_end (part ):
176- yield e
177155
178156 async def handle_builtin_tool_return (self , part : BuiltinToolReturnPart ) -> AsyncIterator [str ]:
179157 yield f'<builtin-tool-return name={ part .tool_name !r} >{ part .content } </builtin-tool-return>'
180- async for e in super ().handle_builtin_tool_return (part ):
181- yield e
182158
183159 async def handle_file (self , part : FilePart ) -> AsyncIterator [str ]:
184160 yield f'<file media_type={ part .content .media_type !r} />'
185- async for e in super ().handle_file (part ):
186- yield e
187161
188162 async def handle_final_result (self , event : FinalResultEvent ) -> AsyncIterator [str ]:
189163 yield '<final-result />'
190- async for e in super ().handle_final_result (event ):
191- yield e
192164
193165 async def handle_function_tool_call (self , event : FunctionToolCallEvent ) -> AsyncIterator [str ]:
194166 yield f'<function-tool-call name={ event .part .tool_name !r} >{ event .part .args } </function-tool-call>'
195- async for e in super ().handle_function_tool_call (event ):
196- yield e
197167
198168 async def handle_function_tool_result (self , event : FunctionToolResultEvent ) -> AsyncIterator [str ]:
199169 yield f'<function-tool-result name={ event .result .tool_name !r} >{ event .result .content } </function-tool-result>'
200- async for e in super ().handle_function_tool_result (event ):
201- yield e
202170
203171 async def handle_run_result (self , event : AgentRunResultEvent ) -> AsyncIterator [str ]:
204172 yield f'<run-result>{ event .result .output } </run-result>'
205- async for e in super ().handle_run_result (event ):
206- yield e
207-
208- async def before_request (self ) -> AsyncIterator [str ]:
209- yield '<request>'
210- async for e in super ().before_request ():
211- yield e
212173
213- async def after_request (self ) -> AsyncIterator [str ]:
214- yield '</request>'
215- async for e in super ().after_request ():
216- yield e
174+ async def before_stream (self ) -> AsyncIterator [str ]:
175+ yield '<stream>'
217176
218177 async def before_response (self ) -> AsyncIterator [str ]:
219178 yield '<response>'
220- async for e in super ().before_response ():
221- yield e
222179
223180 async def after_response (self ) -> AsyncIterator [str ]:
224181 yield '</response>'
225- async for e in super ().after_response ():
226- yield e
227182
228- async def before_stream (self ) -> AsyncIterator [str ]:
229- yield '<stream>'
230- async for e in super ().before_stream ():
231- yield e
183+ async def before_request (self ) -> AsyncIterator [str ]:
184+ yield '<request>'
185+
186+ async def after_request (self ) -> AsyncIterator [str ]:
187+ yield '</request>'
232188
233189 async def after_stream (self ) -> AsyncIterator [str ]:
234190 yield '</stream>'
235- async for e in super ().after_stream ():
236- yield e
237191
238192 async def on_error (self , error : Exception ) -> AsyncIterator [str ]:
239- yield f'on_error({ error .__class__ .__name__ } ({ str (error )!r} ))'
240- async for e in super ().on_error (error ):
241- yield e
242-
243-
244- async def test_event_stream_text ():
245- # text
246- # - back to back
247- # thinking
248- # - back to back
249- # tool call
250- # builtin tool call
251- # file
252- # error
253- # output tool
254- pass
193+ yield f'<error type={ error .__class__ .__name__ !r} >{ str (error )} </error>'
255194
256195
257196async def test_event_stream_builtin_tool_call ():
@@ -313,3 +252,17 @@ async def stream_function(
313252 '</stream>' ,
314253 ]
315254 )
255+
256+
257+ async def test_event_stream_text ():
258+ # tool call
259+ # error
260+ # output tool
261+ # - dispatch_request
262+ # text
263+ # - back to back
264+ # thinking
265+ # - back to back
266+ # tool call
267+ # file
268+ pass
0 commit comments