LLM FinOps fixed token spend. Retrieval is the blind spot — and the next control plane.
We ran a controlled benchmark on live Tavily — not a hypothetical bill.
125 agent-style queries. Naive always-fanout (5 searches each) burned 625 Tavily calls ($5.00). Adaptive probe-first governance cut that to 173 searches ($1.38) — 72.3% savings.
Agent loops compound three things:
Do the math: 12 agent steps × 5 fanout queries × $0.008 = $0.48 per run in search alone. Run that a thousand times a month and you’re at nearly $500 — for retrieval, not reasoning.
Teams fixed the token side first. Helicone, LangSmith, Portkey — good tools, real category. Retrieval FinOps doesn’t exist yet. It’s still if uncertain: search() copy-pasted into agent code.
Retrieval FinOps is the policy and infrastructure layer that governs:
…all under a budget. This is not a search API. It’s a control plane between your agents and whatever search providers you already use.
| PRIMITIVE | WHAT IT DOES |
|---|---|
| Probe | One cheap search before committing to fanout |
| Expand | Generate sub-queries only when probe confidence is low |
| Budget | Hard cap per run, per agent, per day |
| Audit | Log what was searched, what it cost, what evidence was used |
You’re not buying a better index. You’re buying governed retrieval.
125 production-style queries across factual, procedural, comparative, news, and multi-hop categories. Naive baseline: always fan out to 5 sub-queries. Governed: adaptive probe-first with research policy.
Tasks: 125 Naive searches (5× fanout): 625 Governed searches (adaptive): 173 Naive cost @ $0.008/search: $5.00 Governed cost: $1.38 Savings: $3.62 (72.3%) Blocked under research policy: 29/125 Blocked under legal policy: 75/125
Not every query fans out less — multi-hop and thin-evidence queries still expand. Factual queries drove the largest absolute savings (270 → 64 searches in the factual bucket). That’s the point: govern spend without banning search when you need it.
| CATEGORY | TASKS | NAIVE | GOVERNED | SAVED |
|---|---|---|---|---|
| comparative | 21 | 105 | 37 | 68 |
| factual | 54 | 270 | 64 | 206 |
| multi_hop | 13 | 65 | 17 | 48 |
| news | 14 | 70 | 16 | 54 |
| procedural | 23 | 115 | 39 | 76 |
Under a legal policy on the same corpus, 75/125 answers would return allow_answer: false (authority and source-count gates) — even when search spend is low. Cost routing and risk gating are separate decisions.
Reproduce locally: scripts/run-tavily-study.sh · full write-up in docs/tavily-study-2026.md
We re-ran the identical 125 tasks on live Exa and Brave with the same naive vs governed setup.
| BACKEND | COST / SEARCH | NAIVE | GOVERNED | SAVINGS | LEGAL BLOCKS |
|---|---|---|---|---|---|
| Tavily | $0.008 | 625 | 173 | 72.3% | 75/125 |
| Exa | $0.007 | 625 | 375 | 40.0% | 48/125 |
| Brave | $0.005 | 625 | 375 | 40.0% | 76/125 |
Takeaway: you cannot quote Tavily’s 72.3% for every stack. On Tavily, many factual queries stopped after 1 probe — different snippet/confidence signals, same control plane.
Exa: adaptive fanout still saves (40.0%), but governed runs mostly settled at 3 searches/task (probe + partial expand). Under legal, Exa blocked 48/125 vs Tavily’s 75/125 — authority scores clustered lower on Exa URLs in this run.
Brave: same 40.0% savings pattern as Exa (625→375, $0.005/search). Governed runs also settled at 3 searches/task — Brave probe confidence rarely stops after 1 call. Under legal, Brave blocked 76/125 (nearly Tavily’s rate, but with 2× the searches).
Tune presets per workload; don’t assume lab numbers transfer to prod.
Reproduce: EXA_API_KEY=... bash scripts/run-exa-study.sh · docs/exa-study-2026.md · 1375 Exa API calls · BRAVE_SEARCH_API_KEY=... bash scripts/run-brave-study.sh · docs/brave-study-2026.md · 1375 Brave API calls
Smaller bundled log slice for the free design-partner autopsy workflow:
See sample autopsy report → (40 → 30 searches, 25% modeled savings on example logs)
┌─────────┐ ┌──────────────────────────┐ ┌─────────────────┐ │ Agent │────▶│ Retrieval Control Plane │────▶│ Tavily / Exa / Brave / … │ │ │◀────│ policy · cache · audit │◀────│ Wikipedia / … │ └─────────┘ └──────────────────────────┘ └─────────────────┘
The agent doesn’t call Tavily directly. It asks the control plane for evidence — cited, scored, budgeted.
If you need a Perplexity clone, build one. If you need predictable retrieval spend with an audit trail, that’s Retrieval FinOps.
pip install query-fanout query-fanout-autopsy examples/sample_agent_logs.jsonl
query-fanout "how does photosynthesis work" --preset wikipedia
Export format for your own logs — one JSON object per retrieval event:
{"agent_id": "research-bot", "run_id": "run-001", "query": "what is photosynthesis", "searches_run": 5, "backend": "tavily"}
Free retrieval bill autopsy on your logs — before/after search spend + allow_answer governance report in 48 hours.
Retrieval FinOps is the layer Helicone didn’t build — because tokens were the first fire. Retrieval is the next one.