Skip to content

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

@qingvincentyin

Description

@qingvincentyin

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    api: vertex-aiIssues related to the googleapis/python-aiplatform API.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions