Reduce LLM cost (measure first)
SkillMonitoring & opsUse this to cut the cost of an LLM app using observability data. Trigger on "my OpenAI/Anthropic bill is too high", "reduce token usage", "the app is expensive", "optimize LLM cost", "why am I spending so much on the API". Find the expensive spans first (measure), then apply the cheapest wins. Don't guess - the trace tells you where the money goes.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Reduce LLM cost (measure first) skill
What this skill tells your AI
The instructions your AI receives, as published by contextjet-ai/awesome-llm-observability in skills/reduce-llm-cost/SKILL.md and read by ahel’s review.
Most LLM bills are dominated by a few patterns you can see in traces. Measure before optimizing - the biggest cost is rarely where people assume.
Step 1 - find where the money goes
From your observability tool, sort spans by cost (or input_tokens). You're looking for:
- The highest-token spans - usually bloated context or a whole chat history re-sent every turn.
- Retry storms - the same call repeated N times (rate limits / transient errors) multiplying cost.
- The most-frequent call × its per-call cost - a cheap call made 10,000×/day beats one expensive call.
- Model overkill - using a frontier model for a task a small/cheap model handles fine.
If you have no cost data yet, add tracing first (see instrument-llm-observability) - you can't optimize what you can't see.
Step 2 - apply wins, cheapest-effort first
- Right-size the model. Route easy calls (classification, extraction, routing) to a small/cheap model; reserve the frontier model for hard reasoning. Biggest lever for most apps.
- Trim the context. Stop re-sending the full history/system prompt every turn. Send only what's needed; summarize old turns. For RAG, retrieve fewer/better chunks, not more.
- Cache. Enable prompt caching (Anthropic/OpenAI) for stable prefixes; cache identical requests (a gateway like Helicone/Portkey/LiteLLM does this for free).
- Cap
max_tokens. Unbounded outputs cost unbounded money; set a sane ceiling. - Fix retry storms. Cap retries + honor
Retry-After; a backoff bug can 10× cost silently. - Batch / async where the API supports it (batch endpoints are often ~50% cheaper).
- Shorten prompts. Few-shot examples and verbose instructions are pure input-token cost - trim to what actually changes behavior (measure with an eval so quality holds).
Step 3 - protect quality while cutting
Every cost cut is a potential quality regression. Gate changes with an eval suite (see add-llm-evals): make the cheap change, run evals, keep it only if quality holds. Then watch cost + quality together on a dashboard so a future change doesn't silently trade one for the other.
Quick math to prioritize
monthly_cost_of_a_span = per_call_tokens × price × calls_per_month. Optimize the span with the biggest product, not the one that looks expensive per call.
Anti-patterns
- Optimizing the model choice while ignoring a 20k-token context that's the real cost.
- Cutting cost with no eval → shipping a cheaper, worse app you find out about from users.
- Turning off logging "to save money" (observability cost is tiny vs the model bill it helps you cut).
Signals
- GitHub stars
- 33
- Forks
- 18
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
reduce-llm-cost- Source
- github.com/contextjet-ai/awesome-llm-observability