Skip to content

feat: Add persist_memory flag to AgentTool#2849

Closed
ThibaultScalbert wants to merge 8 commits into
google:mainfrom
ThibaultScalbert:memory_persistence
Closed

feat: Add persist_memory flag to AgentTool#2849
ThibaultScalbert wants to merge 8 commits into
google:mainfrom
ThibaultScalbert:memory_persistence

Conversation

@ThibaultScalbert

@ThibaultScalbert ThibaultScalbert commented Sep 4, 2025

Copy link
Copy Markdown

This PR adds a persist_memory flag to the AgentTool class, which allows the conversation history between a main agent and a sub-agent to be persisted across multiple calls to the AgentTool within the same session.

Fixes #2850

Testing Plan

I have added a new test case test_lru_cache to verify that the LRU cache evicts runners when the cache is full.

I have also updated the existing tests test_persist_memory and test_no_persist_memory to use a fixture to reduce code duplication.

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Summary of Changes

Hello @ThibaultScalbert, 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 enhances the AgentTool by introducing a persist_memory flag. This feature allows the conversation history of sub-agents to be maintained across multiple interactions within a single session, providing a more continuous and context-aware experience for complex agent workflows.

Highlights

  • New persist_memory flag: Introduced a persist_memory boolean flag in the AgentTool's constructor and AgentToolConfig to control whether conversation history is maintained for sub-agents.
  • Conversation History Persistence: When persist_memory is enabled, the AgentTool now stores and reuses the Runner and Session objects for a given session ID, allowing the sub-agent's conversation history to persist across multiple run_async calls within the same session.
  • Conditional Runner Initialization: The run_async method has been updated to check the persist_memory flag and a new internal _runners dictionary. If persistence is enabled and a runner/session pair already exists for the current session, it reuses them; otherwise, it creates new ones.
  • Unit Tests for Persistence: Comprehensive unit tests (test_persist_memory and test_no_persist_memory) have been added to test_agent_tool.py to validate the correct behavior of the persist_memory flag, ensuring conversation history is either maintained or reset as expected.
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 in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

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

@adk-bot adk-bot added bot triaged core [Component] This issue is related to the core interface and implementation labels Sep 4, 2025
@adk-bot adk-bot requested a review from Jacksunwei September 4, 2025 13:17
@adk-bot

adk-bot commented Sep 4, 2025

Copy link
Copy Markdown
Collaborator

Response from ADK Triaging Agent

Hello @ThibaultScalbert, thank you for creating this PR!

To help us review this PR, could you please:

  1. Associate a GitHub issue with this PR. If there is no existing issue, could you please create one?
  2. Add a "Testing Plan" section to your PR description explaining how you tested these changes.

This information will help reviewers to review your PR more efficiently. Thanks!

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

Copy link
Copy Markdown
Contributor

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 introduces a persist_memory flag to AgentTool, allowing conversation history to be maintained across multiple tool calls within a session. The implementation correctly caches and reuses Runner instances based on the session ID. The changes are accompanied by new unit tests that verify both the memory persistence and non-persistence scenarios.

My review focuses on a potential memory leak, code style improvements, and test code refactoring. Specifically:

  • There's a potential memory leak in AgentTool as cached runners are never cleaned up.
  • A redundant import was identified.
  • I've suggested adding a type hint for better code clarity.
  • The new tests have duplicated setup code that could be refactored into a pytest fixture for better maintainability.

Overall, the feature is well-implemented, but addressing the memory leak is important for production use.

Comment thread src/google/adk/tools/agent_tool.py
Comment thread src/google/adk/tools/agent_tool.py
Comment thread src/google/adk/tools/agent_tool.py Outdated
Comment thread tests/unittests/tools/test_agent_tool.py Outdated
@hangfei

hangfei commented Nov 15, 2025

Copy link
Copy Markdown
Collaborator

You could use sub-agent which will persist by default. Closing this.

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

Labels

core [Component] This issue is related to the core interface and implementation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AgentTool do not persist memory

4 participants