-
Notifications
You must be signed in to change notification settings - Fork 2.5k
feat(utils): Add support for nested state access in template injection #3673
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Summary of ChangesHello @Jainish-S, 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 Highlights
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. 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
|
There was a problem hiding this 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 introduces a valuable feature for nested state access in template injection, including optional chaining. The implementation is robust, well-documented, and accompanied by a comprehensive set of unit tests. My feedback focuses on minor code consistency improvements to enhance maintainability.
| return None | ||
|
|
||
| optional = part.endswith('?') | ||
| key = part[:-1] if optional else part |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| var_name = full_path.removeprefix('artifact.') | ||
| optional = var_name.endswith('?') | ||
| if optional: | ||
| var_name = var_name[:-1] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Add nested state access support using dot notation in inject_session_state - Fix optional chaining error handling for better robustness - Add comprehensive test coverage for nested state templates Resolves: google#575
33b3465 to
21b66a4
Compare
1. Link to an existing issue (if applicable):
2. Or, if no issue exists, describe the change:
Problem:
Previously,
inject_session_state()only supported flat state access (e.g.,{user_name}), preventing users from accessing nested properties within state objects. This limitation forced developers to either flatten their state structure or manually handle template replacement, reducing code readability and flexibility when working with complex, hierarchical state structures.Solution:
Added support for nested state access in template injection using dot notation with optional chaining. The implementation adds a
_get_nested_value()helper function that:__getitem__) and attribute access (getattr)?operator for safe navigationKeyErrorfor missing required pathsThis solution was chosen because it:
Testing Plan
Unit Tests:
Summary of pytest results:
Added 12 comprehensive test cases covering:
Manual End-to-End (E2E) Tests: Created a sample agent to demonstrate the feature (located at
contributing/samples/nested_state_agent/, not included in this PR). Setup:Agent code:
Expected behavior:
Actual output:
✅ Result: Nested state values correctly injected into instruction template
Checklist
Additional context
Note: This PR re-implements the solution for issue #575. A previous implementation existed but was not merged due to merge conflicts. This is a fresh implementation with the same functionality. Feature highlights:
Files changed:
Key improvements made: