@@ -245,7 +245,7 @@ async def run(
245
245
result_type : None = None ,
246
246
message_history : list [_messages .ModelMessage ] | None = None ,
247
247
model : models .Model | models .KnownModelName | None = None ,
248
- deps : AgentDepsT = None ,
248
+ deps : AgentDepsT | None = None ,
249
249
model_settings : ModelSettings | None = None ,
250
250
usage_limits : _usage .UsageLimits | None = None ,
251
251
usage : _usage .Usage | None = None ,
@@ -260,7 +260,7 @@ async def run(
260
260
result_type : type [RunResultDataT ],
261
261
message_history : list [_messages .ModelMessage ] | None = None ,
262
262
model : models .Model | models .KnownModelName | None = None ,
263
- deps : AgentDepsT = None ,
263
+ deps : AgentDepsT | None = None ,
264
264
model_settings : ModelSettings | None = None ,
265
265
usage_limits : _usage .UsageLimits | None = None ,
266
266
usage : _usage .Usage | None = None ,
@@ -274,7 +274,7 @@ async def run(
274
274
result_type : type [RunResultDataT ] | None = None ,
275
275
message_history : list [_messages .ModelMessage ] | None = None ,
276
276
model : models .Model | models .KnownModelName | None = None ,
277
- deps : AgentDepsT = None ,
277
+ deps : AgentDepsT | None = None ,
278
278
model_settings : ModelSettings | None = None ,
279
279
usage_limits : _usage .UsageLimits | None = None ,
280
280
usage : _usage .Usage | None = None ,
@@ -338,7 +338,7 @@ async def iter(
338
338
result_type : type [RunResultDataT ] | None = None ,
339
339
message_history : list [_messages .ModelMessage ] | None = None ,
340
340
model : models .Model | models .KnownModelName | None = None ,
341
- deps : AgentDepsT = None ,
341
+ deps : AgentDepsT | None = None ,
342
342
model_settings : ModelSettings | None = None ,
343
343
usage_limits : _usage .UsageLimits | None = None ,
344
344
usage : _usage .Usage | None = None ,
@@ -499,7 +499,7 @@ def run_sync(
499
499
* ,
500
500
message_history : list [_messages .ModelMessage ] | None = None ,
501
501
model : models .Model | models .KnownModelName | None = None ,
502
- deps : AgentDepsT = None ,
502
+ deps : AgentDepsT | None = None ,
503
503
model_settings : ModelSettings | None = None ,
504
504
usage_limits : _usage .UsageLimits | None = None ,
505
505
usage : _usage .Usage | None = None ,
@@ -514,7 +514,7 @@ def run_sync(
514
514
result_type : type [RunResultDataT ] | None ,
515
515
message_history : list [_messages .ModelMessage ] | None = None ,
516
516
model : models .Model | models .KnownModelName | None = None ,
517
- deps : AgentDepsT = None ,
517
+ deps : AgentDepsT | None = None ,
518
518
model_settings : ModelSettings | None = None ,
519
519
usage_limits : _usage .UsageLimits | None = None ,
520
520
usage : _usage .Usage | None = None ,
@@ -528,7 +528,7 @@ def run_sync(
528
528
result_type : type [RunResultDataT ] | None = None ,
529
529
message_history : list [_messages .ModelMessage ] | None = None ,
530
530
model : models .Model | models .KnownModelName | None = None ,
531
- deps : AgentDepsT = None ,
531
+ deps : AgentDepsT | None = None ,
532
532
model_settings : ModelSettings | None = None ,
533
533
usage_limits : _usage .UsageLimits | None = None ,
534
534
usage : _usage .Usage | None = None ,
@@ -589,7 +589,7 @@ def run_stream(
589
589
result_type : None = None ,
590
590
message_history : list [_messages .ModelMessage ] | None = None ,
591
591
model : models .Model | models .KnownModelName | None = None ,
592
- deps : AgentDepsT = None ,
592
+ deps : AgentDepsT | None = None ,
593
593
model_settings : ModelSettings | None = None ,
594
594
usage_limits : _usage .UsageLimits | None = None ,
595
595
usage : _usage .Usage | None = None ,
@@ -604,7 +604,7 @@ def run_stream(
604
604
result_type : type [RunResultDataT ],
605
605
message_history : list [_messages .ModelMessage ] | None = None ,
606
606
model : models .Model | models .KnownModelName | None = None ,
607
- deps : AgentDepsT = None ,
607
+ deps : AgentDepsT | None = None ,
608
608
model_settings : ModelSettings | None = None ,
609
609
usage_limits : _usage .UsageLimits | None = None ,
610
610
usage : _usage .Usage | None = None ,
@@ -619,7 +619,7 @@ async def run_stream( # noqa C901
619
619
result_type : type [RunResultDataT ] | None = None ,
620
620
message_history : list [_messages .ModelMessage ] | None = None ,
621
621
model : models .Model | models .KnownModelName | None = None ,
622
- deps : AgentDepsT = None ,
622
+ deps : AgentDepsT | None = None ,
623
623
model_settings : ModelSettings | None = None ,
624
624
usage_limits : _usage .UsageLimits | None = None ,
625
625
usage : _usage .Usage | None = None ,
@@ -685,15 +685,22 @@ async def stream_to_final(
685
685
s : models .StreamedResponse ,
686
686
) -> FinalResult [models .StreamedResponse ] | None :
687
687
result_schema = graph_ctx .deps .result_schema
688
+ parts_seen : list [_messages .ModelResponsePart ] = []
689
+ has_tool_call = False
688
690
async for maybe_part_event in streamed_response :
689
691
if isinstance (maybe_part_event , _messages .PartStartEvent ):
690
692
new_part = maybe_part_event .part
691
- if isinstance (new_part , _messages .TextPart ):
692
- if _agent_graph .allow_text_result (result_schema ):
693
- return FinalResult (s , None , None )
694
- elif isinstance (new_part , _messages .ToolCallPart ) and result_schema :
693
+ parts_seen .append (new_part )
694
+ if isinstance (new_part , _messages .ToolCallPart ) and result_schema :
695
+ has_tool_call = True
695
696
for call , _ in result_schema .find_tool ([new_part ]):
696
697
return FinalResult (s , call .tool_name , call .tool_call_id )
698
+ # Only check for final result after seeing all parts and no tool calls
699
+ if not has_tool_call and len (parts_seen ) > 0 :
700
+ # For text-only responses, we need all parts to be TextPart
701
+ if all (isinstance (p , _messages .TextPart ) for p in parts_seen ):
702
+ if _agent_graph .allow_text_result (result_schema ):
703
+ return FinalResult (s , None , None )
697
704
return None
698
705
699
706
final_result_details = await stream_to_final (streamed_response )
@@ -1192,7 +1199,7 @@ def _get_model(self, model: models.Model | models.KnownModelName | None) -> mode
1192
1199
1193
1200
return model_
1194
1201
1195
- def _get_deps (self : Agent [T , ResultDataT ], deps : T ) -> T :
1202
+ def _get_deps (self : Agent [T , ResultDataT ], deps : T | None ) -> T :
1196
1203
"""Get deps for a run.
1197
1204
1198
1205
If we've overridden deps via `_override_deps`, use that, otherwise use the deps passed to the call.
@@ -1202,7 +1209,9 @@ def _get_deps(self: Agent[T, ResultDataT], deps: T) -> T:
1202
1209
if some_deps := self ._override_deps :
1203
1210
return some_deps .value
1204
1211
else :
1205
- return deps
1212
+ if deps is None and self ._deps_type is not NoneType :
1213
+ raise ValueError ("deps cannot be None when _override_deps is not set and deps_type is not NoneType" )
1214
+ return deps # type: ignore
1206
1215
1207
1216
def _infer_name (self , function_frame : FrameType | None ) -> None :
1208
1217
"""Infer the agent name from the call frame.
0 commit comments