From fe370b5c00d39bf1f20aa4ca3c158ccfe702498b Mon Sep 17 00:00:00 2001 From: snchimata <38873813+snchimata@users.noreply.github.com> Date: Wed, 11 Nov 2026 21:25:34 -0500 Subject: [PATCH 1/2] docs: refresh published SDK examples Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 736 ++++--- docs/assets/tokenfold-demo.gif | Bin 78086 -> 250039 bytes docs/sdk-benchmarks-0.6.0.md | 154 ++ docs/sdk-validation-0.6.0.md | 9 +- docs/tokenfold-demo.tape | 4 +- eval/research/sdk_quality_corpus.json | 1184 ++++++++++++ eval/research/sdk_quality_results.json | 2135 +++++++++++++++++++++ examples/quickstart.ipynb | 134 +- python-tests/test_notebook.py | 7 +- python-tests/test_readme_claims.py | 10 +- python-tests/test_readme_layout.py | 86 +- python-tests/test_sdk_quality_evidence.py | 141 ++ scripts/render-demo.py | 246 +++ scripts/test_render_demo.py | 89 + tests/fixtures/readme_metrics.json | 11 + 15 files changed, 4556 insertions(+), 390 deletions(-) create mode 100644 docs/sdk-benchmarks-0.6.0.md create mode 100644 eval/research/sdk_quality_corpus.json create mode 100644 eval/research/sdk_quality_results.json create mode 100644 python-tests/test_sdk_quality_evidence.py create mode 100644 scripts/render-demo.py create mode 100644 scripts/test_render_demo.py diff --git a/README.md b/README.md index 504efdb..93f85d9 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,15 @@ # TOKENFOLD -

More context. Fewer tokens. Exact by default.

+

Select what matters. Fit more context.

- Deterministic context compression for LLMs. Cut JSON tokens by up to 68% with exact recovery, or exceed 90% with opt-in, recoverable pruning. + Tokenfold Select brings query-aware relevance ranking to your LLM context. Fit complete context groups to a token budget, backed by Core's structural compression and inspectable receipts.

-

Tokenfold Core delivers model-free structural compression.

-

-Tokenfold Select ranks the context that matters most when token budgets get tight.

+

Python-first SDK. TypeScript alongside it. Rust at the core.

+

One fit() workflow for text, JSON, grouped context, and provider requests.

+

Select for relevance. Core for structural efficiency. One integrated workflow.


@@ -25,204 +25,246 @@ Tokenfold Select ranks the context that matters most when token budgets get tigh -[Install](#installation) | [Quick start](#quick-start) | [How it works](#how-it-works) | [MCP & agents](#coding-agents-and-mcp-integration) | [Core](#tokenfold-core) | [Select](#tokenfold-select) | [Benchmarks](#measured-results) | [Safety](#safety-and-auditability) +![Terminal demo: Python fit() code and verified 2,366 to 1,376 token savings from the first frame, followed by Core-first processing and optional Tokenfold Select. Select illustration only.](https://raw.githubusercontent.com/snchimata/tokenfold/main/docs/assets/tokenfold-demo.gif) -
- -## Installation +
+Demo scope and regeneration + +The 13-second FIT -> CORE -> SELECT loop returns directly to the code, with no +closing slide. It opens on the executed Python SDK `fit()` example and its +verified result: explicit folding reduces already-compact JSON from 2,366 to +1,376 tokens (**41.8%**), meeting a 1,500-token budget without dropping any of +the 30 records. The compact baseline exceeds that same budget. + +The following Core frame starts from the formatted API-response fixture: +3,812 to 1,376 tokens (**63.9%**), with exact JSON-value recovery. These are +different input representations, not interchangeable SDK and CLI baselines. +The workflow builds the Core baseline first; Select requires a still-over-budget, +eligible request, an approved runtime and explicit per-fit opt-in. Select is an +**illustration, not live inference**, and remains experimental and unqualified. +Fixture savings are not universal, and reversible data is not model-answer proof. + +The [renderer](scripts/render-demo.py) requires Pillow, a locally built CLI and +the current SDK installed in a Python >=3.12 environment. It checks the fixture +hash, Core counts, decode equality and SDK receipt before rendering: ```bash -pip install tokenfold # Python library -npm install tokenfold # Node.js / TypeScript library -cargo install tokenfold-cli # Standalone CLI -cargo add tokenfold-core # Rust library +python scripts/render-demo.py --sdk-python /path/to/sdk-env/python ``` -These installs provide Core. For optional query-aware model scoring, see -[Select setup](#tokenfold-select); its models and runtime setup are separate. - - - - - - - -
-
- Up to 96.3% fewer tokens (showcase) -

- Opt-in, recoverable pruning for heterogeneous array feeds - every dropped row stays fetchable. -

-
-
- 45.6-67.6% on three fixtures, lossless -

- Reversible structural folding of repeated keys and columns on three bundled fixtures - verified by exact JSON-value recovery. -

-
-
- Model-free & deterministic -

- No GPU, no semantic guesswork, no model in the Core path. A Rust engine with Python, Node.js, CLI and proxy interfaces. -

-
+The [VHS tape](docs/tokenfold-demo.tape) is a separate, Core-only terminal +recording and writes to `tmp/tokenfold-core-terminal.gif`. -> [!NOTE] -> **Built for:** Developers and AI teams sending structured JSON, tool definitions, and RAG feeds to LLMs. Start with a representative payload, inspect the receipt, and validate the result in your application. +
-
+## Table of contents -## How it works +[Python quickstart](#quick-start) | [Python fit workflow](#native-sdk-fitting) | [Select](#tokenfold-select) | [Benchmark highlights](#benchmark-highlights) | [Other integrations](#other-integrations) | [How it works](#how-it-works) | [Core](#tokenfold-core) | [Full results](#measured-results) | [Extended tooling](#extended-tooling) | [Safety and auditability](#safety-and-auditability) | [Reproduce the results](#reproduce-the-results) | [Contributing](#contributing) | [License](#license) -- **Core (default):** folds repeated structure without removing data. The - compact payload decodes to the original JSON value. -- **[Recoverable pruning](#recoverable-lossy-pruning) (opt-in):** model-free - rules rank eligible JSON rows; omissions are stored locally before replacement - with `$tf_ref` handles. This is the path behind the **96.3% showcase**, not Select. -- **[Select](#tokenfold-select) (separate):** a model scores groups against your - query; your allocator keeps selected original text under a token budget. - Select does not automatically store omissions or create recovery handles. +> **Built for:** Python application developers and AI teams fitting JSON, tool +> definitions, and grouped context into LLM requests. TypeScript, coding agents, +> CLI, proxy, and Rust integrations use the same underlying Core engine. -### What the model sees +## Quick start -```jsonc -// Input (conceptual illustration - 2 rows shown; small inputs like this -// pass through unchanged under the never-larger guard) -[{"id":1,"role":"admin"},{"id":2,"role":"member"}] +### Published Python SDK -// Tokenfold output on larger uniform arrays -> still JSON -{"__tf_cols__":["id","role"],"__tf_rows__":[[1,"admin"],[2,"member"]]} +Python >=3.12. Install the current SDK release; the base workflow needs no +repository checkout, model, GPU, or ML framework: + +```bash +python -m pip install "tokenfold==0.6.0" ``` -![Terminal demo: Tokenfold reduces the bundled API response from 3,812 to 1,376 tokens.](https://raw.githubusercontent.com/snchimata/tokenfold/main/docs/assets/tokenfold-demo.gif) + -
-How this demo was generated (VHS tape) +### Python fit workflow -The [VHS tape](docs/tokenfold-demo.tape) runs `inspect`, `compress`, and -`decode` against the bundled API response, including the **63.9%** receipt. -Run `vhs docs/tokenfold-demo.tape` to regenerate the GIF; the tape requires -`tokenfold` on `PATH`. +The SDK fits text, JSON, or grouped context to an explicit token ceiling. +Fitting is offline and model-free unless you explicitly configure and consent to +Select. No automatic sending, model downloads, or recoverable pruning occurs. -
+Default `Data(records)` renders standard compact JSON; opt into the folded +representation only for consumers you have validated: -Send the folded JSON directly to the model: column names label each value's -position in every row. Decode only when your application needs the original -object shape again. +```python +from tokenfold import Data, fit + +records = [ + {"id": i, "service": "checkout-api", "region": "us-east-1", + "status": 200, "latency_ms": 42 + i} + for i in range(1, 31) +] +result = fit(Data(records, representation="folded"), target_tokens=500) +print(f"{result.original_tokens} -> {result.final_tokens} tokens") +payload_text = result.require_met() +print(result.receipt.to_json()) +``` -#### Why Tokenfold, not LLMLingua / prompt compressors? +`require_met()` returns the payload only when the exact budget is met; otherwise +it raises `BudgetUnmetError` or `BudgetIndeterminateError` with the receipt. +Text/Data/Context return text; full provider requests return JSON objects. +An exact encoding count is not an exact provider-framing or billing count. +Explicit best-effort can accept an estimate without calling it exact. -- **Targets structured JSON, not prose.** Folds repeated keys and columns - mechanically rather than using semantic guesswork. -- **Model-free and deterministic.** Zero models running in Core and zero GPU - overhead. -- **Verified by exact decode.** Every lossless transform is verified by an - in-memory round trip before emitting; lossy pruning is strictly opt-in and - recoverable. +See the [Python example](examples/sdk_fit.py), [migration guide](docs/sdk-migration.md), +and [validation status](docs/sdk-validation-0.6.0.md). Advanced compression lives +under `tokenfold.lowlevel`. -#### How Tokenfold decides what to fold +For callers using the lower-level compression API, import it from +`tokenfold.lowlevel`: -```mermaid -%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#0f172a", "primaryBorderColor": "#94a3b8", "lineColor": "#64748b", "edgeLabelBackground": "#f8fafc", "fontFamily": "Arial", "fontSize": "15px"}, "flowchart": {"curve": "linear", "padding": 16, "nodeSpacing": 40, "rankSpacing": 32}}}%% -flowchart LR - accTitle: Lossless first, pruning only when opted in - accDescr: Build a verified lossless baseline. Consider pruning only when opted in, eligible, and still needed. Store omissions before removal and use pruning only if it beats the lossless baseline; otherwise keep that baseline. - Lossless["Build lossless JSON baseline
Verify folds; retain savings"] --> OptIn{"Pruning enabled,
eligible and needed?"} - OptIn -->|No| Keep("Lossless payload
+ receipt") - OptIn -->|Yes| Prune["Rank eligible rows
Store before removal"] - Prune -->|No further savings| Keep - Prune -->|Fewer tokens than baseline| Emit("Pruned payload
+ markers and receipt") +```python +import json +from tokenfold.lowlevel import InputFormat, compress, decode + +records = [ + {"id": i, "service": "checkout-api", "region": "us-east-1", + "status": 200, "latency_ms": 42 + i} + for i in range(1, 31) +] +raw_bytes = json.dumps(records).encode("utf-8") +result = compress(raw_bytes, format=InputFormat.JSON) +print(f"{result.report.original_tokens} -> {result.report.compressed_tokens} tokens") +assert json.loads(decode(result.payload)) == records +``` - classDef core fill:#eff6ff,stroke:#2563eb,stroke-width:2px,color:#1e3a8a - classDef optional fill:#f8fafc,stroke:#64748b,stroke-dasharray:5 4,color:#334155 - class Lossless,Keep core - class Prune optional + + +## Tokenfold Select + +**When structure ends, rank what matters.** + +[Tokenfold Select v3][tokenfold-select] is an Apache-2.0, **149.6M-parameter** +joint-group Ettin scorer, integrated into the SDK's `fit()` workflow. +Core remains model-free and neither loads nor invokes Select. +The SDK uses the lightweight maintained [tokenfold-select-runtime](packages/tokenfold-select-runtime/README.md), +not the superseded v2 package or an implicit direct-bundle loader. Model files are +acquired separately at an immutable revision; they do not ship in a clone or base SDK. +Use explicit CPU/FP32 or CUDA/BF16 setup and per-fit selection consent. Import and +already-fitting Core requests never load weights. Selection is experimental and +unqualified: grouping and required flags preserve caller-declared dependencies, +not independent proof of answer quality. No automatic recoverable pruning occurs. +See [provisioning, accounting, and lifecycle](docs/sdk-migration.md). + +### Python Select workflow + +After [explicit runtime provisioning](docs/sdk-migration.md#explicit-select-provisioning-and-consent), +supply the resulting config and allow selection on each fit. Keep dependent +content in one group or mark it required: + +```python +from tokenfold import Context, Group, SelectRuntime, Tokenfold + +context = Context( + query="Which change caused the cache failure?", + groups=[ + Group("constraints", "Use only the supplied release evidence.", required=True), + Group("changes", "Commit a41f9c changed the Redis TTL to 0ms."), + Group("logs", "After that release, cache evictions spiked on shard-02."), + Group("notes", "Weekly planning notes cover unrelated roadmap items. " * 40), + ], +) +with Tokenfold(select=SelectRuntime("select-runtime.json", experimental=True)) as client: + result = client.fit(context, target_tokens=96, allow_selection=True) + print(result.receipt.to_json()) + fitted_context = result.require_met() + print("Selection applied:", result.selection_applied) + print("Kept:", result.groups_kept, "Dropped:", result.groups_dropped) ``` -
-Text version (screen readers / no-image fallback) +The full context deliberately exceeds the ceiling. A successful fit requires +selection; the example does not promise particular kept IDs or answer accuracy. +If scoring fails or cannot meet the budget, checked access rejects the overflow +rather than silently returning a successful fit. Already-fitting requests skip +scoring even when consent is present. -1. Build the lossless baseline using eligible transforms. Verify structural - folds with an exact decode round trip and keep only token reductions. -2. Consider pruning only when explicitly opted in, the payload is eligible, - and the lossless baseline has not already met a requested token target. -3. Rank eligible rows and store omissions locally before removing them. - Rows refused by storage stay inline. -4. Use the pruned payload only if it has fewer tokens than the lossless - baseline; otherwise keep the lossless baseline. -5. Emit the chosen payload and compression receipt. Pruned payloads include - retrieval markers for stored omissions. +## Benchmark highlights -
+Saved fixture results, not universal savings or downstream quality guarantees: -| Workload | Type | Core mode | Savings | -| --- | --- | --- | --- | -| API responses | 30-record JSON payload | Lossless | **63.9% fewer tokens** | -| Tool schemas | OpenAI tool-schema fixture (Criterion bench) | Lossless | **45.6% fewer tokens** | -| Repetitive JSON | 50-record payload | Lossless | **67.6% fewer tokens** | +| Scope | Measured result | Limits and evidence | +| --- | --- | --- | +| Core structural compression | **45.6-63.9% on two fixtures, lossless** | Tool schemas and the 30-record API response; exact JSON-value recovery | +| Core vs. Headroom | **6/6 fixture wins**, 13,071 -> 8,715 tokens (**33.3% saved**) | Default local generic-JSON paths; Tokenfold recovered 6/6 exactly, Headroom matched 4/6 | +| Tokenfold JSON vs. TOON 4.1.1 | **7/7 fixture wins**, 12,776 vs. 14,841 tokens | 13.9% fewer tokens than TOON in this corpus; both paths round-trip | +| Opt-in, recoverable pruning | **Up to 96.3% fewer tokens (showcase)** | A 100-row heterogeneous feed; omitted rows stored behind local `$tf_ref` handles, not lossless inline compression | -These figures use exact `o200k_base` counts in the balanced preset. Versioned -inputs and provenance live in [`tests/fixtures/readme_metrics.json`](tests/fixtures/readme_metrics.json). -[Recoverable pruning](#recoverable-lossy-pruning) is separate, opt-in extended tooling. +These structural counts use exact `o200k_base` accounting. Inputs and provenance +live in [the metric manifest](tests/fixtures/readme_metrics.json); see +[full comparisons and methods](#measured-results) and the +[pruning showcase](#recoverable-lossy-pruning). The historical **67.6%** result +is a 50-record CHANGELOG measurement without a versioned source fixture; it was +not reproduced in the SDK rerun and is not used in the headline. -
+The [saved downstream-answer diagnostic](#sdk-downstream-answer-diagnostic) +recorded **8/8 correct baseline answers vs. 6/8 with folded JSON**; Select matched +16/16 baseline answers on eight synthetic tasks with two trials each. These are +small development diagnostics, not representative quality or Select qualification. -## Quick start +## Other integrations -### Native SDK fitting (0.6.0) +Python is the primary SDK onboarding path. TypeScript is supported alongside it; +CLI, MCP, proxy, and Rust are alternative entry points, not Python prerequisites. -Python >=3.12 (`pip install tokenfold==0.6.0`) and Node >=22 -(`npm install tokenfold@0.6.0`). See the migration guide for breaking import changes. -Base fitting is offline and model-free, with no auto-send, model download or storage. + -```python -from tokenfold import fit -result = fit("Keep this text unchanged.", target_tokens=32) -payload = result.require_met() -print(result.receipt.to_json()) +### Interfaces + +| Interface | Install / setup | Primary use case | +| --- | --- | --- | +| Python | `python -m pip install "tokenfold==0.6.0"` | Native fitting SDK; start above | +| TypeScript / Node.js | `npm install tokenfold@0.6.0` | Native fitting; CLI utilities live under `tokenfold/cli` | +| MCP | `tokenfold mcp serve` | Coding agents and editors; install the CLI first | +| CLI | `cargo install tokenfold-cli` | Files, stdin, and shell workflows | +| Proxy | `cargo install tokenfold-proxy` | Existing OpenAI-compatible clients | +| Rust | `cargo add tokenfold-core` | Native embedding | + +### TypeScript / Node.js + +Node >=22. Install the published SDK package. Core fitting runs in-process; +the base install needs neither Python nor a source build: + +```sh +npm install tokenfold@0.6.0 ``` +See the [Node example](examples/sdk_fit.mjs) and +[migration guide](docs/sdk-migration.md): + ```js import { fit } from "tokenfold"; const result = await fit("Keep this text unchanged.", { targetTokens: 32 }); const payload = result.requireMet(); ``` -Text/Data/Context return text; full provider requests return JSON objects. Provider -framing is not an encoding count: exact checked access rejects unavailable/estimated -budgets. Explicit best-effort can accept an estimate without calling it exact. -See [SDK migration](docs/sdk-migration.md), [Python example](examples/sdk_fit.py), -[Node example](examples/sdk_fit.mjs), and [validation status](docs/sdk-validation-0.6.0.md). -Advanced compression remains under `tokenfold.lowlevel` / `tokenfold/cli`. - -### Python: compress JSON directly +### Coding agents and MCP integration -After installing Tokenfold, try this self-contained example. Thirty uniform -records provide enough repeated structure to demonstrate lossless folding: +Coding agents can exhaust context limits on large shell outputs. Tokenfold runs as a +stdio MCP server exposing `tokenfold_compress`, `tokenfold_inspect`, +`tokenfold_retrieve`, and `tokenfold_stats`, with pre-configured filters for Git +status, diffs, build output, and test logs before they consume agent context. +`tokenfold init` currently supports Claude Code; Codex uses manual MCP +registration: -```python -import json -from tokenfold.lowlevel import InputFormat, compress +```bash +tokenfold init --agent claude-code +tokenfold doctor --agent claude-code -records = [{"id": i, "role": "member", "status": "active"} for i in range(30)] -result = compress(json.dumps(records), format=InputFormat.JSON) -print(f"{result.report.original_tokens} -> {result.report.compressed_tokens} tokens " - f"({result.saved_pct():.1f}% saved)") +# Or connect manually in Codex: +codex mcp add tokenfold -- tokenfold mcp serve ``` -Send `result.payload` (bytes) to the model. Use `tokenfold.lowlevel.decode` when your -application needs the original JSON shape again. Small or irregular inputs may -pass through unchanged under the never-larger guard. - -### CLI: inspect and compress a file - -Install the CLI with `cargo install tokenfold-cli` or use a -[checksummed GitHub Release](https://github.com/snchimata/tokenfold/releases/latest), then: +`tokenfold init --agent claude-code` merges a project-scoped `.mcp.json` entry without replacing +other servers; `tokenfold doctor --agent claude-code` verifies it. `tokenfold_inspect` +is side-effect-free (never returns a modified payload); `tokenfold_retrieve` +retrieves by hash or marker (report references are reserved but not yet +resolvable). See +[`docs/configuration.md`](docs/configuration.md) for tested MCP JSON/TOML and every environment +override. Trusted filters for Git, build, and test output +are available through `tokenfold filters list`. -```bash -tokenfold inspect payload.json --format json -tokenfold compress payload.json --format json --output payload.compact.json -``` +
### Drop-in proxy for OpenAI-compatible clients @@ -294,212 +336,167 @@ sequenceDiagram P-->>-C: Response ``` -### Interfaces +### CLI and low-level Python -| Interface | 1-line install / command | Primary use case | -| --- | --- | --- | -| Proxy | `cargo install tokenfold-proxy` | Existing OpenAI-compatible clients | -| CLI | `cargo install tokenfold-cli` | Files, stdin, and shell workflows | -| Python | `pip install tokenfold` | Application pipelines | -| TypeScript | `npm install tokenfold` | Node.js applications and automation | -| Rust | `cargo add tokenfold-core` | Native embedding | -| MCP | `tokenfold mcp serve` | Agents and editors | +For files and stdin, install the CLI with `cargo install tokenfold-cli` or use a +[checksummed GitHub Release](https://github.com/snchimata/tokenfold/releases/latest): -### Presets +```bash +tokenfold inspect payload.json --format json +tokenfold compress payload.json --format json --output payload.compact.json +``` -| Preset | Behavior | -| --- | --- | -| `conservative` | Minification only; no restructuring of what the model sees. | -| `balanced` (default) | Minification plus reversible columnar folding (`json_field_fold`, `json_value_dict`, `log_field_fold`) on eligible formats. | -| `aggressive` | Same default transform set as `balanced` today. | +For provider-shaped JSON, use the low-level Python API. In the published package +above, import these names directly from `tokenfold`, as in the first quickstart: -Provider message formats (`openai_json`, `anthropic_json`) use minification -only; columnar folding applies to generic JSON (`--format json`). The default -proxy path follows this rule. Explicit `--observations` enables lossless -compression of eligible JSON tool-result strings on `/v1/chat/completions` -without folding the provider envelope; see [observation compression](docs/configuration.md#restart-safe-observation-commitments). +```python +from tokenfold.lowlevel import InputFormat, compress -> [!NOTE] -> `schema_compaction` is not enabled by any preset. Unlike the default -> transforms, it truncates `examples` arrays and is not reversible. +# Accepts raw JSON bytes or str (messages, tools, or schemas) +request_json_bytes = b'{"messages": [{"role": "user", "content": "hello"}]}' +result = compress(request_json_bytes, format=InputFormat.OPENAI_JSON) + +# For standalone JSON records, use: format=InputFormat.JSON +compressed_payload = result.payload # bytes +print(f"Saved {result.report.saved_tokens} tokens ({result.saved_pct():.1f}%)") +``` ### Runnable examples (Python >=3.12, Node.js >=22, Rust >=1.98) -Runnable examples, one per surface, all under [`examples/`](examples): +After building and installing the SDK, run the examples under [`examples/`](examples): ```bash -python examples/sdk_fit.py # Python: native fit, checked payload, fit receipt -node examples/sdk_fit.mjs # Node: native fit, checked payload, fit receipt -python examples/quickstart.py # Advanced Python lowlevel compression and decoding -node examples/quickstart.mjs # Advanced Node CLI compression and decoding +python examples/quickstart.py # Python: compress messages, request bodies, JSON data +node examples/quickstart.mjs # TypeScript/Node: compress, inspect, read the receipt cargo run -p tokenfold-core --example quickstart # Rust: the embedded core API python examples/lossy_pruning.py # CLI: opt-in recoverable pruning, end to end -python examples/contextdoctor_report.py # source checkout: offline outcome/regression controls ``` [`examples/quickstart.ipynb`](examples/quickstart.ipynb) is the guided tour of the whole Python surface: everything `quickstart.py` shows, plus previews, budgets and presets, -provider payloads, recoverable pruning previews, and the offline ContextDoctor controls. -Its separately provisioned Select v3 CUDA example is explicitly enabled; set -`RUN_SELECT_V3 = False` for a core-only tour. See the [evaluation guide](eval/README.md) -for ContextDoctor's source-only interface and evidence limits. +provider payloads, recoverable pruning with retrieval, and where Tokenfold Select fits. -### Coding agents and MCP integration +## How it works -Coding agents can exhaust context limits on large shell outputs. Tokenfold runs as a -stdio MCP server exposing `tokenfold_compress`, `tokenfold_inspect`, -`tokenfold_retrieve`, and `tokenfold_stats`, with pre-configured filters for Git -status, diffs, build output, and test logs before they consume agent context. -`tokenfold init` currently supports Claude Code; Codex uses manual MCP -registration: +### What the model sees -```bash -tokenfold init --agent claude-code -tokenfold doctor --agent claude-code +```json +// Input (conceptual illustration - 2 rows shown; small inputs like this +// pass through unchanged under the never-larger guard) +[{"id":1,"role":"admin"},{"id":2,"role":"member"}] -# Or connect manually in Codex: -codex mcp add tokenfold -- tokenfold mcp serve +// Tokenfold output on larger uniform arrays -> still JSON +{"__tf_cols__":["id","role"],"__tf_rows__":[[1,"admin"],[2,"member"]]} ``` -`tokenfold init --agent claude-code` merges a project-scoped `.mcp.json` entry without replacing -other servers; `tokenfold doctor --agent claude-code` verifies it. `tokenfold_inspect` -is side-effect-free (never returns a modified payload); `tokenfold_retrieve` -retrieves by hash or marker (report references are reserved but not yet -resolvable). See -[`docs/configuration.md`](docs/configuration.md) for tested MCP JSON/TOML and every environment -override. Trusted filters for Git, build, and test output -are available through `tokenfold filters list`. - -
- -## Tokenfold Core - -### Structural, not semantic compression - -Semantic prompt compressors such as [LLMLingua](https://github.com/microsoft/LLMLingua) use a smaller language model to identify and remove less-important prompt tokens. -Tokenfold solves a different problem first: repeated keys, values, schemas, rows, and other structural redundancy. Core needs no model, is deterministic, and verifies an exact decode before accepting a lossless transform. Core does not inject prompt guidance or fine-tune models. +Column names label each value's position in every row. Use folded JSON only +with a consumer you have validated for that representation; decode when your +application needs the original object shape. The SDK's default `Data` +representation keeps standard compact JSON. -[Tokenfold Select](#tokenfold-select) is Tokenfold's complementary query-aware offering: when structure ends, it ranks what matters under a token budget. +#### Why Tokenfold Core for structured payloads? -
- - - -## Tokenfold Select - -**When structure ends, rank what matters.** - -[Tokenfold Select v3][tokenfold-select] is an Apache-2.0, **149.6M-parameter** -joint-group Ettin scorer. Core remains model-free and neither loads nor invokes Select. -The 0.6 SDK uses the lightweight maintained [tokenfold-select-runtime](packages/tokenfold-select-runtime/README.md), -not the superseded v2 package or an implicit direct-bundle loader. Model files are -acquired separately at an immutable revision; they do not ship in a clone or base SDK. -Use explicit CPU/FP32 or CUDA/BF16 setup and per-fit selection consent. Import and -already-fitting Core requests never load weights. Selection is experimental and -unqualified: grouping and required flags preserve caller-declared dependencies, -not independent proof of answer quality. No automatic recoverable pruning occurs. -See [provisioning, accounting, and lifecycle](docs/sdk-migration.md). - -### Tokenfold Select v3 benchmarks +- **Targets structured JSON, not prose.** Folds repeated keys and columns + mechanically rather than using semantic guesswork. +- **Model-free and deterministic.** Zero models running in Core and zero GPU + overhead. +- **Verified by exact decode.** Every lossless transform is verified by an + in-memory round trip before emitting; lossy pruning is strictly opt-in and + recoverable. -Saved results from the [published v3 benchmark snapshot](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/README.md), -pinned to model-card revision `317d3424d3de78c1a708c42a47a7812ab877f1a8`. -These measurements include the scorer **and whole-group allocator**, not the -scoring model alone. Core's lossless benchmarks remain separate below. +#### How Tokenfold decides what to fold -#### Context-token reduction at a 50% budget +```mermaid +%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#0f172a", "primaryBorderColor": "#94a3b8", "lineColor": "#64748b", "edgeLabelBackground": "#f8fafc", "fontFamily": "Arial", "fontSize": "15px"}, "flowchart": {"curve": "linear", "padding": 16, "nodeSpacing": 40, "rankSpacing": 32}}}%% +flowchart LR + accTitle: Lossless first, pruning only when opted in + accDescr: Build a verified lossless baseline. Consider pruning only when opted in, eligible, and still needed. Store omissions before removal and use pruning only if it beats the lossless baseline; otherwise keep that baseline. + Lossless["Build lossless JSON baseline
Verify folds; retain savings"] --> OptIn{"Pruning enabled,
eligible and needed?"} + OptIn -->|No| Keep("Lossless payload
+ receipt") + OptIn -->|Yes| Prune["Rank eligible rows
Store before removal"] + Prune -->|No further savings| Keep + Prune -->|Fewer tokens than baseline| Emit("Pruned payload
+ markers and receipt") -Select v3 removed **50.0-60.0%** of the original context tokens in these five -saved development examples. Both models had the same exact `o200k_base` output -cap for each workload; retained V3 groups were copied without rewriting. + classDef core fill:#eff6ff,stroke:#2563eb,stroke-width:2px,color:#1e3a8a + classDef optional fill:#f8fafc,stroke:#64748b,stroke-dasharray:5 4,color:#334155 + class Lossless,Keep core + class Prune optional +``` -| Workload | Original tokens | Select v3 output | V3 reduction | Kompress v2 output | -| --- | ---: | ---: | ---: | ---: | -| Code | 4,411 | 2,205 | **50.0%** | 2,149 | -| JSON | 1,303 | 651 | **50.0%** | Refused; 1,303 raw | -| Logs | 1,103 | 503 | **54.4%** | Refused; 1,103 raw | -| Multi-turn | 587 | 235 | **60.0%** | 284 | -| Retrieval | 4,498 | 2,217 | **50.7%** | 2,219 | +
+Text version (screen readers / no-image fallback) -One exposed source per workload; JSON and logs share a source population. -Token reduction does not establish answer accuracy or semantic preservation. -Six of ten historical Kompress cells refused the budget across the 25%/50% -screen; refusals and raw fallbacks are **inconclusive, not V3 wins**. The -[full ten-cell history](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/README.md#benchmark-methodology) -retains every result. +1. Build the lossless baseline using eligible transforms. Verify structural + folds with an exact decode round trip and keep only token reductions. +2. Consider pruning only when explicitly opted in, the payload is eligible, + and the lossless baseline has not already met a requested token target. +3. Rank eligible rows and store omissions locally before removing them. + Rows refused by storage stay inline. +4. Use the pruned payload only if it has fewer tokens than the lossless + baseline; otherwise keep the lossless baseline. +5. Emit the chosen payload and compression receipt. Pruned payloads include + retrieval markers for stored omissions. -#### Resident-warm complete-request latency at a 50% budget +
-| Workload | Select v3 ms | Kompress v2 ms | V3 time difference | Measurement basis | -| --- | ---: | ---: | ---: | --- | -| Code | 146.088 | 200.304 | -27.1% | One historical request per model | -| Retrieval | 139.291 | 201.564 | -30.9% | One historical request per model | -| Multi-turn | 66.572 | 77.751 | -14.4% | Median of 5 requests per model | +## Tokenfold Core -Resident-warm RTX 5080 research pipelines, FP32 parameters/BF16 compute; -startup excluded. Separate time blocks, not controlled-idle or paired trials. -These are descriptive development observations, **not representative quality, population p50/p95, or superiority qualification**. +### Structural, not semantic compression -
-Benchmark methodology and preserved history +Core removes structural redundancy, not prose selected by a language model. +See [what the model sees](#what-the-model-sees) for the columnar JSON format and +the verified lossless-first pipeline. Unlike semantic prompt compressors such +as [LLMLingua](https://github.com/microsoft/LLMLingua), Core needs no model or GPU, +does not inject prompt guidance, and does not fine-tune models. -RTX 5080, FP32 parameters/BF16 compute, cache off, TF32 off, one Torch thread. -V3 used the serialized SDPA research runner; Kompress v2 used native EAGER. -Complete-request clocks include grouping, counting, IPC, scoring, allocation, -final recount and applicable teardown, but **exclude process/model startup and -conditioning**. They are not cold-CLI or quickstart-SDK latency measurements. +[Tokenfold Select](#tokenfold-select) complements Core when query-aware group +selection is explicitly enabled. -The models ran in separate time blocks. The five-request multi-turn repeat was -not controlled-idle: the GPU-busy admission gate was explicitly waived, with -pre-model busy observations of 25% and 38%. All five samples per model are -retained. The earlier multi-turn result was **69.362 ms vs 64.411 ms** (V3 time -7.7% higher), and remains in the history rather than being replaced by the -repeat's sample medians. +### Presets -The shared synthetic publisher-data pilot has incomplete comparator/answer -evaluation; its literal-substring checks are not answer accuracy. The separate -[partial answer-lookup evaluation](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/QUALITY-EVAL.json) -also remains incomplete, with no overall quality score or qualified 90% -comparability claim. +| Preset | Behavior | +| --- | --- | +| `conservative` | Minification only; no restructuring of what the model sees. | +| `balanced` (default) | Minification plus reversible columnar folding (`json_field_fold`, `json_value_dict`, `log_field_fold`) on eligible formats. | +| `aggressive` | Same default transform set as `balanced` today. | -Sources: [exact counts, timings, all repeat samples and refusals](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/COMPARISON.json), -[validation](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/VALIDATION.json), and -[full methodology](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/README.md#benchmark-methodology). -
+Provider message formats (`openai_json`, `anthropic_json`) use minification +only; columnar folding applies to generic JSON (`--format json`). The default +proxy path follows this rule. Explicit `--observations` enables lossless +compression of eligible JSON tool-result strings on `/v1/chat/completions` +without folding the provider envelope; see [observation compression](docs/configuration.md#restart-safe-observation-commitments). -
-Historical Select v1 benchmarks (not v3 results) +> [!NOTE] +> `schema_compaction` is not enabled by any preset. Unlike the default +> transforms, it truncates `examples` arrays and is not reversible. -The original [Tokenfold Select v1][tokenfold-select-v1] model card reports the -following literal-answer-retention results against Kompress-v2 and BM25. -These are source-reported external results, not Core CI or v3 results. +## Measured results -| Tokens kept | Tokenfold Select | Kompress-v2 (Headroom) native | Kompress-v2 (Headroom) relevance | BM25 | vs. best baseline | -| ---: | ---: | ---: | ---: | ---: | ---: | -| 50% | **86.3%** | 66.5% | 80.5% | 79.4% | **+5.8 pp** | -| 25% | **70.3%** | 47.2% | 61.5% | 60.7% | **+8.8 pp** | -| 10% | **39.9%** | 30.4% | 37.7% | 37.7% | **+2.2 pp** | +### SDK downstream-answer diagnostic -In this v1 evaluation, Select beat every measured baseline at every budget. -At a 25% budget, the fine-tuned ranker keeps the answer **70.3% of the time**: -an **8.8 percentage-point** lead over the strongest baseline (Kompress-v2 relevance, 61.5%), and a -**15.8% relative lift** over BM25 (60.7% -> 70.3%). Critical-content survival is -**100% at every measured budget** through allocator force-keep. Results are -three-seed repeated subsampling over roughly 73,000 training and 24,000 -held-out fixtures per run; the [v1 model card][tokenfold-select-v1] publishes the -training recipe and full baseline set. Here, task success means the literal -gold answer survived selection under the stated budget. -These are source-reported external results, pinned by model revision in the -[metric manifest](tests/fixtures/readme_metrics.json); Core CI does not reproduce them. +On 2026-11-10, one free hosted model (`nvidia/nemotron-3.5-super-vl:free`, +Nvidia provider) answered 12 predeclared tasks twice per arm, with counterbalanced +order and exact typed-JSON grading. The 48 completed quality calls measured +answers, not just whether answer text survived compression: -See the [Select v1 model card][tokenfold-select-v1] for its setup, evaluation, -training data, and limitations. +| Path | Distinct tasks x trials | Baseline correct | Candidate correct | Provider prompt tokens | +| --- | ---: | ---: | ---: | ---: | +| Explicit folded JSON vs. compact JSON | 4 x 2 | 8/8 | **6/8** | 24,496 -> 16,600 (**32.2% fewer**) | +| Select at a 50% rendered-text budget vs. full context | 8 x 2 | 16/16 | 16/16 | 5,706 -> 3,416 (**40.1% fewer**) | -
+**Exact recovery did not guarantee correct model answers:** both folded-JSON +failures misread the same nested API record's plan tier and seat count. Default +SDK `Data` uses compact JSON; folding requires explicit opt-in. Select matched +its baseline on these eight synthetic tasks, not a representative accuracy test. +Repeated trials are not additional independent tasks; Select remains unqualified. -
+The first model scope stopped on a rate-limited probe, with all 48 quality cells +unexecuted; it is retained, not scored as 0% accuracy or silently retried. +See the [full method, failures and limits](docs/sdk-benchmarks-0.6.0.md), +[frozen prompts and oracles](eval/research/sdk_quality_corpus.json), and +[all-attempt results](eval/research/sdk_quality_results.json). -## Measured results +### Lossless corpus counts Exact `o200k_base` token counts, original input versus Tokenfold's lossless output across the six-fixture Headroom corpus: @@ -604,6 +601,106 @@ and [reproduction command](eval/research/README.md).
+### Tokenfold Select v3 benchmarks + +Saved results from the [published v3 benchmark snapshot](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/README.md), +pinned to model-card revision `317d3424d3de78c1a708c42a47a7812ab877f1a8`. +These measurements include the scorer **and whole-group allocator**, not the +scoring model alone. Core's lossless benchmarks are separate above. + +#### Context-token reduction at a 50% budget + +Select v3 removed **50.0-60.0%** of the original context tokens in these five +saved development examples. Both models had the same exact `o200k_base` output +cap for each workload; retained V3 groups were copied without rewriting. + +| Workload | Original tokens | Select v3 output | V3 reduction | Kompress v2 output | +| --- | ---: | ---: | ---: | ---: | +| Code | 4,411 | 2,205 | **50.0%** | 2,149 | +| JSON | 1,303 | 651 | **50.0%** | Refused; 1,303 raw | +| Logs | 1,103 | 503 | **54.4%** | Refused; 1,103 raw | +| Multi-turn | 587 | 235 | **60.0%** | 284 | +| Retrieval | 4,498 | 2,217 | **50.7%** | 2,219 | + +One exposed source per workload; JSON and logs share a source population. +Token reduction does not establish answer accuracy or semantic preservation. +Six of ten historical Kompress cells refused the budget across the 25%/50% +screen; refusals and raw fallbacks are **inconclusive, not V3 wins**. The +[full ten-cell history](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/README.md#benchmark-methodology) +retains every result. + +#### Resident-warm complete-request latency at a 50% budget + +| Workload | Select v3 ms | Kompress v2 ms | V3 time difference | +| --- | ---: | ---: | ---: | +| Code | 146.088 | 200.304 | -27.1% | +| Retrieval | 139.291 | 201.564 | -30.9% | +| Multi-turn | 66.572 | 77.751 | -14.4% | + +Resident-warm RTX 5080 research pipelines, FP32 parameters/BF16 compute; +startup excluded. Code and retrieval each use one historical request per model; +multi-turn uses the median of five. Separate time blocks, not controlled-idle or paired trials. +These are descriptive development observations, **not representative quality, population p50/p95, or superiority qualification**. + +
+Benchmark methodology and preserved history + +RTX 5080, FP32 parameters/BF16 compute, cache off, TF32 off, one Torch thread. +V3 used the serialized SDPA research runner; Kompress v2 used native EAGER. +Complete-request clocks include grouping, counting, IPC, scoring, allocation, +final recount and applicable teardown, but **exclude process/model startup and +conditioning**. They are not cold-CLI or quickstart-SDK latency measurements. + +The models ran in separate time blocks. The five-request multi-turn repeat was +not controlled-idle: the GPU-busy admission gate was explicitly waived, with +pre-model busy observations of 25% and 38%. All five samples per model are +retained. The earlier multi-turn result was **69.362 ms vs 64.411 ms** (V3 time +7.7% higher), and remains in the history rather than being replaced by the +repeat's sample medians. + +The shared synthetic publisher-data pilot has incomplete comparator/answer +evaluation; its literal-substring checks are not answer accuracy. The separate +[partial answer-lookup evaluation](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/QUALITY-EVAL.json) +also remains incomplete, with no overall quality score or qualified 90% +comparability claim. + +Sources: [exact counts, timings, all repeat samples and refusals](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/COMPARISON.json), +[validation](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/VALIDATION.json), and +[full methodology](https://huggingface.co/snchimata/tokenfold-select-v3/blob/317d3424d3de78c1a708c42a47a7812ab877f1a8/README.md#benchmark-methodology). +
+ +
+Historical Select v1 benchmarks (not v3 results) + +The original [Tokenfold Select v1][tokenfold-select-v1] model card reports the +following literal-answer-retention results against Kompress-v2 and BM25. +These are source-reported external results, not Core CI or v3 results. + +| Tokens kept | Tokenfold Select | Kompress-v2 (Headroom) native | Kompress-v2 (Headroom) relevance | BM25 | vs. best baseline | +| ---: | ---: | ---: | ---: | ---: | ---: | +| 50% | **86.3%** | 66.5% | 80.5% | 79.4% | **+5.8 pp** | +| 25% | **70.3%** | 47.2% | 61.5% | 60.7% | **+8.8 pp** | +| 10% | **39.9%** | 30.4% | 37.7% | 37.7% | **+2.2 pp** | + +In this v1 evaluation, Select beat every measured baseline at every budget. +At a 25% budget, the fine-tuned ranker keeps the answer **70.3% of the time**: +an **8.8 percentage-point** lead over the strongest baseline (Kompress-v2 relevance, 61.5%), and a +**15.8% relative lift** over BM25 (60.7% -> 70.3%). Critical-content survival is +**100% at every measured budget** through allocator force-keep. Results are +three-seed repeated subsampling over roughly 73,000 training and 24,000 +held-out fixtures per run; the [v1 model card][tokenfold-select-v1] publishes the +training recipe and full baseline set. Here, task success means the literal +gold answer survived selection under the stated budget. +These are source-reported external results, pinned by model revision in the +[metric manifest](tests/fixtures/readme_metrics.json); Core CI does not reproduce them. + +See the [Select v1 model card][tokenfold-select-v1] for its setup, evaluation, +training data, and limitations. + +
+ +
+ ## Extended tooling These additional capabilities extend Core with recoverable pruning and an @@ -624,7 +721,7 @@ pruning when strict context budgets apply: | --- | --- | --- | | **What it does** | Minifies, folds repeated keys into columns, and stores repeated values once | Adds deterministic ranking and retrieval markers for selected array rows | | **Best on** | Uniform records, schemas, logs, diffs | Search results, mixed event feeds, agent traces, long arrays | -| **Measured here** | **45.6-67.6%** fewer tokens on three bundled fixtures | **51.7-96.3%** fewer tokens (40-event feed at 51.7-68.2%; 100-row showcase at 96.3%) | +| **Measured here** | **45.6-63.9%** fewer tokens on two versioned fixtures | **51.7-96.3%** fewer tokens (40-event feed at 51.7-68.2%; 100-row showcase at 96.3%) | | **Recovery** | All data remains in the payload | Every emitted marker resolves through the local retrieval store | @@ -691,8 +788,9 @@ tokenfold inspect examples/incident_feed.json --format json \ --prune --keep-ratio 0.35 ``` -The same flags, and the same fail-closed contract, from Python and TypeScript. -Use a throwaway store directory while experimenting and reuse it for retrieval: +The same flags and fail-closed contract are available through the low-level +bindings. Use a throwaway store directory while experimenting and reuse it for +retrieval: ```python import json diff --git a/docs/assets/tokenfold-demo.gif b/docs/assets/tokenfold-demo.gif index 648a5e969e155705be49a10ae2c46ba8d29b0f72..d34fa0fb6e672d76a282c8eec7d4f16be3e7292d 100644 GIT binary patch literal 250039 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≪ zYn^u#4q5=gx`DoK>0r8zJ%@p>Ct`G@tIpUqnN-w1eF6!p{3ap zJKW$FLI1!C@lp<*`s5ltK zkiM*(?7-)eZDWWp_(-Vx|HcjYxU7W4BLzEYG90PX`X>(%PT`tt+-A&kxNniJZv-o1 z0*R-BIuHatP{O=yV{{OVnv91k&<>aY1VUhj3doE6!XL1%*Lc7M!0s3ZLPYfM7HB{t zKH&0HBFsSG16W`OYM=xTP$f(dgBIuUiZ6diu=@rl^SWpbr)daPun1Re37gQ%=y3S} zQGS~50}dh&3^5O=A_{5e%WS7;_|A4}2hG$Z5(8~7z$VT9K>u8z5BM$(G7Rvg%%@)YuO&{oxO4 zPW{qDC=kxi_CPWDKw!dTIo#q0e$E8|LrB7gW?HWWdJ-5Zas~Wh1@Mo7juB=GVoLOn z1)yXvR-`HDB^#Nd4Su9B7jrqZfO&jVC%l0*yx|G(057#bA~5c54x;*^NGNXM1E>!K zO^`$a(=R1O3j#AuLQppT5)=Cj4plR2FeIvsO5xk4xgB0SS9Iv*3w2vac+lQxei53VyiXD&fY4Pcl+ zSUX(?BL~0YE25DEL4p+_EXmMJ4hl1pI*sm?Q02pbzNs z2|xe@m>>^?6yBPG3i?3*V6*fZ&n!6LZAr!M3%}4ZLRD1#>^#eD z3`1ZAm@_D7?gUgd|pT(s!n(i0@;d#HCMn6#t%PtMfD-ah;0e(17WgeyNrF}Lq?`H;0ksnz zSD+(6;8LG%Q|r!Cx55M`LQ`*nQ|*=bP{0mQKviASMuj3dJAx!)ZDx+)I)RYl3}Ra}uxDTX3o&(*SC&Sc}&2E?;u1=g}a)mlHm zVc%n2+oYGs&16>B1WMlZ3q#--oN?O<1xc}A=WLLdZ? zU<~?p4SW^_)}RU6z*}K}VQ&Ej*1#Wn0BTPlb^QTvnRW%nz_J3hb_G!jI$}zwMz4PE z7EmByknX0zyD|Su=U%j|yM{1zPU}e%A#UCJVNw)WTz1JqWZY65QG{gqR@B@0R#SrcoytwUJpbcD6lflnD z|3Uv?;2);LAL{x2@R??oaAtAQ{a_Ogj9?65AYS^QmS^>p7B4fIBoAN_+59XQeQ}X9 zR(&s|^ioy3MeOln=(X>f9Ng*_r?e z2keG5UbLVFCesT>k`H`LIq+bzT|k??fSb`HOg<4db%F_jwn9FU1zwsWC)q8$feEJs z9^*O{ZS*pYIs}kfQnnDyIy;^N8?Zrfu)lXl54$j7)717L7(?J82HV+O8@9PQSwaBb zB=MKku`oYCunQ9b0VB123>9y|@VuA?l*O6xd!7bSX6GAJSAYSB211NN>}Y_U?4c8BP8ugT%v1TfTP)MLm&?X@YgDk)pKYv?XYmT8?X65KnpHh zUQ!zTGUtW2btRqz;hrQYztGv722@3y#D%m8k5hTt&L7wrZip{qy;yDS;5sp{<0`z# zomBnYoTN9pNu&7#xDCV=laAy14=x7|5HYxyJPWDu50;QfwM0mK(ycKX!4Gi6hvpBA zaqX}i&++oaCqTr%?aPjGv{K+aRSPGM{bqWOS}(-^$)HS zY5A>YEIhHd`_cbA7sG5M!$fJm@4p*Iz(L@~|9Pkn`j#FDe|?9y(3HBnw3mI{XS z34ret$(1@Q$f#`~%~2B!4F=aQyz4w2)CF_YN4(UT5HuHP5Wl^~@_;!|yx0XD<#u^0 z3}$TA(EU&VFwXNOdvQ4s`4$={!be;S{xrWC{$rQ|cR#r&%)%|M(~K)bjwf0%dsReW zn(D&j6?^=Y`P~u+!U$ksdyi2`r(FU;Ra)0PW7D9TBcvD0uJthQ+eV&HSkdDRVjzwI z?B;sj7kvlPRrT1H%oi|HSlkdpI_~ln?O5H5*KpOXcgfKV)1~9%we`1cS}-B+7Hq{5 zD?a8|B>u3I+u3hleGj?6o;n$3+MA^0|4-iEyG;&Ef6^bP<153p5kF%=FR>G`hXW>qhNYx>@`0_=^eC9 z5<_{pD5X*K%f1(>&n5QtHmTh$q-{Jwq{dnFj^1wBfdn=kf z1VFSxpq{sZUli?EvF*8H{4&Q5YCpkmzc3xb74ebvXa4NRjqp>kZp8kg zzZCL&vb^+-npa^igXn4ODzfC6J*YE(sjuw9e3mQC#FrmVQ3>!Lp2r;6> zi4-eZyofQQ#*G|1di?mY4IC{Y|2}xxlP4vfktMy^Nz;%w5<5hb&r=@A7H$#8xu~Nl52||{i8+Xt*(DuVEu}4W(%8r z^Vs+x_ifGzh4sqh>f$ZYWBytsZIi|y-WqxEd_I9EO`5W2(W=ek4>8=!bA@{b-7}__ zKPy@Xmr4~aiamC2Lxp}8>mGmBW6xwUfyEyxZDSMsPTFer6aS2^_~XT{>~RO|Lnm;38bCif*p3WK~itNH73?qh|v{WQ~p?ZA%WTb<^@wA z$d(&yQB9RyRuOu07+wC@vBU?r5OkqPE54+hKQ-N?R36^obpn98@drW(S|}zHb2j}` z6AQ2H$6^Q}*6;xcRtZ_-eFX`qoRY4!ft^{}!O=ts{(#otgAqz-U{3{U;TTe07*v)^ z=7nWbALM~R#Y;=k;8Y$b=!vPL{8T(|!|d*8fs;dx9STHKoJuG&=xT5z#V zfUBWqxbO#f@5LuAUiDeqDxoGmQ6v=(lUl6HDE#2y zx|2C|DtR9m>rcT(v=J=M7%Gf!jl?c3^ubH*FyeGD5k#@amz8X4i_j`MV{jJ|d-B7< z%4bIWfl-vn%Y2E*yPA(m}g? zut8e%;U0Vj|FM1Qov7()a-X{80q9eMzFO#^M#6!%L0hi?!UQ0=;O3{g@6LPgzW)w< z@V z6+u`;|NU{V4bh5;9Y|=xxs)+6U%Vn89<-EOfWU=XIid|?NSq$l??o|6+Zq!iKjk@* zZbq;Y4ZfmAe?75-AYcL?;*y*R>gbI&z{+R*0Rv%WiHu80q2f;B!pbzwA2%f6SF*?y zE_xAsRt(`A4>CdR%!wd{(&KrY*cX$9ZYd2E)F4}jDA@H;c3!}PR{jEl9jH%u%xtDJ zp9#%qN^>J+G2VIjP?MQ?VNN_VRU4Y;lV3(}R!nh<9k_CgKX`)*1i6f_{NaK<90^bU zkf*tHA|5JGK?_USrmMuG1*QB!CvvF^LEwNm66S9|Z-mWK`tt!J;K3i0$x0qz(*`?a z|F0^^gHz}F6_t|Iq<{q>BfJvmFgSR@WND~L3q*#ec=D5dP7#*8nqbJSWBRjW8lf)r8ZQV1BT~6-+-H|PP+jMYzq+;lbd< z7yhR$Z5JYyq(K5?ZzlvT+#w^LXMh|NdPcW(s;43tD19J6eUg_J@n?AtClGisM;-Wd z`B!=S$7Q1De@lZLAZIs+0s>l)dpbdR$wql{g90lTb3;gkMQDUa_z*17Ho*21Hei5N zatpZQC&C9;`0;76;v_xN9iHJpsmKm^_FB16^1`E?^gJfCtCm zX}3TFIj}SgvmYo>B`9D7J+U7!uyrF+LMwnJ(((i?AV*NR0v2}=siAjvp>4%7DRFih z;DJ)sK?Q^%6kH~K@nnW*hzA+f0#s2sdI&H(MHec@|AtXmR0?wgz_Ce2g#tffC6F>K zr(*+M7y@6oG}Lhe0>g#1$ctL_i>wD8EFdgDK?95jg)opCK7u0TvWRe`ZOjM)D}V>4 z_$(UZDm8G1RdND1V^m)EO>1Z+Z3r81zyeeOee)9&s(6m9C?DS#ch5ptuV^@k0gq7V z0{Dkp>?0#SQv%4QY)x4hqyx{ z`!OdJ$%lUUGdUq6OMoi*mIuFx0!*NbD{zaQM37*(2W_y9Rnd<2v5#%I5b?tTo@RSZ z@DddFgcaE=!ALGH@EJikD4%wNgQJ5n=#YGn|BD%U3&&sw2!(`O$(3E{mHrhIPv8v( z)i8RoPkE*rbU_8)fHP}Z93#;Li)9z<1c_Ki1$ZD&>jXj4k_KamFiX*w86_V{MFk(my9VbcFCO1xlVNQnW@=XUZ9w%0DQCP{ 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⩔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 literal 78086 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

mB0{RNS)$9IPH+1vJWAee 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 fH2&Xm=KsI3uK)4h_-n!cdm8_H8vp 16,600 (-32.2%) | +| Select: 8 synthetic tasks x 2 trials, full vs. 50% rendered-text cap | 16/16 | 16/16 | 0 | 5,706 -> 3,416 (-40.1%) | + +Both Core losses occurred on the same API-record lookup, once in each repetition: +the baseline correctly returned plan `free`, seats `1`; the folded-input answer +returned plan `team`, seats `25`. The name and active flag were correct. The +folded JSON still decoded exactly to the original value. **Codec reversibility +is not model-answer equivalence**, even with a shared explanation of column and +dictionary frames. Default SDK `Data` remains compact JSON; folding is opt-in. + +Select's tasks cover code, logs, retrieval, a flattened conversation and an +unknown-value abstention. Supporting groups occupy positions 0, 1, 2, 3, 4, 0, +1, 2 rather than always appearing first. Dependencies were explicitly bundled by +the fixture author. All eight candidates scored, selected, reconstructed complete +groups in source order and met their exact local targets. This does not test +dependency discovery, required-group protection or provider-role conversation +compaction; all groups were optional. It does not establish general quality. + +Before any hosted answers, a separate review pass corrected an omitted schema +oracle field and a first-group placement bias. Earlier local preparations were +retained. These development revisions are another reason not to label this an +untouched held-out qualification set. No prompt, oracle, target or selected +payload was changed after the hosted answers, including the two failures. + +## Accounting and failed scopes + +There were **50 actual generation attempts**, with no retries or automatic +provider fallback: + +1. A `google/gemma-4-31b-it:free` / `google-ai-studio` connectivity probe returned + HTTP 429 from the shared upstream pool. That scope stopped; all 48 planned + quality cells remained unexecuted. Its usage and charge are unknown, not zero. +2. A separately frozen and announced NVIDIA scope completed one connectivity + probe plus all 48 quality calls. All 49 replies ended with `stop`, with no + BYOK, refusal or nonzero reported charge. The probe is excluded from accuracy + and paired token tables, but included in all-call accounting. + +NVIDIA reported 50,256 prompt + 749 completion = **51,005 tokens including its +probe**. This is not a complete campaign total because the failed probe's usage +is unknown. Request pricing was unreported, and provider-reported zero charges +are not audited invoices or complete billing savings. No dollar-saving ratio is +claimed. The older 12 HTTP-400 attempts described in +[SDK validation](sdk-validation-0.6.0.md) remain separate historical evidence. + +Provider prompt counts include the full submitted messages and shared formatting +instructions. They are not local `o200k_base` counts: + +| Quality-call totals | Local rendered baseline -> candidate | Provider completion baseline -> candidate | +| --- | ---: | ---: | +| Core | 18,988 -> 12,044 (-36.6%) | 202 -> 204 | +| Select | 3,786 -> 1,694 (-55.3%) | 168 -> 169 | + +Completion tokens did not decrease. All wrong answers remain in these totals. +Core reported 4,336 cached input tokens per arm; Select reported zero. Cache +and free-provider load were not controlled. Client-call medians, including the +isolated HTTP worker but excluding SDK preparation, were 761.95 -> 849.92 ms +for Core and 608.27 -> 603.04 ms for Select. **No latency improvement is claimed.** +The 900-second limit was a dispatch deadline plus child cleanup, not a strict +whole-process lifetime guarantee. + +## Other benchmark and correctness checks + +The preceding Core rerun reproduced all seven published structural output counts, +with exact JSON-value recovery; the six-fixture corpus remained 13,071 -> 8,715 +tokens. Tokenfold vs. TOON remained 12,776 vs. 14,841 tokens, both round-tripping +all seven fixtures. These local JSON paths are not hosted provider comparisons. +Fresh pinned-source Headroom output totaled 12,819 rather than historical 12,807 +tokens (+10 incident-feed, +2 OpenAI payload), still value-equal on 4/6 cases. +The README's existing comparator tables retain their historical source snapshot; +this small environment-dependent drift is not attributed to the SDK. + +Explicit SDK folded Data totaled 12,772 instead of 12,776: four fewer tokens from +two `0.0` -> `0` normalizations in one report fixture, not better structural +folding. The opt-in pruning showcase remained 304,032 -> 11,364 tokens (96.3%), +with retrieval/preserve/fallback assertions passing; it remains unvalidated +lossy evidence. Tool-schema savings remained 45.63%. The historical 67.6% +repetitive-JSON claim lacks a versioned input and was not reconstructed. + +The release-Rust benchmark gate passed: command p95 449.972 ms, structured JSON +p95 1469.547 ms, total allocation 1,580,507,977 bytes/call, savings ratio 0.4563. +Historical threshold baselines used another compiler/time block; lower observed +latency/allocation is not causal SDK speedup evidence. Total allocation is not +peak resident memory. Folded SDK performance was mixed across fixtures, including +a slower incident-feed path; there is no universal speedup claim. + +Fresh local checks on Windows x64, Rust 1.98, Python 3.12 and Node 22 passed: +`cargo fmt --all --check`, workspace Clippy with denied warnings, 773 Rust tests +(two explicit real-worker/model entrypoints ignored), the installed Python suite, +43 Node tests with zero skips, and the deterministic fidelity smoke. These are +not cross-platform or exact-head hosted CI receipts. Initial test runs lacked +Pyright and explicit CLI/Python test paths; those failures were retained and +resolved by supplying the existing test prerequisites, without product edits. + +## Evidence and reproduction + +- [Frozen corpus](../eval/research/sdk_quality_corpus.json): questions, typed + oracles, original source paths/hashes, balanced groups, exact submitted message + arrays, common request template, targets and selection exposure. +- [Curated result ledger](../eval/research/sdk_quality_results.json): every + quality reply including both failures, probe outcomes, prior unexecuted cells, + provider usage, cached tokens, timings, charge limitations and source/method + hashes. Private request/account IDs and credentials are not published. +- [README metric pins](../tests/fixtures/readme_metrics.json): canonical-JSON + SHA-256 digests and the exact displayed quality counts. + +Offline evidence reconciliation (no model, weights or network): + +```sh +python -m pytest python-tests/test_sdk_quality_evidence.py -q +``` + +To replay hosted answers, use a **fresh, explicitly bounded scope**, verify the +current endpoint's zero prices and supported parameters, and compose each body +from the corpus's `protocol.request_template` plus that arm's `messages`. +Follow its two-trial order and 48-call maximum, with at most one separate probe, +1024 output tokens, no retry/fallback, durable dispatch/terminal accounting and +the same exact grading. The existing +[free-provider adapter](../eval/contextdoctor_openrouter.py) supplies catalog +validation, guarded HTTP and receipt normalization. A changed model/provider or +configuration is a new scope, not a resumed or relabeled old run. Future hosted +outputs are not guaranteed to reproduce because checkpoint/cache/load are not +immutable. + +Frozen message replay tests interpretation of the measured SDK outputs, not a +fresh execution of Select. To regenerate SDK inputs, install 0.6 artifacts and +use `Data(value)` / `Data(value, representation="folded")` for Core. For Select, +build `Context(query, groups)` in the corpus order, use an explicitly approved +v3 CUDA/BF16 runtime, and fit with `allow_selection=True` at +`floor(full_rendered_baseline / 2)`. Model acquisition and runtime approval remain +explicit; this corpus/test does not download weights, provision environments or +make hosted calls automatically. See [SDK migration](sdk-migration.md). diff --git a/docs/sdk-validation-0.6.0.md b/docs/sdk-validation-0.6.0.md index f508618..fb7f1f7 100644 --- a/docs/sdk-validation-0.6.0.md +++ b/docs/sdk-validation-0.6.0.md @@ -94,7 +94,9 @@ so its runtime source digest is `df523862e73e3de07000a62a0e78cb133bfaf68cb5af71e It requires a **new explicit approval**, not reuse/relabeling of the previous config. Clone-built artifacts and their functional receipts are distinct from the timings above. -## Bounded downstream attempt: inconclusive + + +## Earlier bounded downstream attempt: inconclusive Three synthetic tasks, two counterbalanced repetitions, baseline/candidate arms, 1024 output tokens per call, exact predeclared JSON oracles, no retry or provider @@ -111,6 +113,11 @@ Local candidate preparation did apply selection: rendered-text counts 173 -> 75 `o200k_base` rendered-text counts, **not provider-request savings, billed usage, answer-quality evidence or superiority qualification**. +A subsequent [2026-11-10 downstream diagnostic](sdk-benchmarks-0.6.0.md) completed +48 quality calls: compact JSON 8/8 vs. explicit folded JSON 6/8, and full-context +16/16 vs. Select 16/16 on eight synthetic tasks. Those limited observations do +not replace the earlier failed attempts or establish general quality preservation. + ## Actual user notebook The ignored local `tokenfold_run/quickstart.ipynb` is distinct from the tracked diff --git a/docs/tokenfold-demo.tape b/docs/tokenfold-demo.tape index 1372ffa..678799a 100644 --- a/docs/tokenfold-demo.tape +++ b/docs/tokenfold-demo.tape @@ -1,4 +1,6 @@ -Output docs/assets/tokenfold-demo.gif +# Legacy Core-only terminal recording. The README marketing GIF is generated +# by scripts/render-demo.py; keep this tape's output separate. +Output tmp/tokenfold-core-terminal.gif # Window geometry optimized for GitHub README width (prevents browser blur & empty void) Set Shell "bash" diff --git a/eval/research/sdk_quality_corpus.json b/eval/research/sdk_quality_corpus.json new file mode 100644 index 0000000..1cca97c --- /dev/null +++ b/eval/research/sdk_quality_corpus.json @@ -0,0 +1,1184 @@ +{ + "schema_version": 1, + "kind": "tokenfold.sdk-quality.frozen-corpus", + "date": "2026-11-10", + "protocol": { + "request_template": { + "model": "nvidia/nemotron-3.5-super-vl:free", + "stream": false, + "max_tokens": 1024, + "temperature": 0.0, + "provider": { + "only": [ + "nvidia" + ], + "allow_fallbacks": false, + "require_parameters": true, + "max_price": { + "prompt": 0, + "completion": 0, + "request": 0, + "image": 0 + } + }, + "plugins": [], + "reasoning": { + "enabled": false + }, + "seed": 271 + }, + "trials": 2, + "ordering": "trial 0 baseline,candidate; trial 1 candidate,baseline; fixed task order", + "grading": "one JSON object, exact recursive types/values, no duplicate keys/markdown; only final nonrefused stop responses eligible", + "max_quality_calls": 48, + "max_probe_calls_per_scope": 1, + "per_call_timeout_seconds": 45, + "batch_dispatch_deadline_seconds": 900, + "retries": false, + "fallbacks": false + }, + "tasks": [ + { + "id": "core-api-lookup", + "family": "core", + "workload": "json", + "source": "examples/api_response.json", + "source_sha256": "91653e687b399362c766760a69bc260c8ef0a1e805825c71602f968cd1c6ef27", + "query": "For record id 1017, return name, active, plan tier and plan seats as JSON fields name (string), active (boolean), tier (string), seats (integer).", + "oracle": { + "name": "Niklaus Wirth", + "active": true, + "tier": "free", + "seats": 1 + }, + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "{\"status\":\"ok\",\"page\":1,\"per_page\":30,\"total\":30,\"results\":[{\"id\":1001,\"name\":\"Ada Lovelace\",\"role\":\"admin\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-01T09:00:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\",\"billing\",\"admin\"]},{\"id\":1002,\"name\":\"Alan Turing\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-02T09:01:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1003,\"name\":\"Grace Hopper\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-03T09:02:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1004,\"name\":\"Katherine Johnson\",\"role\":\"member\",\"active\":false,\"email_verified\":true,\"last_login\":\"2026-08-04T09:03:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1005,\"name\":\"Edsger Dijkstra\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-05T09:04:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1006,\"name\":\"Barbara Liskov\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-06T09:05:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1007,\"name\":\"Donald Knuth\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-07T09:06:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1008,\"name\":\"Radia Perlman\",\"role\":\"admin\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-08T09:07:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\",\"billing\",\"admin\"]},{\"id\":1009,\"name\":\"John Backus\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-09T09:08:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1010,\"name\":\"Frances Allen\",\"role\":\"member\",\"active\":false,\"email_verified\":true,\"last_login\":\"2026-08-10T09:09:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1011,\"name\":\"Ken Thompson\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-11T09:10:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1012,\"name\":\"Adele Goldberg\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-12T09:11:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1013,\"name\":\"Dennis Ritchie\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-13T09:12:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1014,\"name\":\"Margaret Hamilton\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-14T09:13:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1015,\"name\":\"Tony Hoare\",\"role\":\"admin\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-15T09:14:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\",\"billing\",\"admin\"]},{\"id\":1016,\"name\":\"Lynn Conway\",\"role\":\"member\",\"active\":false,\"email_verified\":true,\"last_login\":\"2026-08-16T09:15:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1017,\"name\":\"Niklaus Wirth\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-17T09:16:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1018,\"name\":\"Shafi Goldwasser\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-18T09:17:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1019,\"name\":\"Leslie Lamport\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-19T09:18:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1020,\"name\":\"Anita Borg\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-20T09:19:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1021,\"name\":\"John McCarthy\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-21T09:20:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1022,\"name\":\"Karen Sparck Jones\",\"role\":\"admin\",\"active\":false,\"email_verified\":true,\"last_login\":\"2026-08-22T09:21:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\",\"billing\",\"admin\"]},{\"id\":1023,\"name\":\"Claude Shannon\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-23T09:22:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1024,\"name\":\"Jean Bartik\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-24T09:23:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1025,\"name\":\"Vint Cerf\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-25T09:24:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1026,\"name\":\"Sophie Wilson\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-26T09:25:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1027,\"name\":\"Bjarne Stroustrup\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-27T09:26:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1028,\"name\":\"Gladys West\",\"role\":\"member\",\"active\":false,\"email_verified\":true,\"last_login\":\"2026-08-28T09:27:00Z\",\"plan\":{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]},{\"id\":1029,\"name\":\"Guido van Rossum\",\"role\":\"admin\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-01T09:28:00Z\",\"plan\":{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},\"permissions\":[\"read\",\"write\",\"billing\",\"admin\"]},{\"id\":1030,\"name\":\"Hedy Lamarr\",\"role\":\"member\",\"active\":true,\"email_verified\":true,\"last_login\":\"2026-08-02T09:29:00Z\",\"plan\":{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},\"permissions\":[\"read\",\"write\"]}]}" + }, + { + "role": "user", + "content": "For record id 1017, return name, active, plan tier and plan seats as JSON fields name (string), active (boolean), tier (string), seats (integer).\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 2366, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "{\"__tf_dict__\":[{\"tier\":\"pro\",\"seats\":5,\"region\":\"us-east-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"},[\"read\",\"write\",\"billing\",\"admin\"],{\"tier\":\"free\",\"seats\":1,\"region\":\"us-east-1\",\"billing_cycle\":\"monthly\",\"support_level\":\"community\"},{\"tier\":\"team\",\"seats\":25,\"region\":\"eu-west-1\",\"billing_cycle\":\"annual\",\"support_level\":\"priority\"}],\"__tf_data__\":{\"status\":\"ok\",\"page\":1,\"per_page\":30,\"total\":30,\"results\":{\"__tf_cols__\":[\"id\",\"name\",\"role\",\"active\",\"email_verified\",\"last_login\",\"plan\",\"permissions\"],\"__tf_rows__\":[[1001,\"Ada Lovelace\",\"admin\",true,true,\"2026-08-01T09:00:00Z\",{\"__tf_ref__\":0},{\"__tf_ref__\":1}],[1002,\"Alan Turing\",\"member\",true,true,\"2026-08-02T09:01:00Z\",{\"__tf_ref__\":2},[\"read\",\"write\"]],[1003,\"Grace Hopper\",\"member\",true,true,\"2026-08-03T09:02:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]],[1004,\"Katherine Johnson\",\"member\",false,true,\"2026-08-04T09:03:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1005,\"Edsger Dijkstra\",\"member\",true,true,\"2026-08-05T09:04:00Z\",{\"__tf_ref__\":2},[\"read\",\"write\"]],[1006,\"Barbara Liskov\",\"member\",true,true,\"2026-08-06T09:05:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1007,\"Donald Knuth\",\"member\",true,true,\"2026-08-07T09:06:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1008,\"Radia Perlman\",\"admin\",true,true,\"2026-08-08T09:07:00Z\",{\"__tf_ref__\":2},{\"__tf_ref__\":1}],[1009,\"John Backus\",\"member\",true,true,\"2026-08-09T09:08:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]],[1010,\"Frances Allen\",\"member\",false,true,\"2026-08-10T09:09:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1011,\"Ken Thompson\",\"member\",true,true,\"2026-08-11T09:10:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1012,\"Adele Goldberg\",\"member\",true,true,\"2026-08-12T09:11:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]],[1013,\"Dennis Ritchie\",\"member\",true,true,\"2026-08-13T09:12:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1014,\"Margaret Hamilton\",\"member\",true,true,\"2026-08-14T09:13:00Z\",{\"__tf_ref__\":2},[\"read\",\"write\"]],[1015,\"Tony Hoare\",\"admin\",true,true,\"2026-08-15T09:14:00Z\",{\"__tf_ref__\":3},{\"__tf_ref__\":1}],[1016,\"Lynn Conway\",\"member\",false,true,\"2026-08-16T09:15:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1017,\"Niklaus Wirth\",\"member\",true,true,\"2026-08-17T09:16:00Z\",{\"__tf_ref__\":2},[\"read\",\"write\"]],[1018,\"Shafi Goldwasser\",\"member\",true,true,\"2026-08-18T09:17:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]],[1019,\"Leslie Lamport\",\"member\",true,true,\"2026-08-19T09:18:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1020,\"Anita Borg\",\"member\",true,true,\"2026-08-20T09:19:00Z\",{\"__tf_ref__\":2},[\"read\",\"write\"]],[1021,\"John McCarthy\",\"member\",true,true,\"2026-08-21T09:20:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1022,\"Karen Sparck Jones\",\"admin\",false,true,\"2026-08-22T09:21:00Z\",{\"__tf_ref__\":0},{\"__tf_ref__\":1}],[1023,\"Claude Shannon\",\"member\",true,true,\"2026-08-23T09:22:00Z\",{\"__tf_ref__\":2},[\"read\",\"write\"]],[1024,\"Jean Bartik\",\"member\",true,true,\"2026-08-24T09:23:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]],[1025,\"Vint Cerf\",\"member\",true,true,\"2026-08-25T09:24:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1026,\"Sophie Wilson\",\"member\",true,true,\"2026-08-26T09:25:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1027,\"Bjarne Stroustrup\",\"member\",true,true,\"2026-08-27T09:26:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]],[1028,\"Gladys West\",\"member\",false,true,\"2026-08-28T09:27:00Z\",{\"__tf_ref__\":0},[\"read\",\"write\"]],[1029,\"Guido van Rossum\",\"admin\",true,true,\"2026-08-01T09:28:00Z\",{\"__tf_ref__\":2},{\"__tf_ref__\":1}],[1030,\"Hedy Lamarr\",\"member\",true,true,\"2026-08-02T09:29:00Z\",{\"__tf_ref__\":3},[\"read\",\"write\"]]]}}}" + }, + { + "role": "user", + "content": "For record id 1017, return name, active, plan tier and plan seats as JSON fields name (string), active (boolean), tier (string), seats (integer).\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 1376, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [ + "json_field_fold", + "json_value_dict" + ], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + } + } + }, + { + "id": "core-users-lookup", + "family": "core", + "workload": "json", + "source": "eval/research/toon_corpus/flat_users.json", + "source_sha256": "2ae2b2f59a851c6b79efc8a1d27102b113dc1424007c64f80ae0909bc37f578c", + "query": "For user id 1009, return JSON fields name (string), role (string), active (boolean).", + "oracle": { + "name": "John Backus", + "role": "member", + "active": true + }, + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "[{\"id\":1001,\"name\":\"Ada Lovelace\",\"role\":\"admin\",\"active\":true},{\"id\":1002,\"name\":\"Alan Turing\",\"role\":\"member\",\"active\":true},{\"id\":1003,\"name\":\"Grace Hopper\",\"role\":\"member\",\"active\":true},{\"id\":1004,\"name\":\"Katherine Johnson\",\"role\":\"member\",\"active\":false},{\"id\":1005,\"name\":\"Edsger Dijkstra\",\"role\":\"member\",\"active\":true},{\"id\":1006,\"name\":\"Barbara Liskov\",\"role\":\"member\",\"active\":true},{\"id\":1007,\"name\":\"Donald Knuth\",\"role\":\"member\",\"active\":true},{\"id\":1008,\"name\":\"Radia Perlman\",\"role\":\"admin\",\"active\":true},{\"id\":1009,\"name\":\"John Backus\",\"role\":\"member\",\"active\":true},{\"id\":1010,\"name\":\"Frances Allen\",\"role\":\"member\",\"active\":false},{\"id\":1011,\"name\":\"Ken Thompson\",\"role\":\"member\",\"active\":true},{\"id\":1012,\"name\":\"Adele Goldberg\",\"role\":\"member\",\"active\":true},{\"id\":1013,\"name\":\"Dennis Ritchie\",\"role\":\"member\",\"active\":true},{\"id\":1014,\"name\":\"Margaret Hamilton\",\"role\":\"member\",\"active\":true},{\"id\":1015,\"name\":\"Tony Hoare\",\"role\":\"admin\",\"active\":true},{\"id\":1016,\"name\":\"Lynn Conway\",\"role\":\"member\",\"active\":false},{\"id\":1017,\"name\":\"Niklaus Wirth\",\"role\":\"member\",\"active\":true},{\"id\":1018,\"name\":\"Shafi Goldwasser\",\"role\":\"member\",\"active\":true},{\"id\":1019,\"name\":\"Leslie Lamport\",\"role\":\"member\",\"active\":true},{\"id\":1020,\"name\":\"Anita Borg\",\"role\":\"member\",\"active\":true},{\"id\":1021,\"name\":\"John McCarthy\",\"role\":\"member\",\"active\":true},{\"id\":1022,\"name\":\"Karen Sparck Jones\",\"role\":\"admin\",\"active\":false},{\"id\":1023,\"name\":\"Claude Shannon\",\"role\":\"member\",\"active\":true},{\"id\":1024,\"name\":\"Jean Bartik\",\"role\":\"member\",\"active\":true},{\"id\":1025,\"name\":\"Vint Cerf\",\"role\":\"member\",\"active\":true},{\"id\":1026,\"name\":\"Sophie Wilson\",\"role\":\"member\",\"active\":true},{\"id\":1027,\"name\":\"Bjarne Stroustrup\",\"role\":\"member\",\"active\":true},{\"id\":1028,\"name\":\"Gladys West\",\"role\":\"member\",\"active\":false},{\"id\":1029,\"name\":\"Guido van Rossum\",\"role\":\"admin\",\"active\":true},{\"id\":1030,\"name\":\"Hedy Lamarr\",\"role\":\"member\",\"active\":true}]" + }, + { + "role": "user", + "content": "For user id 1009, return JSON fields name (string), role (string), active (boolean).\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 586, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "{\"__tf_cols__\":[\"id\",\"name\",\"role\",\"active\"],\"__tf_rows__\":[[1001,\"Ada Lovelace\",\"admin\",true],[1002,\"Alan Turing\",\"member\",true],[1003,\"Grace Hopper\",\"member\",true],[1004,\"Katherine Johnson\",\"member\",false],[1005,\"Edsger Dijkstra\",\"member\",true],[1006,\"Barbara Liskov\",\"member\",true],[1007,\"Donald Knuth\",\"member\",true],[1008,\"Radia Perlman\",\"admin\",true],[1009,\"John Backus\",\"member\",true],[1010,\"Frances Allen\",\"member\",false],[1011,\"Ken Thompson\",\"member\",true],[1012,\"Adele Goldberg\",\"member\",true],[1013,\"Dennis Ritchie\",\"member\",true],[1014,\"Margaret Hamilton\",\"member\",true],[1015,\"Tony Hoare\",\"admin\",true],[1016,\"Lynn Conway\",\"member\",false],[1017,\"Niklaus Wirth\",\"member\",true],[1018,\"Shafi Goldwasser\",\"member\",true],[1019,\"Leslie Lamport\",\"member\",true],[1020,\"Anita Borg\",\"member\",true],[1021,\"John McCarthy\",\"member\",true],[1022,\"Karen Sparck Jones\",\"admin\",false],[1023,\"Claude Shannon\",\"member\",true],[1024,\"Jean Bartik\",\"member\",true],[1025,\"Vint Cerf\",\"member\",true],[1026,\"Sophie Wilson\",\"member\",true],[1027,\"Bjarne Stroustrup\",\"member\",true],[1028,\"Gladys West\",\"member\",false],[1029,\"Guido van Rossum\",\"admin\",true],[1030,\"Hedy Lamarr\",\"member\",true]]}" + }, + { + "role": "user", + "content": "For user id 1009, return JSON fields name (string), role (string), active (boolean).\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 366, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [ + "json_field_fold" + ], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + } + } + }, + { + "id": "core-wide-lookup", + "family": "core", + "workload": "json", + "source": "examples/toon_metrics.json", + "source_sha256": "a5057abc36a7cc8e63f48101a3649f0578f82c1415a14dd33cf0ec8d4d8472de", + "query": "For timestamp 2026-09-02T12:00:13Z, return JSON fields service (string), request_count (integer), error_count (integer), p95_ms (integer).", + "oracle": { + "service": "billing", + "request_count": 1369, + "error_count": 2, + "p95_ms": 158 + }, + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "[{\"timestamp\":\"2026-09-02T12:00:00Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"degraded\",\"request_count\":1200,\"error_count\":0,\"p95_ms\":145},{\"timestamp\":\"2026-09-02T12:00:01Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1213,\"error_count\":1,\"p95_ms\":146},{\"timestamp\":\"2026-09-02T12:00:02Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1226,\"error_count\":2,\"p95_ms\":147},{\"timestamp\":\"2026-09-02T12:00:03Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1239,\"error_count\":3,\"p95_ms\":148},{\"timestamp\":\"2026-09-02T12:00:04Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1252,\"error_count\":4,\"p95_ms\":149},{\"timestamp\":\"2026-09-02T12:00:05Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1265,\"error_count\":5,\"p95_ms\":150},{\"timestamp\":\"2026-09-02T12:00:06Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1278,\"error_count\":6,\"p95_ms\":151},{\"timestamp\":\"2026-09-02T12:00:07Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1291,\"error_count\":7,\"p95_ms\":152},{\"timestamp\":\"2026-09-02T12:00:08Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1304,\"error_count\":8,\"p95_ms\":153},{\"timestamp\":\"2026-09-02T12:00:09Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1317,\"error_count\":9,\"p95_ms\":154},{\"timestamp\":\"2026-09-02T12:00:10Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1330,\"error_count\":10,\"p95_ms\":155},{\"timestamp\":\"2026-09-02T12:00:11Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1343,\"error_count\":0,\"p95_ms\":156},{\"timestamp\":\"2026-09-02T12:00:12Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1356,\"error_count\":1,\"p95_ms\":157},{\"timestamp\":\"2026-09-02T12:00:13Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1369,\"error_count\":2,\"p95_ms\":158},{\"timestamp\":\"2026-09-02T12:00:14Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1382,\"error_count\":3,\"p95_ms\":159},{\"timestamp\":\"2026-09-02T12:00:15Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1395,\"error_count\":4,\"p95_ms\":160},{\"timestamp\":\"2026-09-02T12:00:16Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1408,\"error_count\":5,\"p95_ms\":161},{\"timestamp\":\"2026-09-02T12:00:17Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"degraded\",\"request_count\":1421,\"error_count\":6,\"p95_ms\":162},{\"timestamp\":\"2026-09-02T12:00:18Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1434,\"error_count\":7,\"p95_ms\":163},{\"timestamp\":\"2026-09-02T12:00:19Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1447,\"error_count\":8,\"p95_ms\":164},{\"timestamp\":\"2026-09-02T12:00:20Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1460,\"error_count\":9,\"p95_ms\":165},{\"timestamp\":\"2026-09-02T12:00:21Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1473,\"error_count\":10,\"p95_ms\":166},{\"timestamp\":\"2026-09-02T12:00:22Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1486,\"error_count\":0,\"p95_ms\":167},{\"timestamp\":\"2026-09-02T12:00:23Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1499,\"error_count\":1,\"p95_ms\":145},{\"timestamp\":\"2026-09-02T12:00:24Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1512,\"error_count\":2,\"p95_ms\":146},{\"timestamp\":\"2026-09-02T12:00:25Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1525,\"error_count\":3,\"p95_ms\":147},{\"timestamp\":\"2026-09-02T12:00:26Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1538,\"error_count\":4,\"p95_ms\":148},{\"timestamp\":\"2026-09-02T12:00:27Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1551,\"error_count\":5,\"p95_ms\":149},{\"timestamp\":\"2026-09-02T12:00:28Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1564,\"error_count\":6,\"p95_ms\":150},{\"timestamp\":\"2026-09-02T12:00:29Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1577,\"error_count\":7,\"p95_ms\":151},{\"timestamp\":\"2026-09-02T12:00:30Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1590,\"error_count\":8,\"p95_ms\":152},{\"timestamp\":\"2026-09-02T12:00:31Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1603,\"error_count\":9,\"p95_ms\":153},{\"timestamp\":\"2026-09-02T12:00:32Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1616,\"error_count\":10,\"p95_ms\":154},{\"timestamp\":\"2026-09-02T12:00:33Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1629,\"error_count\":0,\"p95_ms\":155},{\"timestamp\":\"2026-09-02T12:00:34Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"degraded\",\"request_count\":1642,\"error_count\":1,\"p95_ms\":156},{\"timestamp\":\"2026-09-02T12:00:35Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1655,\"error_count\":2,\"p95_ms\":157},{\"timestamp\":\"2026-09-02T12:00:36Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1668,\"error_count\":3,\"p95_ms\":158},{\"timestamp\":\"2026-09-02T12:00:37Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1681,\"error_count\":4,\"p95_ms\":159},{\"timestamp\":\"2026-09-02T12:00:38Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1694,\"error_count\":5,\"p95_ms\":160},{\"timestamp\":\"2026-09-02T12:00:39Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1707,\"error_count\":6,\"p95_ms\":161},{\"timestamp\":\"2026-09-02T12:00:40Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1720,\"error_count\":7,\"p95_ms\":162},{\"timestamp\":\"2026-09-02T12:00:41Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1733,\"error_count\":8,\"p95_ms\":163},{\"timestamp\":\"2026-09-02T12:00:42Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1746,\"error_count\":9,\"p95_ms\":164},{\"timestamp\":\"2026-09-02T12:00:43Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1759,\"error_count\":10,\"p95_ms\":165},{\"timestamp\":\"2026-09-02T12:00:44Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1772,\"error_count\":0,\"p95_ms\":166},{\"timestamp\":\"2026-09-02T12:00:45Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1785,\"error_count\":1,\"p95_ms\":167},{\"timestamp\":\"2026-09-02T12:00:46Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1798,\"error_count\":2,\"p95_ms\":145},{\"timestamp\":\"2026-09-02T12:00:47Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1811,\"error_count\":3,\"p95_ms\":146},{\"timestamp\":\"2026-09-02T12:00:48Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1824,\"error_count\":4,\"p95_ms\":147},{\"timestamp\":\"2026-09-02T12:00:49Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1837,\"error_count\":5,\"p95_ms\":148},{\"timestamp\":\"2026-09-02T12:00:50Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1850,\"error_count\":6,\"p95_ms\":149},{\"timestamp\":\"2026-09-02T12:00:51Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"degraded\",\"request_count\":1863,\"error_count\":7,\"p95_ms\":150},{\"timestamp\":\"2026-09-02T12:00:52Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1876,\"error_count\":8,\"p95_ms\":151},{\"timestamp\":\"2026-09-02T12:00:53Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1889,\"error_count\":9,\"p95_ms\":152},{\"timestamp\":\"2026-09-02T12:00:54Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1902,\"error_count\":10,\"p95_ms\":153},{\"timestamp\":\"2026-09-02T12:00:55Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1915,\"error_count\":0,\"p95_ms\":154},{\"timestamp\":\"2026-09-02T12:00:56Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1928,\"error_count\":1,\"p95_ms\":155},{\"timestamp\":\"2026-09-02T12:00:57Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1941,\"error_count\":2,\"p95_ms\":156},{\"timestamp\":\"2026-09-02T12:00:58Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1954,\"error_count\":3,\"p95_ms\":157},{\"timestamp\":\"2026-09-02T12:00:59Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":1967,\"error_count\":4,\"p95_ms\":158},{\"timestamp\":\"2026-09-02T12:01:00Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":1980,\"error_count\":5,\"p95_ms\":159},{\"timestamp\":\"2026-09-02T12:01:01Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":1993,\"error_count\":6,\"p95_ms\":160},{\"timestamp\":\"2026-09-02T12:01:02Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2006,\"error_count\":7,\"p95_ms\":161},{\"timestamp\":\"2026-09-02T12:01:03Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2019,\"error_count\":8,\"p95_ms\":162},{\"timestamp\":\"2026-09-02T12:01:04Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2032,\"error_count\":9,\"p95_ms\":163},{\"timestamp\":\"2026-09-02T12:01:05Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2045,\"error_count\":10,\"p95_ms\":164},{\"timestamp\":\"2026-09-02T12:01:06Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2058,\"error_count\":0,\"p95_ms\":165},{\"timestamp\":\"2026-09-02T12:01:07Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2071,\"error_count\":1,\"p95_ms\":166},{\"timestamp\":\"2026-09-02T12:01:08Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"degraded\",\"request_count\":2084,\"error_count\":2,\"p95_ms\":167},{\"timestamp\":\"2026-09-02T12:01:09Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2097,\"error_count\":3,\"p95_ms\":145},{\"timestamp\":\"2026-09-02T12:01:10Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2110,\"error_count\":4,\"p95_ms\":146},{\"timestamp\":\"2026-09-02T12:01:11Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2123,\"error_count\":5,\"p95_ms\":147},{\"timestamp\":\"2026-09-02T12:01:12Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2136,\"error_count\":6,\"p95_ms\":148},{\"timestamp\":\"2026-09-02T12:01:13Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2149,\"error_count\":7,\"p95_ms\":149},{\"timestamp\":\"2026-09-02T12:01:14Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2162,\"error_count\":8,\"p95_ms\":150},{\"timestamp\":\"2026-09-02T12:01:15Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2175,\"error_count\":9,\"p95_ms\":151},{\"timestamp\":\"2026-09-02T12:01:16Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2188,\"error_count\":10,\"p95_ms\":152},{\"timestamp\":\"2026-09-02T12:01:17Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2201,\"error_count\":0,\"p95_ms\":153},{\"timestamp\":\"2026-09-02T12:01:18Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2214,\"error_count\":1,\"p95_ms\":154},{\"timestamp\":\"2026-09-02T12:01:19Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2227,\"error_count\":2,\"p95_ms\":155},{\"timestamp\":\"2026-09-02T12:01:20Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2240,\"error_count\":3,\"p95_ms\":156},{\"timestamp\":\"2026-09-02T12:01:21Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2253,\"error_count\":4,\"p95_ms\":157},{\"timestamp\":\"2026-09-02T12:01:22Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2266,\"error_count\":5,\"p95_ms\":158},{\"timestamp\":\"2026-09-02T12:01:23Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2279,\"error_count\":6,\"p95_ms\":159},{\"timestamp\":\"2026-09-02T12:01:24Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2292,\"error_count\":7,\"p95_ms\":160},{\"timestamp\":\"2026-09-02T12:01:25Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"degraded\",\"request_count\":2305,\"error_count\":8,\"p95_ms\":161},{\"timestamp\":\"2026-09-02T12:01:26Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2318,\"error_count\":9,\"p95_ms\":162},{\"timestamp\":\"2026-09-02T12:01:27Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2331,\"error_count\":10,\"p95_ms\":163},{\"timestamp\":\"2026-09-02T12:01:28Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2344,\"error_count\":0,\"p95_ms\":164},{\"timestamp\":\"2026-09-02T12:01:29Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2357,\"error_count\":1,\"p95_ms\":165},{\"timestamp\":\"2026-09-02T12:01:30Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2370,\"error_count\":2,\"p95_ms\":166},{\"timestamp\":\"2026-09-02T12:01:31Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2383,\"error_count\":3,\"p95_ms\":167},{\"timestamp\":\"2026-09-02T12:01:32Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2396,\"error_count\":4,\"p95_ms\":145},{\"timestamp\":\"2026-09-02T12:01:33Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2409,\"error_count\":5,\"p95_ms\":146},{\"timestamp\":\"2026-09-02T12:01:34Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2422,\"error_count\":6,\"p95_ms\":147},{\"timestamp\":\"2026-09-02T12:01:35Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2435,\"error_count\":7,\"p95_ms\":148},{\"timestamp\":\"2026-09-02T12:01:36Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2448,\"error_count\":8,\"p95_ms\":149},{\"timestamp\":\"2026-09-02T12:01:37Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2461,\"error_count\":9,\"p95_ms\":150},{\"timestamp\":\"2026-09-02T12:01:38Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2474,\"error_count\":10,\"p95_ms\":151},{\"timestamp\":\"2026-09-02T12:01:39Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2487,\"error_count\":0,\"p95_ms\":152},{\"timestamp\":\"2026-09-02T12:01:40Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2500,\"error_count\":1,\"p95_ms\":153},{\"timestamp\":\"2026-09-02T12:01:41Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2513,\"error_count\":2,\"p95_ms\":154},{\"timestamp\":\"2026-09-02T12:01:42Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"degraded\",\"request_count\":2526,\"error_count\":3,\"p95_ms\":155},{\"timestamp\":\"2026-09-02T12:01:43Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2539,\"error_count\":4,\"p95_ms\":156},{\"timestamp\":\"2026-09-02T12:01:44Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2552,\"error_count\":5,\"p95_ms\":157},{\"timestamp\":\"2026-09-02T12:01:45Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2565,\"error_count\":6,\"p95_ms\":158},{\"timestamp\":\"2026-09-02T12:01:46Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2578,\"error_count\":7,\"p95_ms\":159},{\"timestamp\":\"2026-09-02T12:01:47Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2591,\"error_count\":8,\"p95_ms\":160},{\"timestamp\":\"2026-09-02T12:01:48Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2604,\"error_count\":9,\"p95_ms\":161},{\"timestamp\":\"2026-09-02T12:01:49Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2617,\"error_count\":10,\"p95_ms\":162},{\"timestamp\":\"2026-09-02T12:01:50Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2630,\"error_count\":0,\"p95_ms\":163},{\"timestamp\":\"2026-09-02T12:01:51Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2643,\"error_count\":1,\"p95_ms\":164},{\"timestamp\":\"2026-09-02T12:01:52Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2656,\"error_count\":2,\"p95_ms\":165},{\"timestamp\":\"2026-09-02T12:01:53Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2669,\"error_count\":3,\"p95_ms\":166},{\"timestamp\":\"2026-09-02T12:01:54Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2682,\"error_count\":4,\"p95_ms\":167},{\"timestamp\":\"2026-09-02T12:01:55Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2695,\"error_count\":5,\"p95_ms\":145},{\"timestamp\":\"2026-09-02T12:01:56Z\",\"service\":\"api-gateway\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"ok\",\"request_count\":2708,\"error_count\":6,\"p95_ms\":146},{\"timestamp\":\"2026-09-02T12:01:57Z\",\"service\":\"billing\",\"environment\":\"production\",\"region\":\"us-east-1\",\"status\":\"ok\",\"request_count\":2721,\"error_count\":7,\"p95_ms\":147},{\"timestamp\":\"2026-09-02T12:01:58Z\",\"service\":\"catalog\",\"environment\":\"production\",\"region\":\"us-west-2\",\"status\":\"ok\",\"request_count\":2734,\"error_count\":8,\"p95_ms\":148},{\"timestamp\":\"2026-09-02T12:01:59Z\",\"service\":\"search\",\"environment\":\"production\",\"region\":\"eu-west-1\",\"status\":\"degraded\",\"request_count\":2747,\"error_count\":9,\"p95_ms\":149}]" + }, + { + "role": "user", + "content": "For timestamp 2026-09-02T12:00:13Z, return JSON fields service (string), request_count (integer), error_count (integer), p95_ms (integer).\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 6310, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "{\"__tf_cols__\":[\"timestamp\",\"service\",\"environment\",\"region\",\"status\",\"request_count\",\"error_count\",\"p95_ms\"],\"__tf_rows__\":[[\"2026-09-02T12:00:00Z\",\"api-gateway\",\"production\",\"us-east-1\",\"degraded\",1200,0,145],[\"2026-09-02T12:00:01Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",1213,1,146],[\"2026-09-02T12:00:02Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",1226,2,147],[\"2026-09-02T12:00:03Z\",\"search\",\"production\",\"us-east-1\",\"ok\",1239,3,148],[\"2026-09-02T12:00:04Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",1252,4,149],[\"2026-09-02T12:00:05Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",1265,5,150],[\"2026-09-02T12:00:06Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",1278,6,151],[\"2026-09-02T12:00:07Z\",\"search\",\"production\",\"us-west-2\",\"ok\",1291,7,152],[\"2026-09-02T12:00:08Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",1304,8,153],[\"2026-09-02T12:00:09Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",1317,9,154],[\"2026-09-02T12:00:10Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",1330,10,155],[\"2026-09-02T12:00:11Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",1343,0,156],[\"2026-09-02T12:00:12Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",1356,1,157],[\"2026-09-02T12:00:13Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",1369,2,158],[\"2026-09-02T12:00:14Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",1382,3,159],[\"2026-09-02T12:00:15Z\",\"search\",\"production\",\"us-east-1\",\"ok\",1395,4,160],[\"2026-09-02T12:00:16Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",1408,5,161],[\"2026-09-02T12:00:17Z\",\"billing\",\"production\",\"eu-west-1\",\"degraded\",1421,6,162],[\"2026-09-02T12:00:18Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",1434,7,163],[\"2026-09-02T12:00:19Z\",\"search\",\"production\",\"us-west-2\",\"ok\",1447,8,164],[\"2026-09-02T12:00:20Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",1460,9,165],[\"2026-09-02T12:00:21Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",1473,10,166],[\"2026-09-02T12:00:22Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",1486,0,167],[\"2026-09-02T12:00:23Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",1499,1,145],[\"2026-09-02T12:00:24Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",1512,2,146],[\"2026-09-02T12:00:25Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",1525,3,147],[\"2026-09-02T12:00:26Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",1538,4,148],[\"2026-09-02T12:00:27Z\",\"search\",\"production\",\"us-east-1\",\"ok\",1551,5,149],[\"2026-09-02T12:00:28Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",1564,6,150],[\"2026-09-02T12:00:29Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",1577,7,151],[\"2026-09-02T12:00:30Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",1590,8,152],[\"2026-09-02T12:00:31Z\",\"search\",\"production\",\"us-west-2\",\"ok\",1603,9,153],[\"2026-09-02T12:00:32Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",1616,10,154],[\"2026-09-02T12:00:33Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",1629,0,155],[\"2026-09-02T12:00:34Z\",\"catalog\",\"production\",\"us-west-2\",\"degraded\",1642,1,156],[\"2026-09-02T12:00:35Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",1655,2,157],[\"2026-09-02T12:00:36Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",1668,3,158],[\"2026-09-02T12:00:37Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",1681,4,159],[\"2026-09-02T12:00:38Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",1694,5,160],[\"2026-09-02T12:00:39Z\",\"search\",\"production\",\"us-east-1\",\"ok\",1707,6,161],[\"2026-09-02T12:00:40Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",1720,7,162],[\"2026-09-02T12:00:41Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",1733,8,163],[\"2026-09-02T12:00:42Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",1746,9,164],[\"2026-09-02T12:00:43Z\",\"search\",\"production\",\"us-west-2\",\"ok\",1759,10,165],[\"2026-09-02T12:00:44Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",1772,0,166],[\"2026-09-02T12:00:45Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",1785,1,167],[\"2026-09-02T12:00:46Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",1798,2,145],[\"2026-09-02T12:00:47Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",1811,3,146],[\"2026-09-02T12:00:48Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",1824,4,147],[\"2026-09-02T12:00:49Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",1837,5,148],[\"2026-09-02T12:00:50Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",1850,6,149],[\"2026-09-02T12:00:51Z\",\"search\",\"production\",\"us-east-1\",\"degraded\",1863,7,150],[\"2026-09-02T12:00:52Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",1876,8,151],[\"2026-09-02T12:00:53Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",1889,9,152],[\"2026-09-02T12:00:54Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",1902,10,153],[\"2026-09-02T12:00:55Z\",\"search\",\"production\",\"us-west-2\",\"ok\",1915,0,154],[\"2026-09-02T12:00:56Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",1928,1,155],[\"2026-09-02T12:00:57Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",1941,2,156],[\"2026-09-02T12:00:58Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",1954,3,157],[\"2026-09-02T12:00:59Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",1967,4,158],[\"2026-09-02T12:01:00Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",1980,5,159],[\"2026-09-02T12:01:01Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",1993,6,160],[\"2026-09-02T12:01:02Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",2006,7,161],[\"2026-09-02T12:01:03Z\",\"search\",\"production\",\"us-east-1\",\"ok\",2019,8,162],[\"2026-09-02T12:01:04Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",2032,9,163],[\"2026-09-02T12:01:05Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",2045,10,164],[\"2026-09-02T12:01:06Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",2058,0,165],[\"2026-09-02T12:01:07Z\",\"search\",\"production\",\"us-west-2\",\"ok\",2071,1,166],[\"2026-09-02T12:01:08Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"degraded\",2084,2,167],[\"2026-09-02T12:01:09Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",2097,3,145],[\"2026-09-02T12:01:10Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",2110,4,146],[\"2026-09-02T12:01:11Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",2123,5,147],[\"2026-09-02T12:01:12Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",2136,6,148],[\"2026-09-02T12:01:13Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",2149,7,149],[\"2026-09-02T12:01:14Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",2162,8,150],[\"2026-09-02T12:01:15Z\",\"search\",\"production\",\"us-east-1\",\"ok\",2175,9,151],[\"2026-09-02T12:01:16Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",2188,10,152],[\"2026-09-02T12:01:17Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",2201,0,153],[\"2026-09-02T12:01:18Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",2214,1,154],[\"2026-09-02T12:01:19Z\",\"search\",\"production\",\"us-west-2\",\"ok\",2227,2,155],[\"2026-09-02T12:01:20Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",2240,3,156],[\"2026-09-02T12:01:21Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",2253,4,157],[\"2026-09-02T12:01:22Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",2266,5,158],[\"2026-09-02T12:01:23Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",2279,6,159],[\"2026-09-02T12:01:24Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",2292,7,160],[\"2026-09-02T12:01:25Z\",\"billing\",\"production\",\"us-west-2\",\"degraded\",2305,8,161],[\"2026-09-02T12:01:26Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",2318,9,162],[\"2026-09-02T12:01:27Z\",\"search\",\"production\",\"us-east-1\",\"ok\",2331,10,163],[\"2026-09-02T12:01:28Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",2344,0,164],[\"2026-09-02T12:01:29Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",2357,1,165],[\"2026-09-02T12:01:30Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",2370,2,166],[\"2026-09-02T12:01:31Z\",\"search\",\"production\",\"us-west-2\",\"ok\",2383,3,167],[\"2026-09-02T12:01:32Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",2396,4,145],[\"2026-09-02T12:01:33Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",2409,5,146],[\"2026-09-02T12:01:34Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",2422,6,147],[\"2026-09-02T12:01:35Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",2435,7,148],[\"2026-09-02T12:01:36Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",2448,8,149],[\"2026-09-02T12:01:37Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",2461,9,150],[\"2026-09-02T12:01:38Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",2474,10,151],[\"2026-09-02T12:01:39Z\",\"search\",\"production\",\"us-east-1\",\"ok\",2487,0,152],[\"2026-09-02T12:01:40Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",2500,1,153],[\"2026-09-02T12:01:41Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",2513,2,154],[\"2026-09-02T12:01:42Z\",\"catalog\",\"production\",\"us-east-1\",\"degraded\",2526,3,155],[\"2026-09-02T12:01:43Z\",\"search\",\"production\",\"us-west-2\",\"ok\",2539,4,156],[\"2026-09-02T12:01:44Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",2552,5,157],[\"2026-09-02T12:01:45Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",2565,6,158],[\"2026-09-02T12:01:46Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",2578,7,159],[\"2026-09-02T12:01:47Z\",\"search\",\"production\",\"eu-west-1\",\"ok\",2591,8,160],[\"2026-09-02T12:01:48Z\",\"api-gateway\",\"production\",\"us-east-1\",\"ok\",2604,9,161],[\"2026-09-02T12:01:49Z\",\"billing\",\"production\",\"us-west-2\",\"ok\",2617,10,162],[\"2026-09-02T12:01:50Z\",\"catalog\",\"production\",\"eu-west-1\",\"ok\",2630,0,163],[\"2026-09-02T12:01:51Z\",\"search\",\"production\",\"us-east-1\",\"ok\",2643,1,164],[\"2026-09-02T12:01:52Z\",\"api-gateway\",\"production\",\"us-west-2\",\"ok\",2656,2,165],[\"2026-09-02T12:01:53Z\",\"billing\",\"production\",\"eu-west-1\",\"ok\",2669,3,166],[\"2026-09-02T12:01:54Z\",\"catalog\",\"production\",\"us-east-1\",\"ok\",2682,4,167],[\"2026-09-02T12:01:55Z\",\"search\",\"production\",\"us-west-2\",\"ok\",2695,5,145],[\"2026-09-02T12:01:56Z\",\"api-gateway\",\"production\",\"eu-west-1\",\"ok\",2708,6,146],[\"2026-09-02T12:01:57Z\",\"billing\",\"production\",\"us-east-1\",\"ok\",2721,7,147],[\"2026-09-02T12:01:58Z\",\"catalog\",\"production\",\"us-west-2\",\"ok\",2734,8,148],[\"2026-09-02T12:01:59Z\",\"search\",\"production\",\"eu-west-1\",\"degraded\",2747,9,149]]}" + }, + { + "role": "user", + "content": "For timestamp 2026-09-02T12:00:13Z, return JSON fields service (string), request_count (integer), error_count (integer), p95_ms (integer).\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 4061, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [ + "json_field_fold" + ], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + } + } + }, + { + "id": "core-schema-lookup", + "family": "core", + "workload": "json", + "source": "tests/golden/schema_compaction/openai_tool_schema.in.json", + "source_sha256": "056e766b6c7a099cb71e00477fe52f04331b90df81976e1432078f9ad877b081", + "query": "Return the schema name as name, the origin and destination of the fourth parameters.examples entry as origin and destination, and the top-level required array as required. Use strings and an array of strings.", + "oracle": { + "name": "search_flights", + "origin": "NRT", + "destination": "SIN", + "required": [ + "origin", + "destination", + "departure_date" + ] + }, + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "{\"name\":\"search_flights\",\"description\":\"Searches available commercial flights between two airports on a given travel date.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"origin\":{\"type\":\"string\",\"description\":\"IATA airport code for the departure airport.\"},\"destination\":{\"type\":\"string\",\"description\":\"IATA airport code for the arrival airport.\"},\"cabin_class\":{\"type\":\"string\",\"enum\":[\"economy\",\"premium_economy\",\"business\",\"first\"],\"description\":\"Desired cabin class for the itinerary.\"},\"departure_date\":{\"type\":\"string\",\"description\":\"Departure date in YYYY-MM-DD format.\"}},\"examples\":[{\"origin\":\"JFK\",\"destination\":\"LAX\",\"departure_date\":\"2026-08-01\"},{\"origin\":\"SFO\",\"destination\":\"ORD\",\"departure_date\":\"2026-09-15\"},{\"origin\":\"LHR\",\"destination\":\"CDG\",\"departure_date\":\"2026-10-03\"},{\"origin\":\"NRT\",\"destination\":\"SIN\",\"departure_date\":\"2026-11-20\"},{\"origin\":\"SYD\",\"destination\":\"AKL\",\"departure_date\":\"2026-12-05\"}]},\"required\":[\"origin\",\"destination\",\"departure_date\"]}" + }, + { + "role": "user", + "content": "Return the schema name as name, the origin and destination of the fourth parameters.examples entry as origin and destination, and the top-level required array as required. Use strings and an array of strings.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 232, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "{\"name\":\"search_flights\",\"description\":\"Searches available commercial flights between two airports on a given travel date.\",\"parameters\":{\"type\":\"object\",\"properties\":{\"origin\":{\"type\":\"string\",\"description\":\"IATA airport code for the departure airport.\"},\"destination\":{\"type\":\"string\",\"description\":\"IATA airport code for the arrival airport.\"},\"cabin_class\":{\"type\":\"string\",\"enum\":[\"economy\",\"premium_economy\",\"business\",\"first\"],\"description\":\"Desired cabin class for the itinerary.\"},\"departure_date\":{\"type\":\"string\",\"description\":\"Departure date in YYYY-MM-DD format.\"}},\"examples\":{\"__tf_cols__\":[\"origin\",\"destination\",\"departure_date\"],\"__tf_rows__\":[[\"JFK\",\"LAX\",\"2026-08-01\"],[\"SFO\",\"ORD\",\"2026-09-15\"],[\"LHR\",\"CDG\",\"2026-10-03\"],[\"NRT\",\"SIN\",\"2026-11-20\"],[\"SYD\",\"AKL\",\"2026-12-05\"]]}},\"required\":[\"origin\",\"destination\",\"departure_date\"]}" + }, + { + "role": "user", + "content": "Return the schema name as name, the origin and destination of the fourth parameters.examples entry as origin and destination, and the top-level required array as required. Use strings and an array of strings.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 219, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [ + "json_field_fold" + ], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [], + "groups_dropped": [] + } + } + }, + { + "id": "code-branch", + "family": "select", + "workload": "code", + "query": "Using checkout.py, what does shipping_fee(105) return? Return JSON with integer shipping_usd.", + "oracle": { + "shipping_usd": 9 + }, + "supporting_group_position": 0, + "groups": [ + { + "id": "g0", + "content": "Current checkout.py, production implementation:\ndef shipping_fee(subtotal):\n if subtotal >= 120:\n return 0\n return 9\nThe function accepts whole USD and returns whole USD. No other shipping modifier applies.", + "required": false + }, + { + "id": "g1", + "content": "Historical checkout_v1.py, not imported in production:\ndef shipping_fee(subtotal):\n return 4\nThis archived function predates the new threshold. Its fixed fee must not be used for checkout.py.", + "required": false + }, + { + "id": "g2", + "content": "Warehouse notes: order picking begins after payment capture. The warehouse prints one label per parcel. Oversized products use a separate freight workflow. Nothing here overrides checkout.py's ordinary shipping calculation.", + "required": false + }, + { + "id": "g3", + "content": "Discount reference: coupon SPRING takes ten dollars off eligible baskets. The shipping_fee function is passed a subtotal directly, not a coupon name. There is no coupon in this question.", + "required": false + }, + { + "id": "g4", + "content": "Returns reference: return labels may be subsidized by the merchant. A return is not an outbound purchase. The returns subsystem has its own accounting and is not called by shipping_fee.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "Using checkout.py, what does shipping_fee(105) return? Return JSON with integer shipping_usd.\n\nCurrent checkout.py, production implementation:\ndef shipping_fee(subtotal):\n if subtotal >= 120:\n return 0\n return 9\nThe function accepts whole USD and returns whole USD. No other shipping modifier applies.\n\nHistorical checkout_v1.py, not imported in production:\ndef shipping_fee(subtotal):\n return 4\nThis archived function predates the new threshold. Its fixed fee must not be used for checkout.py.\n\nWarehouse notes: order picking begins after payment capture. The warehouse prints one label per parcel. Oversized products use a separate freight workflow. Nothing here overrides checkout.py's ordinary shipping calculation.\n\nDiscount reference: coupon SPRING takes ten dollars off eligible baskets. The shipping_fee function is passed a subtotal directly, not a coupon name. There is no coupon in this question.\n\nReturns reference: return labels may be subsidized by the merchant. A return is not an outbound purchase. The returns subsystem has its own accounting and is not called by shipping_fee." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 218, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "Using checkout.py, what does shipping_fee(105) return? Return JSON with integer shipping_usd.\n\nCurrent checkout.py, production implementation:\ndef shipping_fee(subtotal):\n if subtotal >= 120:\n return 0\n return 9\nThe function accepts whole USD and returns whole USD. No other shipping modifier applies.\n\nHistorical checkout_v1.py, not imported in production:\ndef shipping_fee(subtotal):\n return 4\nThis archived function predates the new threshold. Its fixed fee must not be used for checkout.py." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 109, + "target_tokens": 109, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g0", + "g1" + ], + "groups_dropped": [ + "g2", + "g3", + "g4" + ] + } + } + }, + { + "id": "code-dependency", + "family": "select", + "workload": "code", + "query": "Using current pricing.py, what is total(17)? Return JSON with integer total_usd.", + "oracle": { + "total_usd": 37 + }, + "supporting_group_position": 1, + "groups": [ + { + "id": "g0", + "content": "Shipping notes: a separate shipping function may return a fee for physical deliveries. The total function shown in current pricing.py contains no shipping call. Do not invent an additional shipping charge.", + "required": false + }, + { + "id": "g1", + "content": "Atomic current pricing.py dependency group (helper and caller belong together):\ndef service_fee():\n return 3\ndef total(subtotal):\n return 2 * subtotal + service_fee()\nBoth functions use whole USD. No rounding, tax or other fees apply.", + "required": false + }, + { + "id": "g2", + "content": "Archived pricing_old.py:\ndef service_fee():\n return 8\ndef total(subtotal):\n return subtotal + service_fee()\nThis file is not imported by current pricing.py and is retained only for migration history.", + "required": false + }, + { + "id": "g3", + "content": "Invoice renderer notes: totals are displayed as whole USD. The receipt footer contains the merchant name and customer support address. Rendering does not recalculate totals or invoke a different fee implementation.", + "required": false + }, + { + "id": "g4", + "content": "Payment settlement notes: the settlement batch runs nightly after order capture. Settlement may split transactions by region. The batch does not change the amount returned by pricing.py during checkout.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "Using current pricing.py, what is total(17)? Return JSON with integer total_usd.\n\nShipping notes: a separate shipping function may return a fee for physical deliveries. The total function shown in current pricing.py contains no shipping call. Do not invent an additional shipping charge.\n\nAtomic current pricing.py dependency group (helper and caller belong together):\ndef service_fee():\n return 3\ndef total(subtotal):\n return 2 * subtotal + service_fee()\nBoth functions use whole USD. No rounding, tax or other fees apply.\n\nArchived pricing_old.py:\ndef service_fee():\n return 8\ndef total(subtotal):\n return subtotal + service_fee()\nThis file is not imported by current pricing.py and is retained only for migration history.\n\nInvoice renderer notes: totals are displayed as whole USD. The receipt footer contains the merchant name and customer support address. Rendering does not recalculate totals or invoke a different fee implementation.\n\nPayment settlement notes: the settlement batch runs nightly after order capture. Settlement may split transactions by region. The batch does not change the amount returned by pricing.py during checkout." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 220, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "Using current pricing.py, what is total(17)? Return JSON with integer total_usd.\n\nShipping notes: a separate shipping function may return a fee for physical deliveries. The total function shown in current pricing.py contains no shipping call. Do not invent an additional shipping charge.\n\nAtomic current pricing.py dependency group (helper and caller belong together):\ndef service_fee():\n return 3\ndef total(subtotal):\n return 2 * subtotal + service_fee()\nBoth functions use whole USD. No rounding, tax or other fees apply." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 107, + "target_tokens": 110, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g0", + "g1" + ], + "groups_dropped": [ + "g2", + "g3", + "g4" + ] + } + } + }, + { + "id": "logs-causal", + "family": "select", + "workload": "logs", + "query": "For request r-731, identify the failing dependency and its HTTP status. Return JSON with dependency (string) and status_code (integer).", + "oracle": { + "dependency": "inventory", + "status_code": 503 + }, + "supporting_group_position": 2, + "groups": [ + { + "id": "g0", + "content": "Service telemetry: routine liveness probes returned status 200 during this interval. Probe identifiers start with health-. Probe results are not transaction dependency results and do not identify the failing upstream for a customer request.", + "required": false + }, + { + "id": "g1", + "content": "Operator reference: gateway_status is the externally returned gateway response. status_code on a dependency event is the upstream response. Always retain the request identifier when correlating events from multiple services.", + "required": false + }, + { + "id": "g2", + "content": "Atomic trace r-731:\n10:21:00 request=r-731 dependency=inventory attempt=1 status_code=503 message=backend_unavailable\n10:21:01 request=r-731 gateway_status=502 cause=inventory_upstream_failure\nThe gateway status is not the dependency's HTTP status.", + "required": false + }, + { + "id": "g3", + "content": "Trace r-730:\n10:20:00 request=r-730 dependency=payments attempt=1 status_code=200\n10:20:01 request=r-730 gateway_status=200 message=completed\nThis trace belongs to another request and is unrelated to r-731.", + "required": false + }, + { + "id": "g4", + "content": "Trace r-732:\n10:22:00 request=r-732 dependency=inventory attempt=1 status_code=200\n10:22:01 request=r-732 gateway_status=200 message=completed\nA later successful request does not rewrite the earlier r-731 failure.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "For request r-731, identify the failing dependency and its HTTP status. Return JSON with dependency (string) and status_code (integer).\n\nService telemetry: routine liveness probes returned status 200 during this interval. Probe identifiers start with health-. Probe results are not transaction dependency results and do not identify the failing upstream for a customer request.\n\nOperator reference: gateway_status is the externally returned gateway response. status_code on a dependency event is the upstream response. Always retain the request identifier when correlating events from multiple services.\n\nAtomic trace r-731:\n10:21:00 request=r-731 dependency=inventory attempt=1 status_code=503 message=backend_unavailable\n10:21:01 request=r-731 gateway_status=502 cause=inventory_upstream_failure\nThe gateway status is not the dependency's HTTP status.\n\nTrace r-730:\n10:20:00 request=r-730 dependency=payments attempt=1 status_code=200\n10:20:01 request=r-730 gateway_status=200 message=completed\nThis trace belongs to another request and is unrelated to r-731.\n\nTrace r-732:\n10:22:00 request=r-732 dependency=inventory attempt=1 status_code=200\n10:22:01 request=r-732 gateway_status=200 message=completed\nA later successful request does not rewrite the earlier r-731 failure." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 278, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "For request r-731, identify the failing dependency and its HTTP status. Return JSON with dependency (string) and status_code (integer).\n\nOperator reference: gateway_status is the externally returned gateway response. status_code on a dependency event is the upstream response. Always retain the request identifier when correlating events from multiple services.\n\nAtomic trace r-731:\n10:21:00 request=r-731 dependency=inventory attempt=1 status_code=503 message=backend_unavailable\n10:21:01 request=r-731 gateway_status=502 cause=inventory_upstream_failure\nThe gateway status is not the dependency's HTTP status." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 126, + "target_tokens": 139, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g1", + "g2" + ], + "groups_dropped": [ + "g0", + "g3", + "g4" + ] + } + } + }, + { + "id": "logs-state", + "family": "select", + "workload": "logs", + "query": "What listener port was last successfully activated for search? Return JSON with integer port.", + "oracle": { + "port": 9443 + }, + "supporting_group_position": 3, + "groups": [ + { + "id": "g0", + "content": "Archived search staging configuration: the staging listener used port 8080 in an old environment. This is not a successful activation event for the search service in the supplied live reload history.", + "required": false + }, + { + "id": "g1", + "content": "Health-check notes: probes use whichever listener is currently active. A requested configuration is not proof that the listener changed. The system logs requested_port separately from active_port to make failed activations visible.", + "required": false + }, + { + "id": "g2", + "content": "Operations notes: reload requests are serialized per service. Each success replaces the previous configuration; each failure retains it. There are no later search events beyond the ones in the atomic search history.", + "required": false + }, + { + "id": "g3", + "content": "Atomic search reload history:\n11:00 service=search requested_port=8443 reload=success active_port=8443\n11:05 service=search requested_port=9443 reload=success active_port=9443\n11:09 service=search requested_port=10443 reload=failed active_port=9443\nFailed reloads leave the previous listener active.", + "required": false + }, + { + "id": "g4", + "content": "Billing reload history:\n11:02 service=billing requested_port=7443 reload=success active_port=7443\n11:10 service=billing requested_port=7543 reload=success active_port=7543\nBilling is a separate service with its own listener.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "What listener port was last successfully activated for search? Return JSON with integer port.\n\nArchived search staging configuration: the staging listener used port 8080 in an old environment. This is not a successful activation event for the search service in the supplied live reload history.\n\nHealth-check notes: probes use whichever listener is currently active. A requested configuration is not proof that the listener changed. The system logs requested_port separately from active_port to make failed activations visible.\n\nOperations notes: reload requests are serialized per service. Each success replaces the previous configuration; each failure retains it. There are no later search events beyond the ones in the atomic search history.\n\nAtomic search reload history:\n11:00 service=search requested_port=8443 reload=success active_port=8443\n11:05 service=search requested_port=9443 reload=success active_port=9443\n11:09 service=search requested_port=10443 reload=failed active_port=9443\nFailed reloads leave the previous listener active.\n\nBilling reload history:\n11:02 service=billing requested_port=7443 reload=success active_port=7443\n11:10 service=billing requested_port=7543 reload=success active_port=7543\nBilling is a separate service with its own listener." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 256, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "What listener port was last successfully activated for search? Return JSON with integer port.\n\nArchived search staging configuration: the staging listener used port 8080 in an old environment. This is not a successful activation event for the search service in the supplied live reload history.\n\nAtomic search reload history:\n11:00 service=search requested_port=8443 reload=success active_port=8443\n11:05 service=search requested_port=9443 reload=success active_port=9443\n11:09 service=search requested_port=10443 reload=failed active_port=9443\nFailed reloads leave the previous listener active." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 126, + "target_tokens": 128, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g0", + "g3" + ], + "groups_dropped": [ + "g1", + "g2", + "g4" + ] + } + } + }, + { + "id": "rag-service", + "family": "select", + "workload": "retrieval", + "query": "For production ledger in eu-west-2, return JSON fields port (integer) and health_path (string).", + "oracle": { + "port": 8717, + "health_path": "/ready-ledger" + }, + "supporting_group_position": 4, + "groups": [ + { + "id": "g0", + "content": "Deployment ledger/staging/eu-west-2: listener port 8081 and readiness endpoint /health-stage. Staging is used for integration tests. Its listener settings must not be copied to the production deployment.", + "required": false + }, + { + "id": "g1", + "content": "Deployment ledger/prod/us-east-1: TLS listener port 9727 and readiness endpoint /ready-us. The US deployment is managed independently from eu-west-2 and has different network settings.", + "required": false + }, + { + "id": "g2", + "content": "Deployment journal/prod/eu-west-2: listener port 8818 and readiness endpoint /ready-journal. Journal and ledger are different services despite sharing a region and an infrastructure team.", + "required": false + }, + { + "id": "g3", + "content": "Operations guide: the deployment identifier combines service, environment and region. Match all three fields before selecting a listener or readiness path. Load balancers route to the deployment-specific listener.", + "required": false + }, + { + "id": "g4", + "content": "Deployment ledger/prod/eu-west-2, current approved configuration: TLS listener port 8717. Readiness endpoint /ready-ledger. This configuration is the authoritative production deployment record for this service and region.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "For production ledger in eu-west-2, return JSON fields port (integer) and health_path (string).\n\nDeployment ledger/staging/eu-west-2: listener port 8081 and readiness endpoint /health-stage. Staging is used for integration tests. Its listener settings must not be copied to the production deployment.\n\nDeployment ledger/prod/us-east-1: TLS listener port 9727 and readiness endpoint /ready-us. The US deployment is managed independently from eu-west-2 and has different network settings.\n\nDeployment journal/prod/eu-west-2: listener port 8818 and readiness endpoint /ready-journal. Journal and ledger are different services despite sharing a region and an infrastructure team.\n\nOperations guide: the deployment identifier combines service, environment and region. Match all three fields before selecting a listener or readiness path. Load balancers route to the deployment-specific listener.\n\nDeployment ledger/prod/eu-west-2, current approved configuration: TLS listener port 8717. Readiness endpoint /ready-ledger. This configuration is the authoritative production deployment record for this service and region." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 219, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "For production ledger in eu-west-2, return JSON fields port (integer) and health_path (string).\n\nDeployment ledger/staging/eu-west-2: listener port 8081 and readiness endpoint /health-stage. Staging is used for integration tests. Its listener settings must not be copied to the production deployment.\n\nDeployment ledger/prod/eu-west-2, current approved configuration: TLS listener port 8717. Readiness endpoint /ready-ledger. This configuration is the authoritative production deployment record for this service and region." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 107, + "target_tokens": 109, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g0", + "g4" + ], + "groups_dropped": [ + "g1", + "g2", + "g3" + ] + } + } + }, + { + "id": "rag-invoice", + "family": "select", + "workload": "retrieval", + "query": "For invoice INV-274, compute subtotal minus discount plus shipping. Return JSON with integer total_usd. No tax or other fees apply.", + "oracle": { + "total_usd": 87 + }, + "supporting_group_position": 0, + "groups": [ + { + "id": "g0", + "content": "Atomic INV-274 invoice and adjustments: subtotal 100 USD; discount 20 USD; shipping 7 USD. These values belong to the same invoice and must be used together. There is no tax or additional fee. The discount is subtracted once, then shipping is added once.", + "required": false + }, + { + "id": "g1", + "content": "Invoice INV-273: subtotal 120 USD; discount 10 USD; shipping 4 USD. This is a separate paid invoice. It supplies no amounts for INV-274 and must not be included in its final total.", + "required": false + }, + { + "id": "g2", + "content": "General shipping guide: some customers qualify for free shipping, while other orders have a default shipping estimate of 12 USD. The actual shipping amount recorded on an invoice overrides these general estimates.", + "required": false + }, + { + "id": "g3", + "content": "Refund policy: approved refunds are paid to the original payment method. A refund is distinct from an invoice discount. No refund has been recorded for INV-274 in the supplied material.", + "required": false + }, + { + "id": "g4", + "content": "Billing support guide: quote the invoice identifier when asking about totals. Support agents may explain charges but do not silently modify posted invoice amounts. Only the stated adjustments apply here.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "For invoice INV-274, compute subtotal minus discount plus shipping. Return JSON with integer total_usd. No tax or other fees apply.\n\nAtomic INV-274 invoice and adjustments: subtotal 100 USD; discount 20 USD; shipping 7 USD. These values belong to the same invoice and must be used together. There is no tax or additional fee. The discount is subtracted once, then shipping is added once.\n\nInvoice INV-273: subtotal 120 USD; discount 10 USD; shipping 4 USD. This is a separate paid invoice. It supplies no amounts for INV-274 and must not be included in its final total.\n\nGeneral shipping guide: some customers qualify for free shipping, while other orders have a default shipping estimate of 12 USD. The actual shipping amount recorded on an invoice overrides these general estimates.\n\nRefund policy: approved refunds are paid to the original payment method. A refund is distinct from an invoice discount. No refund has been recorded for INV-274 in the supplied material.\n\nBilling support guide: quote the invoice identifier when asking about totals. Support agents may explain charges but do not silently modify posted invoice amounts. Only the stated adjustments apply here." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 237, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "For invoice INV-274, compute subtotal minus discount plus shipping. Return JSON with integer total_usd. No tax or other fees apply.\n\nAtomic INV-274 invoice and adjustments: subtotal 100 USD; discount 20 USD; shipping 7 USD. These values belong to the same invoice and must be used together. There is no tax or additional fee. The discount is subtracted once, then shipping is added once." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 85, + "target_tokens": 118, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g0" + ], + "groups_dropped": [ + "g1", + "g2", + "g3", + "g4" + ] + } + } + }, + { + "id": "conversation-override", + "family": "select", + "workload": "multi-turn", + "query": "What deployment region did the user finally approve for canary c-52? Return JSON with string region.", + "oracle": { + "region": "eu-west-2" + }, + "supporting_group_position": 1, + "groups": [ + { + "id": "g0", + "content": "Intermediate exchange: user: Change the proposed region for c-52 to eu-central-1. assistant: I have updated the proposal to eu-central-1. This proposal had not yet received final approval.", + "required": false + }, + { + "id": "g1", + "content": "Final approval exchange, latest c-52 decision: user: The final approved region for canary c-52 is eu-west-2, not either earlier region. assistant: Confirmed, the final approved c-52 region is eu-west-2.", + "required": false + }, + { + "id": "g2", + "content": "Unrelated exchange: user: Keep canary c-51 in ap-south-1. assistant: Confirmed, canary c-51 remains in ap-south-1. This is a different canary and must not override the c-52 decision.", + "required": false + }, + { + "id": "g3", + "content": "Runbook: a later explicit final approval supersedes earlier proposals for the same canary. Keep the canary identifier attached to each decision. An unrelated canary's configuration is not an update to c-52.", + "required": false + }, + { + "id": "g4", + "content": "Earlier exchange: user: Start canary c-52 in us-east-1. assistant: I have recorded the initial region as us-east-1. This was an early proposal, before the later corrections.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "What deployment region did the user finally approve for canary c-52? Return JSON with string region.\n\nIntermediate exchange: user: Change the proposed region for c-52 to eu-central-1. assistant: I have updated the proposal to eu-central-1. This proposal had not yet received final approval.\n\nFinal approval exchange, latest c-52 decision: user: The final approved region for canary c-52 is eu-west-2, not either earlier region. assistant: Confirmed, the final approved c-52 region is eu-west-2.\n\nUnrelated exchange: user: Keep canary c-51 in ap-south-1. assistant: Confirmed, canary c-51 remains in ap-south-1. This is a different canary and must not override the c-52 decision.\n\nRunbook: a later explicit final approval supersedes earlier proposals for the same canary. Keep the canary identifier attached to each decision. An unrelated canary's configuration is not an update to c-52.\n\nEarlier exchange: user: Start canary c-52 in us-east-1. assistant: I have recorded the initial region as us-east-1. This was an early proposal, before the later corrections." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 251, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "What deployment region did the user finally approve for canary c-52? Return JSON with string region.\n\nIntermediate exchange: user: Change the proposed region for c-52 to eu-central-1. assistant: I have updated the proposal to eu-central-1. This proposal had not yet received final approval.\n\nFinal approval exchange, latest c-52 decision: user: The final approved region for canary c-52 is eu-west-2, not either earlier region. assistant: Confirmed, the final approved c-52 region is eu-west-2." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 113, + "target_tokens": 125, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g0", + "g1" + ], + "groups_dropped": [ + "g2", + "g3", + "g4" + ] + } + } + }, + { + "id": "json-abstention", + "family": "select", + "workload": "json", + "query": "What retention_days is configured for dataset cobalt? If it is not stated, return JSON with retention_days set to null. Never substitute another dataset's value.", + "oracle": { + "retention_days": null + }, + "supporting_group_position": 2, + "groups": [ + { + "id": "g0", + "content": "Catalog documentation: absence of a retention field means the value is unknown in this snapshot. Do not invent a default. Operational policies may exist elsewhere but are not supplied here.", + "required": false + }, + { + "id": "g1", + "content": "Storage documentation: encryption, region and owner fields do not determine retention duration. A dataset's retention setting must be explicitly provided for that dataset, not inferred from another record.", + "required": false + }, + { + "id": "g2", + "content": "Current cobalt record: {\"dataset\":\"cobalt\",\"region\":\"eu-west-2\",\"owner\":\"analytics\",\"encryption\":\"enabled\"}. This record contains no retention_days field and no other cobalt retention setting is provided.", + "required": false + }, + { + "id": "g3", + "content": "Separate amber record: {\"dataset\":\"amber\",\"retention_days\":30,\"region\":\"us-east-1\"}. Amber is not cobalt; its retention period applies only to amber.", + "required": false + }, + { + "id": "g4", + "content": "Separate jade record: {\"dataset\":\"jade\",\"retention_days\":90,\"region\":\"eu-west-2\"}. Sharing a region with cobalt does not imply sharing its retention policy.", + "required": false + } + ], + "arms": { + "baseline": { + "messages": [ + { + "role": "user", + "content": "What retention_days is configured for dataset cobalt? If it is not stated, return JSON with retention_days set to null. Never substitute another dataset's value.\n\nCatalog documentation: absence of a retention field means the value is unknown in this snapshot. Do not invent a default. Operational policies may exist elsewhere but are not supplied here.\n\nStorage documentation: encryption, region and owner fields do not determine retention duration. A dataset's retention setting must be explicitly provided for that dataset, not inferred from another record.\n\nCurrent cobalt record: {\"dataset\":\"cobalt\",\"region\":\"eu-west-2\",\"owner\":\"analytics\",\"encryption\":\"enabled\"}. This record contains no retention_days field and no other cobalt retention setting is provided.\n\nSeparate amber record: {\"dataset\":\"amber\",\"retention_days\":30,\"region\":\"us-east-1\"}. Amber is not cobalt; its retention period applies only to amber.\n\nSeparate jade record: {\"dataset\":\"jade\",\"retention_days\":90,\"region\":\"eu-west-2\"}. Sharing a region with cobalt does not imply sharing its retention policy." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 214, + "target_tokens": 100000, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": false, + "selection_applied": false, + "groups_kept": [ + "g0", + "g1", + "g2", + "g3", + "g4" + ], + "groups_dropped": [] + }, + "candidate": { + "messages": [ + { + "role": "user", + "content": "What retention_days is configured for dataset cobalt? If it is not stated, return JSON with retention_days set to null. Never substitute another dataset's value.\n\nCurrent cobalt record: {\"dataset\":\"cobalt\",\"region\":\"eu-west-2\",\"owner\":\"analytics\",\"encryption\":\"enabled\"}. This record contains no retention_days field and no other cobalt retention setting is provided." + }, + { + "role": "user", + "content": "Answer the question stated in the supplied context.\nReturn only one JSON object, with exactly the requested fields and types; no markdown. Use only the supplied evidence. Folded JSON uses __tf_cols__ as column names and __tf_rows__ as row values. A __tf_dict__ array stores values referenced by {\"__tf_ref__\":i} inside __tf_data__." + } + ], + "rendered_tokens": 74, + "target_tokens": 107, + "budget_status": "met", + "accounting": { + "counter_id": "encoding:o200k_base:v1", + "scope": "rendered_text", + "original_basis": "exact", + "baseline_basis": "exact", + "final_basis": "exact" + }, + "core_transforms": [], + "scorer_succeeded": true, + "selection_applied": true, + "groups_kept": [ + "g2" + ], + "groups_dropped": [ + "g0", + "g1", + "g3", + "g4" + ] + } + } + } + ] +} diff --git a/eval/research/sdk_quality_results.json b/eval/research/sdk_quality_results.json new file mode 100644 index 0000000..48558bf --- /dev/null +++ b/eval/research/sdk_quality_results.json @@ -0,0 +1,2135 @@ +{ + "schema_version": 1, + "kind": "tokenfold.sdk-quality.diagnostic-results", + "date": "2026-11-10", + "corpus": "eval/research/sdk_quality_corpus.json", + "corpus_canonical_json_sha256": "c09c30b004b0bd4405de30b51ac2f215eaad26b5fb3288f8d790ae31fda0474c", + "sdk_version": "0.6.0", + "source_commit": "3304fe2340b29ab72f96783283d7af0eebc9840a", + "working_tree_dirty": true, + "frozen_scope_sha256": "4915e484e1ab80cf1cc0a503f06ca91b2deb431a7e80d80a20ae3881504cd87a", + "frozen_prepared_sha256": "c4c87bda9e295ffc965d511e0c3f33cebdf2eec6f23efef8b2378a081bdbf9e6", + "frozen_executor_sha256": "00ae054faeac1e3ab4af9684abb8980f09796725c97380b936163147c2b35679", + "frozen_adapter_sha256": "9235d8badab1b94d43c6855083cbf101f68523e3620e0d12d005a39dd5db6ff6", + "model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "nvidia", + "observed_provider": "Nvidia", + "provider_endpoint_name": "Nvidia | nvidia/nemotron-3.5-super-vl-20261015:free", + "immutable_downstream_checkpoint": null, + "system_fingerprint": null, + "qualification": false, + "selection_runtime": { + "model_revision": "fd8231d3cdc1efc46f7a6d7d83ca88b336a953591d63ea431407c8b13b990309", + "device": "cuda:0", + "precision": "fp32-parameters-bf16-autocast", + "config_sha256": "a5f91285e6823915313e67bb0b500cd074af253e890c3762a77a948df538897a" + }, + "preparation_history": [ + "Schema required-field oracle corrected before hosted answers; original scope retained.", + "First-group positional bias corrected by balanced supporting-group positions before hosted answers; original local preparations retained.", + "Scope is exposed/development diagnostic, not untouched held-out qualification." + ], + "prior_scopes": [ + { + "model": "google/gemma-4-31b-it:free", + "provider": "google-ai-studio", + "probe_attempts": 1, + "probe_http_status": 429, + "probe_usage": null, + "probe_cost_usd": null, + "quality_calls_planned": 48, + "quality_calls_attempted": 0, + "quality_calls_unexecuted": 48, + "reason": "upstream shared pool rate limited; terminal scope, no retry" + } + ], + "nvidia_probe": { + "attempts": 1, + "finish_reason": "stop", + "oracle_pass": true, + "usage": { + "prompt_tokens": 38, + "completion_tokens": 6, + "total_tokens": 44, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 638.2947, + "cost_coverage_reason": "request_price_unreported" + }, + "all_attempt_accounting": { + "actual_generation_attempts": 50, + "successful_quality_replies": 48, + "successful_probe_replies": 1, + "failed_probe_attempts": 1, + "unknown_usage_attempts": 1, + "unknown_reported_cost_attempts": 1, + "nvidia_observed_prompt_tokens": 50256, + "nvidia_observed_completion_tokens": 749, + "nvidia_known_reported_charge_usd": "0", + "complete_campaign_spend_usd": null, + "complete_cost_savings_pct": null, + "reason": "Failed Gemma probe usage/cost unknown; NVIDIA request pricing unreported; provider receipts are not audited invoices." + }, + "families": { + "core": { + "tasks": 4, + "trials_per_task": 2, + "arms": { + "baseline": { + "trials": 8, + "oracle_passes": 8, + "provider_prompt_tokens": 24496, + "provider_completion_tokens": 202, + "provider_cached_tokens": 4336, + "local_rendered_tokens": 18988, + "provider_call_wall_median_ms": 761.94675 + }, + "candidate": { + "trials": 8, + "oracle_passes": 6, + "provider_prompt_tokens": 16600, + "provider_completion_tokens": 204, + "provider_cached_tokens": 4336, + "local_rendered_tokens": 12044, + "provider_call_wall_median_ms": 849.91875 + } + }, + "paired": { + "both_correct": 6, + "baseline_only": 2, + "candidate_only": 0, + "neither": 0, + "incomplete": 0 + }, + "provider_prompt_reduction_pct": 32.233834 + }, + "select": { + "tasks": 8, + "trials_per_task": 2, + "arms": { + "baseline": { + "trials": 16, + "oracle_passes": 16, + "provider_prompt_tokens": 5706, + "provider_completion_tokens": 168, + "provider_cached_tokens": 0, + "local_rendered_tokens": 3786, + "provider_call_wall_median_ms": 608.2652 + }, + "candidate": { + "trials": 16, + "oracle_passes": 16, + "provider_prompt_tokens": 3416, + "provider_completion_tokens": 169, + "provider_cached_tokens": 0, + "local_rendered_tokens": 1694, + "provider_call_wall_median_ms": 603.0378 + } + }, + "paired": { + "both_correct": 16, + "baseline_only": 0, + "candidate_only": 0, + "neither": 0, + "incomplete": 0 + }, + "provider_prompt_reduction_pct": 40.133193 + } + }, + "calls": [ + { + "id": "core-api-lookup/0/baseline", + "task": "core-api-lookup", + "family": "core", + "repeat": 0, + "arm": "baseline", + "body_sha256": "10f8eabb0bc897da50c268e138a541cf941cf6bf72e26594b6e09c9255e029c5", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"Niklaus Wirth\",\"active\":true,\"tier\":\"free\",\"seats\":1}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 2990, + "completion_tokens": 24, + "total_tokens": 3014, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 759.0706, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "2090f72a2da6db27cd14990a1173e2c531c3d995f3446dffb86e02ed81b8d22f" + }, + { + "id": "core-api-lookup/0/candidate", + "task": "core-api-lookup", + "family": "core", + "repeat": 0, + "arm": "candidate", + "body_sha256": "e58f4fe9b1e8d6a7858f18ec009ec5ce5935d56cb60f36e4af2537d0ede511b7", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"Niklaus Wirth\",\"active\":true,\"tier\":\"team\",\"seats\":25}", + "oracle_pass": false, + "usage": { + "prompt_tokens": 1800, + "completion_tokens": 25, + "total_tokens": 1825, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 816.7523, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "561cdfbd6c18a36f21ac304d85882f0c77c09c6adfa967bc66e80a6bd0dead6e" + }, + { + "id": "core-users-lookup/0/baseline", + "task": "core-users-lookup", + "family": "core", + "repeat": 0, + "arm": "baseline", + "body_sha256": "d5d8332ab358f178cd7dc4ee9b2204ccc12512436e46352421e686851bd9bbc1", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"John Backus\",\"role\":\"member\",\"active\":true}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 791, + "completion_tokens": 16, + "total_tokens": 807, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 688.2292, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "c39e1162eac0722f1660f150262fe2c3f4904f1fb72addf9633d5556974a1642" + }, + { + "id": "core-users-lookup/0/candidate", + "task": "core-users-lookup", + "family": "core", + "repeat": 0, + "arm": "candidate", + "body_sha256": "27e89c0cbc3c7f566d2e03f1764d83c9707c8d05ff9c21ec8402706a346363cf", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"John Backus\",\"role\":\"member\",\"active\":true}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 543, + "completion_tokens": 16, + "total_tokens": 559, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 2527.2407, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "f9523c9f3d9739bf71da43d5f34f6f452690934589e06d374d35aab57a41f86f" + }, + { + "id": "core-wide-lookup/0/baseline", + "task": "core-wide-lookup", + "family": "core", + "repeat": 0, + "arm": "baseline", + "body_sha256": "fb44422d53464ee199f11d507fca6e01b8d7b6cfba89659df6da236cb0b8de4a", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"service\":\"billing\",\"request_count\":1369,\"error_count\":2,\"p95_ms\":158}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 8053, + "completion_tokens": 29, + "total_tokens": 8082, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 1119.8069, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "c88e946aff8137f718f70f32bc80133d8b04de06e041acd84981bfd16f8c1456" + }, + { + "id": "core-wide-lookup/0/candidate", + "task": "core-wide-lookup", + "family": "core", + "repeat": 0, + "arm": "candidate", + "body_sha256": "88b19761daa5cd338ba59799544a7267ca9078215a7bc089455d70692596af26", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"service\":\"billing\",\"request_count\":1369,\"error_count\":2,\"p95_ms\":158}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 5567, + "completion_tokens": 29, + "total_tokens": 5596, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 1520.8215, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "0f21b53142b4efb31d0b458b5448cdca4251f1fcc82e4b81cfb17473aab3a1ec" + }, + { + "id": "core-schema-lookup/0/baseline", + "task": "core-schema-lookup", + "family": "core", + "repeat": 0, + "arm": "baseline", + "body_sha256": "9db8779caf97fc08243fbe65874a0b080c172269fca02ee82712a65866d69b87", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"search_flights\",\"origin\":\"NRT\",\"destination\":\"SIN\",\"required\":[\"origin\",\"destination\",\"departure_date\"]}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 414, + "completion_tokens": 32, + "total_tokens": 446, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 697.1284, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "f3873a9b14a6aa37d0f7a4d112080bc28ffe58900108ea75c31f3cfbfe140706" + }, + { + "id": "core-schema-lookup/0/candidate", + "task": "core-schema-lookup", + "family": "core", + "repeat": 0, + "arm": "candidate", + "body_sha256": "f895ba46bcd7ac89e162ce339675e6ed752d3007eca911fa07525f533ffcd086", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"search_flights\",\"origin\":\"NRT\",\"destination\":\"SIN\",\"required\":[\"origin\",\"destination\",\"departure_date\"]}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 390, + "completion_tokens": 32, + "total_tokens": 422, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 883.0852, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "5acf39307ae26dee164834a4e975857747e2b7f5e73343922927b7a56bc00bb6" + }, + { + "id": "code-branch/0/baseline", + "task": "code-branch", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "1fdc22ad29a779925c1c731688e0ba4c0df3015527339af3e3d3c69ac8fba8f1", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"shipping_usd\": 9}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 332, + "completion_tokens": 9, + "total_tokens": 341, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 646.3815, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "bce46ab3de904819bc9403487c48686d4c57f817c96dd1e74fa6f7003057c3a5" + }, + { + "id": "code-branch/0/candidate", + "task": "code-branch", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "956af1c1196dfaf3b6112aa1e860d4fb4b629dbea94a72af89758cc8e17698bb", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"shipping_usd\": 9}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 216, + "completion_tokens": 9, + "total_tokens": 225, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 788.7132, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "4db07cc6e1c886138c70213657450ae66e38ce98436257e3ec12e5b56779a959" + }, + { + "id": "code-dependency/0/baseline", + "task": "code-dependency", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "aa3afa369b7bb010f1b27953cbc33a42c285ca7a4d890130df0ca47c5adbc358", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\": 37}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 328, + "completion_tokens": 10, + "total_tokens": 338, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 533.292, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "9a2d16b2e882f8f605fff6018a7affc644d5b5bbaa5ceb78dec30c132ccee63e" + }, + { + "id": "code-dependency/0/candidate", + "task": "code-dependency", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "6e86e36ca9c718670a598b8b616fb8c1969961cbc7ffed5bf67ce9bfd98e72bb", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\": 37}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 209, + "completion_tokens": 10, + "total_tokens": 219, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 562.4004, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "b1bc563daedf6a80da966a0f270e9810635cd46c3528a147d7f2ce6288608ef3" + }, + { + "id": "logs-causal/0/baseline", + "task": "logs-causal", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "055faa4591653929fb164fbbf39b4efd2dc44f2991e4089ef831d4ff1d0bc445", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"dependency\":\"inventory\",\"status_code\":503}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 435, + "completion_tokens": 13, + "total_tokens": 448, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 577.1023, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "99c5934afb6c1699986473505e94b091a38dae4ba80585f11f554c2c797c1995" + }, + { + "id": "logs-causal/0/candidate", + "task": "logs-causal", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "9fe221606c6e225006218363d0a2f734bd4624e06c9577517f1a3e3462961941", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"dependency\":\"inventory\",\"status_code\":503}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 243, + "completion_tokens": 13, + "total_tokens": 256, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 597.045, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "5721a7a7a3bc82c073cd629c68953e06ac53350e34aff98c3e88202e6a14c9be" + }, + { + "id": "logs-state/0/baseline", + "task": "logs-state", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "30b543e2ef56bc0691afa68a97e3cb63bad075f939115b877d2a2274cce3f5af", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":9443}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 388, + "completion_tokens": 9, + "total_tokens": 397, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 591.1002, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "7a21c41a4f3011420eb49a0af5c06213f1f5cfe52148ce4c9a9031696b731711" + }, + { + "id": "logs-state/0/candidate", + "task": "logs-state", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "5da1023cd0441e276452e28e3d5177d70f0b4b18efcc7df30ca35ce0a007e1d1", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":9443}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 246, + "completion_tokens": 9, + "total_tokens": 255, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 553.255, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "a8ed54064558b7ce60c9309e0ca351d614ecf10897f447cda10efe83cac9dde1" + }, + { + "id": "rag-service/0/baseline", + "task": "rag-service", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "4d721eb1aec96def187744f16e0b50597065ad6975bc588d35f81e6be02c49cd", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":8717,\"health_path\":\"/ready-ledger\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 330, + "completion_tokens": 17, + "total_tokens": 347, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 643.9423, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "adf9c0bf2443b3f79dc97bb2990c300e0fb908149f543c9e750deb9604bf6889" + }, + { + "id": "rag-service/0/candidate", + "task": "rag-service", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "2493d80b5174b11cbcdb67102c81dbaad3dad3e7cdc536082cf176db08835f43", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":8717,\"health_path\":\"/ready-ledger\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 211, + "completion_tokens": 17, + "total_tokens": 228, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 602.4317, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "b5a8b7eb1c7a6a98e08bdffe17bc87629e62a90d56dde9e0a79a39a65f7f76cf" + }, + { + "id": "rag-invoice/0/baseline", + "task": "rag-invoice", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "09978a15bec792f62cc676b8aa7373d72c299ac713b2d41e179acd81509dc806", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\":87}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 361, + "completion_tokens": 9, + "total_tokens": 370, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 588.4601, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "42aee1fdc0b0347ddfc75b5a35fa3ba9f45dd8c256b8aa40a363688002044594" + }, + { + "id": "rag-invoice/0/candidate", + "task": "rag-invoice", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "702f4d818e63c2a157b5aa78945347ba7a306cd2f50466eeefe68cddf18abbd9", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\":87}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 193, + "completion_tokens": 9, + "total_tokens": 202, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 603.6439, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "67bec2e7930240557caf168919a0f0e2c12db7108bde98bd1222e11b66986571" + }, + { + "id": "conversation-override/0/baseline", + "task": "conversation-override", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "624efa44defb893827cb2ca485e2d6dfe267ed18f13adb44aefe67292b5a297c", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"region\":\"eu-west-2\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 362, + "completion_tokens": 9, + "total_tokens": 371, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 602.4025, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "e6132205c80510e835f1938b345ea9347d2809b0c50608a8eb2f3524ee2fba56" + }, + { + "id": "conversation-override/0/candidate", + "task": "conversation-override", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "204937bab72147868290a449fbda1d67f828a1c19ed967d143cfd192819472cb", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"region\":\"eu-west-2\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 218, + "completion_tokens": 9, + "total_tokens": 227, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 519.6564, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "aa4b7ea2b7c5a5c909867d71094dc012493446d60b0c6940373c23d905305d46" + }, + { + "id": "json-abstention/0/baseline", + "task": "json-abstention", + "family": "select", + "repeat": 0, + "arm": "baseline", + "body_sha256": "d078048b4938108f632b1fdda758f2a43434fb59b41258a4fc804368da9c1288", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"retention_days\": null}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 317, + "completion_tokens": 8, + "total_tokens": 325, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 697.7447, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "2192f1c9aa79fc4311635bfd8e50dfbb22146ac7b9306a8419163733b3aae6d6" + }, + { + "id": "json-abstention/0/candidate", + "task": "json-abstention", + "family": "select", + "repeat": 0, + "arm": "candidate", + "body_sha256": "a1f861838ffcecce818b0395a2e34d2431b0c0cc972a6f352e1c1745196afa59", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"retention_days\": null}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 172, + "completion_tokens": 8, + "total_tokens": 180, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 527.7811, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "2fc82870ac179f731f03dcfeeffd19b3b65c18d69c29043cdf6c9d28d1a106e2" + }, + { + "id": "core-api-lookup/1/candidate", + "task": "core-api-lookup", + "family": "core", + "repeat": 1, + "arm": "candidate", + "body_sha256": "e58f4fe9b1e8d6a7858f18ec009ec5ce5935d56cb60f36e4af2537d0ede511b7", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"Niklaus Wirth\",\"active\":true,\"tier\":\"team\",\"seats\":25}", + "oracle_pass": false, + "usage": { + "prompt_tokens": 1800, + "completion_tokens": 25, + "total_tokens": 1825, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 696.3879, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "72e4146641dd509dd8c530691a5525382212319d52435afff331c6442a82e544" + }, + { + "id": "core-api-lookup/1/baseline", + "task": "core-api-lookup", + "family": "core", + "repeat": 1, + "arm": "baseline", + "body_sha256": "10f8eabb0bc897da50c268e138a541cf941cf6bf72e26594b6e09c9255e029c5", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"Niklaus Wirth\",\"active\":true,\"tier\":\"free\",\"seats\":1}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 2990, + "completion_tokens": 24, + "total_tokens": 3014, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 24042.8133, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "a03e77f1b24210156d8496c56c84b5e51f1f68c09658ac3f407cd511a3a566bd" + }, + { + "id": "core-users-lookup/1/candidate", + "task": "core-users-lookup", + "family": "core", + "repeat": 1, + "arm": "candidate", + "body_sha256": "27e89c0cbc3c7f566d2e03f1764d83c9707c8d05ff9c21ec8402706a346363cf", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"John Backus\",\"role\":\"member\",\"active\":true}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 543, + "completion_tokens": 16, + "total_tokens": 559, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 647.4851, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "c5b796762e1a31ead16933358b7e9a6dbb3e4b4ca3340aec499836b539b8b265" + }, + { + "id": "core-users-lookup/1/baseline", + "task": "core-users-lookup", + "family": "core", + "repeat": 1, + "arm": "baseline", + "body_sha256": "d5d8332ab358f178cd7dc4ee9b2204ccc12512436e46352421e686851bd9bbc1", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"John Backus\",\"role\":\"member\",\"active\":true}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 791, + "completion_tokens": 16, + "total_tokens": 807, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 708.6065, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "8008f1cd5ee786bfc3fbaf9d146d9524279c7573fa90b029e63716065ac199c4" + }, + { + "id": "core-wide-lookup/1/candidate", + "task": "core-wide-lookup", + "family": "core", + "repeat": 1, + "arm": "candidate", + "body_sha256": "88b19761daa5cd338ba59799544a7267ca9078215a7bc089455d70692596af26", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"service\":\"billing\",\"request_count\":1369,\"error_count\":2,\"p95_ms\":158}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 5567, + "completion_tokens": 29, + "total_tokens": 5596, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 4336, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 4266.7013, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "d26ebaad8c1bcf78a2ec4927e7963188e2e641eee5dceebbe6f50f63c7c43b63" + }, + { + "id": "core-wide-lookup/1/baseline", + "task": "core-wide-lookup", + "family": "core", + "repeat": 1, + "arm": "baseline", + "body_sha256": "fb44422d53464ee199f11d507fca6e01b8d7b6cfba89659df6da236cb0b8de4a", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"service\":\"billing\",\"request_count\":1369,\"error_count\":2,\"p95_ms\":158}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 8053, + "completion_tokens": 29, + "total_tokens": 8082, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 4336, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 1041.8348, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "9c52273865ac6320b2a03d630594946e083250952fd1360979ea892c25a5eba9" + }, + { + "id": "core-schema-lookup/1/candidate", + "task": "core-schema-lookup", + "family": "core", + "repeat": 1, + "arm": "candidate", + "body_sha256": "f895ba46bcd7ac89e162ce339675e6ed752d3007eca911fa07525f533ffcd086", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"search_flights\",\"origin\":\"NRT\",\"destination\":\"SIN\",\"required\":[\"origin\",\"destination\",\"departure_date\"]}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 390, + "completion_tokens": 32, + "total_tokens": 422, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 673.8335, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "f4f44d95bd5d6608e9876bea1080b9e880609c371590d6c1a74cecc1d1cceeba" + }, + { + "id": "core-schema-lookup/1/baseline", + "task": "core-schema-lookup", + "family": "core", + "repeat": 1, + "arm": "baseline", + "body_sha256": "9db8779caf97fc08243fbe65874a0b080c172269fca02ee82712a65866d69b87", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"name\":\"search_flights\",\"origin\":\"NRT\",\"destination\":\"SIN\",\"required\":[\"origin\",\"destination\",\"departure_date\"]}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 414, + "completion_tokens": 32, + "total_tokens": 446, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 764.8229, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "c105a02bc5fb020ba4f07d24de310ae7159d3954ff3460fe211a46e0fe7c1c64" + }, + { + "id": "code-branch/1/candidate", + "task": "code-branch", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "956af1c1196dfaf3b6112aa1e860d4fb4b629dbea94a72af89758cc8e17698bb", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"shipping_usd\": 9}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 216, + "completion_tokens": 9, + "total_tokens": 225, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 679.8772, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "78a72be6b28b3dbe1d97d87653a947d91651d3b698dcf2b7daa0bad75058ca88" + }, + { + "id": "code-branch/1/baseline", + "task": "code-branch", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "1fdc22ad29a779925c1c731688e0ba4c0df3015527339af3e3d3c69ac8fba8f1", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"shipping_usd\": 9}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 332, + "completion_tokens": 9, + "total_tokens": 341, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 4666.9517, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "f139fc26a089f3e6a749def2ca19f733b8d7c4a0702797c15f406e5c529cd9d2" + }, + { + "id": "code-dependency/1/candidate", + "task": "code-dependency", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "6e86e36ca9c718670a598b8b616fb8c1969961cbc7ffed5bf67ce9bfd98e72bb", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\": 37}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 209, + "completion_tokens": 10, + "total_tokens": 219, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 610.3172, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "277db0338f80c0fa34577cb4f31d38336a076a074597b24ed44657a36895d648" + }, + { + "id": "code-dependency/1/baseline", + "task": "code-dependency", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "aa3afa369b7bb010f1b27953cbc33a42c285ca7a4d890130df0ca47c5adbc358", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\": 37}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 328, + "completion_tokens": 10, + "total_tokens": 338, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 684.4183, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "fd0acb4dacd3417f5982d005b57e309cae68b67702790cd04f96d16fcea38d3e" + }, + { + "id": "logs-causal/1/candidate", + "task": "logs-causal", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "9fe221606c6e225006218363d0a2f734bd4624e06c9577517f1a3e3462961941", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"dependency\":\"inventory\",\"status_code\":503}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 243, + "completion_tokens": 13, + "total_tokens": 256, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 650.6396, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "aa3fbe0b12dba5c5e71f35b64fa4afda5b92c80d8a4dd1a068b1769942ace3ae" + }, + { + "id": "logs-causal/1/baseline", + "task": "logs-causal", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "055faa4591653929fb164fbbf39b4efd2dc44f2991e4089ef831d4ff1d0bc445", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"dependency\":\"inventory\",\"status_code\":503}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 435, + "completion_tokens": 13, + "total_tokens": 448, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 573.6413, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "dbb3428a584df9e2d5017ee4ae55c69a10428f86a39197736905c27df54d47b1" + }, + { + "id": "logs-state/1/candidate", + "task": "logs-state", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "5da1023cd0441e276452e28e3d5177d70f0b4b18efcc7df30ca35ce0a007e1d1", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":9443}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 246, + "completion_tokens": 9, + "total_tokens": 255, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 568.4316, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "bbd34ec770b1dda22a3533b38a147b5f0287a39866b06f1fbe97011e18b24590" + }, + { + "id": "logs-state/1/baseline", + "task": "logs-state", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "30b543e2ef56bc0691afa68a97e3cb63bad075f939115b877d2a2274cce3f5af", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":9443}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 388, + "completion_tokens": 9, + "total_tokens": 397, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 668.4017, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "67494d2f7c7d6a43686b37a860098fa728fe3d78f8aa9b712f58e0bd71881b32" + }, + { + "id": "rag-service/1/candidate", + "task": "rag-service", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "2493d80b5174b11cbcdb67102c81dbaad3dad3e7cdc536082cf176db08835f43", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":8717,\"health_path\":\"/ready-ledger\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 211, + "completion_tokens": 17, + "total_tokens": 228, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 702.4962, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "0864fb5c158ff5cec423bff1a144b7c61f374d74d87180aa4743bc092c244511" + }, + { + "id": "rag-service/1/baseline", + "task": "rag-service", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "4d721eb1aec96def187744f16e0b50597065ad6975bc588d35f81e6be02c49cd", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"port\":8717,\"health_path\":\"/ready-ledger\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 330, + "completion_tokens": 17, + "total_tokens": 347, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 650.882, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "5f19f85c5df378df058572b4ed80caad7a2d1417baef7f05b9e6ae8f26abd30a" + }, + { + "id": "rag-invoice/1/candidate", + "task": "rag-invoice", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "702f4d818e63c2a157b5aa78945347ba7a306cd2f50466eeefe68cddf18abbd9", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\": 87}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 193, + "completion_tokens": 10, + "total_tokens": 203, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 1015.9318, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "25ce2ca27b6b00a31ebaa85afd58176ab3ecca6719530dcc93eb4720415cd034" + }, + { + "id": "rag-invoice/1/baseline", + "task": "rag-invoice", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "09978a15bec792f62cc676b8aa7373d72c299ac713b2d41e179acd81509dc806", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"total_usd\":87}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 361, + "completion_tokens": 9, + "total_tokens": 370, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 579.2868, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "42b36a4f53a2a59c78407023cc803b810c661b8fb3069c2d38537a674705d8f7" + }, + { + "id": "conversation-override/1/candidate", + "task": "conversation-override", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "204937bab72147868290a449fbda1d67f828a1c19ed967d143cfd192819472cb", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"region\":\"eu-west-2\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 218, + "completion_tokens": 9, + "total_tokens": 227, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 582.4784, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "8b3d7d76844e9c3cbcd5ad9b514967bbebbed7cfa08bfac027eb7aee15506f3e" + }, + { + "id": "conversation-override/1/baseline", + "task": "conversation-override", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "624efa44defb893827cb2ca485e2d6dfe267ed18f13adb44aefe67292b5a297c", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"region\":\"eu-west-2\"}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 362, + "completion_tokens": 9, + "total_tokens": 371, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 589.0127, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "6ba4b111dc0c4e985a075e48a5f4448f10e1e7febf114e682e55eae5390298ea" + }, + { + "id": "json-abstention/1/candidate", + "task": "json-abstention", + "family": "select", + "repeat": 1, + "arm": "candidate", + "body_sha256": "a1f861838ffcecce818b0395a2e34d2431b0c0cc972a6f352e1c1745196afa59", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"retention_days\": null}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 172, + "completion_tokens": 8, + "total_tokens": 180, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 646.9794, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "92c0986baf3a00b53f67635fabee979e56bc3d6f626c33ec99ec390e52616862" + }, + { + "id": "json-abstention/1/baseline", + "task": "json-abstention", + "family": "select", + "repeat": 1, + "arm": "baseline", + "body_sha256": "d078048b4938108f632b1fdda758f2a43434fb59b41258a4fc804368da9c1288", + "status": "completed", + "returned_model": "nvidia/nemotron-3.5-super-vl:free", + "provider": "Nvidia", + "finish_reason": "stop", + "refusal": null, + "output": "{\"retention_days\": null}", + "oracle_pass": true, + "usage": { + "prompt_tokens": 317, + "completion_tokens": 8, + "total_tokens": 325, + "cost": 0, + "is_byok": false, + "prompt_tokens_details": { + "cached_tokens": 0, + "cache_write_tokens": 0, + "audio_tokens": 0, + "video_tokens": 0 + }, + "cost_details": { + "upstream_inference_cost": 0, + "upstream_inference_prompt_cost": 0, + "upstream_inference_completions_cost": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "image_tokens": 0, + "audio_tokens": 0 + } + }, + "wall_ms": 614.1279, + "cost_coverage_reason": "request_price_unreported", + "request_id_sha256": "28d9f738f3b1992fff5c0fc7da10301672448d916569d3057ed4921a9e7bc27f" + } + ], + "limits": [ + "12 distinct tasks, not 24 independent tasks; same seed and temperature across repeated trials.", + "Four exposed repository JSON fixtures and eight hand-authored synthetic contexts; no representative accuracy/noninferiority claim.", + "Dependencies were manually bundled; no dependency discovery, required-flag protection or provider-role history compaction was tested.", + "Local rendered o200k_base counts and full provider prompt usage are separate accounting scopes.", + "Core cached-token observations retained; free-provider latency/load/cache uncontrolled; no latency superiority claim.", + "Exact model ID/provider frozen, but served model weights/fingerprint unavailable; no immutable checkpoint claim.", + "Raw IDs/account details/credentials omitted; every failed, unexecuted and completed attempt remains represented." + ] +} diff --git a/examples/quickstart.ipynb b/examples/quickstart.ipynb index 4ac7b9b..6f48fdd 100644 --- a/examples/quickstart.ipynb +++ b/examples/quickstart.ipynb @@ -2,12 +2,13 @@ "cells": [ { "cell_type": "markdown", + "id": "66477405", "metadata": {}, "source": [ "# Tokenfold 0.6.0: fit first, inspect the receipt\n", "\n", - "Python >=3.12. Install `tokenfold==0.6.0` in your environment before opening this\n", - "notebook. Use a clean kernel outside the existing ML environment.\n", + "Python >=3.12. Install `tokenfold==0.6.0` before opening this notebook. Use a\n", + "clean kernel outside the existing ML environment.\n", "No cell installs packages, downloads models, sends provider requests or writes stores.\n", "The optional maintained worker must be separately provisioned and approved; see\n", "[SDK migration](../docs/sdk-migration.md). Selection remains unqualified.\n" @@ -15,7 +16,10 @@ }, { "cell_type": "code", + "execution_count": null, + "id": "d34d566d", "metadata": {}, + "outputs": [], "source": [ "import tokenfold as tf\n", "from importlib.metadata import version\n", @@ -39,12 +43,11 @@ " pass\n", "else:\n", " raise AssertionError(\"an estimate must not become exact\")\n" - ], - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", + "id": "54b4d6f5", "metadata": {}, "source": [ "## Advanced lowlevel recovery and redaction\n", @@ -59,10 +62,10 @@ "id": "setup", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:53.355564Z", - "iopub.status.busy": "2026-08-21T00:06:53.355564Z", - "iopub.status.idle": "2026-08-21T00:06:53.697647Z", - "shell.execute_reply": "2026-08-21T00:06:53.697144Z" + "iopub.execute_input": "2026-11-09T17:29:11.771306Z", + "iopub.status.busy": "2026-11-09T17:29:11.771306Z", + "iopub.status.idle": "2026-11-09T17:29:11.781528Z", + "shell.execute_reply": "2026-11-09T17:29:11.780306Z" } }, "outputs": [], @@ -144,10 +147,10 @@ "id": "compress-json", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:53.701653Z", - "iopub.status.busy": "2026-08-21T00:06:53.701653Z", - "iopub.status.idle": "2026-08-21T00:06:54.220012Z", - "shell.execute_reply": "2026-08-21T00:06:54.219007Z" + "iopub.execute_input": "2026-11-09T17:29:11.785528Z", + "iopub.status.busy": "2026-11-09T17:29:11.785528Z", + "iopub.status.idle": "2026-11-09T17:29:11.917121Z", + "shell.execute_reply": "2026-11-09T17:29:11.916117Z" } }, "outputs": [], @@ -189,10 +192,10 @@ "id": "inspect", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:54.223012Z", - "iopub.status.busy": "2026-08-21T00:06:54.223012Z", - "iopub.status.idle": "2026-08-21T00:06:54.707569Z", - "shell.execute_reply": "2026-08-21T00:06:54.706564Z" + "iopub.execute_input": "2026-11-09T17:29:11.920427Z", + "iopub.status.busy": "2026-11-09T17:29:11.920427Z", + "iopub.status.idle": "2026-11-09T17:29:11.937090Z", + "shell.execute_reply": "2026-11-09T17:29:11.936087Z" } }, "outputs": [], @@ -239,10 +242,10 @@ "id": "modes", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:54.710569Z", - "iopub.status.busy": "2026-08-21T00:06:54.710569Z", - "iopub.status.idle": "2026-08-21T00:06:57.374190Z", - "shell.execute_reply": "2026-08-21T00:06:57.373186Z" + "iopub.execute_input": "2026-11-09T17:29:11.940650Z", + "iopub.status.busy": "2026-11-09T17:29:11.940650Z", + "iopub.status.idle": "2026-11-09T17:29:11.974756Z", + "shell.execute_reply": "2026-11-09T17:29:11.973654Z" } }, "outputs": [], @@ -266,10 +269,10 @@ "id": "policy-and-budget", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:57.377349Z", - "iopub.status.busy": "2026-08-21T00:06:57.377349Z", - "iopub.status.idle": "2026-08-21T00:06:58.831453Z", - "shell.execute_reply": "2026-08-21T00:06:58.830449Z" + "iopub.execute_input": "2026-11-09T17:29:11.977755Z", + "iopub.status.busy": "2026-11-09T17:29:11.977755Z", + "iopub.status.idle": "2026-11-09T17:29:11.998866Z", + "shell.execute_reply": "2026-11-09T17:29:11.997863Z" } }, "outputs": [], @@ -311,10 +314,10 @@ "id": "compress-messages", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:58.834452Z", - "iopub.status.busy": "2026-08-21T00:06:58.834452Z", - "iopub.status.idle": "2026-08-21T00:06:59.236628Z", - "shell.execute_reply": "2026-08-21T00:06:59.235542Z" + "iopub.execute_input": "2026-11-09T17:29:12.002423Z", + "iopub.status.busy": "2026-11-09T17:29:12.002423Z", + "iopub.status.idle": "2026-11-09T17:29:12.007240Z", + "shell.execute_reply": "2026-11-09T17:29:12.006236Z" } }, "outputs": [], @@ -359,10 +362,10 @@ "id": "provider-helpers", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:06:59.239628Z", - "iopub.status.busy": "2026-08-21T00:06:59.239628Z", - "iopub.status.idle": "2026-08-21T00:07:00.060554Z", - "shell.execute_reply": "2026-08-21T00:07:00.060554Z" + "iopub.execute_input": "2026-11-09T17:29:12.010239Z", + "iopub.status.busy": "2026-11-09T17:29:12.010239Z", + "iopub.status.idle": "2026-11-09T17:29:12.015597Z", + "shell.execute_reply": "2026-11-09T17:29:12.015597Z" } }, "outputs": [], @@ -395,10 +398,10 @@ "id": "protected-floor", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:07:00.064573Z", - "iopub.status.busy": "2026-08-21T00:07:00.064573Z", - "iopub.status.idle": "2026-08-21T00:07:00.469458Z", - "shell.execute_reply": "2026-08-21T00:07:00.469458Z" + "iopub.execute_input": "2026-11-09T17:29:12.021111Z", + "iopub.status.busy": "2026-11-09T17:29:12.020111Z", + "iopub.status.idle": "2026-11-09T17:29:12.024570Z", + "shell.execute_reply": "2026-11-09T17:29:12.023567Z" } }, "outputs": [], @@ -440,10 +443,10 @@ "id": "format-routing", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:07:00.473556Z", - "iopub.status.busy": "2026-08-21T00:07:00.473556Z", - "iopub.status.idle": "2026-08-21T00:07:02.606136Z", - "shell.execute_reply": "2026-08-21T00:07:02.605132Z" + "iopub.execute_input": "2026-11-09T17:29:12.028569Z", + "iopub.status.busy": "2026-11-09T17:29:12.027570Z", + "iopub.status.idle": "2026-11-09T17:29:12.054583Z", + "shell.execute_reply": "2026-11-09T17:29:12.053578Z" } }, "outputs": [], @@ -504,7 +507,14 @@ "cell_type": "code", "execution_count": null, "id": "toon-hard-targets-code", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-11-09T17:29:12.057583Z", + "iopub.status.busy": "2026-11-09T17:29:12.057583Z", + "iopub.status.idle": "2026-11-09T17:29:12.071786Z", + "shell.execute_reply": "2026-11-09T17:29:12.070783Z" + } + }, "outputs": [], "source": [ "toon_input = json.dumps({\"users\": [{\"id\": 1}, {\"id\": 2}]}).encode(\"utf-8\")\n", @@ -551,10 +561,10 @@ "id": "lossy-preview", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:07:02.609136Z", - "iopub.status.busy": "2026-08-21T00:07:02.609136Z", - "iopub.status.idle": "2026-08-21T00:07:03.680513Z", - "shell.execute_reply": "2026-08-21T00:07:03.679509Z" + "iopub.execute_input": "2026-11-09T17:29:12.074787Z", + "iopub.status.busy": "2026-11-09T17:29:12.074787Z", + "iopub.status.idle": "2026-11-09T17:29:12.154199Z", + "shell.execute_reply": "2026-11-09T17:29:12.153195Z" } }, "outputs": [], @@ -582,10 +592,10 @@ "id": "lossy-compress", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:07:03.683513Z", - "iopub.status.busy": "2026-08-21T00:07:03.683513Z", - "iopub.status.idle": "2026-08-21T00:07:05.653050Z", - "shell.execute_reply": "2026-08-21T00:07:05.652047Z" + "iopub.execute_input": "2026-11-09T17:29:12.157198Z", + "iopub.status.busy": "2026-11-09T17:29:12.157198Z", + "iopub.status.idle": "2026-11-09T17:29:12.159668Z", + "shell.execute_reply": "2026-11-09T17:29:12.159668Z" } }, "outputs": [], @@ -599,10 +609,10 @@ "id": "lossy-retrieve", "metadata": { "execution": { - "iopub.execute_input": "2026-08-21T00:07:05.656051Z", - "iopub.status.busy": "2026-08-21T00:07:05.656051Z", - "iopub.status.idle": "2026-08-21T00:07:06.248082Z", - "shell.execute_reply": "2026-08-21T00:07:06.247077Z" + "iopub.execute_input": "2026-11-09T17:29:12.163673Z", + "iopub.status.busy": "2026-11-09T17:29:12.163673Z", + "iopub.status.idle": "2026-11-09T17:29:12.167720Z", + "shell.execute_reply": "2026-11-09T17:29:12.166716Z" } }, "outputs": [], @@ -664,13 +674,11 @@ "| Retrieval and realized-savings operations | CLI: `retrieve`, `stats`, `gain`, `session`, `output-savings` |\n", "| Agent/editor tools | `tokenfold mcp serve` for MCP and `doctor` for diagnostics; `init`/`uninit` exist, but no host integration is supported yet |\n", "| Transparent provider traffic | `tokenfold-proxy` |\n", - "| Advanced lowlevel Python tour | [`quickstart.py`](quickstart.py) |\n", - "| Advanced Node CLI tour | [`quickstart.mjs`](quickstart.mjs) |\n", + "| Plain-script version of this tour | [`quickstart.py`](quickstart.py) |\n", + "| Node application | [`quickstart.mjs`](quickstart.mjs) |\n", "| Native embedding | `tokenfold-core` and [`quickstart.rs`](quickstart.rs) |\n", "| Deeper pruning behavior | [`lossy_pruning.py`](lossy_pruning.py) |\n", "| Independent recorded-outcome comparison | Section 11, [`contextdoctor_report.py`](contextdoctor_report.py), and the [evaluation guide](../eval/README.md) |\n", - "| Native fitting | [`sdk_fit.py`](sdk_fit.py) and [`sdk_fit.mjs`](sdk_fit.mjs) |\n", - "| Query-aware learned ranking | Optional maintained Select runtime below and the [Tokenfold Select v3 model card](https://huggingface.co/snchimata/tokenfold-select-v3) |\n", "\n", "### Which path is yours?\n", "\n", @@ -687,6 +695,7 @@ }, { "cell_type": "markdown", + "id": "66067dd1", "metadata": {}, "source": [ "## Optional maintained Select runtime\n", @@ -700,7 +709,10 @@ }, { "cell_type": "code", + "execution_count": null, + "id": "f9edc984", "metadata": {}, + "outputs": [], "source": [ "import os\n", "from pathlib import Path\n", @@ -728,9 +740,7 @@ " selected.require_met()\n", " # Independent fixture oracle, not a general semantic-quality claim.\n", " assert \"8443\" in selected.payload, \"payments evidence was lost\"\n" - ], - "execution_count": null, - "outputs": [] + ] } ], "metadata": { @@ -749,7 +759,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.6" + "version": "3.12.14" } }, "nbformat": 4, diff --git a/python-tests/test_notebook.py b/python-tests/test_notebook.py index 9fe1ca6..59636b8 100644 --- a/python-tests/test_notebook.py +++ b/python-tests/test_notebook.py @@ -22,7 +22,12 @@ def select_cell(): def test_notebook_sources_compile_and_select_requires_explicit_approval(): - for i, cell in enumerate(cells()): + notebook_cells = cells() + intro = "".join(notebook_cells[0]["source"]) + assert "tokenfold==0.6.0" in intro + assert "unreleased" not in intro.lower() + assert "locally built wheel" not in intro.lower() + for i, cell in enumerate(notebook_cells): if cell["cell_type"] == "code": ast.parse("".join(cell["source"]), filename=f"notebook-cell-{i}") assert cell["outputs"] == [] diff --git a/python-tests/test_readme_claims.py b/python-tests/test_readme_claims.py index 1667266..28a1b39 100644 --- a/python-tests/test_readme_claims.py +++ b/python-tests/test_readme_claims.py @@ -105,8 +105,16 @@ def test_every_headline_metric_has_versioned_provenance(): manifest = json.loads(METRICS.read_text(encoding="utf-8")) readme = README.read_text(encoding="utf-8") compression = manifest["compression"] - for name in ("search_rag", "repetitive_json", "api_responses", "tool_schemas"): + for name in ("search_rag",): assert f"{compression[name]['reduction_pct']:.1f}% fewer tokens" in readme + tool_schema_pct = compression["tool_schemas"]["reduction_pct"] + api_response_pct = compression["api_responses"]["reduction_pct"] + assert ( + f"**{tool_schema_pct:.1f}-{api_response_pct:.1f}% on two fixtures, lossless**" + in readme + ) + historical = compression["repetitive_json"]["reduction_pct"] + assert f"historical **{historical:.1f}%** result" in readme for budget, values in manifest["select"]["budgets"].items(): ratio = str(int(float(budget) * 100)) row = re.compile( diff --git a/python-tests/test_readme_layout.py b/python-tests/test_readme_layout.py index f778ad4..cc34dba 100644 --- a/python-tests/test_readme_layout.py +++ b/python-tests/test_readme_layout.py @@ -19,7 +19,7 @@ def test_common_path_and_visible_limits(self): self.assertTrue(self.text.isascii()) self.assertEqual(self.text.count('Exact decode proves data recovery'), 1) self.assertIn('Up to 96.3% fewer tokens (showcase)', self.text) - self.assertIn('45.6-67.6% on three fixtures, lossless', self.text) + self.assertIn('45.6-63.9% on two fixtures, lossless', self.text) self.assertEqual(self.text.count('```mermaid'), 2) self.assertIn('flowchart LR\n accTitle: Lossless first', self.text) self.assertLess(self.text.index('![Terminal demo:'), self.text.index('#### Why Tokenfold')) @@ -37,10 +37,84 @@ def test_common_path_and_visible_limits(self): self.assertEqual(depth, 0) def test_fit_onboarding_and_migration_are_visible(self): - for text in ('0.6.0', 'Python >=3.12', 'from tokenfold import fit', 'require_met()', - 'docs/sdk-migration.md', 'pip install tokenfold==0.6.0', - 'npm install tokenfold@0.6.0', 'tokenfold-select-runtime'): + for text in ('tokenfold==0.6.0', 'Python >=3.12', 'from tokenfold import Data, fit', 'require_met()', + 'docs/sdk-migration.md', 'tokenfold-select-runtime'): self.assertIn(text, self.text) + visible = re.sub(r'\]\([^)]+\)', ']', self.text) + self.assertNotIn('The 0.6 SDK', visible) + self.assertNotIn('Measurement basis', self.text) + intro = self.text.split('## Table of contents', 1)[0] + self.assertIn('Select what matters. Fit more context.', intro) + self.assertIn('Tokenfold Select brings query-aware relevance ranking', intro) + self.assertIn('Select for relevance. Core for structural efficiency.', intro) + self.assertLess(intro.index('Tokenfold Select'), intro.index('Core')) + self.assertNotIn('Start model-free with Core.', intro) + + def test_python_first_release_tracks_are_separate(self): + published = self.text.split('### Published Python SDK\n', 1)[1] + published, fitting = published.split('### Python fit workflow\n', 1) + self.assertIn('python -m pip install "tokenfold==0.6.0"', published) + self.assertIn('from tokenfold import Data, fit', fitting) + self.assertIn('from tokenfold.lowlevel import InputFormat, compress, decode', self.text) + self.assertNotIn('Path(', published) + self.assertIn('Python >=3.12', published) + self.assertIn('representation="folded"', fitting) + self.assertLess(self.text.index('### Published Python SDK'), self.text.index('```js')) + self.assertLess(self.text.index('## Tokenfold Select'), self.text.index('## Benchmark highlights')) + self.assertLess(self.text.index('## Benchmark highlights'), self.text.index('## Other integrations')) + self.assertNotIn('google.com/search', self.text) + self.assertNotIn('unreleased', self.text.lower()) + self.assertNotIn('checkout preview', self.text.lower()) + + def test_node_sdk_quickstart_uses_the_published_in_process_package(self): + self.assertIn('npm install tokenfold@0.6.0', self.text) + self.assertIn('Core fitting runs in-process', self.text) + self.assertNotIn('native fitting uses the SDK build', self.text) + + def test_lowlevel_python_example_preserves_source_value(self): + import tokenfold.lowlevel as tokenfold + + if not hasattr(tokenfold, 'compress'): + self.skipTest('installed package does not expose tokenfold.lowlevel') + code = next(block for block in re.findall(r'```python\n(.*?)```', self.text, re.S) + if 'from tokenfold.lowlevel import InputFormat, compress, decode' in block) + namespace = {} + with redirect_stdout(StringIO()) as output: + exec(compile(code, 'README.md:lowlevel-python', 'exec'), namespace) + result = namespace['result'] + self.assertIsInstance(result.payload, bytes) + self.assertGreater(result.report.saved_tokens, 0) + self.assertEqual(json.loads(tokenfold.decode(result.payload)), namespace['records']) + self.assertIn(f'{result.report.original_tokens} -> {result.report.compressed_tokens} tokens', output.getvalue()) + + def test_python_fit_preview_meets_budget(self): + code = next(block for block in re.findall(r'```python\n(.*?)```', self.text, re.S) + if 'from tokenfold import Data, fit' in block) + namespace = {} + with redirect_stdout(StringIO()): + exec(compile(code, 'README.md:fit-preview', 'exec'), namespace) + result = namespace['result'] + self.assertEqual(result.budget_status, 'met') + self.assertEqual(result.receipt.accounting.final_basis, 'exact') + self.assertLess(result.final_tokens, result.original_tokens) + self.assertLessEqual(result.final_tokens, result.target_tokens) + from tokenfold.lowlevel import decode + self.assertEqual(json.loads(decode(namespace['payload_text'])), namespace['records']) + + def test_select_example_requires_selection_to_fit(self): + from tokenfold import fit + + code = next(block for block in re.findall(r'```python\n(.*?)```', self.text, re.S) + if 'from tokenfold import Context, Group, SelectRuntime, Tokenfold' in block) + self.assertIn('experimental=True', code) + self.assertIn('allow_selection=True', code) + self.assertNotIn('from_config', code) + namespace = {} + exec(compile(code.split('with Tokenfold(', 1)[0], 'README.md:select-input', 'exec'), namespace) + baseline = fit(namespace['context'], target_tokens=96) + self.assertEqual(baseline.budget_status, 'unmet') + self.assertGreater(baseline.final_tokens, baseline.target_tokens) + self.assertFalse(baseline.selection_applied) def test_local_links_resolve(self): targets = re.findall(r'\]\(([^)]+)\)|src="([^"]+)"', self.text) @@ -106,7 +180,9 @@ def test_select_v3_claims_match_versioned_provenance(self): for row in metrics['latency_rows']: change = 100 * (row['v3_ms'] / row['kompress_ms'] - 1) self.assertIn(f"| {row['workload']} | {row['v3_ms']:.3f} | {row['kompress_ms']:.3f} | " - f"{change:.1f}% | {row['basis']} |", visible) + f"{change:.1f}% |", visible) + self.assertIn('one historical request per model', visible) + self.assertIn('median of five', visible) old = metrics['historical_multiturn_ms'] self.assertIn(f"{old['v3']:.3f} ms vs {old['kompress']:.3f} ms", section) self.assertEqual((metrics['historical_refusals'], metrics['historical_cells']), (6, 10)) diff --git a/python-tests/test_sdk_quality_evidence.py b/python-tests/test_sdk_quality_evidence.py new file mode 100644 index 0000000..388b562 --- /dev/null +++ b/python-tests/test_sdk_quality_evidence.py @@ -0,0 +1,141 @@ +"""Reconcile frozen answer-quality evidence offline; never invoke a scorer/provider.""" +from decimal import Decimal +import hashlib +import json +from pathlib import Path +import statistics + +import pytest + +ROOT = Path(__file__).resolve().parents[1] +METRICS = ROOT / "tests/fixtures/readme_metrics.json" +pytestmark = pytest.mark.skipif(not METRICS.exists(), reason="repository evidence absent") + + +def canonical(value): + return json.dumps(value, sort_keys=True, ensure_ascii=True, separators=(",", ":"), allow_nan=False) + + +def digest(value): + return hashlib.sha256(canonical(value).encode()).hexdigest() + + +def evidence(): + pins = json.loads(METRICS.read_text())["sdk_0_6_quality"] + return pins, json.loads((ROOT / pins["source"]).read_text()), json.loads((ROOT / pins["corpus"]).read_text()) + + +def correct(row, oracle): + def unique(pairs): + result = dict(pairs) + if len(result) != len(pairs): + raise ValueError("duplicate key") + return result + try: + actual = json.loads(row["output"], object_pairs_hook=unique) + return (row["finish_reason"] == "stop" and not row["refusal"] and type(actual) is dict + and canonical(actual) == canonical(oracle)) + except (ValueError, TypeError): + return False + + +def test_quality_pins_and_visible_readme_claims(): + pins, report, corpus = evidence() + assert digest(report) == pins["source_canonical_json_sha256"] + assert digest(corpus) == pins["corpus_canonical_json_sha256"] == report["corpus_canonical_json_sha256"] + assert report["model"] == pins["model"] == corpus["protocol"]["request_template"]["model"] + assert not pins["qualification"] and not report["qualification"] + text = (ROOT / "README.md").read_text() + assert "Exact recovery did not guarantee correct model answers" in text + assert "45.6-63.9% on two fixtures, lossless" in text + assert "without a versioned source" in text + assert "| Explicit folded JSON vs. compact JSON | 4 x 2 | 8/8 | **6/8** | 24,496 -> 16,600 (**32.2% fewer**) |" in text + assert "| Select at a 50% rendered-text budget vs. full context | 8 x 2 | 16/16 | 16/16 | 5,706 -> 3,416 (**40.1% fewer**) |" in text + + +def test_every_quality_reply_is_independently_regraded_and_bound_to_its_request(): + _, report, corpus = evidence() + tasks = {t["id"]: t for t in corpus["tasks"]} + assert len(tasks) == 12 and len(report["calls"]) == 48 + ids = set() + for row in report["calls"]: + task = tasks[row["task"]] + key = row["task"], row["repeat"], row["arm"] + assert key not in ids + ids.add(key) + assert row["oracle_pass"] == correct(row, task["oracle"]) + body = {**corpus["protocol"]["request_template"], "messages": task["arms"][row["arm"]]["messages"]} + assert hashlib.sha256(json.dumps(body, sort_keys=True).encode()).hexdigest() == row["body_sha256"] + assert row["returned_model"] == report["model"] and row["provider"] == "Nvidia" + usage = row["usage"] + assert all(type(usage[k]) is int and usage[k] >= 0 for k in ("prompt_tokens", "completion_tokens", "total_tokens")) + assert usage["prompt_tokens"] + usage["completion_tokens"] == usage["total_tokens"] + assert usage["completion_tokens"] <= body["max_tokens"] + assert usage["is_byok"] is False and Decimal(str(usage["cost"])) == 0 + assert ids == {(id, repeat, arm) for id in tasks for repeat in range(2) for arm in ("baseline", "candidate")} + base = {"output": '{"v":1}', "finish_reason": "stop", "refusal": None} + assert correct(base, {"v": 1}) + for output in ('{"v":true}', '{"v":1.0}', '{"v":0,"v":1}', '{"v":NaN}', '```json\n{"v":1}\n```'): + assert not correct({**base, "output": output}, {"v": 1}) + assert not correct({**base, "refusal": "refused"}, {"v": 1}) + + +def test_quality_totals_retain_losses_cached_tokens_and_failed_probe(): + pins, report, _ = evidence() + for family in ("core", "select"): + summary = report["families"][family] + for arm in ("baseline", "candidate"): + rows = [r for r in report["calls"] if r["family"] == family and r["arm"] == arm] + totals = summary["arms"][arm] + assert totals["trials"] == len(rows) == pins[family]["trials"] + assert totals["oracle_passes"] == sum(r["oracle_pass"] for r in rows) == pins[family][f"{arm}_correct"] + for name in ("prompt", "completion"): + assert totals[f"provider_{name}_tokens"] == sum(r["usage"][f"{name}_tokens"] for r in rows) + assert totals["provider_cached_tokens"] == sum(r["usage"]["prompt_tokens_details"]["cached_tokens"] for r in rows) + assert totals["provider_call_wall_median_ms"] == round(statistics.median(r["wall_ms"] for r in rows), 6) + before, after = [summary["arms"][a]["provider_prompt_tokens"] for a in ("baseline", "candidate")] + assert round(100 * (before - after) / before, 6) == summary["provider_prompt_reduction_pct"] + assert round(summary["provider_prompt_reduction_pct"], 1) == pins[family]["provider_prompt_reduction_pct"] + losses = [r for r in report["calls"] if not r["oracle_pass"]] + assert [(r["task"], r["arm"]) for r in losses] == [("core-api-lookup", "candidate")] * 2 + assert report["families"]["core"]["paired"]["baseline_only"] == len(losses) + first = report["prior_scopes"][0] + assert (first["probe_http_status"], first["quality_calls_attempted"], first["quality_calls_unexecuted"]) == (429, 0, 48) + assert first["probe_usage"] is None and first["probe_cost_usd"] is None + accounting = report["all_attempt_accounting"] + assert accounting["actual_generation_attempts"] == first["probe_attempts"] + report["nvidia_probe"]["attempts"] + len(report["calls"]) == 50 + assert accounting["unknown_usage_attempts"] == accounting["unknown_reported_cost_attempts"] == 1 + assert accounting["complete_campaign_spend_usd"] is None + for name in ("prompt", "completion"): + assert accounting[f"nvidia_observed_{name}_tokens"] == sum(r["usage"][f"{name}_tokens"] for r in report["calls"]) + report["nvidia_probe"]["usage"][f"{name}_tokens"] + + +def test_frozen_sdk_payloads_recount_recover_and_preserve_group_boundaries(): + from tokenfold import EncodingCounter, RenderedRequest + from tokenfold.lowlevel import decode + _, _, corpus = evidence() + counter = EncodingCounter() + positions = [] + for task in corpus["tasks"]: + for arm in task["arms"].values(): + payload = arm["messages"][0]["content"] + count = counter.count(RenderedRequest("text", json.dumps(payload), "rendered_text")) + assert count.basis == "exact" and count.tokens == arm["rendered_tokens"] + assert arm["accounting"]["scope"] == "rendered_text" + baseline, candidate = task["arms"]["baseline"], task["arms"]["candidate"] + if task["family"] == "core": + source = ROOT / task["source"] + assert hashlib.sha256(source.read_bytes()).hexdigest() == task["source_sha256"] + assert json.loads(decode(candidate["messages"][0]["content"])) == json.loads(source.read_text()) + else: + groups = task["groups"] + kept = candidate["groups_kept"] + assert kept == [g["id"] for g in groups if g["id"] in kept] + assert candidate["groups_dropped"] == [g["id"] for g in groups if g["id"] not in kept] + assert candidate["messages"][0]["content"] == task["query"] + "".join("\n\n" + g["content"] for g in groups if g["id"] in kept) + assert candidate["scorer_succeeded"] and candidate["selection_applied"] + assert candidate["budget_status"] == "met" + assert candidate["target_tokens"] == baseline["rendered_tokens"] // 2 + assert candidate["rendered_tokens"] <= candidate["target_tokens"] + positions.append(task["supporting_group_position"]) + assert positions == [0, 1, 2, 3, 4, 0, 1, 2] diff --git a/scripts/render-demo.py b/scripts/render-demo.py new file mode 100644 index 0000000..a8b741e --- /dev/null +++ b/scripts/render-demo.py @@ -0,0 +1,246 @@ +"""Render the README GIF. Requires Pillow, a local CLI and the installed SDK. + +python scripts/render-demo.py --sdk-python /path/to/sdk-env/python +Select is a labeled illustration; only Core and base SDK checks execute. +""" +import argparse +from functools import lru_cache +import hashlib +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + +from PIL import Image, ImageDraw, ImageFont + + +ROOT = Path(__file__).resolve().parents[1] +OUT = ROOT / "docs/assets/tokenfold-demo.gif" +W, H, SCALE, FPS = 1280, 720, 2, 10 +BG, PANEL, LINE = "#0b1118", "#121e29", "#293b4b" +WHITE, MUTED, MINT, BLUE = "#f3f7fb", "#afc1d0", "#b8f58b", "#79d8eb" +LABELS = ("FIT", "CORE", "TOKENFOLD SELECT") +DURATIONS = (5, 3.5, 4.5) +FIT_CODE = '''from tokenfold import Data, fit + +result = fit( + Data(records, representation="folded"), + target_tokens=1500, +) +payload = result.require_met()''' +with Image.open(ROOT / "docs/assets/tokenfold-logo.png") as source: + LOGO = source.convert("RGBA") +LOGO = LOGO.crop(LOGO.getbbox()) +LOGO.thumbnail((220 * SCALE, 82 * SCALE), Image.Resampling.LANCZOS) + + +def evidence(cli, sdk_python): + """Fail before rendering if the fixture, round trip or shown SDK call drifts.""" + fixture = ROOT / "examples/api_response.json" + pins = json.loads((ROOT / "tests/fixtures/readme_metrics.json").read_text()) + assert hashlib.sha256(fixture.read_bytes()).hexdigest() == pins["compression"]["api_responses"]["sha256"] + with tempfile.TemporaryDirectory(prefix="tokenfold-demo-") as directory: + packed, restored = (Path(directory) / name for name in ("packed.json", "restored.json")) + run = subprocess.run([cli, "compress", str(fixture), "-o", str(packed), + "--receipt-format", "json"], check=True, capture_output=True, text=True) + report = json.loads(run.stderr) + subprocess.run([cli, "decode", str(packed), "-o", str(restored)], + check=True, capture_output=True) + assert json.loads(restored.read_bytes()) == json.loads(fixture.read_bytes()) + assert report["estimator"]["is_exact"] and report["estimator"]["model"] == "o200k_base" + assert report["preset"] == "balanced" and report["pruning"] is None + assert (report["original_tokens"], report["compressed_tokens"]) == (3812, 1376) + assert round(report["savings_pct"], 1) == pins["compression"]["api_responses"]["reduction_pct"] + code = ('import json\nfrom pathlib import Path\nfrom tokenfold.lowlevel import decode\n' + 'records = json.loads(Path("examples/api_response.json").read_bytes())\n' + + FIT_CODE + '\nassert json.loads(decode(payload.encode("utf-8"))) == records\n' + 'assert len(records["results"]) == 30\n' + 'baseline = fit(Data(records), target_tokens=result.target_tokens)\n' + 'assert baseline.budget_status == "unmet"\n' + 'assert baseline.final_tokens == result.original_tokens\n' + 'print(result.receipt.to_json())') + receipt = json.loads(subprocess.run([sdk_python, "-c", code], cwd=ROOT, check=True, + capture_output=True, text=True).stdout) + assert receipt["budget_status"] == "met" and receipt["target_tokens"] == 1500 + assert (receipt["original_tokens"], receipt["final_tokens"]) == (2366, 1376) + assert receipt["original_tokens"] > receipt["target_tokens"] >= receipt["final_tokens"] + assert receipt["accounting"]["original_basis"] == receipt["accounting"]["final_basis"] == "exact" + assert receipt["accounting"]["scope"] == "rendered_text" and not receipt["scorer_attempted"] + return report, receipt + + +@lru_cache(maxsize=None) +def font(size, style="regular"): + names = { + "regular": ("segoeui.ttf", "DejaVuSans.ttf", "Arial.ttf"), + "bold": ("segoeuib.ttf", "DejaVuSans-Bold.ttf", "Arial Bold.ttf"), + "mono": ("consola.ttf", "DejaVuSansMono.ttf", "Andale Mono.ttf"), + }[style] + directories = (Path(os.environ.get("WINDIR", "C:/Windows")) / "Fonts", + Path("/usr/share/fonts/truetype/dejavu"), Path("/System/Library/Fonts/Supplemental")) + for directory in directories: + for name in names: + if (directory / name).exists(): + return ImageFont.truetype(str(directory / name), size * SCALE) + raise RuntimeError("Install Segoe UI/Consolas, DejaVu Sans/Mono or Arial/Andale Mono") + + +def text(draw, x, y, value, size=24, color=WHITE, style="regular"): + face = font(size, style) + box = draw.textbbox((x * SCALE, y * SCALE), value, font=face) + assert box[2] <= W * SCALE and box[3] <= H * SCALE, value + draw.text((x * SCALE, y * SCALE), value, fill=color, font=face) + + +def rect(draw, box, fill=PANEL, outline=LINE, radius=16): + draw.rounded_rectangle(tuple(round(v * SCALE) for v in box), radius=radius * SCALE, + fill=fill, outline=outline, width=SCALE) + + +def line(draw, points, color=LINE, width=2): + draw.line([(round(x * SCALE), round(y * SCALE)) for x, y in points], fill=color, width=width * SCALE) + + +def ease(t): + t = max(0, min(t, 1)) + return t * t * (3 - 2 * t) + + +def base(scene): + im = Image.new("RGB", (W * SCALE, H * SCALE), BG) + d = ImageDraw.Draw(im) + # A quiet drafting grid, rather than a stock terminal window. + for x in range(640, W, 48): + line(d, [(x, 96), (x, 620)], "#101a24", 1) + for y in range(96, 620, 48): + line(d, [(640, y), (W - 64, y)], "#101a24", 1) + im.paste(LOGO, (64 * SCALE, 8 * SCALE), LOGO) + label = "PYTHON + TYPESCRIPT" + text(d, 1216 - font(20).getlength(label) / SCALE, 36, label, 20, MUTED) + line(d, [(64, 91), (1216, 91)]) + for i, label in enumerate(LABELS): + x = 64 + i * 392 + line(d, [(x, 655), (x + 368, 655)], MINT if i == scene else LINE, 3) + text(d, x, 672, f"0{i + 1} {label}", 18, MINT if i == scene else MUTED, "bold") + return im, d + + +def render(scene, t, report, receipt): + im, d = base(scene) + if scene == 2: + text(d, 64, 118, "03 / QUERY-AWARE SELECTION", 20, BLUE, "bold") + text(d, 60, 152, "Tokenfold Select", 64, WHITE, "bold") + text(d, 64, 236, "Why did checkout fail?", 26, MINT) + text(d, 64, 272, "CONTEXT", 18, MUTED, "bold") + text(d, 735, 272, "SELECTED", 18, MINT, "bold") + groups = ("Required rules", "Checkout: HTTP 504", + "Inventory timeout", "Unrelated changelog") + for i, title in enumerate(groups): + y = 310 + i * 68 + chosen = i < 3 and t >= 0.6 + i * 0.75 + dim = i == 3 and t >= 3 + rect(d, (64, y, 615, y + 56), fill=BG if dim else PANEL, + outline=MINT if chosen else LINE, radius=10) + text(d, 80, y + 15, title, 23, MUTED if dim else WHITE) + if chosen: + text(d, 570, y + 15, "+", 24, MINT, "bold") + progress = ease((t - 0.6 - i * 0.75) / 0.6) + line(d, [(631, y + 28), (631 + 88 * progress, y + 28)], MINT) + rect(d, (735, y, 1216, y + 56), outline=MINT, radius=10) + text(d, 751, y + 15, title, 23, MINT) + if dim: + text(d, 735, y + 15, "Omitted", 22, MUTED) + text(d, 64, 579, "Core first · Over budget? · allow_selection=True", 20, BLUE) + text(d, 64, 612, "Approved runtime · Experimental / unqualified · Illustration (not live)", 18, MUTED) + + elif scene == 1: + text(d, 64, 118, "02 / CORE FIRST / STRUCTURAL EFFICIENCY", 20, BLUE, "bold") + text(d, 60, 154, "Less repetition. Same JSON value.", 51, WHITE, "bold") + text(d, 64, 227, "Formatted JSON fixture / balanced preset / exact o200k_base counts", 23, MUTED) + before, after = report["original_tokens"], report["compressed_tokens"] + rect(d, (64, 292, 813, 553)) + text(d, 90, 314, "FORMATTED JSON", 19, MUTED, "bold") + text(d, 615, 303, f"{before:,}", 38, WHITE, "bold") + rect(d, (90, 366, 779, 390), BLUE, BLUE, 7) + text(d, 90, 422, "CORE LOSSLESS", 19, MINT, "bold") + text(d, 615, 410, f"{after:,}", 38, MINT, "bold") + rect(d, (90, 475, 90 + 689 * after / before, 499), MINT, MINT, 7) + text(d, 859, 299, f"{report['savings_pct']:.1f}%", 76, MINT, "bold") + text(d, 863, 397, "fewer tokens", 29, WHITE, "bold") + text(d, 863, 450, "Fixture result,", 22, MUTED) + text(d, 863, 482, "not a universal promise.", 22, MUTED) + text(d, 64, 573, "VERIFIED / Exact JSON-value recovery after decode", 23, MINT, "bold") + text(d, 64, 608, "examples/api_response.json · Recovery is not proof of model-answer equivalence.", 20, MUTED) + + elif scene == 0: + before, after, target = receipt["original_tokens"], receipt["final_tokens"], receipt["target_tokens"] + text(d, 64, 118, "01 / FIT MORE WITHOUT DROPPING RECORDS", 20, BLUE, "bold") + text(d, 60, 154, "Fit the budget. Keep every record.", 53, WHITE, "bold") + text(d, 64, 229, f"Compact JSON: {before:,} tokens / Input budget: {target:,} tokens", 24, MUTED) + rect(d, (64, 294, 791, 574)) + text(d, 88, 311, "PYTHON / records = bundled API fixture", 18, MUTED, "mono") + line(d, [(88, 347), (767, 347)]) + for i, row in enumerate(FIT_CODE.splitlines()): + color = MINT if "require_met" in row else BLUE if "from " in row else WHITE + text(d, 88, 364 + i * 27, row, 23, color, "mono") + rect(d, (819, 294, 1216, 574), outline=MINT) + text(d, 845, 311, "FITS THE INPUT BUDGET", 18, MUTED, "bold") + text(d, 841, 345, f"{after:,}", 58, MINT, "bold") + text(d, 845, 431, f"of {target:,} tokens", 29, WHITE, "bold") + text(d, 845, 481, f"{100 * (1 - after / before):.1f}% fewer tokens", 24, MINT) + text(d, 845, 530, "30 records. None dropped.", 22, MINT) + text(d, 64, 608, "Explicit folded representation / Verified JSON-value recovery / Local o200k_base counts", 20, MUTED) + return im.resize((W, H), Image.Resampling.LANCZOS) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--sdk-python", default=sys.executable, help="Python with the current SDK installed") + local_cli = ROOT / "target/release" / ("tokenfold.exe" if os.name == "nt" else "tokenfold") + parser.add_argument("--cli", default=str(local_cli) if local_cli.exists() else shutil.which("tokenfold")) + args = parser.parse_args() + if not args.cli: + parser.error("Build the CLI first: cargo build --release -p tokenfold-cli --locked") + report, receipt = evidence(args.cli, args.sdk_python) + previews = [render(i, duration - 0.5, report, receipt) for i, duration in enumerate(DURATIONS)] + sheet = Image.new("RGB", (W, H * len(previews)), BG) + for i, preview in enumerate(previews): + sheet.paste(preview, (0, i * H)) + # Reserve brand colors so the small gradient logo survives GIF quantization. + brand = Image.new("RGB", LOGO.size, BG) + brand.paste(LOGO, (0, 0), LOGO) + palette = sheet.quantize(colors=128, method=Image.Quantize.MEDIANCUT) + palette.putpalette(palette.getpalette()[:384] + brand.quantize(colors=128).getpalette()[:384]) + frames = [] + for scene, duration in enumerate(DURATIONS): + for tick in range(round(duration * FPS)): + frame = render(scene, tick / FPS, report, receipt) + frames.append(frame.quantize(palette=palette, dither=Image.Dither.NONE)) + OUT.parent.mkdir(exist_ok=True) + frames[0].save(OUT, save_all=True, append_images=frames[1:], duration=1000 // FPS, + loop=0, optimize=True, disposal=1) + with Image.open(OUT) as gif: + assert gif.size == (W, H) and gif.info["loop"] == 0 + elapsed = 0 + for i in range(gif.n_frames): + gif.seek(i) + expected = frames[elapsed // (1000 // FPS)].convert("RGB") + assert gif.convert("RGB").tobytes() == expected.tobytes(), f"GIF artifacts in frame {i}" + elapsed += gif.info["duration"] + assert elapsed == len(frames) * (1000 // FPS) + assert OUT.stat().st_size < 4_000_000, "Keep the README GIF below 4 MB" + scratch = ROOT / "tmp/tokenfold-demo" + scratch.mkdir(parents=True, exist_ok=True) + sheet.resize((960, 540 * len(previews)), Image.Resampling.LANCZOS).save(scratch / "storyboard.png") + for i, preview in enumerate(previews): + preview.save(scratch / f"scene-{i + 1}.png") + print(f"Core verified: {report['original_tokens']} -> {report['compressed_tokens']}; exact JSON recovery") + print(f"SDK verified: {receipt['original_tokens']} -> {receipt['final_tokens']} / {receipt['target_tokens']}; exact rendered text; met") + print(f"{OUT}: {OUT.stat().st_size:,} bytes; {len(frames) / FPS:.1f}s; Select illustration only") + + +if __name__ == "__main__": + main() diff --git a/scripts/test_render_demo.py b/scripts/test_render_demo.py new file mode 100644 index 0000000..26bae34 --- /dev/null +++ b/scripts/test_render_demo.py @@ -0,0 +1,89 @@ +"""Offline layout regressions; no SDK, model or network calls.""" +import importlib.util +from pathlib import Path +import unittest +from unittest.mock import patch + +from PIL import Image, ImageChops + + +SPEC = importlib.util.spec_from_file_location("render_demo", Path(__file__).with_name("render-demo.py")) +demo = importlib.util.module_from_spec(SPEC) +SPEC.loader.exec_module(demo) +REPORT = {"original_tokens": 3812, "compressed_tokens": 1376, "savings_pct": 63.90346274921301} +RECEIPT = {"budget_status": "met", "original_tokens": 2366, "final_tokens": 1376, "target_tokens": 1500} + + +class DemoLayout(unittest.TestCase): + def test_every_scene_uses_the_repository_logo(self): + with Image.open(demo.ROOT / "docs/assets/tokenfold-logo.png") as source: + logo = source.convert("RGBA") + logo = logo.crop(logo.getbbox()) + logo.thumbnail((220 * demo.SCALE, 82 * demo.SCALE), Image.Resampling.LANCZOS) + expected = Image.new("RGB", logo.size, demo.BG) + expected.paste(logo, (0, 0), logo) + x, y = 64 * demo.SCALE, 8 * demo.SCALE + for scene in range(len(demo.LABELS)): + frame, _ = demo.base(scene) + with self.subTest(scene=scene): + self.assertEqual(frame.crop((x, y, x + logo.width, y + logo.height)).tobytes(), + expected.tobytes()) + + def test_sdk_scene_demonstrates_savings_not_just_a_cap(self): + with patch.object(demo, "text", wraps=demo.text) as rendered: + demo.render(0, 0, REPORT, RECEIPT) + copy = "\n".join(call.args[3] for call in rendered.call_args_list) + for value in ('Data(records, representation="folded")', "2,366", "1,376", "1,500", + "41.8% fewer tokens", "30 records. None dropped."): + with self.subTest(value=value): + self.assertIn(value, copy) + self.assertNotIn("63.9%", copy) + + def test_short_loop_core_precedes_opt_in_select(self): + self.assertEqual(demo.LABELS, ("FIT", "CORE", "TOKENFOLD SELECT")) + self.assertEqual(len(demo.DURATIONS), len(demo.LABELS)) + self.assertEqual(sum(demo.DURATIONS), 13) + with patch.object(demo, "text", wraps=demo.text) as rendered: + demo.render(2, 0, REPORT, RECEIPT) + copy = "\n".join(call.args[3] for call in rendered.call_args_list) + self.assertIn("allow_selection=True", copy) + self.assertIn("Over budget?", copy) + self.assertIn("Approved runtime", copy) + self.assertIn("Experimental / unqualified", copy) + + def test_select_brand_is_prominent_and_copy_is_short(self): + with patch.object(demo, "text", wraps=demo.text) as rendered: + demo.render(2, demo.DURATIONS[2] - 0.5, REPORT, RECEIPT) + calls = rendered.call_args_list + headlines = [call for call in calls if call.args[3] == "Tokenfold Select"] + self.assertTrue(headlines, "Use the product name as the headline") + self.assertGreaterEqual(headlines[0].args[4], 60) + copy = [call.args[3] for call in calls] + self.assertIn("03 TOKENFOLD SELECT", copy) + self.assertIn("CONTEXT", copy) + self.assertIn("SELECTED", copy) + self.assertIn("not live", " ".join(copy)) + self.assertLessEqual(len(" ".join(copy).split()), 65) + + def test_selection_animation_never_covers_source_text(self): + baseline = demo.render(2, 0, REPORT, RECEIPT) + for t in (0.6, 0.8, 1, 1.35, 1.6, 2.1, 2.3, 3.1): + frame = demo.render(2, t, REPORT, RECEIPT) + for row in range(3): + y = 310 + row * 68 + box = (78, y + 10, 550, y + 50) + with self.subTest(t=t, row=row): + self.assertIsNone(ImageChops.difference(baseline.crop(box), frame.crop(box)).getbbox()) + + def test_release_copy_and_chapter_numbers(self): + for scene, duration in enumerate(demo.DURATIONS): + with patch.object(demo, "text", wraps=demo.text) as rendered: + demo.render(scene, duration - 0.5, REPORT, RECEIPT) + copy = [call.args[3] for call in rendered.call_args_list] + with self.subTest(scene=scene): + self.assertNotRegex("\n".join(copy).lower(), r"\b(preview|unreleased)\b") + self.assertTrue(any(value.startswith(f"0{scene + 1} / ") for value in copy)) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/fixtures/readme_metrics.json b/tests/fixtures/readme_metrics.json index 50c4ac0..25ffbe6 100644 --- a/tests/fixtures/readme_metrics.json +++ b/tests/fixtures/readme_metrics.json @@ -120,5 +120,16 @@ "v3": 69.3616, "kompress": 64.4106 } + }, + "sdk_0_6_quality": { + "source": "eval/research/sdk_quality_results.json", + "corpus": "eval/research/sdk_quality_corpus.json", + "source_canonical_json_sha256": "603a988c61d0863bbf0b5be0079bf338e8ecbbda18e7374d5be295da892dc347", + "corpus_canonical_json_sha256": "c09c30b004b0bd4405de30b51ac2f215eaad26b5fb3288f8d790ae31fda0474c", + "model": "nvidia/nemotron-3.5-super-vl:free", + "distinct_tasks": 12, + "core": { "baseline_correct": 8, "candidate_correct": 6, "trials": 8, "provider_prompt_reduction_pct": 32.2 }, + "select": { "baseline_correct": 16, "candidate_correct": 16, "trials": 16, "provider_prompt_reduction_pct": 40.1 }, + "qualification": false } } From c25c212bd72432faaa80311712d5c8b16d217368 Mon Sep 17 00:00:00 2001 From: snchimata <38873813+snchimata@users.noreply.github.com> Date: Wed, 11 Nov 2026 22:36:50 -0500 Subject: [PATCH 2/2] docs: correct low-level Python import guidance --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 93f85d9..a277d4c 100644 --- a/README.md +++ b/README.md @@ -346,8 +346,7 @@ tokenfold inspect payload.json --format json tokenfold compress payload.json --format json --output payload.compact.json ``` -For provider-shaped JSON, use the low-level Python API. In the published package -above, import these names directly from `tokenfold`, as in the first quickstart: +For provider-shaped JSON, use the low-level Python API from `tokenfold.lowlevel`: ```python from tokenfold.lowlevel import InputFormat, compress