Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[Agent Engine][Adk] app_name mismatch between AdkApp._tmpl_attrs and Runner causes GCS artifact lookup failures in Agent Engine

Open
#6,521 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
55/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
google-cloud, python
Domain
ai, backend, cloud

Research direction

Start in vertexai.agent_engines.templates.adk and inspect AdkApp.set_up(), then compare its template app_name with Runner._validate_runner_params and _convert_response_events. Reproduce the artifact save/load path using the described Agent Engine environment and confirm that the wrapped ADK App name is used consistently without relying on the numerical GOOGLE_CLOUD_AGENT_ENGINE_ID.

Written by the indexing model from the issue text.

Description

api: vertex-ai
Environment details
  • OS type and version: Linux (Vertex AI Agent Engine environment)
  • Python version: Python 3.11+
  • google-cloud-aiplatform version: 1.143.0
Steps to reproduce
  1. Create an agent via Google ADK exposing tools that generate or return visual artifacts (images/videos) using tool_context.save_artifact().
  2. Instantiate and wrap the ADK agent into a Vertex AI SDK template using AdkApp (from vertexai.agent_engines.templates.adk).
  3. Deploy this agent to Agent Engine (Vertex AI platform container mapping to Gemini Enterprise).
  4. Trigger any tool that saved an artifact from the UI chat.
Root Cause Analysis

The issue occurs because the application name used by the container falls back onto the ID assigned by the Cloud platform if not explicitly provided, while the Runner defaults to the name defined in the ADK App instance.

In AdkApp.set_up(), the fallback logic is as follows:

# AdkApp.set_up() fallback logic
if not self._tmpl_attrs.get("app_name"):
    if "GOOGLE_CLOUD_AGENT_ENGINE_ID" in os.environ:
        self._tmpl_attrs["app_name"] = os.environ.get(
            "GOOGLE_CLOUD_AGENT_ENGINE_ID",
        )
    else:
        self._tmpl_attrs["app_name"] = _DEFAULT_APP_NAME

However, the Runner created later defaults to app.name (the static default "app" in ADK if not overridden):

# Runner._validate_runner_params defaults to app.name
app_name = app_name or app.name  # resolves to "app" instead of the ID

This creates a mismatch failure during session artifact reads in _convert_response_events.

Actual Behavior
  • Save Path evaluates using app.name (e.g., "app" or a custom name like "mova"):
    GCS_BUCKET/app/{user_id}/{session_id}/artifact.png

  • Load Path evaluates using AdkApp._tmpl_attrs["app_name"] (e.g., the numerical ID assigned by Google Cloud):
    GCS_BUCKET/8269664996770709504/{user_id}/{session_id}/artifact.png

Because strings like "app" and "8269664996770709504" on bucket paths do not map identically, files aren't found on state loads, and the Gemini Enterprise UI draws empty boxes or fails to render the media.

Moreover, if the user tries to use GOOGLE_CLOUD_AGENT_ENGINE_ID directly to solve the mismatch, the purely numerical ID causes Pydantic validation failures on boot because it is not a valid Python identifier (starts with a digit).

Expected Behavior

The AdkApp should ensure that the app_name in its template attributes matches the name of the ADK App being wrapped, or provide a clean way to synchronize them, rather than falling back to the numerical GOOGLE_CLOUD_AGENT_ENGINE_ID.

Workaround Applied

To fix this manually in user code, one can override _tmpl_attrs["app_name"] after calling super().set_up() in the custom AdkApp class:

class AgentEngineApp(AdkApp):

    def set_up(self) -> None:
        super().set_up()
        # Enforce that AdkApp uses the same name as the ADK App
        self._tmpl_attrs["app_name"] = adk_app.name
Dominant language
Python
Stars
907
Forks
467
Avg merge
1d 8h
Merged PRs (30d)
40

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from googleapis/python-aiplatform

All issues in googleapis/python-aiplatform

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.