Skip to content

Conversation

@ved015
Copy link

@ved015 ved015 commented Dec 18, 2025

Closes Issue #982

Refactored the existing Get_started_LiveAPI.py sample to improve readability, structure, and runtime robustness—especially around async flow and real-time audio/video handling.

What’s changed

  • Readability & structure
  1. Introduced clearer sectioning and consistent naming (e.g. audio/video capture loops).
  2. Grouped related logic (audio, video, streaming, shutdown) more logically.
  3. Minor cleanup to make the async flow easier to follow.
  • Async & streaming robustness
  1. Improved async task structure to avoid blocking the event loop.
  2. Safer handling of audio/video queues to prevent buildup during long sessions.
  3. Clearer producer–consumer flow for real-time streaming.
  • Error handling & shutdown
  1. Added finally blocks to ensure audio/video resources are always released.
  2. More graceful shutdown behavior when tasks are cancelled or interrupted.

Please review @Giom-V @markmcd if there are any changes please let me know

…d shutdown

Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
@github-actions github-actions bot added status:awaiting review PR awaiting review from a maintainer component:quickstarts Issues/PR referencing quickstarts folder labels Dec 18, 2025
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @ved015, 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 refactors the Get_started_LiveAPI.py sample to enhance its overall quality. The changes focus on improving code readability and structure, bolstering the robustness of asynchronous audio and video streaming, and implementing more comprehensive error handling and graceful shutdown procedures. The goal is to provide a more stable and maintainable example for interacting with the LiveAPI.

Highlights

  • Improved Readability and Structure: The sample code has been refactored with clearer sectioning, consistent naming conventions (e.g., audio/video capture loops), and more logical grouping of related functionalities like audio, video, streaming, and shutdown processes. The asynchronous flow is also made easier to follow.
  • Enhanced Async and Streaming Robustness: The pull request introduces an improved async task structure to prevent blocking the event loop. It also implements safer handling of audio/video queues, including a mechanism to prevent buildup during long sessions by dropping older frames when the queue is full, ensuring a clearer producer-consumer flow for real-time streaming.
  • Robust Error Handling and Graceful Shutdown: Added finally blocks to various asynchronous functions to guarantee that audio/video resources are always released, even if tasks are cancelled or interrupted. This ensures more graceful shutdown behavior.
  • Updated LiveAPI Configuration: The genai.Client now retrieves the API key from environment variables, and the CONFIG for the live session has been updated to use types.LiveConnectConfig. This includes specifying response modalities, configuring a prebuilt voice ('Zephyr'), and implementing context window compression with trigger tokens and a sliding window to maintain context in long conversations.
  • Class and Function Renaming for Clarity: The main class AudioLoop has been renamed to AudioVideoLoop to better reflect its responsibilities. Similarly, video capture functions like _get_frame and get_frames have been renamed to _capture_frame and capture_frames respectively, along with screen capture functions, for improved clarity.

🧠 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.

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
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

This pull request is a solid refactoring of the LiveAPI sample, significantly improving its structure, asynchronous flow, and robustness. The logical grouping of audio, video, and streaming functionalities, along with better error handling and resource management, makes the code much cleaner and more reliable. The renaming of classes and methods also enhances readability. I've provided a few minor suggestions related to Python style guide adherence to further improve code consistency. Overall, this is an excellent update.

Comment on lines +82 to +85
client = genai.Client(
api_key = os.environ.get("GEMINI_API_KEY"),
http_options={"api_version": "v1beta"},
)
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The repository's style guide defers to the Google Python Style Guide, which specifies that there should be no spaces around the = sign for keyword arguments. This convention is also enforced by tools like pyink. I've noticed this pattern in a few other places in the file (e.g., lines 94, 98, 99, 111). It would be great to fix them for consistency.

Suggested change
client = genai.Client(
api_key = os.environ.get("GEMINI_API_KEY"),
http_options={"api_version": "v1beta"},
)
client = genai.Client(
api_key=os.environ.get("GEMINI_API_KEY"),
http_options={"api_version": "v1beta"},
)
References
  1. The Google Python Style Guide, referenced in the repository's style guide (line 66), specifies not to use spaces around the = sign for keyword arguments or default parameter values. (link)

self.audio_in_queue = None
self.out_queue = None
self.audio_in_queue = asyncio.Queue()
self.out_queue = asyncio.Queue(maxsize = 5) # Limit size to avoid excess memory use
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

Minor style fix: according to PEP 8, there should be no space around the = for keyword arguments, and two spaces before an inline comment.

Suggested change
self.out_queue = asyncio.Queue(maxsize = 5) # Limit size to avoid excess memory use
self.out_queue = asyncio.Queue(maxsize=5) # Limit size to avoid excess memory use
References
  1. The repository style guide references PEP 8 (via the Google Python Style Guide on line 66). PEP 8 recommends no spaces for keyword arguments and two spaces before inline comments for better readability. (link)

sct = mss.mss()
monitor = sct.monitors[0]

Copy link
Contributor

Choose a reason for hiding this comment

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

medium

There are a few unnecessary blank lines in the code (here and on line 306) that could be removed to improve readability and compactness.

References
  1. The repository style guide (line 11) emphasizes readability. Removing unnecessary blank lines improves code compactness and readability. (link)

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@ishaanxgupta
Copy link
Contributor

This PR focuses on code clarity and correctness, without changing the external behavior of the code

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

Labels

component:quickstarts Issues/PR referencing quickstarts folder status:awaiting review PR awaiting review from a maintainer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants