From cb41aedd6618c3c9d7d49db1507fa6d73f72af84 Mon Sep 17 00:00:00 2001 From: Shay Date: Wed, 24 Jun 2026 14:38:37 -0700 Subject: [PATCH] feat(workbench): expose Apple UMA report route --- tests/test_workbench_api.py | 10 ++++++++++ workbench/api.py | 3 +++ workbench/apple_uma_report.py | 5 ++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/test_workbench_api.py b/tests/test_workbench_api.py index b8ec8e1e..ec30767b 100644 --- a/tests/test_workbench_api.py +++ b/tests/test_workbench_api.py @@ -447,3 +447,13 @@ def test_trace_construction_route() -> None: assert data["status"] == "missing_evidence" assert data["diagnostic_only"] is True assert data["serving_allowed"] is False + +def test_apple_uma_report_route_returns_read_only_projection() -> None: + response = _request("GET", "/benchmarks/apple-uma/report") + assert response.status == 200 + data = response.payload["data"] + assert data["read_only"] is True + assert data["report_id"] == "apple_uma_mechanical_sympathy_latest" + assert "backend_status" in data + assert "mlx_exact_cga_recall" in data["tracks"] + assert any("No MLX semantic-backend" in item for item in data["non_claims"]) diff --git a/workbench/api.py b/workbench/api.py index 7cd04a79..2e0e9bfb 100644 --- a/workbench/api.py +++ b/workbench/api.py @@ -25,6 +25,7 @@ from workbench.construction_endpoint import ( construction_evidence_response, construction_turn_id_from_path, ) +from workbench.apple_uma_report import read_apple_uma_report from workbench.tour import determinism_tour from workbench.field_evidence import ( field_evidence_from_journal_entry, @@ -326,6 +327,8 @@ class WorkbenchApi: return ApiResponse(400, error("bad_request", str(exc))) if method == "GET" and path == "/evals": return ApiResponse(200, ok({"lanes": readers.list_eval_lanes()})) + if method == "GET" and path == "/benchmarks/apple-uma/report": + return ApiResponse(200, ok(read_apple_uma_report())) if method == "GET" and path.startswith("/evals/"): lane = unquote(path.removeprefix("/evals/")) return ApiResponse(200, ok(readers.read_eval_lane(lane))) diff --git a/workbench/apple_uma_report.py b/workbench/apple_uma_report.py index 6fc0c6d6..44df04d9 100644 --- a/workbench/apple_uma_report.py +++ b/workbench/apple_uma_report.py @@ -38,7 +38,10 @@ def _sha256_file(path: Path) -> str: def _relative(path: Path) -> str: - return path.resolve().relative_to(REPO_ROOT.resolve()).as_posix() + try: + return path.resolve().relative_to(REPO_ROOT.resolve()).as_posix() + except ValueError: + return path.resolve().as_posix() def _require_mapping(value: object, label: str) -> dict[str, Any]: