feat: support nested state values in instruction templates#5197
Open
Ankitajainkuniya wants to merge 1 commit intogoogle:mainfrom
Open
feat: support nested state values in instruction templates#5197Ankitajainkuniya wants to merge 1 commit intogoogle:mainfrom
Ankitajainkuniya wants to merge 1 commit intogoogle:mainfrom
Conversation
Adds support for referencing nested dictionary values in instruction
templates using dot notation, e.g. {user.profile.name} resolves to
session.state['user']['profile']['name'].
This is useful when agents receive structured LLM responses via
output_schema and need to reference nested fields in instructions
without manually flattening state.
- Add _resolve_nested() helper for dot-separated path traversal
- Update _replace_match() to use nested resolution when path contains dots
- Update _is_valid_state_name() to accept dot-separated identifiers
- Preserve backward compatibility: flat keys, artifact. prefix, and
app:/user:/temp: namespaces all work unchanged
Fixes google#575
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds support for dot-separated nested state value references in instruction templates.
Before: Only flat top-level keys worked —
{user_name}resolvesstate['user_name']After: Nested paths work —
{user.profile.name}resolvesstate['user']['profile']['name']Motivation
When agents use
output_schemato receive structured LLM responses, the session state often contains nested dictionaries. Currently, developers must manually flatten these into top-level keys before referencing them in instructions, which is verbose and error-prone.Changes
src/google/adk/utils/instructions_utils.py:_resolve_nested()helper that traverses nested dicts via dot-separated paths_replace_match()to use nested resolution when the variable name contains dots_is_valid_state_name()to accept dot-separated identifiersBackward compatibility preserved:
{user_name}) — unchanged{artifact.file_name}) — unchanged, checked first{app:key},{user:key},{temp:key}) — unchanged{user.missing.key?}) — returns empty stringTests
Added 5 test cases in
tests/unittests/utils/test_instructions_utils.py:{user.profile.name})KeyErrorartifact.prefixFixes #575