googleapis / googleapis/python-aiplatform

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

Abierto
#6,877 0 comentarios 0 reacciones 0 asignados Ver en GitHub
api: vertex-ai
Lenguaje dominante
Python
Estrellas
905
Forks
465
Merge medio
1 d 13 h
PR fusionados (30 d)
44

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.