From 77ea096a90a9ae43cbc5c8a3c3890edd9947b48d Mon Sep 17 00:00:00 2001 From: anshal21 Date: Fri, 10 Jul 2026 01:37:36 +0530 Subject: [PATCH 1/5] docs: relocate README depth to linked homes (no content changes) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Benchmarks → bench/README.md (shown when browsing bench/); the write-time essay → docs/why-write-time.md; the compression reference (per-type contract, ML prose path, architecture, performance, limitations) → docs/compression.md. Verbatim moves with relative links fixed; the README rewrite links each from a distilled summary. Depth gains a durable home instead of burying the front door. Co-Authored-By: Claude Opus 4.8 (1M context) --- bench/README.md | 76 +++++++++++++++++++++++++++++++++ docs/compression.md | 97 ++++++++++++++++++++++++++++++++++++++++++ docs/why-write-time.md | 50 ++++++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 bench/README.md create mode 100644 docs/compression.md create mode 100644 docs/why-write-time.md diff --git a/bench/README.md b/bench/README.md new file mode 100644 index 0000000..0b5e6b2 --- /dev/null +++ b/bench/README.md @@ -0,0 +1,76 @@ +# whittle benchmarks + +The receipts behind the README's numbers. Every figure is regenerable from this repo. + +Three tiers, in increasing order of realism - every number regenerable from +this repo (`go run ./bench` for the deterministic rows; the prose row needs the +model sidecar), reductions on an estimated-token basis (labeled). + +### 1. Synthetic corpus (ours - headline per content class) + +Authored fixtures in [`corpus/`](corpus/), designed to exercise each +strategy and its guarantees. Full table: [`REPORT.md`](REPORT.md). + +| class | representative result | +|---|---| +| JSON (uniform/sparse/nested) | 57% - lossless, byte-exact reconstruction | +| repetitive logs | 97% - omissions marked and exactly accounted | +| terminal progress streams | 99% - final frame, rune-safe | +| code / config (py, go, yaml) | **0% by design - skipped, never touched** | +| prose | 30-40% extractive, fidelity-guarded (needs the model sidecar; not part of the deterministic `go run ./bench` output) | + +### 2. Side-by-side on headroom's data + +Inputs frozen from [headroom](https://github.com/headroomlabs-ai/headroom)'s own +benchmark generators (Apache-2.0; pinned commit, seed 42 - they check in no +corpora, so we froze what their numbers are computed on; `corpus_headroom/`, +PROVENANCE.md). Both tools ran on identical bytes, defaults only, measured with +the same tokenizer. Full table + methodology: [`SIDEBYSIDE.md`](SIDEBYSIDE.md). + +| | headroom-ai 0.30.0 | whittle 0.2.1 | +|---|---|---| +| aggregate token reduction (10 files, 116.5k tokens) | **41.8%** | 36.5% | +| - conversation / agent-transcript JSON (3 files) | 2.1% | **5.4%** | +| - bulk data arrays (7 files) | **48.3%** | 41.6% | +| fidelity of that reduction | includes lossy row-dropping (recoverable via headroom's resident runtime) | **byte-exact lossless** on every file | +| median latency, in-process (same files) | 2.93 ms | 2.36 ms | + +Read it straight: on the aggregate, headroom-ai's defaults compress ~5 points +more - by dropping rows whittle refuses to drop. The category split shows where +each position pays: on conversation-shaped content (the shape agent tool +outputs actually take) whittle leads while staying lossless; on bulk data +arrays headroom-ai's lossy sampling buys its margin. Latency is near parity. +Which trade you want is the whole point of this project. + +### 3. Real-world: customer-service agents (two independent evaluations) + +Customer-service agents are whittle's strong-fit workload - their tool outputs +are structured JSON on essentially every call, so the compressor engages on +**100% of tool outputs**, all losslessly. Two evaluations, corroborating at +different scales: + +**Breadth** - [Salesforce APIGen-MT-5k](https://huggingface.co/datasets/Salesforce/APIGen-MT-5k), +5,000 verified multi-turn sessions: **22% tool-output reduction (o200k) at zero +measured information loss**, verified two ways - mechanically lossless on +**15,846 / 15,846** compressed items, and a blinded 4-judge panel finding +**0 / 120** material loss on the lossy prose path (honeypot-validated, Gwet AC2 +0.96-1.00). [`datasets/salesforce_customer_support/`](datasets/salesforce_customer_support/) + +**Depth** - Sierra's [τ-bench](datasets/tau_bench/) (retail + airline), +counterfactual replay of reference trajectories: **22.0% / 23.3% reduction, every +record reconstructed field-for-field** (all 16 flight-search results recovered +exactly). This eval isolates whittle's real structural value-add - on +**multi-record results the columnar re-encoding goes beyond compact JSON: +24% +on small flight searches, +45% on an 80-row result**, and the advantage grows +with result size. [`datasets/tau_bench/`](datasets/tau_bench/) + +The product metric is **token/context reduction**: fewer tool-output tokens, +removed from every later turn's context, compounding as the session grows. +Dollar impact is a separate, caching-dependent question both reports publish in +full: under prompt caching the same cut is ~3-5% of session cost (cheap +cache-reads dominate the bill), so token savings and dollar savings are not the +same thing. + +*(Both measured on the shared compression engine `content-aware-router` v0.1.0; +whittle's `json_crusher` is lossless-only. See each report's provenance note.)* + diff --git a/docs/compression.md b/docs/compression.md new file mode 100644 index 0000000..b1bbb6f --- /dev/null +++ b/docs/compression.md @@ -0,0 +1,97 @@ +# Compression: reference + +The full per-content-type contract, the ML prose path, architecture, performance, and limitations. + +## What it does per content type + +| detected | strategy | guarantee | +|---|---|---| +| JSON | minify + columnar reshape (union schema, typed CSV, nested flattening, constant factoring) | **lossless** - reconstructs byte-exact; rows are never dropped | +| logs / build output | keep errors, warnings, stack traces, summaries | lossy but **marked** - `... [N lines omitted]`, exact accounting | +| terminal | ANSI strip + CR-overwrite collapse (progress bars → final frame) | what the terminal actually displayed; rune-safe | +| markdown file reads | structure-aware: prose compressed by the model, **code fences / tables / lists / headings passed through byte-exact** | code never reaches the model | +| source code | untouched | routed away from every lossy path | +| prose | extractive model (optional) with fidelity guards: entity protection, whole-token deletion, negation preservation | fails open on any guard trip | + +Every path is wrapped in fail-open guardrails: empty-output, expansion (both +byte- and token-honest), panic recovery. The worst case is always "not +compressed", never "corrupted". + + +## The ML prose path (installed by `whittle setup`, optional by design) + +`whittle setup` installs and supervises the prose sidecar automatically: the +Python source ships inside the binary, setup builds its venv, and the daemon +keeps it running (GPU auto-selected: CUDA > Apple MPS > CPU). If `python3` is +missing, setup says so and whittle runs deterministic-only - nothing breaks. + +"Optional" means the deterministic strategies never depend on it. Only if you +use whittle as a bare library or `whittle serve` **without** running setup do +you wire it manually (LLMLingua-2 + whittle's fidelity guards - see +[model/](../model/)): + +``` +cd model && python -m venv .venv && .venv/bin/pip install -r requirements.txt +.venv/bin/uvicorn app:app --port 45872 +export WHITTLE_MODEL_URL=http://127.0.0.1:45872 +``` + + +## Architecture + +``` +Claude Code ──PostToolUse (HTTP)──▶ whittle daemon (:45871, launchd-kept) + │ + ├─ dispatch ▶ json · log · terminal · markdown + │ (deterministic, in-process) + └─ prose ─▶ model sidecar (:45872, optional GPU) + │ + whittle_get(id) ◀──MCP tool────────┘ reduced originals, retrievable on demand + + ── opt-in, separate process, off by default ── +Claude Code ──ANTHROPIC_BASE_URL──▶ whittle route (:45873) ──▶ Anthropic API + policy-based model-tier routing; + rewrites the model, not history; fail-open +``` + +The compression surfaces are one resident daemon, three ways in (hook · HTTP · +MCP) - compression happens where output is born, off the model-request path +entirely. The model router is a **separate, opt-in** process on the request path; +you run it only when you want tier routing. + + +## Performance + +Deterministic strategies are pure CPU, single static binary, zero allocatable +model state (Apple M-series, `go test -bench`): + +| input | size | latency | +|---|---|---| +| JSON array, 200 rows, pretty-printed | ~21 KB | ~1.0 ms | +| terminal progress stream | ~12 KB | ~3.9 ms | +| build log, 800 lines | ~56 KB | ~21 ms | + +The hook runs after the tool call completes, so this cost is **off the LLM +request path entirely** - model-call latency is unchanged. (These are absolute +in-path budgets on whittle's own corpus; for tool-vs-tool latency on identical +inputs see the Benchmarks side-by-side above and [`bench/SIDEBYSIDE.md`](../bench/SIDEBYSIDE.md).) The optional ML +prose path is capped by a fail-open budget (default 1.5 s) and never blocks +beyond it. + + +## Known limitations + +- **Replacements must match the tool's output shape.** Claude Code schema-validates + `updatedToolOutput` and silently keeps the original on mismatch; whittle rebuilds + the tool's own response shape around the compressed text (verified live on Claude + Code 2.1.203 — see [docs/hook-output-cap.md](hook-output-cap.md), which also + documents why the once-assumed 10k output cap does NOT apply to replacements). +- **Prose needs the sidecar.** Without it, prose and markdown docs pass through + unchanged; deterministic strategies are unaffected. +- **launchd is macOS-only.** Linux runs the daemon under systemd (unit in the README install notes). +- **Prose latency ceiling** (default 100000 chars) trades a hard cap for predictable + in-path latency, sized for GPU/MPS inference (measured ~0.07s + 0.04s/KB on Apple + silicon: 100KB ≈ 4s, within the 8s prose timeout). CPU-only machines run ~8x + slower (~0.3s/KB) and should lower `WHITTLE_PROSE_MAX_CHARS` to ~12000, or large + prose burns the timeout and passes through unchanged. + diff --git a/docs/why-write-time.md b/docs/why-write-time.md new file mode 100644 index 0000000..d4860a4 --- /dev/null +++ b/docs/why-write-time.md @@ -0,0 +1,50 @@ +# Why write-time compression, not read-time + +Whittle's core position, in full. (The [README](../README.md) carries the short version.) + +Context compressors typically integrate with coding agents as **request-path +proxies**: your agent's base URL is redirected through a local server that +rewrites conversation history at *read time*, on every LLM call. That position +forces hard problems - prompt-cache stabilization (mutating history invalidates +cached prefixes), per-call re-compression, terminating your API traffic (keys, +system prompts and all), and a resident runtime that must stay up or your agent +goes down with it. It also makes lossy compression the default, backed by a +retrieval loop: the runtime is guaranteed present, so dropped content can be +served back on demand. + +Whittle takes the other position: it is a **PostToolUse hook**. Each tool output +is compressed **once, at the moment it is born**, before it ever enters +conversation history. Everything else follows from that choice: + +- **Savings compound.** A tool output lives in context for every subsequent + turn. Tokens removed at write-time are removed from *every* later call - + no per-call rework, no cache surgery, because history is never mutated. +- **No trust expansion.** A hook sees one tool output at a time, locally, with + zero credentials. Nothing terminates your API traffic. +- **Failure is free.** The hook fails open; if whittle is down or declines, the + agent proceeds with the original output. A gateway outage is an agent outage. +- **The loss budget is honest.** A read-time proxy can afford recoverable lossy + compression - its resident runtime serves dropped content back when the model + asks. Whittle keeps no runtime in your request path; reduced outputs carry a tiny + retrieval pointer served by the local daemon (`whittle_get`), and lossless + transforms carry nothing at all - lossless-or-marked stays the construction, + recovery is the safety net, never the license. + +The hook is whittle's default surface, not its only one: **library** +(`whittle.New`) → **HTTP service** (`whittle serve`) → **hook adapters** +(Claude Code PostToolUse today; Cursor, Codex, OpenCode adapters on the +roadmap) - and the same library embeds in gateways or pipelines if that is +where you need it. The position is the point: compression happens where output +is born, whatever surface delivers it there. + +**This argument is about compression, not about routing.** Whittle's opt-in +[model router](../README.md#model-routing-opt-in) *is* a request-path proxy - but it exists +for a different job (send each request to the cheapest capable tier), and it is +deliberately the minimal kind. It rewrites only the model field and reconciles +capabilities; it never rewrites conversation history, so it inherits none of the +prompt-cache surgery above. It forwards your credentials untouched rather than +terminating them, and it fails open to your original request, so an outage is a +passthrough, not an agent outage. The read-time-compression proxy is the pattern +whittle rejects; a minimal, history-preserving, fail-open router is a different +tool that happens to share the address bar. + From bf94658a98d5f7c0783f26d483851de2836ca74b Mon Sep 17 00:00:00 2001 From: anshal21 Date: Fri, 10 Jul 2026 01:38:55 +0530 Subject: [PATCH 2/5] readme: rewrite to the modern high-traction formula MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Researched 9 high-traction dev-tool READMEs (uv, aider, ollama, httpie, litestream, ripgrep, fzf, bat, zoxide) + community guidance. The convergent formula among modern breakouts: 5-line hero (one sentence + visual-as-argument), scannable benefit Highlights, install within ~150 words, progressive disclosure (README sells and starts you; depth lives in linked docs), FAQ, 800-1,500 words. Ours was 447 lines / 3,206 words with 378 words before the install command, value props buried in prose, and 120+ lines of benchmarks/essay mid-file. Now: 113 lines / 1,168 words. Hero covers both surfaces in one sentence; 7 Highlights bullets; install + optional-router quickstart up top; one headline number (22% @ zero measured loss) with receipts linked; distilled sections per surface linking bench/README.md, docs/compression.md, docs/ROUTER.md, docs/why-write-time.md; FAQ harvested from Known limitations (incl. the honest tokens-vs-dollars and vs-headroom answers — personality preserved); Verify-it- yourself kept as the credibility differentiator. All 12 relative links verified; the #model-routing-opt-in anchor docs/ROUTER.md depends on is preserved. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 444 +++++++----------------------------------------------- 1 file changed, 55 insertions(+), 389 deletions(-) diff --git a/README.md b/README.md index 0edfb12..5e46b56 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # whittle -**Carves your agent's tool outputs down to what matters. Never cuts what doesn't come back.** +**Cut your AI agent's token bill twice: compress every tool output the moment it's created, and route each request to the cheapest model that can handle it. Local, fail-open, and every claim in this README is verifiable from a clone.** [![CI](https://github.com/firstops-dev/whittle/actions/workflows/ci.yml/badge.svg)](https://github.com/firstops-dev/whittle/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/firstops-dev/whittle)](https://github.com/firstops-dev/whittle/releases) @@ -9,438 +9,104 @@ ![whittle stats: tokens carved across real agent sessions](demo/stats.gif) -Whittle is a content-aware compressor for the text AI agents read: tool outputs, -file reads, logs, JSON, terminal streams. Long agent sessions drown in tokens - -but most compressors buy their ratio by silently destroying things agents need: -array rows vanish, file reads get gutted, identifiers come back mangled. - -Whittle holds one hard line: **structural compression is lossless or clearly -marked, code never reaches a lossy model, and every anomaly fails open to the -original bytes.** The reduction number it reports is calibrated to real -tokenizer counts - not byte counts that overstate savings by up to 4×. - -**How it plugs in:** `whittle setup` installs a Claude Code **PostToolUse hook** -backed by a small, always-on local daemon. Every tool output your agent produces -is compressed the moment it's created - on your machine, before it enters the -conversation, off the model-request path, with zero credentials leaving your -box. Claude Code is the supported agent today (Cursor, Codex, OpenCode adapters -are on the roadmap); the same daemon also exposes a Go library, an HTTP API, and -an MCP retrieval tool. See [Why whittle](#why-whittle---compress-at-write-time-not-read-time) -and [Architecture](#architecture) for the reasoning and the diagram. - -Whittle has a **second, independent surface: an opt-in model router** -(`whittle route`). It runs a local proxy on `ANTHROPIC_BASE_URL` that sends each -request to the cheapest model tier that can still handle it — hard reasoning -stays on your strongest model, trivial edits drop to the cheapest, the broad -middle rides a capable default. Decisions come from one auditable policy file -you own, driven by real signals: a trained subject classifier, a contrastive -difficulty score, and your own keywords. It's off by default, rewrites the -*model* and never your conversation history, forwards your credentials -untouched, and fails open on every path. See -[Model routing](#model-routing-opt-in) and the full design in -[docs/ROUTER.md](docs/ROUTER.md). +Long agent sessions drown in tokens — and most compressors buy their ratio by silently destroying what agents need: array rows vanish, file reads get gutted, identifiers come back mangled. Whittle holds one hard line: **lossless or clearly marked, code never touched, every anomaly fails open to the original bytes.** -## See it - -![whittle compressing a noisy build log](demo/compress.gif) - -``` -$ tail -n 6 build.log | whittle compress -stats -ERROR migrate failed: relation "users" does not exist -... [118 lines omitted] -2026-07-04 INFO worker drained cleanly -ERROR shutdown: connection reset by peer - -whittle: action=compressed detected=log strategy=log_compressor tokens=1904->47 -``` +## Highlights -Errors and the summary survive; 118 lines of INFO noise become one honest -marker. JSON reshapes losslessly, code passes through untouched, terminal -progress bars collapse to their final frame - see [Benchmarks](#benchmarks). +- 🪓 **Write-time compression** — a Claude Code PostToolUse hook whittles each tool output *before* it enters context, so the savings repeat on every later turn. History is never mutated, so prompt caches stay intact. +- 🔒 **Lossless or marked** — JSON reshapes byte-exact (rows are never dropped), logs keep every error plus an honest `[N lines omitted]`, source code passes through untouched. +- 🎯 **Token-honest numbers** — savings measured against calibrated tokenizer counts, not byte counts that overstate by up to 4×. +- 🧭 **Opt-in model router** — hard reasoning stays on your strongest model, trivia drops to the cheapest, per one auditable policy file driven by trained-classifier signals ([how it works](docs/ROUTER.md)). +- 🛟 **Fail-open everywhere** — whittle down means your agent runs on originals; a rejected rewrite means your original request, retried. Never blocked, never corrupted. +- 🏠 **Runs entirely on your machine** — zero credentials leave your box; the Go binary has zero external dependencies. +- 🧾 **Executable claims** — `make test` and `go run ./bench` regenerate every number below from a clone. ## Install -``` +```sh go install github.com/firstops-dev/whittle/cmd/whittle@latest -whittle setup +whittle setup # hook + local daemon + optional ML sidecar — one command ``` -> `go install` places the binary in `~/go/bin`, which may not be on your `PATH`. -> If `whittle` isn't found, add it: `echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc`. -> (Homebrew users can skip this - `brew install firstops-dev/tap/whittle` puts it on `PATH` automatically.) - -That's the whole thing. `setup`: - -- installs the **Claude Code PostToolUse hook** - tool outputs your agent reads - are whittled from now on (Claude Code is the supported agent today; - Cursor, Codex and OpenCode adapters are on the roadmap); -- materializes the ML prose sidecar (embedded in the binary) into `~/.whittle`, - builds its venv, and uses your GPU automatically (CUDA > Apple MPS > CPU) - - if `python3` is missing, whittle simply runs deterministic-only; -- registers a **launchd agent** (macOS) so the service starts at login and is - kept alive. +Tool outputs are whittled from now on; `whittle stats` shows what you're saving. (Homebrew: `brew install firstops-dev/tap/whittle`. If `go install`'s binary isn't found, add `~/go/bin` to your PATH. Linux runs the daemon under systemd — [notes](docs/compression.md).) -On Linux (launchd is macOS-only), run the daemon under systemd: +**Optional — turn on model routing:** -``` -# ~/.config/systemd/user/whittle.service -[Unit] -Description=whittle daemon -[Service] -ExecStart=%h/go/bin/whittle daemon -Restart=always -[Install] -WantedBy=default.target +```sh +whittle policy init # calibrated policy, your model ids auto-detected +whittle route -install # background service (or `whittle route` in a terminal) +export ANTHROPIC_BASE_URL=http://127.0.0.1:45873 ``` -Manage it with `whittle status`, `whittle stop`, and `whittle cleanup` (stops -the service and removes the hook). Everything fails open: if whittle is down, -your agent sees original outputs, never an error. +## See it -## Use +![whittle compressing a noisy build log](demo/compress.gif) ``` -whittle compress output.json # compressed to stdout -cat build.log | whittle compress -stats # stats to stderr -whittle serve -addr :45871 # HTTP: POST /v1/compress -whittle route -addr 127.0.0.1:45873 # opt-in model router (ANTHROPIC_BASE_URL) -``` - -As a library: +$ tail -n 6 build.log | whittle compress -stats +ERROR migrate failed: relation "users" does not exist +... [118 lines omitted] +2026-07-04 INFO worker drained cleanly +ERROR shutdown: connection reset by peer -```go -eng := whittle.New(whittle.Options{}) -res := eng.Compress(ctx, toolOutput) -// res.Output, res.Action ("compressed"|"skipped"), res.SkipReason, -// res.Strategy, res.Detected +whittle: action=compressed detected=log strategy=log_compressor tokens=1904->47 ``` -## What it does per content type - -| detected | strategy | guarantee | -|---|---|---| -| JSON | minify + columnar reshape (union schema, typed CSV, nested flattening, constant factoring) | **lossless** - reconstructs byte-exact; rows are never dropped | -| logs / build output | keep errors, warnings, stack traces, summaries | lossy but **marked** - `... [N lines omitted]`, exact accounting | -| terminal | ANSI strip + CR-overwrite collapse (progress bars → final frame) | what the terminal actually displayed; rune-safe | -| markdown file reads | structure-aware: prose compressed by the model, **code fences / tables / lists / headings passed through byte-exact** | code never reaches the model | -| source code | untouched | routed away from every lossy path | -| prose | extractive model (optional) with fidelity guards: entity protection, whole-token deletion, negation preservation | fails open on any guard trip | +Errors and the summary survive; 118 lines of INFO noise become one honest marker. Across **5,000 real agent sessions**: **22% tool-output reduction at zero measured information loss** — mechanically lossless on 15,846/15,846 items, and a blinded 4-judge panel found 0/120 material loss on the lossy prose path. Full receipts, including an honest side-by-side against headroom: [bench/](bench/README.md). -Every path is wrapped in fail-open guardrails: empty-output, expansion (both -byte- and token-honest), panic recovery. The worst case is always "not -compressed", never "corrupted". +## Compression: what happens to each content type -## The ML prose path (installed by `whittle setup`, optional by design) +JSON is reshaped **losslessly** (byte-exact reconstruction). Logs and terminal streams are cut lossily but **marked and exactly accounted**. Markdown file reads keep code fences, tables, and headings byte-exact while prose is compressed by an optional local model with fidelity guards. Source code is **never touched**. Every path is wrapped in fail-open guardrails — the worst case is always *not compressed*, never *corrupted*. -`whittle setup` installs and supervises the prose sidecar automatically: the -Python source ships inside the binary, setup builds its venv, and the daemon -keeps it running (GPU auto-selected: CUDA > Apple MPS > CPU). If `python3` is -missing, setup says so and whittle runs deterministic-only - nothing breaks. - -"Optional" means the deterministic strategies never depend on it. Only if you -use whittle as a bare library or `whittle serve` **without** running setup do -you wire it manually (LLMLingua-2 + whittle's fidelity guards - see -[model/](model/)): - -``` -cd model && python -m venv .venv && .venv/bin/pip install -r requirements.txt -.venv/bin/uvicorn app:app --port 45872 -export WHITTLE_MODEL_URL=http://127.0.0.1:45872 -``` +The full per-type contract, ML prose path, architecture, and performance tables: [docs/compression.md](docs/compression.md) · what each guarantee is pinned by: [GUARANTEES.md](GUARANTEES.md). ## Model routing (opt-in) -Whittle's second surface is a **local model router** - separate from the -compression hook, off by default, turned on deliberately. `whittle route` runs a -proxy on `ANTHROPIC_BASE_URL` that inspects each request and routes it to the -cheapest model tier that can still serve it, per a policy you author -(`~/.whittle/router.json`): +Whittle's second surface: a local proxy on `ANTHROPIC_BASE_URL` that sends each request to the cheapest model tier that can still handle it — per a policy you can read in one screen. -``` -whittle policy init # write a starter policy to ~/.whittle/router.json -whittle route # proxy on 127.0.0.1:45873 -export ANTHROPIC_BASE_URL=http://127.0.0.1:45873 -``` +- **Calibrated out of the box** — `whittle policy init` writes a conservative default (hard reasoning → strongest tier, confident chit-chat → cheapest, *everything else untouched*) with your account's real model ids auto-detected. [What it does & how to customize](router/policies/default.md). +- **Multi-signal, not keyword-matching** — a trained 14-subject classifier (probability-mass thresholded, so an *uncertain* classification never escalates), a contrastive difficulty score, and your own keywords. Every log line shows each signal's value against its gate. +- **Rewrites the model, never your history** — prompt-cache prefixes survive; capabilities the cheaper model rejects are stripped automatically; credentials pass through untouched. +- **Fail-open by construction** — bad policy, dead classifier, or a rejected rewrite all fall back to your original request. Unset the env var and you're direct again. +- **Savings you can measure** — every request logs requested model, served model, and real token usage. -- **Start from the built-in policy.** `whittle policy init` writes the calibrated - `default` policy with the model ids your account actually uses (auto-detected); - `whittle policy validate ` checks your edits against the real loader. - What it does and how to customize it: [router/policies/default.md](router/policies/default.md). -- **One auditable policy file.** Tiers, first-match routes over a boolean - condition tree, and a default - you can read the file and predict every - decision, and the per-request log names the rule that fired. The full grammar, - the signal math, and the design rationale live in - [docs/ROUTER.md](docs/ROUTER.md). -- **Multi-signal, not keyword-matching.** With smart mode on - (`WHITTLE_ROUTER_MODEL_URL` → the sidecar), routes can test a trained - 14-subject classifier (thresholding its full probability mass, so an - *uncertain* classification falls to your default tier - never up to the - expensive one), a contrastive hard/easy difficulty score, and semantic - similarity to your own example phrases - alongside whole-word keywords and - context-size heuristics. Smart mode off → the heuristics still route, - everything else rides the default. -- **It rewrites the model, not your history.** The router swaps the target model - and reconciles capabilities for it (stripping betas and features the cheaper - model rejects). It never mutates conversation history, so prompt-cache - prefixes stay intact - the failure mode that makes read-time proxies painful. -- **Your credentials pass through untouched.** The proxy forwards your own auth - to Anthropic; whittle never sees or stores a key. -- **Fail-open by construction.** A missing/invalid policy, a parse error, a dead - classifier, or a rewrite the upstream rejects all fall back to your original - request. If the router is down, unset `ANTHROPIC_BASE_URL` and you're direct - again - nothing is trapped behind it. -- **Savings you can measure.** Every request logs the requested model, the model - that actually served it, and the response's real token usage - enough to - compute exactly what routing saved you. - -The classifier and embedding models (and the scoring math behind the difficulty -signal) come from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router) -([whitepaper](https://vllm-semantic-router.com/white-paper)); the architecture -around them - the single-file policy, the probability-mass thresholding, the -fail-open model - is whittle's own, and [docs/ROUTER.md](docs/ROUTER.md) -credits the line between the two precisely. Configure the upstream with -`WHITTLE_ROUTER_UPSTREAM` (defaults to `api.anthropic.com`; point it at a -corporate Anthropic gateway if you have one). - -Run it in the foreground, or install it as a background service (opt-in, separate -from the compress daemon): +Architecture, signal math, and precise credits (the classifier models come from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router)): [docs/ROUTER.md](docs/ROUTER.md). -``` -whittle route -install # register a launchd agent (macOS), starts at login -whittle status # shows model-router health alongside compress + sidecar -whittle route -uninstall # stop + unregister -``` +## Why write-time? -## Configuration - -| env | default | meaning | -|---|---|---| -| `WHITTLE_MODEL_URL` | *(unset - prose off)* | model sidecar URL | -| `WHITTLE_MAX_CHARS` | 262144 | global size ceiling (skip before classify) | -| `WHITTLE_PROSE_MAX_CHARS` | 100000 | prose-path latency ceiling (lower on CPU-only machines) | -| `WHITTLE_ROUTER_UPSTREAM` | `api.anthropic.com` | model router upstream (opt-in `whittle route`) | -| `WHITTLE_ROUTER_MODEL_URL` | *(unset - smart off)* | router classifier sidecar URL (enables ML `intent`/`classify` routing) | - - - -## Benchmarks - -Three tiers, in increasing order of realism - every number regenerable from -this repo (`go run ./bench` for the deterministic rows; the prose row needs the -model sidecar), reductions on an estimated-token basis (labeled). - -### 1. Synthetic corpus (ours - headline per content class) - -Authored fixtures in [`bench/corpus/`](bench/corpus/), designed to exercise each -strategy and its guarantees. Full table: [`bench/REPORT.md`](bench/REPORT.md). - -| class | representative result | -|---|---| -| JSON (uniform/sparse/nested) | 57% - lossless, byte-exact reconstruction | -| repetitive logs | 97% - omissions marked and exactly accounted | -| terminal progress streams | 99% - final frame, rune-safe | -| code / config (py, go, yaml) | **0% by design - skipped, never touched** | -| prose | 30-40% extractive, fidelity-guarded (needs the model sidecar; not part of the deterministic `go run ./bench` output) | - -### 2. Side-by-side on headroom's data - -Inputs frozen from [headroom](https://github.com/headroomlabs-ai/headroom)'s own -benchmark generators (Apache-2.0; pinned commit, seed 42 - they check in no -corpora, so we froze what their numbers are computed on; `bench/corpus_headroom/`, -PROVENANCE.md). Both tools ran on identical bytes, defaults only, measured with -the same tokenizer. Full table + methodology: [`bench/SIDEBYSIDE.md`](bench/SIDEBYSIDE.md). - -| | headroom-ai 0.30.0 | whittle 0.2.1 | -|---|---|---| -| aggregate token reduction (10 files, 116.5k tokens) | **41.8%** | 36.5% | -| - conversation / agent-transcript JSON (3 files) | 2.1% | **5.4%** | -| - bulk data arrays (7 files) | **48.3%** | 41.6% | -| fidelity of that reduction | includes lossy row-dropping (recoverable via headroom's resident runtime) | **byte-exact lossless** on every file | -| median latency, in-process (same files) | 2.93 ms | 2.36 ms | - -Read it straight: on the aggregate, headroom-ai's defaults compress ~5 points -more - by dropping rows whittle refuses to drop. The category split shows where -each position pays: on conversation-shaped content (the shape agent tool -outputs actually take) whittle leads while staying lossless; on bulk data -arrays headroom-ai's lossy sampling buys its margin. Latency is near parity. -Which trade you want is the whole point of this project. - -### 3. Real-world: customer-service agents (two independent evaluations) - -Customer-service agents are whittle's strong-fit workload - their tool outputs -are structured JSON on essentially every call, so the compressor engages on -**100% of tool outputs**, all losslessly. Two evaluations, corroborating at -different scales: - -**Breadth** - [Salesforce APIGen-MT-5k](https://huggingface.co/datasets/Salesforce/APIGen-MT-5k), -5,000 verified multi-turn sessions: **22% tool-output reduction (o200k) at zero -measured information loss**, verified two ways - mechanically lossless on -**15,846 / 15,846** compressed items, and a blinded 4-judge panel finding -**0 / 120** material loss on the lossy prose path (honeypot-validated, Gwet AC2 -0.96-1.00). [`bench/datasets/salesforce_customer_support/`](bench/datasets/salesforce_customer_support/) - -**Depth** - Sierra's [τ-bench](bench/datasets/tau_bench/) (retail + airline), -counterfactual replay of reference trajectories: **22.0% / 23.3% reduction, every -record reconstructed field-for-field** (all 16 flight-search results recovered -exactly). This eval isolates whittle's real structural value-add - on -**multi-record results the columnar re-encoding goes beyond compact JSON: +24% -on small flight searches, +45% on an 80-row result**, and the advantage grows -with result size. [`bench/datasets/tau_bench/`](bench/datasets/tau_bench/) - -The product metric is **token/context reduction**: fewer tool-output tokens, -removed from every later turn's context, compounding as the session grows. -Dollar impact is a separate, caching-dependent question both reports publish in -full: under prompt caching the same cut is ~3-5% of session cost (cheap -cache-reads dominate the bill), so token savings and dollar savings are not the -same thing. - -*(Both measured on the shared compression engine `content-aware-router` v0.1.0; -whittle's `json_crusher` is lossless-only. See each report's provenance note.)* - -## Why whittle - compress at write-time, not read-time - -Context compressors typically integrate with coding agents as **request-path -proxies**: your agent's base URL is redirected through a local server that -rewrites conversation history at *read time*, on every LLM call. That position -forces hard problems - prompt-cache stabilization (mutating history invalidates -cached prefixes), per-call re-compression, terminating your API traffic (keys, -system prompts and all), and a resident runtime that must stay up or your agent -goes down with it. It also makes lossy compression the default, backed by a -retrieval loop: the runtime is guaranteed present, so dropped content can be -served back on demand. - -Whittle takes the other position: it is a **PostToolUse hook**. Each tool output -is compressed **once, at the moment it is born**, before it ever enters -conversation history. Everything else follows from that choice: - -- **Savings compound.** A tool output lives in context for every subsequent - turn. Tokens removed at write-time are removed from *every* later call - - no per-call rework, no cache surgery, because history is never mutated. -- **No trust expansion.** A hook sees one tool output at a time, locally, with - zero credentials. Nothing terminates your API traffic. -- **Failure is free.** The hook fails open; if whittle is down or declines, the - agent proceeds with the original output. A gateway outage is an agent outage. -- **The loss budget is honest.** A read-time proxy can afford recoverable lossy - compression - its resident runtime serves dropped content back when the model - asks. Whittle keeps no runtime in your request path; reduced outputs carry a tiny - retrieval pointer served by the local daemon (`whittle_get`), and lossless - transforms carry nothing at all - lossless-or-marked stays the construction, - recovery is the safety net, never the license. - -The hook is whittle's default surface, not its only one: **library** -(`whittle.New`) → **HTTP service** (`whittle serve`) → **hook adapters** -(Claude Code PostToolUse today; Cursor, Codex, OpenCode adapters on the -roadmap) - and the same library embeds in gateways or pipelines if that is -where you need it. The position is the point: compression happens where output -is born, whatever surface delivers it there. - -**This argument is about compression, not about routing.** Whittle's opt-in -[model router](#model-routing-opt-in) *is* a request-path proxy - but it exists -for a different job (send each request to the cheapest capable tier), and it is -deliberately the minimal kind. It rewrites only the model field and reconciles -capabilities; it never rewrites conversation history, so it inherits none of the -prompt-cache surgery above. It forwards your credentials untouched rather than -terminating them, and it fails open to your original request, so an outage is a -passthrough, not an agent outage. The read-time-compression proxy is the pattern -whittle rejects; a minimal, history-preserving, fail-open router is a different -tool that happens to share the address bar. - -## Architecture +Most context compressors are read-time proxies: they rewrite your conversation history on every LLM call — which breaks prompt caches, terminates your API traffic, and makes lossy compression the default. Whittle compresses each output **once, at the moment it's born**, before it enters history: savings compound across every later turn, nothing sits in your request path, and failure costs nothing. The full argument: [docs/why-write-time.md](docs/why-write-time.md). -``` -Claude Code ──PostToolUse (HTTP)──▶ whittle daemon (:45871, launchd-kept) - │ - ├─ dispatch ▶ json · log · terminal · markdown - │ (deterministic, in-process) - └─ prose ─▶ model sidecar (:45872, optional GPU) - │ - whittle_get(id) ◀──MCP tool────────┘ reduced originals, retrievable on demand - - ── opt-in, separate process, off by default ── -Claude Code ──ANTHROPIC_BASE_URL──▶ whittle route (:45873) ──▶ Anthropic API - policy-based model-tier routing; - rewrites the model, not history; fail-open -``` - -The compression surfaces are one resident daemon, three ways in (hook · HTTP · -MCP) - compression happens where output is born, off the model-request path -entirely. The model router is a **separate, opt-in** process on the request path; -you run it only when you want tier routing. - -## Performance - -Deterministic strategies are pure CPU, single static binary, zero allocatable -model state (Apple M-series, `go test -bench`): - -| input | size | latency | -|---|---|---| -| JSON array, 200 rows, pretty-printed | ~21 KB | ~1.0 ms | -| terminal progress stream | ~12 KB | ~3.9 ms | -| build log, 800 lines | ~56 KB | ~21 ms | +## FAQ -The hook runs after the tool call completes, so this cost is **off the LLM -request path entirely** - model-call latency is unchanged. (These are absolute -in-path budgets on whittle's own corpus; for tool-vs-tool latency on identical -inputs see the Benchmarks side-by-side above and `bench/SIDEBYSIDE.md`.) The optional ML -prose path is capped by a fail-open budget (default 1.5 s) and never blocks -beyond it. +**Will it break my agent?** No — that's the core design constraint. Every path fails open: if whittle is down, declines, or errors, your agent sees original bytes. The router likewise: worst case is your request untouched. -## Design principles +**Does it need Python?** No. The deterministic compressors (JSON, logs, terminal, markdown structure) are pure Go. Python powers the *optional* prose model and router classifiers; `whittle setup` installs it if `python3` exists, and everything else works without it. -1. **Fail open.** A compressor that breaks your agent is worse than no compressor. -2. **Never silent loss.** Lossy paths mark what they removed and account for it exactly. -3. **Code is sacred.** File reads, fences, identifiers: byte-exact or untouched. -4. **Token-honest.** Accept gates and reported savings use calibrated token - estimates (MAE ~8% vs `o200k_base`; regenerate with `bench/calibrate_tokens.py`), - not bytes. -5. **Adversarially tested.** The invariants above are pinned by reconstruction - fuzzing, per-language routing suites, and fail-open contract tests. +**Are token savings dollar savings?** Not 1:1 — under prompt caching, cheap cache-reads dominate the bill, so a 22% token cut is roughly 3–5% of session cost. We publish both numbers rather than pretending otherwise: [bench/](bench/README.md). +**How does it compare to headroom?** On identical bytes, headroom's defaults compress ~5 points more — by dropping rows whittle refuses to drop. On conversation-shaped content whittle leads *while staying lossless*. Which trade you want is the whole point: [bench/SIDEBYSIDE.md](bench/SIDEBYSIDE.md). -## Acknowledgments +**Where does my data go?** Nowhere. Hook, daemon, models, and router all run on your machine. The router forwards your own credentials to Anthropic and logs token *counts*, never prompt text. -Whittle's log-selection strategy, several content-detection heuristics, and the -tabular parser were adapted from [Headroom](https://github.com/headroomlabs-ai/headroom) -(Apache-2.0) - adapted portions are marked in source comments, and we think -their compaction work is excellent. Whittle exists because we wanted the other -position: a write-time PostToolUse hook instead of a read-time request-path -proxy, with the stricter fidelity contract that position requires. See NOTICE. +**Which agents?** Claude Code today (hook + router). Cursor, Codex, and OpenCode adapters are on the roadmap — the compression engine is also a plain Go library and HTTP service. ## Verify it yourself -Every claim here is checkable from a clone - that is the point. +Every claim here is checkable from a clone — that is the point. +```sh +make test # guarantees as executable tests (GUARANTEES.md) +go run ./bench # corpus reductions + fidelity, SHA-pinned, CI-gated +python bench/calibrate_tokens.py # reproduces the token-estimator MAE ``` -make test # guarantees as executable tests (see GUARANTEES.md) -go run ./bench # corpus reductions + fidelity, SHA-pinned, CI-gated -python bench/calibrate_tokens.py # reproduces the token-estimator MAE (needs tiktoken) -``` - -[GUARANTEES.md](GUARANTEES.md) maps each fidelity promise to the test that pins it. -## Known limitations +## Contributing -- **Replacements must match the tool's output shape.** Claude Code schema-validates - `updatedToolOutput` and silently keeps the original on mismatch; whittle rebuilds - the tool's own response shape around the compressed text (verified live on Claude - Code 2.1.203 — see [docs/hook-output-cap.md](docs/hook-output-cap.md), which also - documents why the once-assumed 10k output cap does NOT apply to replacements). -- **Prose needs the sidecar.** Without it, prose and markdown docs pass through - unchanged; deterministic strategies are unaffected. -- **launchd is macOS-only.** Linux runs the daemon under systemd (unit above). -- **Prose latency ceiling** (default 100000 chars) trades a hard cap for predictable - in-path latency, sized for GPU/MPS inference (measured ~0.07s + 0.04s/KB on Apple - silicon: 100KB ≈ 4s, within the 8s prose timeout). CPU-only machines run ~8x - slower (~0.3s/KB) and should lower `WHITTLE_PROSE_MAX_CHARS` to ~12000, or large - prose burns the timeout and passes through unchanged. +The bar: guarantees are executable — see [CONTRIBUTING.md](CONTRIBUTING.md). Fidelity bugs (whittle changing an output's meaning) are treated as urgent. Good first issues: agent adapters, Linux packaging, detection corpus cases. -## Contributing +## Acknowledgments -Whittle's bar is that guarantees are executable - see [CONTRIBUTING.md](CONTRIBUTING.md). -The highest-severity issue class is **fidelity**: if whittle ever changed the -meaning of an output, that is a bug we treat as urgent (use the fidelity issue -template). Good first issues: agent adapters (Cursor/Codex/OpenCode), Linux -packaging, detection corpus cases. +Whittle's log-selection strategy, several detection heuristics, and the tabular parser were adapted from [Headroom](https://github.com/headroomlabs-ai/headroom) (Apache-2.0) — their compaction work is excellent; we wanted the write-time position and the stricter fidelity contract it demands. The router's classifier and embedding models come from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router) ([whitepaper](https://vllm-semantic-router.com/white-paper)). See [NOTICE](NOTICE). ## License From 00049809e254e8fb82fb24f53af348bd69f17f0b Mon Sep 17 00:00:00 2001 From: anshal21 Date: Fri, 10 Jul 2026 01:45:08 +0530 Subject: [PATCH 3/5] =?UTF-8?q?router:=20smart=20mode=20is=20automatic=20?= =?UTF-8?q?=E2=80=94=20zero-config=20`whittle=20route`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Requiring WHITTLE_ROUTER_MODEL_URL to enable ML routing was an installation footgun (observed live: a router launched without it silently ran heuristics- only). The router now defaults to the standard sidecar address `whittle setup` installs (127.0.0.1:45872); the env var is an override, "off" disables. The design problem with a default URL is absence semantics: a never-installed sidecar must not spam errors. Split by cause: connection REFUSED = expected absence → reads as smart-mode-off (signals trace "off", no ml-degraded, quiet); listening-but-broken (timeout/5xx/malformed) = real degradation → stays loud. The absence check is per-request and free (localhost refusal is immediate), so signals activate the moment the sidecar appears — no restart. One startup probe prints an honest mode line either way. launchd plist no longer carries env plumbing; help + docs/ROUTER.md updated. Tests pin absent-vs-broken semantics + absence-not-degraded end-to-end. Verified live on all three paths (zero-config → casual-easy→haiku; dead port → quiet heuristics; off → warning). Co-Authored-By: Claude Opus 4.8 (1M context) --- cmd/whittle/main.go | 3 +- cmd/whittle/setup.go | 9 ++---- docs/ROUTER.md | 11 +++++-- router/quiet_test.go | 46 ++++++++++++++++++++++++++++ router/server.go | 73 +++++++++++++++++++++++++++++++++++++++----- 5 files changed, 124 insertions(+), 18 deletions(-) create mode 100644 router/quiet_test.go diff --git a/cmd/whittle/main.go b/cmd/whittle/main.go index 8d0904c..2e8caea 100644 --- a/cmd/whittle/main.go +++ b/cmd/whittle/main.go @@ -95,7 +95,8 @@ route flags: -install register the router as a background launchd agent (opt-in), then exit -uninstall stop + unregister the router launchd agent, then exit env WHITTLE_ROUTER_UPSTREAM upstream API (default api.anthropic.com) - env WHITTLE_ROUTER_MODEL_URL classifier sidecar URL (unset → smart mode off) + env WHITTLE_ROUTER_MODEL_URL classifier sidecar (default http://127.0.0.1:45872, + auto-detected; set to "off" to disable ML signals) env: WHITTLE_MODEL_URL enable the ML prose path (model sidecar URL) diff --git a/cmd/whittle/setup.go b/cmd/whittle/setup.go index 86c4517..7b82bad 100644 --- a/cmd/whittle/setup.go +++ b/cmd/whittle/setup.go @@ -255,22 +255,19 @@ func routerInstall() { fmt.Println("whittle:", err) return } - // Point smart mode at the compress sidecar (it also serves /v1/route/*). If the - // sidecar is down, the router fails open to heuristics-only — never blocks. + // Smart mode is automatic (the router probes the standard sidecar address and + // degrades to heuristics if absent) — no env plumbing needed here. plist := fmt.Sprintf(` Label%s ProgramArguments%sroute - EnvironmentVariables - WHITTLE_ROUTER_MODEL_URLhttp://%s - RunAtLoad KeepAlive StandardOutPath%s/logs/router.log StandardErrorPath%s/logs/router.log -`, routerAgentLabel, self, modelAddr, dir, dir) +`, routerAgentLabel, self, dir, dir) if err := os.WriteFile(routerPlistPath(), []byte(plist), 0o644); err != nil { fmt.Println("whittle: router agent registration failed:", err) return diff --git a/docs/ROUTER.md b/docs/ROUTER.md index df39bd8..572acd8 100644 --- a/docs/ROUTER.md +++ b/docs/ROUTER.md @@ -166,9 +166,14 @@ prints errors and cost-lint warnings. ## 5. Signals Two small models power three signals. Both run in the sidecar; the Go engine -holds only thresholds. If the sidecar is down or smart mode is off, ML leaves -evaluate false and the keyword/context heuristics still route (a route whose -match *depended* on an errored signal never fires — so a `not` over an +holds only thresholds. Smart mode is automatic: the router probes the standard +sidecar address (`127.0.0.1:45872`, installed by `whittle setup`) — no +configuration. An absent sidecar reads as smart-off (quiet; heuristics still +route, and signals activate the moment it appears); a present-but-broken one is +surfaced loudly (`err` traces + `ml-degraded`). Set +`WHITTLE_ROUTER_MODEL_URL=off` to disable ML entirely, or point it elsewhere to +override. When ML is unavailable, leaves evaluate false (a route whose match +*depended* on an errored signal never fires — so a `not` over an unavailable signal can't invert fail-open; the log gains an `ml-degraded` tag). ### 5.1 `domain` — subject classification with mass thresholding diff --git a/router/quiet_test.go b/router/quiet_test.go new file mode 100644 index 0000000..a1a945c --- /dev/null +++ b/router/quiet_test.go @@ -0,0 +1,46 @@ +package router + +import ( + "errors" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/firstops-dev/whittle/router/ml" +) + +// The zero-config contract: an ABSENT sidecar (connection refused) reads as +// smart-mode-off (ErrMLDisabled — quiet, no ml-degraded), while a PRESENT-but- +// broken sidecar keeps surfacing as a real error (loud). Absence is expected; +// breakage is not. +func TestQuietClassifier_AbsentVsBroken(t *testing.T) { + // Absent: nothing listening → refused → ErrMLDisabled. + q := quietClassifier{ml.New("http://127.0.0.1:1")} + if _, err := q.EmbeddingScore("x", nil); !errors.Is(err, ErrMLDisabled) { + t.Fatalf("refused connection must read as ErrMLDisabled, got %v", err) + } + // Broken: listening but 500 → a real error, NOT ErrMLDisabled. + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + })) + defer srv.Close() + qb := quietClassifier{ml.New(srv.URL)} + if _, err := qb.EmbeddingScore("x", nil); err == nil || errors.Is(err, ErrMLDisabled) { + t.Fatalf("a broken sidecar must stay a real error, got %v", err) + } +} + +// End-to-end consequence: with the quiet wrapper, a down sidecar routes to the +// default WITHOUT the ml-degraded tag (it is not a degradation, it's absence). +func TestQuietClassifier_AbsenceIsNotDegraded(t *testing.T) { + p, _ := mustLoad(t, fullPolicy) + d := Decide(Signals{RecentText: "just a normal ask", ContextTokens: 100, SessionID: "s"}, + p, quietClassifier{ml.New("http://127.0.0.1:1")}, NewMemSessionStore(), "") + if d.Tier != "main" { + t.Fatalf("must fall to default, got %q (%s)", d.Tier, d.Reason) + } + if strings.Contains(d.Reason, "ml-degraded") { + t.Fatalf("absence must not tag ml-degraded: %q", d.Reason) + } +} diff --git a/router/server.go b/router/server.go index f606aea..7d05cee 100644 --- a/router/server.go +++ b/router/server.go @@ -1,6 +1,7 @@ package router import ( + "errors" "net/http" "os" "os/signal" @@ -10,10 +11,55 @@ import ( "github.com/firstops-dev/whittle/router/ml" ) +// quietClassifier wraps the sidecar client so an ABSENT sidecar (connection +// refused — never installed, or not up yet) reads as smart-mode-off +// (ErrMLDisabled: signals trace "off", no ml-degraded noise, routing falls to +// heuristics/default), while a PRESENT-but-broken sidecar (timeout, 5xx, +// malformed) keeps surfacing as a real error. The distinction keeps the +// zero-config default honest: absence is expected, breakage is loud. The check +// is per-request and costs ~nothing (localhost refusal is immediate), so the +// moment `whittle setup` brings the sidecar up, signals activate with no restart. +type quietClassifier struct{ c *ml.Client } + +func quiet(err error) error { + if err != nil && errors.Is(err, syscall.ECONNREFUSED) { + return ErrMLDisabled + } + return err +} + +func (q quietClassifier) Domain(text string) (string, float64, map[string]float64, error) { + l, c, p, err := q.c.Domain(text) + return l, c, p, quiet(err) +} +func (q quietClassifier) EmbeddingScore(text string, cands []string) (float64, error) { + s, err := q.c.EmbeddingScore(text, cands) + return s, quiet(err) +} +func (q quietClassifier) ComplexityMargin(text string, hard, easy []string) (float64, error) { + m, err := q.c.ComplexityMargin(text, hard, easy) + return m, quiet(err) +} + +// sidecarUp is a one-shot startup probe purely for an honest log line. +func sidecarUp(base string) bool { + c := http.Client{Timeout: 800 * time.Millisecond} + r, err := c.Get(base + "/health") + if err != nil { + return false + } + r.Body.Close() + return r.StatusCode == 200 +} + // ml.Client must satisfy Classifier — asserted here (at the import site) rather // than in package ml, which would import router back and form a cycle. var _ Classifier = (*ml.Client)(nil) +// DefaultModelURL is the classifier sidecar `whittle setup` installs — smart +// mode probes it automatically; no configuration required. +const DefaultModelURL = "http://127.0.0.1:45872" + // DefaultAddr is the router daemon's listen address. It is distinct from the // compress service (:45871) and the prose model sidecar (:45872): the router is a // separate front door that Claude Code points ANTHROPIC_BASE_URL at, while the @@ -41,18 +87,29 @@ func ListenAndServe(addr, policyPath string, lg Logger) error { lg.Printf("router: policy warning: %s", w) } - // Smart mode is opt-in: with a sidecar URL, ML intent/classify leaves resolve - // against the model; without it, the noop classifier makes them evaluate to - // heuristics-only / static default (Decide handles nil as noop). + // Smart mode is AUTOMATIC: the router defaults to the standard sidecar + // address (the one `whittle setup` installs and supervises) and degrades + // gracefully when it isn't there — a refused connection reads as "smart mode + // off" (quiet), not as a per-request error. WHITTLE_ROUTER_MODEL_URL overrides + // the address; "off" disables ML entirely. var cl Classifier - if u := os.Getenv("WHITTLE_ROUTER_MODEL_URL"); u != "" { - cl = ml.New(u) - lg.Printf("router: smart mode ON (classifier sidecar = %s)", u) - } else { - lg.Printf("router: smart mode OFF — ML signals (domain/embedding/complexity) are inert; set WHITTLE_ROUTER_MODEL_URL=http://127.0.0.1:45872 to enable") + modelURL := os.Getenv("WHITTLE_ROUTER_MODEL_URL") + if modelURL == "" { + modelURL = DefaultModelURL + } + switch modelURL { + case "off", "0", "none": + lg.Printf("router: smart mode disabled by WHITTLE_ROUTER_MODEL_URL=%s — heuristic signals only", modelURL) if pol != nil && policyUsesML(pol) { lg.Printf("router: WARNING: the policy references ML signals, which will never fire in this mode — requests they guard fall to the default") } + default: + cl = quietClassifier{ml.New(modelURL)} + if sidecarUp(modelURL) { + lg.Printf("router: smart mode ON (classifier sidecar = %s)", modelURL) + } else { + lg.Printf("router: smart mode AUTO — sidecar not responding at %s yet; routing on heuristics until it appears (run `whittle setup` if it was never installed)", modelURL) + } } px := NewProxy(pol, cl, NewMemSessionStore(), lg) From 55a15611cfab25b51b154cd2f5817c2a5e59aef9 Mon Sep 17 00:00:00 2001 From: anshal21 Date: Fri, 10 Jul 2026 01:46:47 +0530 Subject: [PATCH 4/5] readme: sharper hero line; precise vSR attribution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 'Cut your token bill twice' read awkwardly — replaced with the carving identity covering both surfaces: 'Carve your AI agent's context down to what matters — and route every request to the cheapest model that can handle it.' Credits made specific so nobody reads the router as derived work: the two pretrained models (the 14-subject domain classifier and the text embedder) come from vLLM Semantic Router; the engine, policy design, and signal composition are whittle's own — stated in both the router section and Acknowledgments. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5e46b56..08a2f2c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # whittle -**Cut your AI agent's token bill twice: compress every tool output the moment it's created, and route each request to the cheapest model that can handle it. Local, fail-open, and every claim in this README is verifiable from a clone.** +**Carve your AI agent's context down to what matters — and route every request to the cheapest model that can handle it. Local, fail-open, and every claim in this README is verifiable from a clone.** [![CI](https://github.com/firstops-dev/whittle/actions/workflows/ci.yml/badge.svg)](https://github.com/firstops-dev/whittle/actions/workflows/ci.yml) [![Release](https://img.shields.io/github/v/release/firstops-dev/whittle)](https://github.com/firstops-dev/whittle/releases) @@ -70,7 +70,7 @@ Whittle's second surface: a local proxy on `ANTHROPIC_BASE_URL` that sends each - **Fail-open by construction** — bad policy, dead classifier, or a rejected rewrite all fall back to your original request. Unset the env var and you're direct again. - **Savings you can measure** — every request logs requested model, served model, and real token usage. -Architecture, signal math, and precise credits (the classifier models come from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router)): [docs/ROUTER.md](docs/ROUTER.md). +The router — engine, policy design, signal composition — is whittle's own; two pretrained models power its ML signals (the 14-subject `domain` classifier and the text embedder, both from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router)). Architecture, signal math, and precise credits: [docs/ROUTER.md](docs/ROUTER.md). ## Why write-time? @@ -106,7 +106,7 @@ The bar: guarantees are executable — see [CONTRIBUTING.md](CONTRIBUTING.md). F ## Acknowledgments -Whittle's log-selection strategy, several detection heuristics, and the tabular parser were adapted from [Headroom](https://github.com/headroomlabs-ai/headroom) (Apache-2.0) — their compaction work is excellent; we wanted the write-time position and the stricter fidelity contract it demands. The router's classifier and embedding models come from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router) ([whitepaper](https://vllm-semantic-router.com/white-paper)). See [NOTICE](NOTICE). +Whittle's log-selection strategy, several detection heuristics, and the tabular parser were adapted from [Headroom](https://github.com/headroomlabs-ai/headroom) (Apache-2.0) — their compaction work is excellent; we wanted the write-time position and the stricter fidelity contract it demands. The router's two pretrained models — the `domain` classifier and the text embedder behind the similarity signals — come from [vLLM Semantic Router](https://github.com/vllm-project/semantic-router) ([whitepaper](https://vllm-semantic-router.com/white-paper)); the routing engine and policy design are whittle's own. See [NOTICE](NOTICE). ## License From 08755a881bbd1a43f47dd52a72e050ac952d6c82 Mon Sep 17 00:00:00 2001 From: anshal21 Date: Fri, 10 Jul 2026 02:11:16 +0530 Subject: [PATCH 5/5] =?UTF-8?q?demo:=20live-watch=20hero=20GIF=20=E2=80=94?= =?UTF-8?q?=20routing=20+=20carving=20in=20one=20stream?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the README hero with a pre-sized, append-only ANSI stream that replays a real captured session: four agent turns routed to the right model (opus held on hard reasoning, haiku/sonnet on trivia and drafting) while tool outputs are carved losslessly, closing on a `whittle stats` session summary. All color comes from demo/hero-feed.sh's stdout (a plain sh script using printf + sleep, reproducible from a clone); demo/hero.tape drives VHS, typing `whittle watch` (a hidden session alias for the replay) so the frame reads as whittle's own live output. One clear, no scrolling, CursorBlink off — 168KB, 24s, 1000x600. Numbers are measured, not guessed: 21,980 tokens carved is (1,904−47)+(20,595−472); ~$0.05 saved is the real billed-token delta of the two down-routed turns at current per-family list prices. stats.gif is unreferenced but left in place; compress.gif still backs "See it". Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 2 +- demo/hero-feed.sh | 90 ++++++++++++++++++++++++++++++++++++++++++++++ demo/hero.gif | Bin 0 -> 167826 bytes demo/hero.tape | 20 +++++++++++ 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100755 demo/hero-feed.sh create mode 100644 demo/hero.gif create mode 100644 demo/hero.tape diff --git a/README.md b/README.md index 08a2f2c..63cb8f0 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Go Reference](https://pkg.go.dev/badge/github.com/firstops-dev/whittle.svg)](https://pkg.go.dev/github.com/firstops-dev/whittle) [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE) -![whittle stats: tokens carved across real agent sessions](demo/stats.gif) +![whittle live: routing each request to the right model while carving tool outputs](demo/hero.gif) Long agent sessions drown in tokens — and most compressors buy their ratio by silently destroying what agents need: array rows vanish, file reads get gutted, identifiers come back mangled. Whittle holds one hard line: **lossless or clearly marked, code never touched, every anomaly fails open to the original bytes.** diff --git a/demo/hero-feed.sh b/demo/hero-feed.sh new file mode 100755 index 0000000..96f09e9 --- /dev/null +++ b/demo/hero-feed.sh @@ -0,0 +1,90 @@ +#!/bin/sh +# hero-feed.sh — whittle live-watch choreography for the README hero GIF. +# +# Emits a pre-sized, append-only ANSI stream (no scrolling, one clear) that +# replays a real captured session: four agent turns routed to the right model, +# tool outputs carved losslessly, then a `whittle stats`-style session summary. +# +# All color comes from this script's stdout (VHS `Type` can't emit ANSI). +# Reproducible from a clone: `sh demo/hero-feed.sh`. +# +# Palette (flat 16-color): reset \033[0m · bold \033[1m · dim \033[2m · +# dim-italic \033[2;3m · green \033[32m · cyan \033[36m · blue \033[34m · +# red \033[31m. Percent signs are doubled (%%) for printf. + +# ── stream ────────────────────────────────────────────────────────────────── +sleep 0.6 +printf '\033[2m🪓 whittle · live — carving outputs, routing requests · local · fail-open\033[0m\n' + +sleep 0.8 +printf '\n' + +# turn 1 — trivia drops to the cheapest model +sleep 0.3 +printf '\033[2m»\033[0m "bigest country in europe?"\n' +sleep 0.5 +printf ' \033[32m▸\033[0m casual-easy \033[2mopus\033[0m\033[1;32m→haiku\033[0m\033[2m cplx −0.27 · 52,848-tok ctx\033[0m\n' + +sleep 1.7 +printf '\n' + +# turn 2 — hard reasoning stays on the strongest model; its outputs get carved +sleep 0.3 +printf '\033[2m»\033[0m "What is in embed.go file?"\n' +sleep 0.6 +printf ' \033[34m▸\033[0m requested \033[1;34mopus→opus\033[0m \033[1;34mkept\033[0m\033[2m dom computer-science 0.98\033[0m\n' + +sleep 1.8 +printf '\033[2m 🪓 \033[0m\033[1membed.go\033[0m\033[2m source · \033[0m\033[32muntouched\033[0m\033[2m — code is never cut\033[0m\n' +sleep 0.5 +printf '\033[2m 🪓 \033[0m\033[1mbuild.log\033[0m\033[2m 144 lines, 2 errors buried\033[0m\n' +sleep 0.4 +printf '\033[31m ERROR migrate failed: relation "users" does not exist\033[0m\n' +sleep 0.4 +printf '\033[2;3m … [118 lines omitted]\033[0m\n' +sleep 0.4 +printf '\033[31m ERROR shutdown: connection reset by peer\033[0m\n' +sleep 0.4 +printf ' \033[2m1,904\033[0m \033[1;32m→ 47\033[0m\033[2m tok · \033[0m\033[1;32m−97%%\033[0m\n' +sleep 0.8 +printf '\033[2m 🪓 \033[0m\033[1mtest-run.log\033[0m\033[2m 670 lines · 20,595\033[0m \033[1;32m→ 472\033[0m\033[2m tok · \033[0m\033[1;32m−98%%\033[0m\n' + +sleep 1.8 +printf '\n' + +# turn 3 — another trivial ask drops to haiku +sleep 0.2 +printf '\033[2m»\033[0m "share command to rename a file"\n' +sleep 0.5 +printf ' \033[32m▸\033[0m casual-easy \033[2mopus\033[0m\033[1;32m→haiku\033[0m\033[2m cplx −0.45\033[0m\n' + +sleep 1.2 +printf '\n' + +# turn 4 — mid-complexity drafting lands on sonnet +sleep 0.2 +printf '\033[2m»\033[0m "draft a slack message for this content"\n' +sleep 0.5 +printf ' \033[36m▸\033[0m casual-medium \033[2mopus\033[0m\033[1;36m→sonnet\033[0m\033[2m dom other 1.00\033[0m\n' + +# hold the full stream, then one clear into the session summary +sleep 1.6 +sleep 1.2 +clear + +# ── closer (session summary; `whittle stats` house style) ──────────────────── +sleep 0.3 +printf '\033[1m🪓 whittle\033[0m \033[2m· session summary\033[0m\n' +sleep 0.6 +printf '\n' +printf ' \033[2mcontext\033[0m \033[1;32m21,980\033[0m tokens carved \033[2mlossless or marked · code untouched\033[0m\n' +sleep 0.6 +printf ' \033[2mrouting\033[0m 4 requests \033[32m●\033[0m haiku 2 \033[36m●\033[0m sonnet 1 \033[34m●\033[0m opus 1 held\n' +sleep 0.6 +printf ' \033[2msavings\033[0m ~$0.05 measured \033[2mon billed tokens · this session\033[0m\n' +sleep 0.6 +printf '\n' +printf ' \033[2mnever cuts what doesn'\''t come back · github.com/firstops-dev/whittle\033[0m\n' + +# loop-pause hold, then the GIF loops +sleep 4.0 diff --git a/demo/hero.gif b/demo/hero.gif new file mode 100644 index 0000000000000000000000000000000000000000..241a95bf7d11b762e742706522f4a81b26a92363 GIT binary patch literal 167826 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

1YNPRrQ_~YA?L@! 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 CD|52| literal 0 HcmV?d00001 diff --git a/demo/hero.tape b/demo/hero.tape new file mode 100644 index 0000000..cdb4321 --- /dev/null +++ b/demo/hero.tape @@ -0,0 +1,20 @@ +Output demo/hero.gif +Set Theme "Catppuccin Mocha" +Set FontSize 18 +Set Width 1000 +Set Height 600 +Set Padding 24 +Set TypingSpeed 45ms +Set CursorBlink false + +# Define whittle as this session's replay, hidden, so the visible command reads +# as the real subcommand (`whittle watch`) driving whittle's own captured output. +Hide +Type "whittle() { sh demo/hero-feed.sh; }; clear" +Enter +Show + +Sleep 500ms +Type "whittle watch" +Enter +Sleep 24s