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.
Files changed (70) hide show
  1. {agentx_python-0.6.25/agentx_python.egg-info → agentx_python-0.6.27}/PKG-INFO +1 -1
  2. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/langchain.py +1 -0
  3. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/tracer.py +45 -4
  4. agentx_python-0.6.27/agentx/version.py +1 -0
  5. {agentx_python-0.6.25 → agentx_python-0.6.27/agentx_python.egg-info}/PKG-INFO +1 -1
  6. agentx_python-0.6.25/agentx/version.py +0 -1
  7. {agentx_python-0.6.25 → agentx_python-0.6.27}/LICENSE +0 -0
  8. {agentx_python-0.6.25 → agentx_python-0.6.27}/README.md +0 -0
  9. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/__init__.py +0 -0
  10. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/agentx.py +0 -0
  11. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/cli.py +0 -0
  12. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/__init__.py +0 -0
  13. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/_term.py +0 -0
  14. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/__init__.py +0 -0
  15. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/http_endpoint.py +0 -0
  16. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/precomputed.py +0 -0
  17. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/adapters/raw.py +0 -0
  18. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/client.py +0 -0
  19. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/datasets.py +0 -0
  20. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/evaluation_settings.py +0 -0
  21. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/models.py +0 -0
  22. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/prompts.py +0 -0
  23. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/redaction.py +0 -0
  24. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/reporting.py +0 -0
  25. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/results.py +0 -0
  26. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/runner.py +0 -0
  27. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/evaluations/tracing.py +0 -0
  28. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/exceptions.py +0 -0
  29. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/feedback.py +0 -0
  30. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/__init__.py +0 -0
  31. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/_traced_call.py +0 -0
  32. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/anthropic.py +0 -0
  33. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/autogen.py +0 -0
  34. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/crewai.py +0 -0
  35. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/databricks.py +0 -0
  36. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/google_adk.py +0 -0
  37. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/google_genai.py +0 -0
  38. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/litellm.py +0 -0
  39. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/llamaindex.py +0 -0
  40. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/moveworks.py +0 -0
  41. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/openai.py +0 -0
  42. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/integrations/openai_agents.py +0 -0
  43. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/__init__.py +0 -0
  44. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/client.py +0 -0
  45. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/models.py +0 -0
  46. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/online_evaluators.py +0 -0
  47. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/patterns.py +0 -0
  48. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/profile.py +0 -0
  49. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/monitor/signals.py +0 -0
  50. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/outcomes.py +0 -0
  51. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/py.typed +0 -0
  52. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/__init__.py +0 -0
  53. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/agent.py +0 -0
  54. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/conversation.py +0 -0
  55. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/resources/workforce.py +0 -0
  56. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/__init__.py +0 -0
  57. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/ci_types.py +0 -0
  58. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/tracing/ingest_client.py +0 -0
  59. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx/util.py +0 -0
  60. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/SOURCES.txt +0 -0
  61. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/dependency_links.txt +0 -0
  62. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/entry_points.txt +0 -0
  63. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/not-zip-safe +0 -0
  64. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/requires.txt +0 -0
  65. {agentx_python-0.6.25 → agentx_python-0.6.27}/agentx_python.egg-info/top_level.txt +0 -0
  66. {agentx_python-0.6.25 → agentx_python-0.6.27}/setup.cfg +0 -0
  67. {agentx_python-0.6.25 → agentx_python-0.6.27}/setup.py +0 -0
  68. {agentx_python-0.6.25 → agentx_python-0.6.27}/tests/test_integration.py +0 -0
  69. {agentx_python-0.6.25 → agentx_python-0.6.27}/tests/test_integrations.py +0 -0
  70. {agentx_python-0.6.25 → agentx_python-0.6.27}/tests/test_span_tree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentx-python
3
- Version: 0.6.25
3
+ Version: 0.6.27
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
@@ -489,6 +489,7 @@ class AgentXCallbackHandler(BaseCallbackHandler):
489
489
  duration_ms=step.get("duration_ms"),
490
490
  input=step.get("query"),
491
491
  output=step.get("output"),
492
+ metadata={"kind": "retrieval"},
492
493
  )
493
494
 
494
495
  def on_chain_end(
@@ -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
- requires an enclosing ``with tracer.trace(...)`` block; a no-op (nothing to attach a child
738
- to) if called outside one.
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, start_time=start_time, end_time=end_time, duration_ms=duration_ms, input=query, output=output
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentx-python
3
- Version: 0.6.25
3
+ Version: 0.6.27
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 +0,0 @@
1
- VERSION = "0.6.25"
File without changes
File without changes
File without changes
File without changes