agentx-python 0.8.17__tar.gz → 0.8.18__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.8.17/agentx_python.egg-info → agentx_python-0.8.18}/PKG-INFO +1 -1
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/client.py +13 -6
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/patterns.py +4 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/scorer_groups.py +2 -2
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/sessions.py +3 -2
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/version.py +2 -2
- {agentx_python-0.8.17 → agentx_python-0.8.18/agentx_python.egg-info}/PKG-INFO +1 -1
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_selfhost_analysis_fallback.py +6 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/LICENSE +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/README.md +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/agentx.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/cli.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/_term.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/adapters/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/adapters/http_endpoint.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/adapters/precomputed.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/adapters/raw.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/client.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/datasets.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/evaluation_settings.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/models.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/prompts.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/reporting.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/results.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/runner.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/tool_schemas.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/evaluations/tracing.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/exceptions.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/export.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/feedback.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/_traced_call.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/anthropic.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/autogen.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/crewai.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/databricks.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/google_adk.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/google_genai.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/langchain.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/litellm.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/llamaindex.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/moveworks.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/openai.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/integrations/openai_agents.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/agents.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/improvement_groups.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/judge_scorers.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/models.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/online_evaluators.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/profile.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/review_queue.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/rules.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/scorers.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/monitor/signals.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/outcomes.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/projects.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/py.typed +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/resources/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/resources/agent.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/resources/conversation.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/resources/workforce.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/testing.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/traces.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/tracing/__init__.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/tracing/ci_types.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/tracing/eval_scope.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/tracing/framework_detect.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/tracing/ingest_client.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/tracing/tracer.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx/util.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx_python.egg-info/SOURCES.txt +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx_python.egg-info/dependency_links.txt +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx_python.egg-info/entry_points.txt +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx_python.egg-info/not-zip-safe +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx_python.egg-info/requires.txt +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/agentx_python.egg-info/top_level.txt +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/setup.cfg +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/setup.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_cli_launcher.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_deep_dive_fixes.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_docs_match_sdk.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_eval_scope.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_framework_detect.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_integration.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_integrations.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_judge_scorers.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_multi_judge.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_pairwise.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_review_queue.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_runner_features.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_selfhost_compat.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_span_tree.py +0 -0
- {agentx_python-0.8.17 → agentx_python-0.8.18}/tests/test_testing.py +0 -0
|
@@ -187,10 +187,17 @@ class MonitorClient:
|
|
|
187
187
|
return self._base_url[: -len(suffix)]
|
|
188
188
|
return self._base_url
|
|
189
189
|
|
|
190
|
-
def _request(
|
|
190
|
+
def _request(
|
|
191
|
+
self, method: str, path: str, timeout: int = 30, base: Optional[str] = None, retry: bool = True, **kwargs
|
|
192
|
+
) -> Any:
|
|
193
|
+
# retry=False for non-idempotent judge-spending POSTs (sweep, coherence, portability,
|
|
194
|
+
# tuning): a client-side timeout must not fire the same LLM-billing work a second time
|
|
195
|
+
# while the first invocation is still running server-side. Same precedent as
|
|
196
|
+
# EvaluationsClient._request / analyze_run.
|
|
191
197
|
url = f"{base or self._base_url}{path}"
|
|
192
198
|
last_exc: Optional[Exception] = None
|
|
193
|
-
|
|
199
|
+
schedule = [0.0] + _RETRY_BACKOFF if retry else [0.0]
|
|
200
|
+
for attempt, wait in enumerate(schedule):
|
|
194
201
|
if wait:
|
|
195
202
|
time.sleep(wait)
|
|
196
203
|
try:
|
|
@@ -204,7 +211,7 @@ class MonitorClient:
|
|
|
204
211
|
raise AgentXAuthError("Invalid or missing API key")
|
|
205
212
|
if resp.status_code == 422:
|
|
206
213
|
raise AgentXValidationError(resp.text)
|
|
207
|
-
if resp.status_code in _RETRYABLE_STATUS and attempt < _MAX_RETRIES - 1:
|
|
214
|
+
if retry and resp.status_code in _RETRYABLE_STATUS and attempt < _MAX_RETRIES - 1:
|
|
208
215
|
logger.debug(
|
|
209
216
|
"Retryable status %d (attempt %d)", resp.status_code, attempt + 1
|
|
210
217
|
)
|
|
@@ -421,7 +428,7 @@ class MonitorClient:
|
|
|
421
428
|
button. Raises AgentXMonitorError if the engine has no judge key configured."""
|
|
422
429
|
data = self._request(
|
|
423
430
|
"POST", f"/agent-monitoring/sessions/{session_id}/coherence-check",
|
|
424
|
-
base=self._api_root(), timeout=180,
|
|
431
|
+
base=self._api_root(), timeout=180, retry=False,
|
|
425
432
|
)
|
|
426
433
|
return data.get("score", data) if isinstance(data, dict) else data
|
|
427
434
|
|
|
@@ -444,7 +451,7 @@ class MonitorClient:
|
|
|
444
451
|
engines run this automatically every minute; the manual trigger exists for demos,
|
|
445
452
|
tests, and backfills. Returns ``{"judged": n}``."""
|
|
446
453
|
return self._request(
|
|
447
|
-
"POST", "/agent-monitoring/session-sweep/run", base=self._api_root(), timeout=300
|
|
454
|
+
"POST", "/agent-monitoring/session-sweep/run", base=self._api_root(), timeout=300, retry=False
|
|
448
455
|
)
|
|
449
456
|
|
|
450
457
|
# ------------------------------------------------------------------
|
|
@@ -457,7 +464,7 @@ class MonitorClient:
|
|
|
457
464
|
plus judging, so expect tens of seconds."""
|
|
458
465
|
return self._request(
|
|
459
466
|
"POST", f"/agent-monitoring/traces/{trace_id}/portability",
|
|
460
|
-
base=self._api_root(), json={"modelIds": model_ids}, timeout=300,
|
|
467
|
+
base=self._api_root(), json={"modelIds": model_ids}, timeout=300, retry=False,
|
|
461
468
|
)
|
|
462
469
|
|
|
463
470
|
# ------------------------------------------------------------------
|
|
@@ -114,6 +114,10 @@ class MonitorPatternClient:
|
|
|
114
114
|
agent_ids=agent_ids,
|
|
115
115
|
)
|
|
116
116
|
|
|
117
|
+
def delete(self, pattern_id: str) -> None:
|
|
118
|
+
"""Delete a pattern. Its historical signals remain as history."""
|
|
119
|
+
self._client._request("DELETE", f"/agent-monitoring/patterns/{pattern_id}", base=self._client._api_root())
|
|
120
|
+
|
|
117
121
|
def get(self, pattern_id: str) -> MonitorPattern:
|
|
118
122
|
return self._client.get_pattern(pattern_id)
|
|
119
123
|
|
|
@@ -67,8 +67,8 @@ class ScorerGroupsClient:
|
|
|
67
67
|
"""``members``: [{"kind": "judge"|"pattern"|"custom", "refId": ..., "weight": 1, "gate": False}].
|
|
68
68
|
``online``: {"enabled": True, "sampleRate": 0.1, "alertThreshold": 5, "severity": "medium"}.
|
|
69
69
|
Add ``"scope": "session", "idleSeconds": 120`` to score whole multi-turn sessions once
|
|
70
|
-
idle, instead of each sampled trace.
|
|
71
|
-
|
|
70
|
+
idle, instead of each sampled trace. Pass ``online=None`` (the default) for a group
|
|
71
|
+
that only grades offline dataset runs."""
|
|
72
72
|
payload: Dict[str, Any] = {"name": name, "members": members}
|
|
73
73
|
if description is not None:
|
|
74
74
|
payload["description"] = description
|
|
@@ -22,8 +22,9 @@ class MonitorSessionClient:
|
|
|
22
22
|
|
|
23
23
|
def scores(self, session_id: str) -> List[dict]:
|
|
24
24
|
"""Session-level verdicts, newest first. ``kind`` says who scored: a session-scoped
|
|
25
|
-
online evaluator (``online-eval:<id>``)
|
|
26
|
-
(``scorer-group:<id>``)
|
|
25
|
+
online evaluator (``online-eval:<id>``), a session-scoped scorer group
|
|
26
|
+
(``scorer-group:<id>``), or legacy ``"coherence"`` rows written before the Session
|
|
27
|
+
Baseline Judge existed - branch defensively on unknown kinds."""
|
|
27
28
|
return self._client.list_session_scores(session_id)
|
|
28
29
|
|
|
29
30
|
def run_sweep(self) -> dict:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
VERSION = "0.8.
|
|
1
|
+
VERSION = "0.8.18"
|
|
2
2
|
|
|
3
3
|
# The AgentX-trace-eval release this SDK version is tested against - what `agentx-trace-eval`
|
|
4
4
|
# installs and converges to (see agentx/cli.py). Bump together with VERSION when releasing, so
|
|
5
5
|
# every published SDK names a known-good engine+dashboard pair. Users can override with
|
|
6
6
|
# AGENTX_TRACE_EVAL_VERSION=<tag|latest>.
|
|
7
|
-
ENGINE_VERSION = "v0.3.
|
|
7
|
+
ENGINE_VERSION = "v0.3.18"
|
|
@@ -217,6 +217,12 @@ def test_the_fallback_request_gets_the_long_analysis_timeout():
|
|
|
217
217
|
assert kwargs["timeout"] > 60, "a synchronous judge pass needs more than the 30s default"
|
|
218
218
|
assert kwargs["json"]["judges"] == [{"model": "gpt-5.6-luna"}]
|
|
219
219
|
|
|
220
|
+
# judges=None must OMIT the key - the engine then scores with its platform default model;
|
|
221
|
+
# injecting a hosted-only default (the old "gpt-5.5") produced uncallable judges.
|
|
222
|
+
client.analyze_run(RUN)
|
|
223
|
+
_, _, kwargs = session.calls[-1]
|
|
224
|
+
assert "judges" not in kwargs["json"]
|
|
225
|
+
|
|
220
226
|
|
|
221
227
|
# ---------------------------------------------------------------------------
|
|
222
228
|
# Only a 404 means "wrong engine"
|
|
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
|
|
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
|