fix(live): Resolve systemic parts[0] indexing bugs (Fixes #6616) - #6617
Open
Harshitmishra001 wants to merge 1 commit into
Open
fix(live): Resolve systemic parts[0] indexing bugs (Fixes #6616)#6617Harshitmishra001 wants to merge 1 commit into
Harshitmishra001 wants to merge 1 commit into
Conversation
This PR introduces systemic fixes to resolve fragile parts[0] indexing assumptions in the core Gemini Live API connection and flow modules. 1. Fixes a validation bypass where mixed-content blocks dropped tool responses instead of raising a ValueError. 2. Fixes a data drop in multi-part streaming by iterating over all parts in a chunk. 3. Decouples audio caching from parts[0] to scan all parts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR introduces systemic fixes to resolve fragile
parts[0]indexing assumptions in the core Gemini Live API connection and flow modules.parts[0]to scan all parts.Please ensure you have read the contribution guide before creating a pull request.
Link to Issue or Description of Change
1. Link to an existing issue (if applicable):
2. Or, if no issue exists, describe the change:
If applicable, please follow the issue templates to provide as much detail as
possible.
Problem:
N/A - See Issue #6616 for full details.
Solution:
N/A - See Issue #6616 for full details.
Testing Plan
Please describe the tests that you ran to verify your changes. This is required
for all PRs that are not small documentation or typo fixes.
Unit Tests:
Please include a summary of passed
pytestresults.All 114 test cases across the
models/test_gemini_llm_connection.pyandflows/llm_flows/test_base_llm_flow.pytest suites passed perfectly without any regressions.Two new regression tests were explicitly added:
test_send_content_mixed_content_raises_value_error: Verifies that aContentpayload containing both a text part and afunction_responsepart properly triggers theValueError.test_receive_multiplexed_thought_and_text: Verifies the state machine gracefully processes a single chunk containing a thought part followed by a non-thought text part.Manual End-to-End (E2E) Tests:
Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix.
N/A - The framework-level streaming bugs are fully covered by the updated asynchronous stream unit tests.
Checklist
Additional context
Why This Matters
For all of these fixes, the core question is: Can the Live API actually send a multi-part chunk today?
The answer is: while it might be rare in current API responses for certain models, the Gemini protocol does not prohibit it and the API could technically stream multiplexed chunks (e.g., an image with text, or multiple tool responses at once). By removing these fragile
parts[0]assumptions, we guarantee the framework is robust against future Live API updates or any edge-case multimodal streaming scenarios, preventing silent data drops or misrouted backend calls.