A $0 Cost Reading Is a Bug
- - A model missing from my price table reported zero cost while real charges accrued.
- - A spending ceiling could not stop a run when its meter stayed at zero.
- - I now check the exact model price before a run and report actual spend afterward.
- - Saved raw results let me re-score research without buying the same data again.
Many client projects run at once, with AI agents handling much of the work under my direction. I built HALO to manage them. While an agent works, HALO sends requests to paid AI services. Each request may add input or output tokens, so missing even one model from a cost reading can make the job total inaccurate.
One model had no row in my system's price table. It reported a cost of zero on every call, even though the provider was billing for real. The price table was the gap between the calls and the meter: without a price for that model, the system had no cost to count.
The takeaway
I check the exact model name and account balance before a run, report actual spend by vendor afterward, and treat a zero-dollar reading as a bug until proven otherwise.
Why did the model report zero cost?
My table lacked the model's price, leaving the system without a rate for its cost calculation. The model charged $3 per million tokens of input and $15 per million tokens of output. A token is a small part of a word. The system could receive calls and track their use, yet still assign them a cost of zero.
A spending ceiling set against that reading held nothing. Since the meter stayed at zero, the run never crossed the limit, even as the provider billed for the calls. The ceiling's decision depended on the same cost figure that the missing price row had broken.
How do I check cost before a run?
Before a run, I check the price row for the exact model name. A similar name is not enough. The system has to find the right row before it sends work to that model, or it may calculate cost from the wrong price.
That check is part of the run setup. It prevents an assumption based on a similar model name from standing in for the rate the system needs to calculate spend.
What changed in my system after the zero reading?
Every run now checks the account balance first and refuses to start if the balance cannot cover it. Afterward, the system reports actual spend by vendor. A cost of zero dollars is treated as a bug until I can prove the reading is correct.
Those checks give the run a decision point before work starts and a vendor-level record after it ends. The balance check can refuse a run the account cannot cover; the later report shows how spend was divided among the services used.
How do I know which vendor cost the most?
On one research run of 90 calls, the recorded spend was OpenAI $2.66, Grok $1.31, Anthropic $1.03, Perplexity $0.50, and Gemini $0.28. The most expensive vendor on that run was not the one I expected. The total alone would not show which service accounted for each amount.
I use the vendor breakdown to check what the run cost by service rather than relying on my prediction. The listed amounts show that the spend was spread across five vendors, with OpenAI highest on this run. That record gives me a basis for reviewing a completed run without guessing which provider drove its cost.
Common questions
Does a zero cost reading mean the model is free?
No. A zero reading alone does not establish that a service is free. Check whether the provider bills for the model before treating the displayed amount as a price.
Can saved results prevent paying twice for research?
They can avoid repeat vendor charges for re-scoring or re-analysis. I save raw results from every run to disk, then use that file when I want to examine the same data again. That does not remove the cost of the original run.
Does this cost example predict what another run will spend?
No. The amounts describe one research run, and the vendor totals can only tell me what that run cost. To set a budget for another run, check its account balance and review the actual spend afterward.
Sources
If you want me to build or review a system like this, contact me.