From 1c3fbe5ea6443f30ab10ddfa7e6563177fe60908 Mon Sep 17 00:00:00 2001 From: Anish Agrawal Date: Mon, 28 Jul 2025 17:21:04 -0700 Subject: [PATCH 1/6] env var refresh --- src/agentex/lib/adk/utils/_modules/client.py | 3 ++- src/agentex/lib/sdk/fastacp/base/base_acp_server.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/agentex/lib/adk/utils/_modules/client.py b/src/agentex/lib/adk/utils/_modules/client.py index ba3246f1..742538a7 100644 --- a/src/agentex/lib/adk/utils/_modules/client.py +++ b/src/agentex/lib/adk/utils/_modules/client.py @@ -1,10 +1,11 @@ import os from agentex import AsyncAgentex -from agentex.lib.environment_variables import refreshed_environment_variables +from agentex.lib.environment_variables import refreshed_environment_variables, EnvironmentVariables def create_async_agentex_client(**kwargs): + EnvironmentVariables.refresh() agent_id = refreshed_environment_variables.AGENT_ID default_headers = { "x-agent-identity": agent_id diff --git a/src/agentex/lib/sdk/fastacp/base/base_acp_server.py b/src/agentex/lib/sdk/fastacp/base/base_acp_server.py index f3ca53de..79e7e950 100644 --- a/src/agentex/lib/sdk/fastacp/base/base_acp_server.py +++ b/src/agentex/lib/sdk/fastacp/base/base_acp_server.py @@ -398,7 +398,7 @@ async def _register_agent(self, env_vars: EnvironmentVariables): os.environ["AGENT_NAME"] = agent_name refreshed_environment_variables.AGENT_ID = agent_id refreshed_environment_variables.AGENT_NAME = agent_name - + logger.info( f"Successfully registered agent '{agent_name}' with Agentex server with acp_url: {full_acp_url}. Registration data: {registration_data}" ) From 34ec0fa055f85d5878c72b3e48685863c664fcda Mon Sep 17 00:00:00 2001 From: Anish Agrawal Date: Mon, 28 Jul 2025 18:04:17 -0700 Subject: [PATCH 2/6] client fix --- .../00_sync/010_multiturn/manifest.yaml | 7 ++- src/agentex/lib/adk/utils/_modules/client.py | 46 +++++++++++++++---- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/examples/tutorials/00_sync/010_multiturn/manifest.yaml b/examples/tutorials/00_sync/010_multiturn/manifest.yaml index c0c7a08f..abd95a6d 100644 --- a/examples/tutorials/00_sync/010_multiturn/manifest.yaml +++ b/examples/tutorials/00_sync/010_multiturn/manifest.yaml @@ -114,4 +114,9 @@ deployment: memory: "1Gi" limits: cpu: "1000m" - memory: "2Gi" \ No newline at end of file + memory: "2Gi" + +auth: + principal: + user_id: d6dee46a-25e2-45af-bf89-eb6ae949ac1a + account_id: 6630377a5a7b09c735cfeebb \ No newline at end of file diff --git a/src/agentex/lib/adk/utils/_modules/client.py b/src/agentex/lib/adk/utils/_modules/client.py index 742538a7..8eeb6050 100644 --- a/src/agentex/lib/adk/utils/_modules/client.py +++ b/src/agentex/lib/adk/utils/_modules/client.py @@ -1,13 +1,43 @@ -import os +import threading +from typing import Dict, Optional, Any from agentex import AsyncAgentex -from agentex.lib.environment_variables import refreshed_environment_variables, EnvironmentVariables +from agentex.lib.environment_variables import EnvironmentVariables, refreshed_environment_variables +_client: Optional["AsyncAgentex"] = None +_cached_headers: Dict[str, str] = {} +_init_kwargs: Dict[str, Any] = {} +_lock = threading.RLock() -def create_async_agentex_client(**kwargs): + +def _build_headers() -> Dict[str, str]: EnvironmentVariables.refresh() - agent_id = refreshed_environment_variables.AGENT_ID - default_headers = { - "x-agent-identity": agent_id - } - return AsyncAgentex(default_headers=default_headers, **kwargs) + if refreshed_environment_variables and getattr(refreshed_environment_variables, "AGENT_ID", None): + return {"x-agent-identity": refreshed_environment_variables.AGENT_ID} + return {} + + +def create_async_agentex_client(**kwargs) -> "AsyncAgentex": + """ + Return a cached AsyncAgentex instance (created synchronously). + Each call re-checks env vars and updates client.default_headers if needed. + """ + global _client, _cached_headers, _init_kwargs + + new_headers = _build_headers() + + with _lock: + # First time (or kwargs changed) -> build a new client + if _client is None or kwargs != _init_kwargs: + _client = AsyncAgentex(default_headers=new_headers.copy(), **kwargs) + _cached_headers = new_headers + _init_kwargs = dict(kwargs) + return _client + + # Same client; maybe headers changed + if new_headers != _cached_headers: + _cached_headers = new_headers + _client.default_headers.clear() + _client.default_headers.update(new_headers) + + return _client \ No newline at end of file From 96ef0badd8640e1f544311b34a61d2a1e26aa1d5 Mon Sep 17 00:00:00 2001 From: Anish Agrawal Date: Mon, 28 Jul 2025 18:06:58 -0700 Subject: [PATCH 3/6] deploy/run env var --- examples/tutorials/00_sync/010_multiturn/manifest.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/tutorials/00_sync/010_multiturn/manifest.yaml b/examples/tutorials/00_sync/010_multiturn/manifest.yaml index abd95a6d..720829f4 100644 --- a/examples/tutorials/00_sync/010_multiturn/manifest.yaml +++ b/examples/tutorials/00_sync/010_multiturn/manifest.yaml @@ -115,8 +115,3 @@ deployment: limits: cpu: "1000m" memory: "2Gi" - -auth: - principal: - user_id: d6dee46a-25e2-45af-bf89-eb6ae949ac1a - account_id: 6630377a5a7b09c735cfeebb \ No newline at end of file From 22a954c74c3637812dcbde40ab4fc997b46045ef Mon Sep 17 00:00:00 2001 From: Anish Agrawal Date: Mon, 28 Jul 2025 18:07:14 -0700 Subject: [PATCH 4/6] deploy/run env var --- examples/tutorials/00_sync/010_multiturn/manifest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/tutorials/00_sync/010_multiturn/manifest.yaml b/examples/tutorials/00_sync/010_multiturn/manifest.yaml index 720829f4..c0c7a08f 100644 --- a/examples/tutorials/00_sync/010_multiturn/manifest.yaml +++ b/examples/tutorials/00_sync/010_multiturn/manifest.yaml @@ -114,4 +114,4 @@ deployment: memory: "1Gi" limits: cpu: "1000m" - memory: "2Gi" + memory: "2Gi" \ No newline at end of file From 6a8eac058c8aeb5c13529f3e08a45b91192bbcfc Mon Sep 17 00:00:00 2001 From: Anish Agrawal Date: Mon, 28 Jul 2025 18:18:39 -0700 Subject: [PATCH 5/6] client update --- src/agentex/lib/adk/_modules/acp.py | 4 ++-- src/agentex/lib/adk/_modules/agent_task_tracker.py | 4 ++-- src/agentex/lib/adk/_modules/agents.py | 4 ++-- src/agentex/lib/adk/_modules/events.py | 4 ++-- src/agentex/lib/adk/_modules/messages.py | 4 ++-- src/agentex/lib/adk/_modules/state.py | 4 ++-- src/agentex/lib/adk/_modules/streaming.py | 4 ++-- src/agentex/lib/adk/_modules/tasks.py | 4 ++-- src/agentex/lib/adk/_modules/tracing.py | 4 ++-- src/agentex/lib/adk/utils/_modules/client.py | 2 +- src/agentex/lib/sdk/fastacp/base/base_acp_server.py | 3 ++- 11 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/agentex/lib/adk/_modules/acp.py b/src/agentex/lib/adk/_modules/acp.py index 59c1fc63..650fe486 100644 --- a/src/agentex/lib/adk/_modules/acp.py +++ b/src/agentex/lib/adk/_modules/acp.py @@ -4,7 +4,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.services.adk.acp.acp import ACPService from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers from agentex.lib.core.temporal.activities.adk.acp.acp_activities import ( @@ -41,7 +41,7 @@ def __init__(self, acp_service: ACPService | None = None): acp_activities (Optional[ACPActivities]): Optional pre-configured ACP activities. If None, will be auto-initialized. """ if acp_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._acp_service = ACPService(agentex_client=agentex_client, tracer=tracer) else: diff --git a/src/agentex/lib/adk/_modules/agent_task_tracker.py b/src/agentex/lib/adk/_modules/agent_task_tracker.py index 0a793bd2..b7385ee1 100644 --- a/src/agentex/lib/adk/_modules/agent_task_tracker.py +++ b/src/agentex/lib/adk/_modules/agent_task_tracker.py @@ -3,7 +3,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers from agentex.lib.core.temporal.activities.adk.agent_task_tracker_activities import ( @@ -34,7 +34,7 @@ def __init__( agent_task_tracker_service: AgentTaskTrackerService | None = None, ): if agent_task_tracker_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._agent_task_tracker_service = AgentTaskTrackerService( agentex_client=agentex_client, tracer=tracer diff --git a/src/agentex/lib/adk/_modules/agents.py b/src/agentex/lib/adk/_modules/agents.py index fcbf3cca..b97633c6 100644 --- a/src/agentex/lib/adk/_modules/agents.py +++ b/src/agentex/lib/adk/_modules/agents.py @@ -1,7 +1,7 @@ from datetime import timedelta from typing import Optional -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.temporal.activities.adk.agents_activities import AgentsActivityName, GetAgentParams from temporalio.common import RetryPolicy @@ -29,7 +29,7 @@ def __init__( agents_service: Optional[AgentsService] = None, ): if agents_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._agents_service = AgentsService(agentex_client=agentex_client, tracer=tracer) else: diff --git a/src/agentex/lib/adk/_modules/events.py b/src/agentex/lib/adk/_modules/events.py index 3d771ab6..20817a0a 100644 --- a/src/agentex/lib/adk/_modules/events.py +++ b/src/agentex/lib/adk/_modules/events.py @@ -3,7 +3,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.services.adk.events import EventsService from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers from agentex.lib.core.temporal.activities.adk.events_activities import ( @@ -33,7 +33,7 @@ def __init__( events_service: EventsService | None = None, ): if events_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._events_service = EventsService( agentex_client=agentex_client, tracer=tracer diff --git a/src/agentex/lib/adk/_modules/messages.py b/src/agentex/lib/adk/_modules/messages.py index ec074020..2a0e926c 100644 --- a/src/agentex/lib/adk/_modules/messages.py +++ b/src/agentex/lib/adk/_modules/messages.py @@ -3,7 +3,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.adapters.streams.adapter_redis import RedisEventStreamRepository from agentex.lib.core.services.adk.messages import MessagesService from agentex.lib.core.services.adk.streaming import StreamingService @@ -38,7 +38,7 @@ def __init__( messages_service: MessagesService | None = None, ): if messages_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() stream_repository = RedisEventStreamRepository() streaming_service = StreamingService( agentex_client=agentex_client, diff --git a/src/agentex/lib/adk/_modules/state.py b/src/agentex/lib/adk/_modules/state.py index 8f8fd8a5..7759e981 100644 --- a/src/agentex/lib/adk/_modules/state.py +++ b/src/agentex/lib/adk/_modules/state.py @@ -5,7 +5,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.services.adk.state import StateService from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers from agentex.lib.core.temporal.activities.adk.state_activities import ( @@ -37,7 +37,7 @@ def __init__( state_service: StateService | None = None, ): if state_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._state_service = StateService( agentex_client=agentex_client, tracer=tracer diff --git a/src/agentex/lib/adk/_modules/streaming.py b/src/agentex/lib/adk/_modules/streaming.py index a752db49..67c81ba9 100644 --- a/src/agentex/lib/adk/_modules/streaming.py +++ b/src/agentex/lib/adk/_modules/streaming.py @@ -1,7 +1,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.adapters.streams.adapter_redis import RedisEventStreamRepository from agentex.lib.core.services.adk.streaming import ( StreamingService, @@ -35,7 +35,7 @@ def __init__(self, streaming_service: StreamingService | None = None): """ if streaming_service is None: stream_repository = RedisEventStreamRepository() - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() self._streaming_service = StreamingService( agentex_client=agentex_client, stream_repository=stream_repository, diff --git a/src/agentex/lib/adk/_modules/tasks.py b/src/agentex/lib/adk/_modules/tasks.py index 9b4b51ee..2b95dd52 100644 --- a/src/agentex/lib/adk/_modules/tasks.py +++ b/src/agentex/lib/adk/_modules/tasks.py @@ -3,7 +3,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.services.adk.tasks import TasksService from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers from agentex.lib.core.temporal.activities.adk.tasks_activities import ( @@ -32,7 +32,7 @@ def __init__( tasks_service: TasksService | None = None, ): if tasks_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._tasks_service = TasksService( agentex_client=agentex_client, tracer=tracer diff --git a/src/agentex/lib/adk/_modules/tracing.py b/src/agentex/lib/adk/_modules/tracing.py index cc45a899..f4073d0e 100644 --- a/src/agentex/lib/adk/_modules/tracing.py +++ b/src/agentex/lib/adk/_modules/tracing.py @@ -6,7 +6,7 @@ from temporalio.common import RetryPolicy from agentex import AsyncAgentex -from agentex.lib.adk.utils._modules.client import create_async_agentex_client +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from agentex.lib.core.services.adk.tracing import TracingService from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers from agentex.lib.core.temporal.activities.adk.tracing_activities import ( @@ -39,7 +39,7 @@ def __init__(self, tracing_service: TracingService | None = None): tracing_activities (Optional[TracingActivities]): Optional pre-configured tracing activities. If None, will be auto-initialized. """ if tracing_service is None: - agentex_client = create_async_agentex_client() + agentex_client = get_async_agentex_client() tracer = AsyncTracer(agentex_client) self._tracing_service = TracingService(tracer=tracer) else: diff --git a/src/agentex/lib/adk/utils/_modules/client.py b/src/agentex/lib/adk/utils/_modules/client.py index 8eeb6050..bfe4ad93 100644 --- a/src/agentex/lib/adk/utils/_modules/client.py +++ b/src/agentex/lib/adk/utils/_modules/client.py @@ -17,7 +17,7 @@ def _build_headers() -> Dict[str, str]: return {} -def create_async_agentex_client(**kwargs) -> "AsyncAgentex": +def get_async_agentex_client(**kwargs) -> "AsyncAgentex": """ Return a cached AsyncAgentex instance (created synchronously). Each call re-checks env vars and updates client.default_headers if needed. diff --git a/src/agentex/lib/sdk/fastacp/base/base_acp_server.py b/src/agentex/lib/sdk/fastacp/base/base_acp_server.py index 79e7e950..6bfb525b 100644 --- a/src/agentex/lib/sdk/fastacp/base/base_acp_server.py +++ b/src/agentex/lib/sdk/fastacp/base/base_acp_server.py @@ -9,6 +9,7 @@ import httpx import uvicorn +from agentex.lib.adk.utils._modules.client import get_async_agentex_client from fastapi import FastAPI, Request from fastapi.responses import StreamingResponse from pydantic import TypeAdapter, ValidationError @@ -398,7 +399,7 @@ async def _register_agent(self, env_vars: EnvironmentVariables): os.environ["AGENT_NAME"] = agent_name refreshed_environment_variables.AGENT_ID = agent_id refreshed_environment_variables.AGENT_NAME = agent_name - + get_async_agentex_client() # refresh cache logger.info( f"Successfully registered agent '{agent_name}' with Agentex server with acp_url: {full_acp_url}. Registration data: {registration_data}" ) From d41a018e164896ac451aba5c7c531b5b24048292 Mon Sep 17 00:00:00 2001 From: Anish Agrawal Date: Mon, 28 Jul 2025 18:55:33 -0700 Subject: [PATCH 6/6] merge --- examples/tutorials/00_sync/010_multiturn/manifest.yaml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/examples/tutorials/00_sync/010_multiturn/manifest.yaml b/examples/tutorials/00_sync/010_multiturn/manifest.yaml index abd95a6d..6b10e48b 100644 --- a/examples/tutorials/00_sync/010_multiturn/manifest.yaml +++ b/examples/tutorials/00_sync/010_multiturn/manifest.yaml @@ -114,9 +114,4 @@ deployment: memory: "1Gi" limits: cpu: "1000m" - memory: "2Gi" - -auth: - principal: - user_id: d6dee46a-25e2-45af-bf89-eb6ae949ac1a - account_id: 6630377a5a7b09c735cfeebb \ No newline at end of file + memory: "2Gi" \ No newline at end of file