agentx-python 0.6.25__tar.gz → 0.6.27__tar.gz
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_python-0.6.25/agentx_python.egg-info → agentx_python-0.6.27}/PKG-INFO +1 -1
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/langchain.py +1 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/tracer.py +45 -4
- agentx_python-0.6.27/agentx/version.py +1 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27/agentx_python.egg-info}/PKG-INFO +1 -1
- agentx_python-0.6.25/agentx/version.py +0 -1
- {agentx_python-0.6.25 → agentx_python-0.6.27}/LICENSE +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/README.md +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/agentx.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/cli.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/_term.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/http_endpoint.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/precomputed.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/raw.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/client.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/datasets.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/evaluation_settings.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/models.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/prompts.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/redaction.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/reporting.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/results.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/runner.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/tracing.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/exceptions.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/feedback.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/_traced_call.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/anthropic.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/autogen.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/crewai.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/databricks.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/google_adk.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/google_genai.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/litellm.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/llamaindex.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/moveworks.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/openai.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/openai_agents.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/client.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/models.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/online_evaluators.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/patterns.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/profile.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/signals.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/outcomes.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/py.typed +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/agent.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/conversation.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/workforce.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/__init__.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/ci_types.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/ingest_client.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/util.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/SOURCES.txt +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/dependency_links.txt +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/entry_points.txt +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/not-zip-safe +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/requires.txt +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/top_level.txt +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/setup.cfg +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/setup.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/tests/test_integration.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/tests/test_integrations.py +0 -0
- {agentx_python-0.6.25 → agentx_python-0.6.27}/tests/test_span_tree.py +0 -0
|
@@ -252,6 +252,7 @@ class _TraceSpan:
|
|
|
252
252
|
cache_write_tokens: Optional[int] = None,
|
|
253
253
|
error: Optional[str] = None,
|
|
254
254
|
tool_calls: Optional[List[Dict[str, Any]]] = None,
|
|
255
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
255
256
|
) -> "_TraceSpan":
|
|
256
257
|
"""
|
|
257
258
|
Send one real child-span row parented to this span, with explicit timing (the caller's
|
|
@@ -306,6 +307,8 @@ class _TraceSpan:
|
|
|
306
307
|
wire["model"] = model
|
|
307
308
|
if child.tool_calls:
|
|
308
309
|
wire["tool_calls"] = child.tool_calls
|
|
310
|
+
if metadata:
|
|
311
|
+
wire["metadata"] = _safe_serialize(metadata)
|
|
309
312
|
if child._session_id:
|
|
310
313
|
wire["session_id"] = child._session_id
|
|
311
314
|
wire["span_id"] = child._span_id
|
|
@@ -411,6 +414,7 @@ class _TraceSpan:
|
|
|
411
414
|
duration_ms=step.get("duration_ms"),
|
|
412
415
|
input=step.get("query"),
|
|
413
416
|
output=step.get("output"),
|
|
417
|
+
metadata={"kind": "retrieval"},
|
|
414
418
|
)
|
|
415
419
|
|
|
416
420
|
if self.input is None and input is not None:
|
|
@@ -558,6 +562,7 @@ class Tracer:
|
|
|
558
562
|
def __init__(self, ingest_client: IngestClient) -> None:
|
|
559
563
|
self._client = ingest_client
|
|
560
564
|
self._pending_tool_calls: List[Dict[str, Any]] = []
|
|
565
|
+
self._pending_retrievals: List[Dict[str, Any]] = []
|
|
561
566
|
self._local = threading.local()
|
|
562
567
|
|
|
563
568
|
# ------------------------------------------------------------------
|
|
@@ -733,15 +738,40 @@ class Tracer:
|
|
|
733
738
|
Manually record a knowledge-base / vector-store retrieval that an
|
|
734
739
|
auto-instrumented framework integration can't see on its own - e.g. a
|
|
735
740
|
hand-rolled RAG lookup wrapped around a raw Anthropic/OpenAI call or a
|
|
736
|
-
CrewAI kickoff. Sent as a real child-span row of the active span (see ``current_span``)
|
|
737
|
-
|
|
738
|
-
|
|
741
|
+
CrewAI kickoff. Sent as a real child-span row of the active span (see ``current_span``);
|
|
742
|
+
with no active span it queues and merges into the very next trace this tracer sends
|
|
743
|
+
(same behavior as ``record_tool_call``, covering the patched-client flow where the
|
|
744
|
+
retrieval runs just before a standalone ``messages.create()`` /
|
|
745
|
+
``chat.completions.create()`` call).
|
|
739
746
|
"""
|
|
740
747
|
active_span = self.current_span
|
|
741
748
|
if active_span is None:
|
|
749
|
+
latency_ms = (
|
|
750
|
+
int(duration_ms)
|
|
751
|
+
if duration_ms is not None
|
|
752
|
+
else int((end_time - start_time) * 1000)
|
|
753
|
+
if start_time is not None and end_time is not None
|
|
754
|
+
else None
|
|
755
|
+
)
|
|
756
|
+
self._pending_retrievals.append({
|
|
757
|
+
"name": name,
|
|
758
|
+
"query": _safe_serialize(query) if query is not None else None,
|
|
759
|
+
"output": _safe_serialize(output) if output is not None else None,
|
|
760
|
+
"duration_ms": latency_ms,
|
|
761
|
+
})
|
|
742
762
|
return
|
|
763
|
+
# The kind marker is what tells the engine (retrieval-context extraction for RAG
|
|
764
|
+
# judges) and the dashboard timeline that this span is a retrieval regardless of its
|
|
765
|
+
# name - the name-based "Retrieval N" heuristic remains only as a fallback for older
|
|
766
|
+
# traces, so custom names like "kb_search" work everywhere.
|
|
743
767
|
active_span.child_span(
|
|
744
|
-
name,
|
|
768
|
+
name,
|
|
769
|
+
start_time=start_time,
|
|
770
|
+
end_time=end_time,
|
|
771
|
+
duration_ms=duration_ms,
|
|
772
|
+
input=query,
|
|
773
|
+
output=output,
|
|
774
|
+
metadata={"kind": "retrieval"},
|
|
745
775
|
)
|
|
746
776
|
|
|
747
777
|
@contextmanager
|
|
@@ -1091,6 +1121,17 @@ class Tracer:
|
|
|
1091
1121
|
# a projection that predates them would silently strip exactly the failure evidence.
|
|
1092
1122
|
wire["tool_calls"] = list(wire.get("tool_calls") or []) + [dict(t) for t in pending_tool_calls]
|
|
1093
1123
|
|
|
1124
|
+
# record_retrieval entries queued with no active span ride the root's
|
|
1125
|
+
# performance_summary.retrieval_steps - the same shape older flat traces used, which the
|
|
1126
|
+
# engine's retrieval-context extraction and the dashboard's references panel both read.
|
|
1127
|
+
pending_retrievals, self._pending_retrievals = self._pending_retrievals, []
|
|
1128
|
+
if pending_retrievals:
|
|
1129
|
+
summary = dict(wire.get("performance_summary") or {})
|
|
1130
|
+
summary["retrieval_steps"] = list(summary.get("retrieval_steps") or []) + [
|
|
1131
|
+
dict(r) for r in pending_retrievals
|
|
1132
|
+
]
|
|
1133
|
+
wire["performance_summary"] = summary
|
|
1134
|
+
|
|
1094
1135
|
return self._dispatch(wire, sync=sync)
|
|
1095
1136
|
|
|
1096
1137
|
def _dispatch(self, wire: Dict[str, Any], *, sync: bool = False) -> Optional[str]:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "0.6.27"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "0.6.25"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|