googleapis / googleapis/python-aiplatform

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

Đang mở
#6,521 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
api: vertex-ai
Ngôn ngữ chính
Python
Star
905
Fork
465
Merge trung bình
1 ngày 13 giờ
Pull request đã merge (30 ngày)
44

Mô tả

#### 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:

```python
# 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):

```python
# 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:

```python
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
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu trong vertexai.agent_engines.templates.adk và kiểm tra AdkApp.set_up(), sau đó so sánh app_name của template đó với Runner._validate_runner_params và _convert_response_events. Tái hiện đường dẫn lưu/tải artifact bằng môi trường Agent Engine được mô tả và xác nhận rằng tên của ADK App được bọc được sử dụng nhất quán mà không phụ thuộc vào GOOGLE_CLOUD_AGENT_ENGINE_ID dạng số.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
google-cloud, python
Lĩnh vực
ai, backend, cloud
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
55/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.