Show HN: Frugon – Find which LLM calls a cheaper model could handle (local, MIT)
Summary
Frugon is a free, local, open-source LLM cost analyzer that helps developers find which LLM calls could be handled by cheaper models, reducing costs by analyzing logs and providing routing recommendations.
View Cached Full Text
Cached at: 07/11/26, 12:14 AM
Rodiun/frugon
Source: https://github.com/Rodiun/frugon
Frugon
Your LLM bill is leaking — see exactly where, on your machine.
Free, local, open-source LLM cost analyzer. Point Frugon at your LLM call logs and see — on your machine — how much you’d save by switching or routing models.
Your data never leaves your machine. Your keys go straight to your own providers. Nothing reaches us.

Install & run
# one-shot (no install)
uvx frugon analyze ./logs.jsonl
# permanent install
pipx install frugon
frugon analyze ./logs.jsonl
# for --measure (optional): samples real prompts through your own provider keys
pip install 'frugon[measure]'
frugon analyze ./logs.jsonl --measure
No logs yet? See Getting your logs below, or run frugon analyze --demo to see it work on a bundled sample.
Getting your logs
frugon reads JSONL files in the OpenAI request/response format. There are two ways to produce them.
Option A — frugon capture (proxy shim)
frugon capture is a local HTTP proxy that sits between your app and your provider.
Every call is forwarded unchanged to your real provider and saved as one JSONL line.
# Start the shim (default port 8787, output file capture.jsonl)
frugon capture --out ./logs.jsonl
# Then point your app's base URL at the shim instead of api.openai.com:
OPENAI_BASE_URL=http://127.0.0.1:8787 your-app # bash / zsh
$env:OPENAI_BASE_URL="http://127.0.0.1:8787"; your-app # PowerShell (Windows)
# or in code: client = OpenAI(base_url="http://127.0.0.1:8787/v1")
Options: --port, --out, --upstream (override the forwarding target), --verbose
(print one line per captured call to verify it’s recording), --proxy (opt in to route
upstream calls through a proxy — by default frugon ignores any ambient HTTP_PROXY /
HTTPS_PROXY, so your API key never passes through a third-party proxy). The shim adds no
latency overhead on localhost and makes no calls to any frugon endpoint.
Option B — write JSONL directly
If you already capture logs (e.g. via middleware or a provider SDK callback), write one JSON object per line with this shape:
{
"model": "gpt-4-turbo",
"request": {
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarise this document: ..."}
]
},
"response": {
"choices": [{"message": {"content": "Here is the summary: ..."}}]
},
"usage": {
"prompt_tokens": 312,
"completion_tokens": 84
},
"timestamp": "2024-11-01T14:22:01Z"
}
usage.prompt_tokens / usage.completion_tokens — preferred when present; frugon falls
back to its own tokenizer when absent. timestamp is optional but enables frugon to
project costs over a real observed span. model is required; everything else degrades
gracefully.
5-minute path from install to first analysis
uv tool install frugon # or: pipx install frugon / pip install frugon
frugon capture --out ./logs.jsonl & # start the proxy in the background
# ... run your app, make some LLM calls ...
frugon analyze ./logs.jsonl # see the cost breakdown and routing recommendation
What it does
- Cost analysis — fully local, no LLM calls, no network. Tokenizers + pricing + arithmetic on your machine.
- Quality visibility (
--measure, optional) — samples your traffic through candidate models using your own API keys, sent directly to your own providers. Never to us.--measureneedspip install 'frugon[measure]'and a provider API key (OPENAI_API_KEY, etc.); calls go to your own provider, never to us. On--demo, sampling is pinned to a single OpenAI model so the try-out needs onlyOPENAI_API_KEY; on your own logs,--measuresamples the actual recommendation. - Routing recommendation — “move these X% of calls to a cheaper model and save ~$Y/mo; keep the hard Z% where they are.” Comes with an explicit quality caveat so you know what you’re trading.
Run
frugon modelsto see the model names available for--candidates(optionallyfrugon models gpt-4oto filter by substring). - Share the result — add
--report savings.html(or.md) to write a clean, shareable report you can drop into a PR, a Slack thread, or a budget review. - Fast on real logs — everything runs locally and is comfortable well past 100k records. The bundled ~56,100-call demo (
frugon analyze --demo) prices in a few seconds. Very large logs (>200k records) may take a little longer; Frugon shows a live progress bar and a one-line heads-up so you can see it working. There’s no hard limit.
Example output
$ frugon analyze --demo --candidates claude-sonnet-4-5,gpt-4.1,claude-haiku-4-5,gemini-2.5-flash,deepseek-v4-flash
┌─ frugon · cost analysis ────────────────────────────────────────────────────┐
│ │
│ Analyzed 56,100 calls · baseline gpt-5.5 (your current model) │
│ Current spend $549.46 / mo │
│ │
│ Route 36,100 easy calls (64.4%) → deepseek-v4-flash within │
│ tolerance │
│ Keep 10,000 hard calls (17.8%) → gpt-5.5 │
│ Keep 10,000 already on deepseek-v4-flash (17.8%) already optimal │
│ — no action │
│ │
│ New spend $343.91 / mo │
│ │
│ SAVING $205.55 / mo · 37.4% lower │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Candidates considered
claude-sonnet-4-5 $452.23 / mo 17.7% lower Strong considered
gpt-4.1 $405.89 / mo 26.1% lower Capable considered
claude-haiku-4-5 $377.82 / mo 31.2% lower Capable considered
gemini-2.5-flash $356.35 / mo 35.1% lower Strong considered
deepseek-v4-flash $343.91 / mo 37.4% lower Strong recommended
Each candidate is shown under the same quality-preserving split (easy calls
to the candidate, hard calls kept on baseline); the biggest saving is the
headline recommendation, and when savings tie at the precision shown the
higher quality tier wins. Run --measure --judge to score each candidate's
quality.
Accounting 36,100 routed + 10,000 kept (gpt-5.5) + 10,000 already on
cheaper deepseek-v4-flash = 56,100 analyzed
Upper bound a full swap to deepseek-v4-flash saves ~98.1% — run with
--verbose for detail
Quality tier gpt-5.5: Elite → deepseek-v4-flash: Strong (LMArena)
Prices synced 2026-07-02
Quality synced 2026-07-02
⚠ Quality is not verified — 'within tolerance' is an offline estimate;
run --measure to confirm it on your real outputs before you switch.
Your data never leaves your machine. Your keys go to your own providers.
→ Route every call automatically and hold the savings: https://frugon.rodiun.io
Recommendations use a curated set of current top models across providers, drawn
from OpenRouter usage rankings. Prices synced 2026-07-02 from the LiteLLM
registry. Run `frugon update` for the full live roster.
This is bundled sample data — run `frugon analyze <your-logs>` for a
recommendation on your own logs.
Your numbers depend on your logs and your locally synced pricing/quality data.
Run frugon analyze --demo --candidates claude-sonnet-4-5,gpt-4.1,claude-haiku-4-5,gemini-2.5-flash,deepseek-v4-flash
to see the same output on your machine.
Quality tiers for reasoning models reflect the model at its default/typical reasoning effort — effort changes how many tokens a call spends thinking, not its per-token rate, so it never affects the price shown above.
How it’s different
A provider’s billing dashboard tells you what you already spent, and a raw token counter prices a single call — Frugon prices your real logs against every model, locally, and tells you which calls to move and which to keep.
Realistic savings
Based on RouteLLM’s published research (LMSYS):
| Traffic mix | Typical saving |
|---|---|
| General mixed workload | 30 – 50% |
| Easy / repetitive (high MT-Bench similarity) | up to ~85% |
| Hard reasoning / MMLU-heavy | ~30% |
Your actual number comes from your logs. Frugon never inflates — it shows what the math says for your data.
Is this you?
- Agent builders — your GPT-4o agents are expensive; most easy hops don’t need them.
- AI dev teams — monthly LLM bill is real; routing pays for itself in days.
- RAG & support — retrieval + rerank is cheap; the final answer call doesn’t have to be Opus.
- Data-ETL pipelines — batch extraction is 100% repeatable; mini models handle it fine.
- Indie hackers — every dollar saved is a dollar of runway.
Keep the savings
This is a one-time snapshot. Want it to keep routing automatically and hold the savings? → frugon.rodiun.io
Star the repo if this saved you money.
Contributing
Bug reports and pull requests are welcome — see CONTRIBUTING.md.
Frugon is deliberately small: six commands (analyze, capture, models,
update, pricing, quality), three capabilities (cost analysis, quality visibility,
routing recommendation). Gateways, live routing proxies, web UIs, and
multi-tenant accounts are out of scope by design.
Built by Rodiun. MIT licensed.
Similar Articles
Show HN: Find the best local LLM for your hardware, ranked by benchmarks
whichllm is an open-source Python tool that auto-detects your GPU/CPU/RAM and ranks the best local LLMs from HuggingFace that fit your system, using real benchmarks rather than size heuristics.
We use LLMs to analyze every file in your codebase. Everyone told us this was a stupid idea because of cost but it wasnt.
A benchmark study demonstrates that using LLMs to analyze entire codebases is cost-effective, identifying DeepSeek V4 Flash as the optimal default model due to its low cost and comparable accuracy to premium options like Claude Opus.
Trying to make an uber-cheap local LLM server
An attempt to build a very inexpensive local server for running large language models.
@h100envy: Ex-vLLM core contributor explained how to make LLM inference 10x cheaper in 34 minutes - better than $3000 inference op…
An ex-vLLM core contributor explains how to reduce LLM inference cost by 10x using LMCache with KV cache offloading to CPU/SSD/remote storage, a technique used by production stacks like Bloomberg.
Local LLM Inference Optimization: The Complete Guide
A comprehensive guide to optimizing local LLM inference on consumer hardware, covering tools like llama.cpp, vLLM, and LM Studio, with practical advice on memory hierarchy, layer placement, and common failure modes.