googleapis / googleapis/python-aiplatform

`A2aAgent` builds agent-card `url` from default region (us-central1), ignoring `GOOGLE_CLOUD_AGENT_ENGINE_LOCATION`

オープン
#6,877 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
api: vertex-ai
主要言語
Python
スター
905
フォーク
465
平均マージ
1日 13時間
マージ済み PR(30日)
44

説明

### Summary

When an A2A agent (`vertexai.preview.reasoning_engines.A2aAgent`) is deployed to Vertex AI Agent Engine in a region other than `us-central1`, the served Agent Card's `url` field is built with the **wrong region** (`us-central1`). The `reasoningEngines/` resource itself is created in the correct region, but the card `url` — which A2A clients use as the base for `message:send` — points elsewhere, so client calls derived from the card hit the wrong region.

### Environment

- `google-cloud-aiplatform==1.149.0`
- `agents-cli` (google-agents-cli) `0.4.0` — agent generated from its `adk_a2a` template with `--deployment-target agent_runtime`
- `a2a-sdk==0.3.26` (server-side; pinned `~=0.3.22` by the `adk_a2a` template)
- Deploy target: Vertex AI Agent Engine (Agent Runtime), region `us-east1`
- Agent: ADK agent wrapped via `A2aAgent`

### Steps to reproduce

1. Deploy an `A2aAgent`-wrapped ADK agent to Agent Engine in **`us-east1`** (any non-`us-central1` region).
2. Fetch the authenticated agent card:
`GET https://us-east1-aiplatform.googleapis.com/v1beta1/projects//locations/us-east1/reasoningEngines//a2a/v1/card`

**Expected** — `card.url`:
```
https://us-east1-aiplatform.googleapis.com/v1beta1/projects//locations/us-east1/reasoningEngines//a2a
```

**Actual** — `card.url`:
```
https://us-central1-aiplatform.googleapis.com/v1beta1/projects//locations/us-central1/reasoningEngines//a2a
```

(The `reasoningEngines/` resource is correctly in `us-east1`; only the card `url` is wrong.)

### Root cause

In `vertexai/preview/reasoning_engines/templates/a2a.py`:

`A2aAgent.__init__` captures the location from the SDK global config (L198):

```python
"location": initializer.global_config.location,
```

`set_up()` then uses that captured value to build the card URL (L244, L249):

```python
location = self._tmpl_attrs.get("location")
...
self.agent_card.url = f"https://{location}-aiplatform.googleapis.com/{version}/projects/{project}/locations/{location}/reasoningEngines/{agent_engine_id}/a2a"
```

`initializer.global_config.location` falls back to `DEFAULT_REGION = "us-central1"` (`google/cloud/aiplatform/constants/base.py:21`) whenever `vertexai.init(location=...)` has not been called — which is the case in the deployed runtime — so the URL is stamped with `us-central1`.

The Agent Engine runtime **does** inject the correct region as the env var `GOOGLE_CLOUD_AGENT_ENGINE_LOCATION` (confirmed present at runtime with the real region). `AdkApp` already honors it — `vertexai/agent_engines/templates/adk.py:321`:

```python
location = os.getenv("GOOGLE_CLOUD_AGENT_ENGINE_LOCATION", "") or os.getenv("GOOGLE_CLOUD_LOCATION", "")
```

`A2aAgent` does not, so the two templates resolve the deploy region inconsistently.

### Suggested fix

Resolve the location in `A2aAgent.set_up()` the same way `AdkApp` does, preferring the runtime-injected env var over the SDK default:

```python
location = (
os.getenv("GOOGLE_CLOUD_AGENT_ENGINE_LOCATION")
or os.getenv("GOOGLE_CLOUD_LOCATION")
or self._tmpl_attrs.get("location")
)
```

Resolve in `set_up()` (not `__init__`): `__init__` also runs during deploy-time introspection, where the runtime env var is absent.

### Workaround

In user code imported before the `A2aAgent` is constructed, set the SDK location at import:

```python
import os, vertexai
_loc = os.environ.get("GOOGLE_CLOUD_AGENT_ENGINE_LOCATION")
if _loc:
vertexai.init(location=_loc)
```

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。