agentex-sdk 0.2.3__py3-none-any.whl → 0.2.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
agentex/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "agentex"
4
- __version__ = "0.2.3" # x-release-please-version
4
+ __version__ = "0.2.4" # x-release-please-version
@@ -4,6 +4,7 @@ from typing import Any
4
4
  from temporalio.common import RetryPolicy
5
5
 
6
6
  from agentex import AsyncAgentex
7
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
7
8
  from agentex.lib.core.services.adk.acp.acp import ACPService
8
9
  from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers
9
10
  from agentex.lib.core.temporal.activities.adk.acp.acp_activities import (
@@ -40,7 +41,7 @@ class ACPModule:
40
41
  acp_activities (Optional[ACPActivities]): Optional pre-configured ACP activities. If None, will be auto-initialized.
41
42
  """
42
43
  if acp_service is None:
43
- agentex_client = AsyncAgentex()
44
+ agentex_client = get_async_agentex_client()
44
45
  tracer = AsyncTracer(agentex_client)
45
46
  self._acp_service = ACPService(agentex_client=agentex_client, tracer=tracer)
46
47
  else:
@@ -3,6 +3,7 @@ from datetime import timedelta
3
3
  from temporalio.common import RetryPolicy
4
4
 
5
5
  from agentex import AsyncAgentex
6
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
6
7
  from agentex.lib.core.services.adk.agent_task_tracker import AgentTaskTrackerService
7
8
  from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers
8
9
  from agentex.lib.core.temporal.activities.adk.agent_task_tracker_activities import (
@@ -33,7 +34,7 @@ class AgentTaskTrackerModule:
33
34
  agent_task_tracker_service: AgentTaskTrackerService | None = None,
34
35
  ):
35
36
  if agent_task_tracker_service is None:
36
- agentex_client = AsyncAgentex()
37
+ agentex_client = get_async_agentex_client()
37
38
  tracer = AsyncTracer(agentex_client)
38
39
  self._agent_task_tracker_service = AgentTaskTrackerService(
39
40
  agentex_client=agentex_client, tracer=tracer
@@ -1,6 +1,7 @@
1
1
  from datetime import timedelta
2
2
  from typing import Optional
3
3
 
4
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
4
5
  from agentex.lib.core.temporal.activities.adk.agents_activities import AgentsActivityName, GetAgentParams
5
6
  from temporalio.common import RetryPolicy
6
7
 
@@ -28,7 +29,7 @@ class AgentsModule:
28
29
  agents_service: Optional[AgentsService] = None,
29
30
  ):
30
31
  if agents_service is None:
31
- agentex_client = AsyncAgentex()
32
+ agentex_client = get_async_agentex_client()
32
33
  tracer = AsyncTracer(agentex_client)
33
34
  self._agents_service = AgentsService(agentex_client=agentex_client, tracer=tracer)
34
35
  else:
@@ -3,6 +3,7 @@ from datetime import timedelta
3
3
  from temporalio.common import RetryPolicy
4
4
 
5
5
  from agentex import AsyncAgentex
6
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
6
7
  from agentex.lib.core.services.adk.events import EventsService
7
8
  from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers
8
9
  from agentex.lib.core.temporal.activities.adk.events_activities import (
@@ -32,7 +33,7 @@ class EventsModule:
32
33
  events_service: EventsService | None = None,
33
34
  ):
34
35
  if events_service is None:
35
- agentex_client = AsyncAgentex()
36
+ agentex_client = get_async_agentex_client()
36
37
  tracer = AsyncTracer(agentex_client)
37
38
  self._events_service = EventsService(
38
39
  agentex_client=agentex_client, tracer=tracer
@@ -3,6 +3,7 @@ from datetime import timedelta
3
3
  from temporalio.common import RetryPolicy
4
4
 
5
5
  from agentex import AsyncAgentex
6
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
6
7
  from agentex.lib.core.adapters.streams.adapter_redis import RedisStreamRepository
7
8
  from agentex.lib.core.services.adk.messages import MessagesService
8
9
  from agentex.lib.core.services.adk.streaming import StreamingService
@@ -37,7 +38,7 @@ class MessagesModule:
37
38
  messages_service: MessagesService | None = None,
38
39
  ):
39
40
  if messages_service is None:
40
- agentex_client = AsyncAgentex()
41
+ agentex_client = get_async_agentex_client()
41
42
  stream_repository = RedisStreamRepository()
42
43
  streaming_service = StreamingService(
43
44
  agentex_client=agentex_client,
@@ -5,6 +5,7 @@ from pydantic import BaseModel
5
5
  from temporalio.common import RetryPolicy
6
6
 
7
7
  from agentex import AsyncAgentex
8
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
8
9
  from agentex.lib.core.services.adk.state import StateService
9
10
  from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers
10
11
  from agentex.lib.core.temporal.activities.adk.state_activities import (
@@ -36,7 +37,7 @@ class StateModule:
36
37
  state_service: StateService | None = None,
37
38
  ):
38
39
  if state_service is None:
39
- agentex_client = AsyncAgentex()
40
+ agentex_client = get_async_agentex_client()
40
41
  tracer = AsyncTracer(agentex_client)
41
42
  self._state_service = StateService(
42
43
  agentex_client=agentex_client, tracer=tracer
@@ -1,6 +1,7 @@
1
1
  from temporalio.common import RetryPolicy
2
2
 
3
3
  from agentex import AsyncAgentex
4
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
4
5
  from agentex.lib.core.adapters.streams.adapter_redis import RedisStreamRepository
5
6
  from agentex.lib.core.services.adk.streaming import (
6
7
  StreamingService,
@@ -34,7 +35,7 @@ class StreamingModule:
34
35
  """
35
36
  if streaming_service is None:
36
37
  stream_repository = RedisStreamRepository()
37
- agentex_client = AsyncAgentex()
38
+ agentex_client = get_async_agentex_client()
38
39
  self._streaming_service = StreamingService(
39
40
  agentex_client=agentex_client,
40
41
  stream_repository=stream_repository,
@@ -3,6 +3,7 @@ from datetime import timedelta
3
3
  from temporalio.common import RetryPolicy
4
4
 
5
5
  from agentex import AsyncAgentex
6
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
6
7
  from agentex.lib.core.services.adk.tasks import TasksService
7
8
  from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers
8
9
  from agentex.lib.core.temporal.activities.adk.tasks_activities import (
@@ -31,7 +32,7 @@ class TasksModule:
31
32
  tasks_service: TasksService | None = None,
32
33
  ):
33
34
  if tasks_service is None:
34
- agentex_client = AsyncAgentex()
35
+ agentex_client = get_async_agentex_client()
35
36
  tracer = AsyncTracer(agentex_client)
36
37
  self._tasks_service = TasksService(
37
38
  agentex_client=agentex_client, tracer=tracer
@@ -6,6 +6,7 @@ from typing import Any
6
6
  from temporalio.common import RetryPolicy
7
7
 
8
8
  from agentex import AsyncAgentex
9
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
9
10
  from agentex.lib.core.services.adk.tracing import TracingService
10
11
  from agentex.lib.core.temporal.activities.activity_helpers import ActivityHelpers
11
12
  from agentex.lib.core.temporal.activities.adk.tracing_activities import (
@@ -38,7 +39,7 @@ class TracingModule:
38
39
  tracing_activities (Optional[TracingActivities]): Optional pre-configured tracing activities. If None, will be auto-initialized.
39
40
  """
40
41
  if tracing_service is None:
41
- agentex_client = AsyncAgentex()
42
+ agentex_client = get_async_agentex_client()
42
43
  tracer = AsyncTracer(agentex_client)
43
44
  self._tracing_service = TracingService(tracer=tracer)
44
45
  else:
@@ -0,0 +1,43 @@
1
+ import threading
2
+ from typing import Dict, Optional, Any
3
+
4
+ from agentex import AsyncAgentex
5
+ from agentex.lib.environment_variables import EnvironmentVariables, refreshed_environment_variables
6
+
7
+ _client: Optional["AsyncAgentex"] = None
8
+ _cached_headers: Dict[str, str] = {}
9
+ _init_kwargs: Dict[str, Any] = {}
10
+ _lock = threading.RLock()
11
+
12
+
13
+ def _build_headers() -> Dict[str, str]:
14
+ EnvironmentVariables.refresh()
15
+ if refreshed_environment_variables and getattr(refreshed_environment_variables, "AGENT_ID", None):
16
+ return {"x-agent-identity": refreshed_environment_variables.AGENT_ID}
17
+ return {}
18
+
19
+
20
+ def get_async_agentex_client(**kwargs) -> "AsyncAgentex":
21
+ """
22
+ Return a cached AsyncAgentex instance (created synchronously).
23
+ Each call re-checks env vars and updates client.default_headers if needed.
24
+ """
25
+ global _client, _cached_headers, _init_kwargs
26
+
27
+ new_headers = _build_headers()
28
+
29
+ with _lock:
30
+ # First time (or kwargs changed) -> build a new client
31
+ if _client is None or kwargs != _init_kwargs:
32
+ _client = AsyncAgentex(default_headers=new_headers.copy(), **kwargs)
33
+ _cached_headers = new_headers
34
+ _init_kwargs = dict(kwargs)
35
+ return _client
36
+
37
+ # Same client; maybe headers changed
38
+ if new_headers != _cached_headers:
39
+ _cached_headers = new_headers
40
+ _client.default_headers.clear()
41
+ _client.default_headers.update(new_headers)
42
+
43
+ return _client
@@ -2,18 +2,20 @@ import asyncio
2
2
  import base64
3
3
  import inspect
4
4
  import json
5
+ import os
5
6
  from collections.abc import AsyncGenerator, Awaitable, Callable
6
7
  from contextlib import asynccontextmanager
7
8
  from typing import Any
8
9
 
9
10
  import httpx
10
11
  import uvicorn
12
+ from agentex.lib.adk.utils._modules.client import get_async_agentex_client
11
13
  from fastapi import FastAPI, Request
12
14
  from fastapi.responses import StreamingResponse
13
15
  from pydantic import TypeAdapter, ValidationError
14
16
 
15
17
  # from agentex.lib.sdk.fastacp.types import BaseACPConfig
16
- from agentex.lib.environment_variables import EnvironmentVariables
18
+ from agentex.lib.environment_variables import EnvironmentVariables, refreshed_environment_variables
17
19
  from agentex.lib.types.acp import (
18
20
  PARAMS_MODEL_BY_METHOD,
19
21
  RPC_SYNC_METHODS,
@@ -390,6 +392,14 @@ class BaseACPServer(FastAPI):
390
392
  registration_url, json=registration_data, timeout=30.0
391
393
  )
392
394
  if response.status_code == 200:
395
+ agent = response.json()
396
+ agent_id, agent_name = agent["id"], agent["name"]
397
+
398
+ os.environ["AGENT_ID"] = agent_id
399
+ os.environ["AGENT_NAME"] = agent_name
400
+ refreshed_environment_variables.AGENT_ID = agent_id
401
+ refreshed_environment_variables.AGENT_NAME = agent_name
402
+ get_async_agentex_client() # refresh cache
393
403
  logger.info(
394
404
  f"Successfully registered agent '{env_vars.AGENT_NAME}' with Agentex server with acp_url: {full_acp_url}. Registration data: {registration_data}"
395
405
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: agentex-sdk
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: The official Python library for the agentex API
5
5
  Project-URL: Homepage, https://github.com/scaleapi/agentex-python
6
6
  Project-URL: Repository, https://github.com/scaleapi/agentex-python
@@ -11,7 +11,7 @@ agentex/_resource.py,sha256=S1t7wmR5WUvoDIhZjo_x-E7uoTJBynJ3d8tPJMQYdjw,1106
11
11
  agentex/_response.py,sha256=Tb9zazsnemO2rTxWtBjAD5WBqlhli5ZaXGbiKgdu5DE,28794
12
12
  agentex/_streaming.py,sha256=FNGJExRCF-vTRUZHFKUfoAWFhDGOB3XbioVCF37Jr7E,10104
13
13
  agentex/_types.py,sha256=KyKYySGIfHPod2hho1fPxssk5NuVn8C4MeMTtA-lg80,6198
14
- agentex/_version.py,sha256=gaveMH33nXDCGMmyPCNNYeNapFs-32mlnSES-b86nfA,159
14
+ agentex/_version.py,sha256=VaNYrTPqPn-SxkKTAya0r5W5xO9GosgbDQNkI7gbSFk,159
15
15
  agentex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  agentex/_utils/__init__.py,sha256=PNZ_QJuzZEgyYXqkO1HVhGkj5IU9bglVUcw7H-Knjzw,2062
17
17
  agentex/_utils/_logs.py,sha256=LUjFPc3fweSChBUmjhQD8uYmwQAmFMNDuVFKfjYBQfM,777
@@ -29,15 +29,15 @@ agentex/lib/environment_variables.py,sha256=FbJ-tm_thJs5Fv1q4-oY4CED4DNlwCeu3v4x
29
29
  agentex/lib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  agentex/lib/adk/__init__.py,sha256=-PpVfEvYr_HD7TnxUWU8RCW2OnxfwpPxTW97dKTnqvI,1082
31
31
  agentex/lib/adk/_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- agentex/lib/adk/_modules/acp.py,sha256=0cNsHYCMvMA6GfWpPg4SSbBTFLP8PPx_SXZIoizswUU,8934
33
- agentex/lib/adk/_modules/agent_task_tracker.py,sha256=B6Rwh-_rHzCJrTVWcteVT9l1acSj9WJtQ6NhLgJ9now,6929
34
- agentex/lib/adk/_modules/agents.py,sha256=Rhv2hf2eADfsmSj3Y2CBgoGLfsavgyv14_6cMK_qUJY,2695
35
- agentex/lib/adk/_modules/events.py,sha256=FxJHmENDBzYIcXtWuuDp86tLxbffLGju3qbVih2an_s,5169
36
- agentex/lib/adk/_modules/messages.py,sha256=vYJ4i-69aOYXf-9phN_fMEtqwvp5HL9cW1Kf2vpRxEs,10543
37
- agentex/lib/adk/_modules/state.py,sha256=F4svy-QPVKs0xfb6lz9eMKpb6ibbdUK2thwv94wuL4Y,10637
38
- agentex/lib/adk/_modules/streaming.py,sha256=XpLvIz-MA_SDOw-sIuPS8hFhN-jaGcOxN-LEd1F9pDg,3002
39
- agentex/lib/adk/_modules/tasks.py,sha256=ch-EFsVdc9bkU2tQMm30JVZUlP48ai7pKIOhUkPPABw,4127
40
- agentex/lib/adk/_modules/tracing.py,sha256=sNpG7WNMdWpscjUMGFFthJ1gqxm0_gOkf2yrMulcliM,7251
32
+ agentex/lib/adk/_modules/acp.py,sha256=Km0YgWHqshIufMuoNMtuL_63SDquumU-7DdikJBpBjU,9021
33
+ agentex/lib/adk/_modules/agent_task_tracker.py,sha256=wiLcDh5zDfZvhaSnUJQMbC4IEeAqY9wjfIltkRZ6q18,7016
34
+ agentex/lib/adk/_modules/agents.py,sha256=Eh1X6zcBhmFIS7VRd7cdSYQhkqQPMlKztplPuxSC5_4,2782
35
+ agentex/lib/adk/_modules/events.py,sha256=WFahyafBFvFvGQ21zMXQtqT1q8my7aM8beYCMbcmo7o,5256
36
+ agentex/lib/adk/_modules/messages.py,sha256=6-OxYSuCiY-X9Vcq97naw4Lcf85W3H8zHNNsv0WnNJk,10630
37
+ agentex/lib/adk/_modules/state.py,sha256=8n52ensAq_ebH9gGMWtXFLZ1qqzBn7cbvT12DVBtmsg,10724
38
+ agentex/lib/adk/_modules/streaming.py,sha256=3xtuS5MqWuuDDpUmc4Y5aGET31pBCrZCWem-psvANAk,3089
39
+ agentex/lib/adk/_modules/tasks.py,sha256=iFrsIf2Qv52hCaIw4Xnz8CrXs9vwG1Cu8cTJI-SwSYk,4214
40
+ agentex/lib/adk/_modules/tracing.py,sha256=-D2yGPhvcA7V1JTA95DlrFwzBd-ihu_6R7zenv-URKU,7338
41
41
  agentex/lib/adk/providers/__init__.py,sha256=KPWC8AYsl8lPgpFoRXlGwzozb-peKLAzV_DcTWXBsz4,306
42
42
  agentex/lib/adk/providers/_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  agentex/lib/adk/providers/_modules/litellm.py,sha256=YUHZ_m0kL9wEG5pX9x4BeyioiDjOa2anCWk6uo6-vqQ,9393
@@ -45,6 +45,7 @@ agentex/lib/adk/providers/_modules/openai.py,sha256=h7G3y4Gd2wF3XuYEi_aQXORxZhtH
45
45
  agentex/lib/adk/providers/_modules/sgp.py,sha256=Me5TeU7OPjPBVeEw7a-DQnYcJ3fbGi3liYbuW5CGiLE,3131
46
46
  agentex/lib/adk/utils/__init__.py,sha256=7f6ayV0_fqyw5cwzVANNcZWGJZ-vrrYtZ0qi7KKBRFs,130
47
47
  agentex/lib/adk/utils/_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ agentex/lib/adk/utils/_modules/client.py,sha256=2XrFTwB2y9fTTpSzmaXz8hzHR7VWf4F6cL_rCAwQLZo,1487
48
49
  agentex/lib/adk/utils/_modules/templating.py,sha256=YPm2bY_iBv9jWf0lncRGUpBZyq_QHBCRlM-XbHjauRc,3502
49
50
  agentex/lib/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
51
  agentex/lib/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -176,7 +177,7 @@ agentex/lib/sdk/config/local_development_config.py,sha256=b1AZsOVo1RoHKbk8Nm5nC8
176
177
  agentex/lib/sdk/config/project_config.py,sha256=CGH_r9KbnSFMj2CnBkZnfg41L2o0TeVNz6MwBDKPT_U,3642
177
178
  agentex/lib/sdk/fastacp/__init__.py,sha256=UvAdexdnfb4z0F4a2sfXROFyh9EjH89kf3AxHPybzCM,75
178
179
  agentex/lib/sdk/fastacp/fastacp.py,sha256=K4D7a9EiJfCgWp2hrE_TbpZBaF4Uc46MfndZK3F9mA0,3061
179
- agentex/lib/sdk/fastacp/base/base_acp_server.py,sha256=gsbBb8-zNu991vTh6_f5KjR_NC8Knoyy1YTsPAPN2KQ,17066
180
+ agentex/lib/sdk/fastacp/base/base_acp_server.py,sha256=mvNbY6-KAg1qaIYDfF9bm_fHTsDbvmmf69Z_b8NPa0k,17651
180
181
  agentex/lib/sdk/fastacp/impl/agentic_base_acp.py,sha256=fWLX9_mxmX502EBXoymUz1Tu1vEppshS48-aOSpuvlM,2600
181
182
  agentex/lib/sdk/fastacp/impl/sync_acp.py,sha256=8FEDfBxI31NoVLX9nyckQ8QwA0UV4svC3fhGKgXBIwk,3862
182
183
  agentex/lib/sdk/fastacp/impl/temporal_acp.py,sha256=ZLqjzBBVrXJCXD2bFlrcDkFvpsXZp3thC2rTwZ6xNaY,3737
@@ -287,8 +288,8 @@ agentex/types/messages/batch_create_params.py,sha256=trUV75ntEVnxYhd1FIWub6dHBaN
287
288
  agentex/types/messages/batch_create_response.py,sha256=yaSLTw2MWWpHF23BGO1Xy9js38_7EIqHAuiLha8VSfc,278
288
289
  agentex/types/messages/batch_update_params.py,sha256=Ug5CThbD49a8j4qucg04OdmVrp_gApgpw0hg6NLsR3g,433
289
290
  agentex/types/messages/batch_update_response.py,sha256=TbSBe6SuPzjXXWSj-nRjT1JHGBooTshHQQDa1AixQA8,278
290
- agentex_sdk-0.2.3.dist-info/METADATA,sha256=hoWAam811pyQl421I9RIHGvrZc3O8lVUWaTZbd-y4UQ,14110
291
- agentex_sdk-0.2.3.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
292
- agentex_sdk-0.2.3.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
293
- agentex_sdk-0.2.3.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
294
- agentex_sdk-0.2.3.dist-info/RECORD,,
291
+ agentex_sdk-0.2.4.dist-info/METADATA,sha256=aG_5yz-RiKhUcorcKUbk49pOBWYMHdrWKzMFy4fM5-A,14110
292
+ agentex_sdk-0.2.4.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
293
+ agentex_sdk-0.2.4.dist-info/entry_points.txt,sha256=V7vJuMZdF0UlvgX6KiBN7XUvq_cxF5kplcYvc1QlFaQ,62
294
+ agentex_sdk-0.2.4.dist-info/licenses/LICENSE,sha256=Q1AOx2FtRcMlyMgQJ9eVN2WKPq2mQ33lnB4tvWxabLA,11337
295
+ agentex_sdk-0.2.4.dist-info/RECORD,,