trace-agent-server 0.2.0__tar.gz → 0.4.0__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 (46) hide show
  1. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/PKG-INFO +1 -1
  2. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/pyproject.toml +1 -1
  3. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/otlp.py +13 -1
  4. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server.egg-info/PKG-INFO +1 -1
  5. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_otlp_ingest.py +34 -0
  6. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/README.md +0 -0
  7. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/setup.cfg +0 -0
  8. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/__init__.py +0 -0
  9. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/api/__init__.py +0 -0
  10. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/api/otlp.py +0 -0
  11. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/api/runs.py +0 -0
  12. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/cli.py +0 -0
  13. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/config.py +0 -0
  14. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/db.py +0 -0
  15. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/main.py +0 -0
  16. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/models.py +0 -0
  17. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/schemas.py +0 -0
  18. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/__init__.py +0 -0
  19. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/analytics.py +0 -0
  20. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/audit_guardrails.py +0 -0
  21. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/compare.py +0 -0
  22. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/dashboard.py +0 -0
  23. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/events.py +0 -0
  24. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/explanation.py +0 -0
  25. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/graph.py +0 -0
  26. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/observability.py +0 -0
  27. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/otlp_decode.py +0 -0
  28. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/provider.py +0 -0
  29. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/run_lifecycle.py +0 -0
  30. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server/services/run_summary.py +0 -0
  31. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server.egg-info/SOURCES.txt +0 -0
  32. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server.egg-info/dependency_links.txt +0 -0
  33. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server.egg-info/entry_points.txt +0 -0
  34. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server.egg-info/requires.txt +0 -0
  35. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/src/trace_agent_server.egg-info/top_level.txt +0 -0
  36. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_audit_guardrails_api.py +0 -0
  37. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_dashboard.py +0 -0
  38. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_events.py +0 -0
  39. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_framework_observations.py +0 -0
  40. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_otlp_decode.py +0 -0
  41. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_providers.py +0 -0
  42. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_run_lifecycle.py +0 -0
  43. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_runs_api.py +0 -0
  44. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_sdk_wrappers.py +0 -0
  45. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_sse.py +0 -0
  46. {trace_agent_server-0.2.0 → trace_agent_server-0.4.0}/tests/test_turns.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trace-agent-server
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: TraceAgent FastAPI backend server.
5
5
  Author-email: Enrique Javier Villar Cea <villarcea.enriquejavier@gmail.com>, Javier Rodriguez Castellano <javirodriguezcastellano@gmail.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "trace-agent-server"
7
- version = "0.2.0"
7
+ version = "0.4.0"
8
8
  description = "TraceAgent FastAPI backend server."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -89,6 +89,18 @@ def _parse_json(value: Any) -> Any:
89
89
  return value
90
90
 
91
91
 
92
+ def _readable(text: Any) -> Any:
93
+ """Decode the \\uXXXX escapes of a JSON text, so accents show as typed.
94
+
95
+ Some producers serialize results with json.dumps defaults, which escapes every non-ASCII character.
96
+ """
97
+ if isinstance(text, str) and "\\u" in text:
98
+ parsed = _parse_json(text)
99
+ if parsed is not text:
100
+ return parsed
101
+ return text
102
+
103
+
92
104
  def _error_of(span: SpanRecord) -> tuple[str, str]:
93
105
  """Error code (the exception class name) and message of a failed span."""
94
106
  for event in span.events:
@@ -347,7 +359,7 @@ def _tool_steps(session: Session, run: Run, span: SpanRecord, capture_full: bool
347
359
  parent_step_id=span.parent_span_id,
348
360
  status="failed" if failed else "succeeded",
349
361
  args=redact_payload(arguments if isinstance(arguments, dict) else {"input": arguments} if arguments is not None else {}),
350
- output_summary=summarize_value(result_text) if result_text is not None else None,
362
+ output_summary=summarize_value(_readable(result_text)) if result_text is not None else None,
351
363
  output_hash=stable_hash(result_text if not failed else {"error": message}),
352
364
  error_code=code,
353
365
  error_summary=message,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trace-agent-server
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: TraceAgent FastAPI backend server.
5
5
  Author-email: Enrique Javier Villar Cea <villarcea.enriquejavier@gmail.com>, Javier Rodriguez Castellano <javirodriguezcastellano@gmail.com>
6
6
  License: MIT
@@ -433,6 +433,40 @@ class TestPrivacy:
433
433
  assert len(next(e for e in events if e.type == "tool.succeeded").summary) <= 220
434
434
 
435
435
 
436
+ class TestNonAsciiText:
437
+ def test_accents_in_a_tool_result_are_shown_as_typed(self, client) -> None:
438
+ spans = agent_spans()
439
+ spans[2].attributes["gen_ai__tool__call__result"] = json.dumps({"mensaje": "El OEE bajó"}, ensure_ascii=False)
440
+
441
+ post(client, export(*spans))
442
+
443
+ _, events = load(client)
444
+ summary = next(e for e in events if e.type == "tool.succeeded").summary
445
+ assert "El OEE bajó" in summary
446
+ assert "\\u" not in summary
447
+
448
+ def test_a_result_escaped_by_the_producer_is_decoded(self, client) -> None:
449
+ spans = agent_spans()
450
+ spans[2].attributes["gen_ai__tool__call__result"] = json.dumps({"mensaje": "El OEE bajó"})
451
+ assert "\\u00f3" in spans[2].attributes["gen_ai__tool__call__result"]
452
+
453
+ post(client, export(*spans))
454
+
455
+ _, events = load(client)
456
+ summary = next(e for e in events if e.type == "tool.succeeded").summary
457
+ assert "El OEE bajó" in summary
458
+ assert "\\u" not in summary
459
+
460
+ def test_a_plain_text_result_with_a_backslash_is_left_alone(self, client) -> None:
461
+ spans = agent_spans()
462
+ spans[2].attributes["gen_ai__tool__call__result"] = r"path C:\users\ana"
463
+
464
+ post(client, export(*spans))
465
+
466
+ _, events = load(client)
467
+ assert next(e for e in events if e.type == "tool.succeeded").summary == r"path C:\users\ana"
468
+
469
+
436
470
  class TestEndpoint:
437
471
  def test_the_response_is_a_valid_protobuf_export_response(self, client) -> None:
438
472
  response = post(client, export(*agent_spans()))