Skip to content

feat(ai): Implement session resumption and context window compression for live api#9624

Draft
cynthiajoan wants to merge 1 commit intofirebase:mainfrom
cynthiajoan:origin/cj/ai-live-session-resumption
Draft

feat(ai): Implement session resumption and context window compression for live api#9624
cynthiajoan wants to merge 1 commit intofirebase:mainfrom
cynthiajoan:origin/cj/ai-live-session-resumption

Conversation

@cynthiajoan
Copy link
Copy Markdown

… live sessions.

Hey there! So you want to contribute to a Firebase SDK?
Before you file this pull request, please read these guidelines:

Discussion

  • Read the contribution guidelines (CONTRIBUTING.md).
  • If this has been discussed in an issue, make sure to link to the issue here.
    If not, go file an issue about this before creating a pull request to discuss.

Testing

  • Make sure all existing tests in the repository pass after your change.
  • If you fixed a bug or added a feature, add a new test to cover your code.

API Changes

  • Changes that affect the public API will require internal review. Before making a
    PR that changes the public API, we would suggest first proposing your change in an
    issue so that we can discuss it together.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Mar 5, 2026

⚠️ No Changeset found

Latest commit: 19c9b60

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the live AI API by introducing robust session resumption capabilities and defining mechanisms for context window compression. These features aim to improve the resilience and efficiency of live interactions with AI models, allowing for seamless reconnection after disconnections and better management of conversational context over time.

Highlights

  • Session Resumption Implementation: Implemented the core logic for session resumption within the LiveSession class, including a new resumeSession method that allows re-establishing a connection using a provided reconnector function. The LiveGenerativeModel's connect method was updated to support initial session resumption and to provide the necessary reconnector to LiveSession.
  • Context Window Compression Definition: Defined new interfaces for ContextWindowCompressionConfig and SlidingWindow to enable managing the model's context window, preventing it from exceeding a specified length.
  • New Types and Interfaces: Introduced SessionResumptionConfig to configure session restoration and LiveSessionResumptionUpdate to communicate session resumption state changes from the server. These new types are integrated into the live API's request and response structures.
  • Unit Test Coverage: Added comprehensive unit tests for the new session resumption functionality in LiveSession, covering successful resumption scenarios and error handling when a reconnector is not provided. Tests also ensure correct parsing of LiveSessionResumptionUpdate messages.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • packages/ai/src/methods/live-session.test.ts
    • Imported LiveSessionResumptionUpdate for testing.
    • Modified LiveSession constructor instantiation to include a mock reconnector.
    • Added new test suites for resumeSession functionality, including successful resumption and error handling.
    • Updated receive() tests to simulate and assert the handling of sessionResumptionUpdate messages.
  • packages/ai/src/methods/live-session.ts
    • Imported LiveSessionResumptionUpdate and SessionResumptionConfig.
    • Updated the LiveSession constructor to accept an optional reconnector function.
    • Implemented the resumeSession asynchronous method to close the current connection and re-establish it using the reconnector.
    • Modified the receive method to process LiveSessionResumptionUpdate messages from the server.
  • packages/ai/src/models/live-generative-model.ts
    • Imported SessionResumptionConfig.
    • Modified the connect method to accept an optional sessionResumption configuration.
    • Refactored connection logic into a new private _internalConnect method.
    • Updated connect to instantiate LiveSession with the _webSocketHandler, serverMessages from _internalConnect, and a reconnector that calls _internalConnect.
    • Passed sessionResumption to the initial client setup message within _internalConnect.
  • packages/ai/src/types/live-responses.ts
    • Imported SessionResumptionConfig.
    • Added an optional sessionResumption field to the _LiveClientSetup interface.
  • packages/ai/src/types/requests.ts
    • Defined new interfaces: ContextWindowCompressionConfig, SlidingWindow, and SessionResumptionConfig.
    • Added contextWindowCompression as an optional property to the LiveGenerationConfig interface.
  • packages/ai/src/types/responses.ts
    • Defined the LiveSessionResumptionUpdate interface to represent session resumption state updates.
    • Added SESSION_RESUMPTION_UPDATE to the LiveResponseType enum.
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize 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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. 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.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request successfully implements session resumption and context window compression for the live API. The changes are well-structured, introducing new types and modifying existing classes (LiveSession and LiveGenerativeModel) to support these features. The addition of a reconnector function in LiveSession and the _internalConnect method in LiveGenerativeModel are good design choices for managing connection and reconnection logic. The tests adequately cover the new resumeSession functionality and the parsing of the new LiveSessionResumptionUpdate message, ensuring the new features work as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant