Jev returns a typed decision in milliseconds for a fraction of a cent. Ask it the same thing a million times and you pay every time — and you can't replay it offline. jevcache memoizes by (model, schema, state), so the same decision never runs — or bills — twice.
Fast and cheap per call isn't free at volume — or reproducible. Three things a faster model can't give you:
60–80% of an agent's decisions repeat — loops, retries, idempotent tools, heavy-tailed inputs. Every repeat is another bill. A cache hit costs $0.
Pin the exact decision — replay it in CI, offline, with no network and no model-version drift. The reproducibility real systems demand.
A cache can. Publish one and anyone recalls against it — one team's decisions become everyone's, over a file or the hosted index.
Latency? A local hit returns in ~0ms, in-process, no round-trip at all. That's the bonus. The point is you stop re-deciding what you've already decided.
Pick your volume. This is what memoization keeps off the bill.
The same binary runs as a local cache your app talks to over HTTP. No library to install, no per-call process to spawn, and it works from any language — you just POST a schema and some state.
# start the cache (points at your model via JEVCACHE_BACKEND) $ jevcache serve jevcache serving on http://127.0.0.1:9000
// then, from your app — schema is inline, nothing to pre-register const res = await fetch("http://localhost:9000/decide", { method: "POST", body: JSON.stringify({ schema, state: ticket }), }) const { answers, cached } = await res.json() // first call routes to your model and caches it; every repeat comes back cached.
Prefer the command line? jevcache decide --schema … --state ticket.json --json does the same thing, and recall exits 3 on a miss for CI.
jevcache is one binary. Where you point your app at it depends on how your app is deployed.
Your own server, a container, a worker? Run jevcache serve next to it and call http://localhost:9000. Nothing leaves the box.
Vercel functions, Cloudflare, Lambda — there's no daemon to run in an ephemeral function. Host jevcache once (docker run, Fly, Railway) with a token, and your functions call it over HTTPS. Your state and model key stay on your instance.
No server at all — jevcache decide / recall read and write the local ledger. recall exits 3 on a miss, so CI can branch on it.
# host it as a shared cache for your serverless functions $ docker run -p 9000:9000 -e JEVCACHE_BACKEND=jev -e JEV_API_KEY=… \ -e JEVCACHE_SERVE_TOKEN=secret jevcache # then from a Vercel function — same call, remote host await fetch("https://cache.yourapp.com/decide", { method:"POST", headers:{ authorization:"Bearer secret" }, body: JSON.stringify({ schema, state }) })
# then see it work in one command — no schema, no key, no setup $ jevcache demo ticket T-1001 decide() → "billing" routed to the model · $0.000042 ticket T-2087 decide() → "billing" cache HIT · 0ms · $0
One static binary on your PATH — no Node, no Python, nothing to keep updated. macOS & Linux (arm64/x64); on Windows, grab jevcache-windows-x64.exe.