Commit 10f9073
fix: handle empty response retry for streaming+thinking and no-event cases
The original fix only retried when is_final_response() was True with
empty content. This missed two scenarios observed in production:
1. Streaming + thinking: model streams thought chunks (partial=True)
then stops with no text — the LiteLLM adapter dropped the response
entirely, and the loop broke on last_event.partial without retry.
2. No events at all: model returned content=None which was filtered by
_postprocess_async, leaving last_event=None — loop broke immediately.
Changes:
- lite_llm.py: Add fallback after streaming loop to yield an explicit
empty non-partial LlmResponse when nothing was finalized, so
downstream retry logic can detect and handle it.
- base_llm_flow.py: Restructure run_async() to check for empty
responses (None, partial+empty, final+empty) before normal
termination, enabling retry across all three scenarios.
- Update existing test for new retry-on-None behavior.
- Add 12 comprehensive scenario tests covering all cases.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent 3acd2ac commit 10f9073
4 files changed
Lines changed: 554 additions & 37 deletions
File tree
- src/google/adk
- flows/llm_flows
- models
- tests/unittests/flows/llm_flows
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
788 | 788 | | |
789 | 789 | | |
790 | 790 | | |
791 | | - | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
792 | 840 | | |
793 | 841 | | |
794 | 842 | | |
795 | | - | |
796 | | - | |
797 | | - | |
798 | | - | |
799 | | - | |
800 | | - | |
801 | | - | |
802 | | - | |
803 | | - | |
804 | | - | |
805 | | - | |
806 | | - | |
807 | | - | |
808 | | - | |
809 | | - | |
810 | | - | |
811 | | - | |
812 | | - | |
813 | | - | |
814 | | - | |
815 | | - | |
816 | | - | |
817 | | - | |
818 | | - | |
819 | | - | |
820 | | - | |
821 | | - | |
822 | | - | |
823 | | - | |
824 | 843 | | |
825 | 844 | | |
826 | 845 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2235 | 2235 | | |
2236 | 2236 | | |
2237 | 2237 | | |
| 2238 | + | |
2238 | 2239 | | |
2239 | 2240 | | |
2240 | 2241 | | |
| |||
2319 | 2320 | | |
2320 | 2321 | | |
2321 | 2322 | | |
| 2323 | + | |
2322 | 2324 | | |
2323 | 2325 | | |
2324 | 2326 | | |
| |||
2413 | 2415 | | |
2414 | 2416 | | |
2415 | 2417 | | |
| 2418 | + | |
| 2419 | + | |
| 2420 | + | |
| 2421 | + | |
| 2422 | + | |
| 2423 | + | |
| 2424 | + | |
| 2425 | + | |
| 2426 | + | |
| 2427 | + | |
| 2428 | + | |
| 2429 | + | |
| 2430 | + | |
| 2431 | + | |
| 2432 | + | |
| 2433 | + | |
2416 | 2434 | | |
2417 | 2435 | | |
2418 | 2436 | | |
| |||
Lines changed: 16 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
98 | 99 | | |
99 | | - | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
100 | 106 | | |
101 | 107 | | |
102 | 108 | | |
| |||
110 | 116 | | |
111 | 117 | | |
112 | 118 | | |
113 | | - | |
114 | | - | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
115 | 124 | | |
116 | 125 | | |
117 | 126 | | |
| |||
0 commit comments