Does Anthropic's (and others) input_tokens field include cached tokens?
This is one of those small accounting details that can make an LLM cost ledger very wrong. If you use Anthropic prompt caching, input_tokens is not exactly the total amount of prompt context Claude processed.
Anthropic reports uncached input, cache creation and cache reads separately. That means looking at input_tokens alone can dramatically understate the amount of input involved in a request. Take a simple example:
Hey Product Hunt,
👋 I’m Zolani, founder of Culpa. Thanks to @istiakahmad for hunting us today. Culpa started while I was building another AI product and kept running into a question I couldn’t answer cleanly: why did the bill increase, and what exactly moved it?
💭 Provider dashboards could show me models, tokens, calls, and total spend. Other telemetry products could show me aggerate spend. And sure, that was useful but when you’re responsible for unit economics, you need to know which customer, feature, conversation, workflow, or agent step caused the increase. I kept ending up in spreadsheets, logs, and guesswork.
💡 Eventually I realised we didn’t have a cost-data problem. We had an ownership problem. Every dollar needed an owner, and I wanted to be able to follow that dollar backwards until I could see exactly what created it.
🚀 So I built Culpa, a local-first LLM cost, margin, and forecast ledger. It follows spend from the bill down to the customer, feature, conversation, workflow, agent step, and individual call, then helps you connect those costs to revenue and forecast what a feature, cohort, workflow, or launch could cost before you run it.
🔎 The launch trace shows what that means in practice. In this example, our trace recorded 6,621 model calls, and one conversation alone generated 2,438 calls and $946.43 in model cost. Culpa didn’t just tell us that the conversation was expensive, it showed us where the behaviour changed.
Turn 1 carried 30,157 tokens and Turn 2 carried 62,411. By turn 18, context had reached 164,926 tokens, and by the final turn it had reached 867,161. The model hadn’t changed and no new feature had shipped. It was just that the conversation kept carrying more of its own history into later calls, and the first major change was visible at Turn 2.
⚙️ That level of attribution matters because context creep is only one culprit. Retry loops, failed calls, agent fan-out, fallbacks, model drift, and background work can all move the bill without an obvious increase in customer activity. I wanted Culpa to show where the extra work started instead of giving you another chart that says spend went up.
🔐 Culpa runs on your infrastructure, and your prompts and responses never leave it. It works by counting calls to run your plan. That makes setup slightly more involved than sending everything to a fully hosted service, but I’m ok with that trade because I don’t think your conversation content should need to come to us for you to understand what it cost.
🛡️ It also fails open. If Culpa can’t record a call, your call still runs. A cost tool has no business becoming the reason your production application goes down.
🎯 Culpa is for technical founders and small AI teams who pay the model bill themselves and need to understand the economics underneath it. It becomes particularly useful once a single customer action can hide planning, retrieval, tools, reviewers, retries, and dozens of separate model calls.
It isn’t for everyone; If every customer brings their own provider key and you never see or pay the model bill, Culpa probably won’t add much value.
❤️ The principle behind Culpa is simple: your AI bill should be explainable. You should be able to start with a dollar and follow it back to the action that created it, then look forward and understand what the next feature or launch could do to the bill before you ship. Show the number. Show the working.
🎁 For Product Hunt, we’re opening the first 100 Culpa workspaces at $199 for the founding year. Builder normally works out to $480 over 12 months, so that’s effectively seven months free. Find your first culprit and activate within seven days to keep the founding price.
Get it here:
If you want to claim a seat straight away
https://getculpa.com/?offer=founding100
Or run it free for 14 days and decide after.
npm i -g getculpa
One thing to know before you click. Culpa asks for a card at signup, trial included. Nothing charges for 14 days. You get two reminder emails before it does, and cancelling takes one click.
🙏 One question for the thread: can you name the single most expensive conversation your product had last month, and explain why it was the most expensive?
I’ll be here all of today. Tell me what breaks, what’s unclear, or what Culpa still can’t answer.
Zolani
@istThe part I’ve found most useful while working on Culpa is that the expensive customer isn't always the problem customer.
Sometimes one customer just happens to hit the workflow that exposes an expensive bug, retry loop or agent cascade. If you stop at “customer X costs the most”, you can easily make the wrong pricing decision when the real fix is in the product.
That's the part I’d love feedback on from other founders. When your AI spend moves, how far can you currently trace it before you end up in logs and spreadsheets?
iakahmad @zolani_matebese
@ist @nicole_das_neves_matebese Exactly. That was one of the bigger shifts for me too. A high-cost customer could be a pricing problem, but they could just as easily be the person who happened to trigger an inefficient workflow first.
That’s why I keep coming back to the same sequence: customer → feature → conversation → workflow → call. Stopping at the customer is still stopping too early.
@istiakahmad @zolani_matebese what stood out to me is how hard AI costs are to explain in normal business language. “Token usage increased” isn’t very useful when you’re deciding what to charge, which customers are profitable, or whether a new feature can wash its own face. Culpa gets you closer to the questions the rest of the business actually asks: which customer spent it, doing what, and why?
That bridge between the technical bill and the commercial decision is the part I think is most useful.
Curious how other teams handle this today. Does the rest of the business ever see AI cost by feature or customer, or does it mostly stay with engineering
@istiakahmad @nicole_hynek Completely agree: “Token usage increased” is an engineering observation. It still leaves the commercial people thinking "huh"?
The useful point is when you can say: this feature cost us X, this customer drove Y of it, and at their current plan we’re making or losing Z.
That is when AI cost stops being a technical metric and starts becoming something product, finance and marketing can actually make decisions with.
This is a good category to be early in. Most teams are still at the stage of treating the model bill as a fixed cost of doing business, and that stops working the moment one customer action can trigger thirty calls.
The framing of giving every dollar an owner is the part that stuck with me. Cost you can't attribute is cost you can't fix.
Good luck with it!
@artiomleo1 Thank you Artiom. How are you handling LLM costs right now?
Nodey
I love this idea if I'm being honest. This coming from the guy with 3x Claude Max 20 subscriptions and a ChatGPT Pro 20 subscription... and a Kimi Allegro subscription.
Lancepilot
👋 Hey Product Hunt!
Really excited to be hunting Culpa today. 🥳
What caught my attention about Culpa is how specific the problem is.
AI costs are becoming a real part of building products, but when that bill suddenly jumps, knowing how much you spent isn't always enough. The harder question is: what actually caused it?
That’s where Culpa gets interesting.
Instead of stopping at a cost dashboard, Culpa helps you trace AI spend back to the actual call, user, feature, and even retry loop behind it. You can go from “Why did our AI bill spike?” to finding the actual culprit and fixing it.
I also really like the local-first approach, your prompts stay within your infrastructure, which matters when you're dealing with real product and customer data. 🔒
As more products become AI-native, I think understanding AI spend at this level is going to become increasingly important.
Congrats to the team on the launch! 🎉
Give Culpa a try, find your first culprit, and let the makers know what you think below. 👇
@istiakahmad Thanks Istiak, and thanks again for hunting us. The “what actually caused it?” question is really the whole reason Culpa exists. Once AI products become agentic, the distance between one customer action and the eventual provider bill gets surprisingly large.
I’m particularly interested to see what people find when they trace their first expensive conversation. I suspect retries, context growth and tool/agent cascades are hiding in a lot more bills than teams realise.