mirror of
https://github.com/teamchong/pxpipe.git
synced 2026-07-22 02:02:51 +02:00
1a83d56379
Production data (ocproxy 7d, Opus 4.7) shows pixelpipe HURTS short conversations and helps long ones: input.count <10 : +$0.17 (HURTS) over 14 rows input.count 10-19: +$0.04 (HURTS) over 22 rows input.count 20-39: -$0.56 (helps) over 29 rows input.count 40+ : -$3.21 (helps) over 237 rows Diagnosis: warm-cache share split. bucket actual_warm_share baseline_warm_share <10 60% 100% 10-19 84% 97% 20-39 88% 96% 40+ 92% 58% For short conversations the un-rewritten path is already nearly fully warm-cached. Rewriting the prefix bytes (slab compression / image substitution / history collapse) gives the new prefix a different cache key, so Anthropic charges cache_create (1.25×) on the new prefix's first turn — destroying the prior warm cache. The conversation often ends before the new cache amortizes. Fix: add a 'priorWarmTokens' option to TransformOptions. When >0, the break-even gate penalises the image side by burn = priorWarmTokens × (CACHE_CREATE_RATE − CACHE_READ_RATE) Per-turn gate eats the full burn; amortized gate spreads textLifetime across N turns so longer horizons re-accept once savings outweigh burn. Default 0 preserves byte-identical behavior for callers that don't plumb it through (cold-start safe). Tests: 3 new (NaN clamp, per-turn flip, horizon flip). 302 total pass.