Limitations (honest)¶
We keep this page blunt; reviewers in this area know the near-neighbours.
The headline can tie the baseline — by design¶
On low-drift trajectories, or when re-inflation is free and the reactive policy recomputes each
turn, foveance ≈ reactive_afm. This is not a bug: Thm. "locality gap" predicts it
(Regret(myopic) ≤ c₁(1−φ)). The deliverable is the decision rule for when the cheap heuristic
suffices, not a universal win. We report the ties (Δacc with CI and Wilcoxon p-value) instead of
hiding them.
The offline suite is synthetic¶
The needle-reuse-with-drift suite is engineered to isolate anticipation, not to stand in for
real agents. Real-model Pareto frontiers (Gemma/Qwen/Llama) and agentic suites
(AppWorld/OfficeBench, LongBench/RULER) are run by scripts/run_everything.sh; their adapters
skip cleanly when the datasets are absent and never fabricate rows.
Task-success distortion assumes a gradable answer¶
The theory uses 1 − success distortion. Open-ended generation needs a surrogate metric (e.g. an
LLM judge), which loosens the tightness of the bound, though not its direction.
Successive refinability assumes nesting¶
Reversible re-inflation is rate-free only when renders are nested (POINTER ⊂ GIST ⊂ DIGEST ⊂
FULL as a Markov chain). Non-nested LLM digests incur a real penalty Δ(f,f'); we model and price
it but do not claim to estimate it perfectly.
Predictor overhead and estimation error¶
The anticipatory posterior adds an embedding and an O(n log n) allocation per turn — negligible
vs a model call — but a miscalibrated relevance estimator erodes the gain (Lemma: realized value
within O(ε·n) of the oracle). A badly wrong predictor degrades toward the reactive baseline
rather than below it.
Agentic (tool-using) requests are compressed structurally, not by collapsing¶
A live test routing Claude Code through the proxy first showed that collapsing an agentic
request (it declares a tools array and relies on strict tool_use/tool_result pairing and
cache_control) makes the provider reject it (HTTP 400). The proxy therefore compresses such
requests structure-preservingly instead: it detects any request carrying tools/tool_choice
(or tool blocks), keeps every message, role, and tool_use/tool_result pair intact, protects the most
recent turns (agentic_protect_last), and digests only large stale content blocks (big tool
outputs) in older turns (reason: "agentic-inplace"). The result is always a valid request, so
agents like Claude Code keep working (verified live), and large old tool output is trimmed (~71%
fewer input tokens on an 8-tool-call transcript in our offline measurement). Two honest caveats:
(1) digesting is lossy — an elided marker tells the model context was trimmed, so set
agentic_protect_last high enough that the turns the next step needs are kept full; (2) modifying
old blocks busts the provider's prompt cache for those blocks, so on cache-heavy workloads measure
net cost. The proxy also surfaces the upstream's real status/error body rather than failing
internally. Anticipatory, relevance-ranked selection of which old blocks to keep full is the next
refinement.
Cache-aware mode (--cache-aware) turns caveat (2) into a switch¶
With --cache-aware, the proxy never modifies content at or before the last explicit Anthropic
cache_control breakpoint (and a block carrying cache_control is never modified in any mode),
so the provider's prompt-cache prefix is never invalidated by the proxy. The arithmetic for when
to flip it: with Anthropic pricing, cached input reads cost 0.1× fresh input, so re-reading a
cached prefix of P tokens costs like 0.1·P fresh tokens — busting it to digest away S
tokens pays only when S > 0.9·P over the remaining turns that would have hit the cache.
Rule of thumb: cache-aware on for long-lived API-billed agent sessions with stable prefixes;
off (default) for local models, short sessions, or when the raw context length itself is the
constraint (small context windows, latency).
Not claimed as novel¶
The multi-fidelity-store-under-a-budget mechanism (AFM, ContextBudget, ACON, MemAct). We use it as substrate and say so everywhere.