agentx-python 0.6.34__py3-none-any.whl → 0.6.35__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.
agentx/agentx.py CHANGED
@@ -20,10 +20,12 @@ class AgentX:
20
20
  if self.api_key and not os.getenv("AGENTX_API_KEY"):
21
21
  os.environ["AGENTX_API_KEY"] = self.api_key
22
22
 
23
- # base_url overrides AGENTX_API_BASE_URL env var (and the SDK default)
23
+ # base_url overrides AGENTX_API_BASE_URL env var (and the SDK default). It is
24
+ # deliberately NOT written back into os.environ: the constructor used to do that, which
25
+ # made the last-constructed client silently re-point every other client in the process
26
+ # (deep-dive round 3, bug #1). Each sub-client below receives this value explicitly and
27
+ # captures it at construction instead.
24
28
  self.base_url = base_url or os.getenv("AGENTX_API_BASE_URL")
25
- if self.base_url:
26
- os.environ["AGENTX_API_BASE_URL"] = self.base_url
27
29
 
28
30
  self.workspace_id = workspace_id or os.getenv("AGENTX_WORKSPACE_ID")
29
31
 
@@ -58,29 +60,29 @@ class AgentX:
58
60
 
59
61
  # Report real, after-the-fact outcomes ("the ticket got reopened") against traces - the
60
62
  # ground truth behind the dashboard's Judge Calibration card. Self-host only.
61
- self.outcomes = OutcomesClient(api_key=self.api_key)
63
+ self.outcomes = OutcomesClient(api_key=self.api_key, base_url=self.base_url)
62
64
 
63
65
  from agentx.projects import ProjectsClient
64
66
 
65
67
  # Project CRUD (self-host): isolated tenants with their own API keys (P1.1).
66
- self.projects = ProjectsClient(api_key=self.api_key)
68
+ self.projects = ProjectsClient(api_key=self.api_key, base_url=self.base_url)
67
69
 
68
70
  from agentx.traces import TracesClient
69
71
 
70
72
  # The read side of tracing: trace-by-id detail and paginated listing (P1.2).
71
- self.traces = TracesClient(api_key=self.api_key)
73
+ self.traces = TracesClient(api_key=self.api_key, base_url=self.base_url)
72
74
 
73
75
  from agentx.export import ExportClient
74
76
 
75
77
  # Bulk NDJSON egress for backup/migration (P2.1): manifest, per-entity streaming, and
76
78
  # directory dumps. Self-host only.
77
- self.export = ExportClient(api_key=self.api_key)
79
+ self.export = ExportClient(api_key=self.api_key, base_url=self.base_url)
78
80
 
79
81
  from agentx.feedback import FeedbackClient
80
82
 
81
83
  # Forward end-user votes ("up"/"down") on traced responses - a "down" raises a signal
82
84
  # directly, and every vote feeds Judge Calibration alongside outcomes. Self-host only.
83
- self.feedback = FeedbackClient(api_key=self.api_key)
85
+ self.feedback = FeedbackClient(api_key=self.api_key, base_url=self.base_url)
84
86
 
85
87
  _ingest_client = IngestClient(
86
88
  api_key=self.api_key,
@@ -96,9 +98,9 @@ class AgentX:
96
98
  return cls()
97
99
 
98
100
  def get_agent(self, id: str) -> Agent:
99
- url = f"{api_base()}/access/agents/{id}"
101
+ url = f"{self.base_url or api_base()}/access/agents/{id}"
100
102
  # Make a GET request to the AgentX API
101
- response = requests.get(url, headers=get_headers())
103
+ response = requests.get(url, headers=get_headers(self.api_key))
102
104
  # Check if response was successful
103
105
  if response.status_code == 200:
104
106
  return Agent(**response.json())
@@ -106,9 +108,9 @@ class AgentX:
106
108
  raise Exception(f"Failed to retrieve agent: {response.reason}")
107
109
 
108
110
  def list_agents(self) -> List[Agent]:
109
- url = f"{api_base()}/access/agents"
111
+ url = f"{self.base_url or api_base()}/access/agents"
110
112
  # Make a GET request to the AgentX API
111
- response = requests.get(url, headers=get_headers())
113
+ response = requests.get(url, headers=get_headers(self.api_key))
112
114
  # Check if response was successful
113
115
  if response.status_code == 200:
114
116
  return [Agent(**agent) for agent in response.json()]
@@ -146,7 +148,7 @@ class AgentX:
146
148
  """
147
149
  from agentx.exceptions import AgentXAPIError, AgentXAuthError, AgentXConnectionError
148
150
 
149
- base = api_base()
151
+ base = (self.base_url or api_base()).rstrip("/")
150
152
  # /monitor/patterns: the cheapest key-authenticated endpoint that exists on both the
151
153
  # hosted API and the self-host engine's SDK-facing router.
152
154
  url = f"{base}/monitor/patterns"
@@ -173,8 +175,8 @@ class AgentX:
173
175
 
174
176
  def get_profile(self):
175
177
  """Get the current user's profile information."""
176
- url = f"{api_base()}/access/getProfile"
177
- response = requests.get(url, headers=get_headers())
178
+ url = f"{self.base_url or api_base()}/access/getProfile"
179
+ response = requests.get(url, headers=get_headers(self.api_key))
178
180
  if response.status_code == 200:
179
181
  return response.json()
180
182
  else:
agentx/export.py CHANGED
@@ -36,13 +36,15 @@ class ExportClient:
36
36
  (``pg_dump`` / SQLite file copy). There is deliberately no blind row-import endpoint.
37
37
  """
38
38
 
39
- def __init__(self, api_key: Optional[str] = None):
39
+ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
40
40
  self._api_key = api_key
41
+ # Captured once at construction (deep-dive round 3, bug #1).
42
+ self._base_url = (base_url or api_base()).rstrip("/")
41
43
 
42
44
  def manifest(self) -> List[Dict[str, Any]]:
43
45
  """The exportable entities with live row counts: ``[{entity, rows, path}, ...]``."""
44
46
  resp = requests.get(
45
- f"{api_base()}/export", headers=get_headers(self._api_key), timeout=30
47
+ f"{self._base_url}/export", headers=get_headers(self._api_key), timeout=30
46
48
  )
47
49
  if resp.status_code >= 400:
48
50
  raise AgentXExportError(f"Export manifest failed ({resp.status_code}): {resp.text[:200]}")
@@ -54,7 +56,7 @@ class ExportClient:
54
56
  timestamp column, e.g. ``createdAt`` for traces, ``lastSeenAt`` for signals)."""
55
57
  params = {"since": since} if since else None
56
58
  resp = requests.get(
57
- f"{api_base()}/export/{entity}",
59
+ f"{self._base_url}/export/{entity}",
58
60
  headers=get_headers(self._api_key),
59
61
  params=params,
60
62
  stream=True,
agentx/feedback.py CHANGED
@@ -26,8 +26,10 @@ class FeedbackClient:
26
26
  reopened", reported by a workflow); feedback is a human vote with up/down semantics.
27
27
  """
28
28
 
29
- def __init__(self, api_key: Optional[str] = None):
29
+ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
30
30
  self._api_key = api_key
31
+ # Captured once at construction (deep-dive round 3, bug #1).
32
+ self._base_url = (base_url or api_base()).rstrip("/")
31
33
 
32
34
  def report(
33
35
  self,
@@ -61,7 +63,7 @@ class FeedbackClient:
61
63
  payload["endUserId"] = end_user_id
62
64
 
63
65
  resp = requests.post(
64
- f"{api_base()}/feedback",
66
+ f"{self._base_url}/feedback",
65
67
  headers={**get_headers(self._api_key), "Content-Type": "application/json"},
66
68
  json=payload,
67
69
  timeout=10,
@@ -79,7 +81,7 @@ class FeedbackClient:
79
81
  """All votes recorded on one trace, oldest first (``GET /feedback/trace/:traceId``) -
80
82
  the same rows the dashboard's trace dialog shows as up/down chips."""
81
83
  resp = requests.get(
82
- f"{api_base()}/feedback/trace/{trace_id}",
84
+ f"{self._base_url}/feedback/trace/{trace_id}",
83
85
  headers=get_headers(self._api_key),
84
86
  timeout=10,
85
87
  )
agentx/monitor/client.py CHANGED
@@ -85,7 +85,9 @@ class MonitorClient:
85
85
  from agentx.monitor.scorers import ScorersClient
86
86
  # Scorers-catalog administration as code: template enable/disable, code/external scorer
87
87
  # CRUD and dry runs - full parity with the dashboard's Scorers page (P1.3).
88
- self.scorers = ScorersClient(api_key=api_key)
88
+ # Handed this client's own resolved API root, never the process-global default, so a
89
+ # second AgentX() with a different base_url can't re-point it (deep-dive bug #1).
90
+ self.scorers = ScorersClient(api_key=api_key, base_url=self._api_root())
89
91
  self.profile = MonitorProfileClient(self)
90
92
  self.online_evaluators = MonitorOnlineEvaluatorClient(self)
91
93
  from agentx.monitor.sessions import MonitorSessionClient
agentx/monitor/scorers.py CHANGED
@@ -33,13 +33,15 @@ class ScorersClient:
33
33
  wire.
34
34
  """
35
35
 
36
- def __init__(self, api_key: Optional[str] = None):
36
+ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
37
37
  self._api_key = api_key
38
+ # Captured once at construction (deep-dive round 3, bug #1).
39
+ self._base_url = (base_url or api_base()).rstrip("/")
38
40
 
39
41
  def _request(self, method: str, path: str, json: Any = None, params: Any = None) -> Any:
40
42
  resp = requests.request(
41
43
  method,
42
- f"{api_base()}/agent-monitoring{path}",
44
+ f"{self._base_url}/agent-monitoring{path}",
43
45
  headers={**get_headers(self._api_key), "Content-Type": "application/json"},
44
46
  json=json,
45
47
  params=params,
agentx/outcomes.py CHANGED
@@ -26,8 +26,10 @@ class OutcomesClient:
26
26
  tracker's webhook, a CRM workflow), and this method is the SDK's way to be that caller.
27
27
  """
28
28
 
29
- def __init__(self, api_key: Optional[str] = None):
29
+ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
30
30
  self._api_key = api_key
31
+ # Captured once at construction (deep-dive round 3, bug #1).
32
+ self._base_url = (base_url or api_base()).rstrip("/")
31
33
 
32
34
  def report(
33
35
  self,
@@ -69,7 +71,7 @@ class OutcomesClient:
69
71
  payload["reportedBy"] = reported_by
70
72
 
71
73
  resp = requests.post(
72
- f"{api_base()}/outcomes",
74
+ f"{self._base_url}/outcomes",
73
75
  headers={**get_headers(self._api_key), "Content-Type": "application/json"},
74
76
  json=payload,
75
77
  timeout=10,
agentx/projects.py CHANGED
@@ -25,13 +25,16 @@ class ProjectsClient:
25
25
  users; this client covers the default self-host (auth-disabled) mode.
26
26
  """
27
27
 
28
- def __init__(self, api_key: Optional[str] = None):
28
+ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
29
29
  self._api_key = api_key
30
+ # Captured once at construction so two clients with different bases can coexist
31
+ # (deep-dive round 3, bug #1) - never read from process-global state per call.
32
+ self._base_url = (base_url or api_base()).rstrip("/")
30
33
 
31
34
  def _request(self, method: str, path: str, json: Any = None) -> Any:
32
35
  resp = requests.request(
33
36
  method,
34
- f"{api_base()}{path}",
37
+ f"{self._base_url}{path}",
35
38
  headers={**get_headers(self._api_key), "Content-Type": "application/json"},
36
39
  json=json,
37
40
  timeout=15,
agentx/traces.py CHANGED
@@ -24,12 +24,14 @@ class TracesClient:
24
24
  span-tree read.
25
25
  """
26
26
 
27
- def __init__(self, api_key: Optional[str] = None):
27
+ def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
28
28
  self._api_key = api_key
29
+ # Captured once at construction (deep-dive round 3, bug #1).
30
+ self._base_url = (base_url or api_base()).rstrip("/")
29
31
 
30
32
  def _request(self, path: str, params: Optional[Dict[str, Any]] = None) -> Any:
31
33
  resp = requests.get(
32
- f"{api_base()}{path}",
34
+ f"{self._base_url}{path}",
33
35
  headers=get_headers(self._api_key),
34
36
  params=params or {},
35
37
  timeout=15,
@@ -72,6 +72,11 @@ class IngestClient:
72
72
  # failures stay at DEBUG to avoid log spam. client.ping() is the fail-fast startup check.
73
73
  self._delivery_warning_emitted = False
74
74
 
75
+ # Dropped-trace accounting (deep-dive round 3, bug #5): fire-and-forget may drop traces
76
+ # (queue overflow, retries exhausted while the engine is down), but it must never drop
77
+ # them SILENTLY. First drop warns, then every 50th, with the cumulative count.
78
+ self._dropped = 0
79
+
75
80
  self._queue: queue.Queue[Optional[Dict[str, Any]]] = queue.Queue(maxsize=_QUEUE_MAX)
76
81
  self._worker = threading.Thread(target=self._drain, daemon=True, name="agentx-ingest")
77
82
  self._worker.start()
@@ -90,11 +95,44 @@ class IngestClient:
90
95
  try:
91
96
  self._queue.put_nowait(payload)
92
97
  except queue.Full:
93
- logger.debug("agentx ingest queue full - trace dropped")
98
+ self._record_drop("queue full")
99
+
100
+ def flush(self, timeout: float = 5.0) -> bool:
101
+ """Block until all queued traces have been sent, or until ``timeout`` seconds elapse.
94
102
 
95
- def flush(self, timeout: float = 5.0) -> None:
96
- """Block until all queued traces have been sent (or timeout elapses)."""
97
- self._queue.join()
103
+ Returns ``True`` when the queue fully drained, ``False`` on deadline - undelivered
104
+ traces stay queued and keep sending in the background. The old implementation called
105
+ ``queue.join()``, which has no deadline at all: with the engine down, each queued item
106
+ burned the full retry backoff and a ``flush(timeout=3)`` measurably blocked for over
107
+ two minutes (deep-dive round 3, bug #5). The timeout is now a real wall-clock bound.
108
+ """
109
+ deadline = time.time() + timeout
110
+ with self._queue.all_tasks_done:
111
+ while self._queue.unfinished_tasks:
112
+ remaining = deadline - time.time()
113
+ if remaining <= 0:
114
+ logger.warning(
115
+ "agentx flush(%.1fs) timed out with %d trace(s) still undelivered - "
116
+ "they remain queued and keep sending in the background",
117
+ timeout,
118
+ self._queue.unfinished_tasks,
119
+ )
120
+ return False
121
+ self._queue.all_tasks_done.wait(remaining)
122
+ return True
123
+
124
+ def _record_drop(self, reason: str) -> None:
125
+ self._dropped += 1
126
+ if self._dropped == 1 or self._dropped % 50 == 0:
127
+ logger.warning(
128
+ "agentx dropped a trace (%s) - %d dropped total this process. "
129
+ "Tracing is fire-and-forget: traces that cannot be delivered are not persisted "
130
+ "locally. Use client.ping() at startup to fail fast on a bad endpoint.",
131
+ reason,
132
+ self._dropped,
133
+ )
134
+ else:
135
+ logger.debug("agentx dropped a trace (%s), %d total", reason, self._dropped)
98
136
 
99
137
  def send_trace_sync(self, payload: Dict[str, Any]) -> Optional[str]:
100
138
  """
@@ -372,7 +410,9 @@ class IngestClient:
372
410
  try:
373
411
  self._send(payload)
374
412
  except Exception as exc:
375
- logger.debug("agentx ingest send error: %s", exc)
413
+ # Anything _send didn't classify still cost us this payload - count it as a
414
+ # drop rather than whispering at DEBUG (bug #5's silent half).
415
+ self._record_drop(f"unexpected error: {exc}")
376
416
  finally:
377
417
  self._queue.task_done()
378
418
 
@@ -397,4 +437,4 @@ class IngestClient:
397
437
  return
398
438
 
399
439
  self._warn_delivery(str(last_exc))
400
- logger.debug("agentx ingest failed after retries: %s", last_exc)
440
+ self._record_drop(f"retries exhausted: {last_exc}")
agentx/tracing/tracer.py CHANGED
@@ -890,9 +890,11 @@ class Tracer:
890
890
  agent_id=agent_id,
891
891
  )
892
892
 
893
- def flush(self, timeout: float = 5.0) -> None:
894
- """Block until all queued traces have been delivered."""
895
- self._client.flush(timeout)
893
+ def flush(self, timeout: float = 5.0) -> bool:
894
+ """Block until all queued traces have been delivered, or until ``timeout`` seconds
895
+ elapse. Returns ``True`` when everything drained, ``False`` on deadline (a warning is
896
+ logged and undelivered traces keep sending in the background)."""
897
+ return self._client.flush(timeout)
896
898
 
897
899
  # ------------------------------------------------------------------
898
900
  # CI/CD evaluation
agentx/version.py CHANGED
@@ -1 +1 @@
1
- VERSION = "0.6.34"
1
+ VERSION = "0.6.35"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentx-python
3
- Version: 0.6.34
3
+ Version: 0.6.35
4
4
  Summary: Official Python SDK for AgentX (https://www.agentx.so/)
5
5
  Home-page: https://github.com/AgentX-ai/AgentX-python
6
6
  Author: Robin Wang and AgentX Team
@@ -1,15 +1,15 @@
1
1
  agentx/__init__.py,sha256=4iMiGLNU4S-I-WyX0Z7l0BFUY_krVJ3seMQPqyO-ReA,602
2
- agentx/agentx.py,sha256=xNtG_g51_QKn1fRSAXYC18mYsxLwnvajoSSiwxYDtmI,7858
2
+ agentx/agentx.py,sha256=gbfoQI2TdpmMzXToY_rS63iug1WsCSfMCcfQssyWf_Y,8349
3
3
  agentx/cli.py,sha256=ueKYPBhW8qd63nvQBQeZ4Mgz9NwEVaM0KH2WvLQ0bGs,6097
4
4
  agentx/exceptions.py,sha256=2tDLdZjriFBQbjgzyIcah12RazpbujhqZSRbSXgAml4,1377
5
- agentx/export.py,sha256=Pvz-0vXUHnKx7_KPrr5kzXMsMdTk1LMX-4CB3k0AgMI,4094
6
- agentx/feedback.py,sha256=ZNM89mfKtjkbDZefbGWuej-pqSwlnjAnIS6oQ-Tw09M,3472
7
- agentx/outcomes.py,sha256=wD03oNUuFv56_l1ebOSTbWJ6XqSU7_QXnWzMZ5G3RDU,3295
8
- agentx/projects.py,sha256=er9OdY-IISB5Xn16Auolmh2lnKDF6E4M4nPAvR7NZbM,2267
5
+ agentx/export.py,sha256=FNT00e-j9AQRkNDksUwgHJXgr8-XVPscEH4xUqJHmfM,4265
6
+ agentx/feedback.py,sha256=hMPU3ivUHvhOXOH7gvT4Jy1yztVmoIMOw1MbUNRs5Gk,3643
7
+ agentx/outcomes.py,sha256=yCA6PrO5BrGufEjkzYWTK5wusAOt6w0gSKkH-5x1Fs4,3462
8
+ agentx/projects.py,sha256=JN-nhesELPjEb1P0m9F4-Qw-0eGR68kCtBN5zNhArt0,2540
9
9
  agentx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- agentx/traces.py,sha256=9QfTgGlwHkqPMY7lkF-LVk1SqcTWFtsuliu2ChDi6cE,2120
10
+ agentx/traces.py,sha256=sz9gxutlDKNgf0fdCkyzKsGwK5eMAJuIEl3NIwGrsuo,2287
11
11
  agentx/util.py,sha256=lt2Kpg4Fj8whrSuAhLEahcPEIYRVpK9RCC5y9ShdTJs,703
12
- agentx/version.py,sha256=No3CH7gRh0Bs49mgkkl6NBX4xs2x7o3PFlV4yDIt7Ho,19
12
+ agentx/version.py,sha256=81b4hyxUksdb8EDZyKrJoE5-lvRVT9zu1byQ9Zsbei8,19
13
13
  agentx/evaluations/__init__.py,sha256=Erv7RGFlRxGTG4rVb2uHhCqLLEX_iAWKqkZKzK6CumE,262
14
14
  agentx/evaluations/_term.py,sha256=WFpiNzdgDBeJJ-Gg-6X7TwwxllobuE4OqFUTuDQvS3Y,2529
15
15
  agentx/evaluations/client.py,sha256=GoYWV0v_4AJRwdwohyfGrICe2QNi6Q2WjS1sgaJQ16g,25837
@@ -42,12 +42,12 @@ agentx/integrations/openai.py,sha256=1KLs-hJaeW2emHPwNkmC3zcGksL3zd87uWbcLGRW704
42
42
  agentx/integrations/openai_agents.py,sha256=tCa3kPxqux5LnNNDQ6zA05OybQrjkc_LeE08YuNPJEs,12742
43
43
  agentx/monitor/__init__.py,sha256=MLiASSvQnCy2jqVNRTgPWFhUSf8lGYRQeEgEVVhE5Tg,574
44
44
  agentx/monitor/agents.py,sha256=8Xk4jWmNTvdtjFixHiLmw4jj96uqIXWIT6KW8zXoWrc,1006
45
- agentx/monitor/client.py,sha256=phdBAzQSsw8TiaFMPQJ1jPdKGxZdywxZA7G4h7P7t3o,15535
45
+ agentx/monitor/client.py,sha256=Msp3n63UN0_NTfQAXLDPeacGj6nZOfAKCUTJyZXAmT0,15745
46
46
  agentx/monitor/models.py,sha256=yTC3WTdTziHMkdeAXlTro-4YiSbBUHMgf9kNZHGfPDA,8470
47
47
  agentx/monitor/online_evaluators.py,sha256=gfGMgJLIWjPUpYK068fxv2oZerHi3o0_4AOjxoVQhak,7176
48
48
  agentx/monitor/patterns.py,sha256=ruBqLoA2T2KQuqRbbn1kWkIEkiOal3SvyPl9opGyhzI,4185
49
49
  agentx/monitor/profile.py,sha256=uGk-4bXT2vmnEQiY5u6rWhAfzZchHBXL74VD3piVHvU,3102
50
- agentx/monitor/scorers.py,sha256=67QWvy6EDW17II9hgfZY47moISuAXt2-hTRHdbHDD2I,7169
50
+ agentx/monitor/scorers.py,sha256=huIZBszrfLKI8I7VV6NFpW6piRsj9HI03rXUwWs2tgs,7336
51
51
  agentx/monitor/sessions.py,sha256=gePcL284m3UITxQAtHxwrKFl6bRjmRib1QK6JbZeS9s,815
52
52
  agentx/monitor/signals.py,sha256=Ld11lW2lbg8NHBUHdgoY6iwCvJDK-eg4ge4qQ9y7nGY,1432
53
53
  agentx/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -56,11 +56,11 @@ agentx/resources/conversation.py,sha256=94pOdM6Pmj67RhikZVBNGkT3V-WKK_ZAD7s27p5-
56
56
  agentx/resources/workforce.py,sha256=lfGVkoV9lcOp-lZScjTvwRarJMkhzfMfLm4syJDujGc,4168
57
57
  agentx/tracing/__init__.py,sha256=l2mIRILE-wWrCD0fekgrIOQUEvtDObzdrkgpQUtXroU,408
58
58
  agentx/tracing/ci_types.py,sha256=zFVcZGvc1qbVDdOlEPQ1i5R6terqJHxCzFF4ZjouxxI,1423
59
- agentx/tracing/ingest_client.py,sha256=TuKQAVeKi35Nv8oMGIHxw-vR8Lg_4NtpzBQHouxljFk,15517
60
- agentx/tracing/tracer.py,sha256=zv5iNXyHXSZ8QW5yBe-Pk3kauLhaFAeQii3YDZchQwE,51366
61
- agentx_python-0.6.34.dist-info/licenses/LICENSE,sha256=gZVsM-nLsE8vlaY6NXXsVoo6IlCClxkToAWmhgT3y_s,10762
62
- agentx_python-0.6.34.dist-info/METADATA,sha256=P4C9ErZLr2n6Mblzw7j_DwT7Lwa861c_7SwYnreToAA,20133
63
- agentx_python-0.6.34.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
64
- agentx_python-0.6.34.dist-info/entry_points.txt,sha256=rQqF1JTY3T1yfviBU1r8PU-5mBdfOk6P4bZ1L4BskIM,172
65
- agentx_python-0.6.34.dist-info/top_level.txt,sha256=s-q-HB9Gb_QdrZNacSeQyF_c25gQooMy7DlxzgLOHPk,7
66
- agentx_python-0.6.34.dist-info/RECORD,,
59
+ agentx/tracing/ingest_client.py,sha256=5X6RyxtMq1XYgOzsMd3b2f2qpmYpsMnhKm7NB3oup00,17664
60
+ agentx/tracing/tracer.py,sha256=6qLTrV4Fz_ONitlBMKiayRbeoV1dpkTwskTDP5oVt4I,51567
61
+ agentx_python-0.6.35.dist-info/licenses/LICENSE,sha256=gZVsM-nLsE8vlaY6NXXsVoo6IlCClxkToAWmhgT3y_s,10762
62
+ agentx_python-0.6.35.dist-info/METADATA,sha256=IVeP8tFjQnBolw3OuREiQchHFJ1K0XdzM5oU0yELsmc,20133
63
+ agentx_python-0.6.35.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
64
+ agentx_python-0.6.35.dist-info/entry_points.txt,sha256=rQqF1JTY3T1yfviBU1r8PU-5mBdfOk6P4bZ1L4BskIM,172
65
+ agentx_python-0.6.35.dist-info/top_level.txt,sha256=s-q-HB9Gb_QdrZNacSeQyF_c25gQooMy7DlxzgLOHPk,7
66
+ agentx_python-0.6.35.dist-info/RECORD,,