Commit 9f2af36
committed
fix: ensure balanced tool lifecycle callbacks for hallucinated tools
When the LLM hallucinates a non-existent tool name, the ValueError
handler was calling on_tool_error_callback directly without first
invoking before_tool_callback or entering the tracer span context.
This broke the push/pop invariant that plugins (e.g.,
BigQueryAgentAnalyticsPlugin) rely on for TraceManager span stack
management, causing stack corruption.
Move the hallucinated-tool error handling inside the traced lifecycle
path (_run_with_trace) so that:
1. The tracer span context (start_as_current_span) is entered first
2. before_tool_callback runs before on_tool_error_callback
3. after_tool_callback / trace_tool_call run in the finally block
Applied to both _execute_single_function_call_async and
_execute_single_function_call_live.
Fixes #47751 parent b8e7647 commit 9f2af36
2 files changed
Lines changed: 90 additions & 23 deletions
File tree
- src/google/adk/flows/llm_flows
- tests/unittests/flows/llm_flows
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
480 | 480 | | |
481 | 481 | | |
482 | 482 | | |
| 483 | + | |
483 | 484 | | |
484 | 485 | | |
485 | 486 | | |
486 | 487 | | |
487 | | - | |
488 | | - | |
489 | | - | |
490 | | - | |
491 | | - | |
492 | | - | |
493 | | - | |
494 | | - | |
495 | | - | |
496 | | - | |
497 | | - | |
498 | | - | |
| 488 | + | |
499 | 489 | | |
500 | 490 | | |
501 | 491 | | |
| |||
520 | 510 | | |
521 | 511 | | |
522 | 512 | | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
523 | 528 | | |
524 | 529 | | |
525 | 530 | | |
| |||
711 | 716 | | |
712 | 717 | | |
713 | 718 | | |
| 719 | + | |
714 | 720 | | |
715 | 721 | | |
716 | 722 | | |
717 | 723 | | |
718 | | - | |
719 | | - | |
720 | | - | |
721 | | - | |
722 | | - | |
723 | | - | |
724 | | - | |
725 | | - | |
726 | | - | |
727 | | - | |
728 | | - | |
| 724 | + | |
729 | 725 | | |
730 | 726 | | |
731 | 727 | | |
| |||
743 | 739 | | |
744 | 740 | | |
745 | 741 | | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
746 | 757 | | |
747 | 758 | | |
748 | 759 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
432 | 432 | | |
433 | 433 | | |
434 | 434 | | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
0 commit comments