feat: support nested state values in instruction templates#5197
feat: support nested state values in instruction templates#5197Ankitajainkuniya wants to merge 1 commit into
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. |
|
Hi @Ankitajainkuniya , Thank you for your contribution! It appears you haven't yet signed the Contributor License Agreement (CLA). Please visit https://cla.developers.google.com/ to complete the signing process. Once the CLA is signed, we'll be able to proceed with the review of your PR. Thank you! |
|
Hi @Ankitajainkuniya , Since the requested changes are still pending, I'm going to close this PR. Feel free to reopen once you've had a chance to address the requested changes, or create a new PR. Thanks! |
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