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

Open Beginner friendly
#6,877 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
68/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
python
Domain
api, backend

Research direction

Start in vertexai/preview/reasoning_engines/templates/a2a.py, reading A2aAgent.init and set_up(), then compare location handling with vertexai/agent_engines/templates/adk.py. Verify the served card for a non-us-central1 deployment; done means its URL uses the runtime region consistently while default-region behavior remains intact.

Written by the indexing model from the issue text.

Description

api: vertex-ai
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/<id> 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/<project>/locations/us-east1/reasoningEngines/<id>/a2a/v1/card

Expectedcard.url:

https://us-east1-aiplatform.googleapis.com/v1beta1/projects/<project>/locations/us-east1/reasoningEngines/<id>/a2a

Actualcard.url:

https://us-central1-aiplatform.googleapis.com/v1beta1/projects/<project>/locations/us-central1/reasoningEngines/<id>/a2a

(The reasoningEngines/<id> 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):

"location": initializer.global_config.location,

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

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:

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:

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:

import os, vertexai
_loc = os.environ.get("GOOGLE_CLOUD_AGENT_ENGINE_LOCATION")
if _loc:
    vertexai.init(location=_loc)
Dominant language
Python
Stars
907
Forks
467
Avg merge
1d 13h
Merged PRs (30d)
44

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.