Conversation
Summary of ChangesHello, 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 introduces a new Highlights
🧠 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 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 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 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. Footnotes
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #37917 +/- ##
==========================================
Coverage 54.75% 54.75%
Complexity 1690 1690
==========================================
Files 1063 1064 +1
Lines 166898 167111 +213
Branches 1226 1226
==========================================
+ Hits 91377 91505 +128
- Misses 73328 73413 +85
Partials 2193 2193
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
Checks are failing. Will not request review until checks are succeeding. If you'd like to override that behavior, comment |
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces the ADKAgentModelHandler to enable running Google Agent Development Kit (ADK) agents within Apache Beam's RunInference transform. This includes a new Python module for the handler, comprehensive unit tests, and updates to setup.py to include the google-adk dependency. Feedback suggests improving performance by using asyncio.gather for concurrent agent invocations instead of repeated asyncio.run calls, and addressing an import consistency issue in the test file.
sdks/python/apache_beam/ml/inference/agent_development_kit_test.py
Outdated
Show resolved
Hide resolved
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces the ADKAgentModelHandler to enable running Google Agent Development Kit (ADK) agents within Apache Beam's RunInference transform. This includes the core implementation, a dedicated test file, and updates to dependencies and the CHANGES.md file. Feedback indicates a critical bug where model.session_service.create_session will raise a SessionExistsError for elements beyond the first when a shared session_id is used, requiring a try...except block. Additionally, the response extraction in _invoke_agent should be improved to handle multi-part agent responses completely by using event.content.text instead of event.content.parts[0].text.
| model.session_service.create_session( | ||
| app_name=self._app_name, | ||
| user_id=user_id, | ||
| session_id=session_id, | ||
| ) |
There was a problem hiding this comment.
model.session_service.create_session raises a SessionExistsError if a session with the given ID already exists. When a session_id is provided via inference_args, it's shared across all elements in the batch. The current implementation calls create_session for each element, which will cause a SessionExistsError for the second element onwards, crashing the pipeline.
To fix this, you should wrap the call in a try...except SessionExistsError block. This will gracefully handle cases where the session already exists, which is expected for stateful conversations using a shared session ID.
You will also need to import SessionExistsError at the top of the file within the try...except ImportError block:
from google.adk.exceptions import SessionExistsError| model.session_service.create_session( | |
| app_name=self._app_name, | |
| user_id=user_id, | |
| session_id=session_id, | |
| ) | |
| try: | |
| model.session_service.create_session( | |
| app_name=self._app_name, | |
| user_id=user_id, | |
| session_id=session_id, | |
| ) | |
| except SessionExistsError: | |
| # It's okay if the session already exists for shared session IDs. | |
| pass |
| if event.content and event.content.parts: | ||
| return event.content.parts[0].text |
There was a problem hiding this comment.
The agent's final response may contain multiple text parts. This implementation only considers the text from the first part (parts[0]), which could lead to incomplete results. To handle multi-part responses correctly and idiomatically, you should use the .text property of the content object, which concatenates the text from all parts. This also simplifies the code.
| if event.content and event.content.parts: | |
| return event.content.parts[0].text | |
| if event.content: | |
| return event.content.text |
Adds model handler capable of running ADK agents mid-pipeline.
Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:
addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, commentfixes #<ISSUE NUMBER>instead.CHANGES.mdwith noteworthy changes.See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)
See CI.md for more information about GitHub Actions CI or the workflows README to see a list of phrases to trigger workflows.