googleapis / googleapis/python-aiplatform
`A2aAgent` builds agent-card `url` from default region (us-central1), ignoring `GOOGLE_CLOUD_AGENT_ENGINE_LOCATION`
- Lingua principale
- Python
- Stelle
- 905
- Fork
- 465
- Merge medio
- 1g 13h
- PR unite (30g)
- 44
Descrizione
### 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)
```
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.