Repository navigation
Conversation
gemini-3.8-live sends a voiceActivity message the parser rejected, which ended the receive stream while the socket was still open.
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. |
Description
gemini-3.8-livesends avoiceActivityframe when the user starts or stops speaking.firebase_aidid not model that message, so parsing threwFirebaseAISdkException.LiveSession.receive()is anawait forover the broadcast controller, so that error closed the Dart stream while the WebSocket stayed open. Apps that treatonDoneas a closed session lost the rest of the spoken turn.This parses
voiceActivityintoLiveServerVoiceActivity(typeandaudioOffset). An unrecognized activity type still yields the message, withtypeleft null. A top-level key the SDK does not recognize is logged and skipped, soreceive()stays open for the next frame. A servererrorpayload or invalid JSON still ends the stream.An exhaustive switch on
LiveServerMessageneeds a new case, the same wayGoingAwayNoticedid.Related Issues
Fixes #18749
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes (
[x]).This will ensure a smooth and quick review process. Updating the
pubspec.yamland changelogs is not required.///).melos run analyze) does not report any problems on my PR.Breaking Change
Does your PR require plugin users to manually update their apps to accommodate your change?
Test plan
flutter test test/live_test.dart test/live_session_test.dartinpackages/firebase_ai/firebase_ai.gemini-3.8-livewith microphone audio keepsLiveSession.receive()open afterACTIVITY_START, and later audio orturnCompleteframes still arrive.receive().