Skip to content
RU

What sets the cost of an embedded model: 61,977 production calls

TL;DR. Between May and August 2026 we made 61,977 calls to language models on live user requests.

Between May and August 2026 we made 61,977 calls to language models on live user requests. Of those 48.6% were served from cache and never reached a provider — a share that rose from 23% in May to 52% in August.

The most useful observation is a different one, though: the caching mechanism is identical, while the result differs eightyfold — 82% on one surface and 1% on another. The difference is not configuration but whether the input repeats.

Check your site's headers →

What we measured, and what is not in this data

Between 29 May and 27 August 2026 our system made 61,977 calls to language models in production — not in testing, but on live user requests. Every call is logged: surface, provider, language, input and output tokens, response time, and whether the request was served from cache.

What is absent here: money. The cost field is not populated for our two main providers — 31,796 calls are recorded as zero. That is a gap in our accounting rather than a free service, and we will not present those zeros as expenditure. So what follows concerns tokens and cache share — quantities that are reliably measured.

That is no great loss, though. The main lever on cost is not the price per token but the share of requests that never reach the provider at all. That we measured precisely.

Half the requests are served from cache, and the share is growing

Of 61,977 calls, 30,119 (48.6%) were served from cache and never reached a provider. By month:

MonthCallsFrom cache
May 2026 (from the 29th)31823%
June4,94130%
July14,24847%
August42,47052%

The share rose from 23% to 52% in three months, by a simple mechanism: a cache works better the more requests have already passed through it. The key is built from request content, so every new user asking about an already-checked subject gets an answer for free.

The practical conclusion for anyone embedding a model: caching yields more than choosing a cheaper model. Moving to a model half the price halves the bill once. A cache with a growing hit rate reduces it continuously, and by the third month ours had removed half the load.

In tokens that is roughly 37 million never sent and never paid for — estimated from the average call size in our sample.

The same cache yields between 1% and 82% depending on the surface

This is perhaps the most useful observation. The caching mechanism is identical across surfaces, and the result differs eightyfold:

SurfaceCallsFrom cache
Articles28,61282%
ASN lookup1,22751%
DNS1,93236%
Mail records85127%
Blocklist registry10,35320%
Port check91620%
SSL1,38214%
Malware3,56811%
HTTP headers2,0271%

The difference comes down to how repetitive the input is. For articles the input is the article text itself, identical for every reader — hence 82%. For a header check the input is one site’s full header set at one moment; it almost never repeats — hence 1%.

From which a design rule follows: before embedding a model, look at how repetitive the input is. If it is unique per request, caching will not help and savings must come elsewhere — a shorter prompt, a smaller model, or handing part of the work to ordinary code.

Call sizes and response times

ProviderCallsInput tokensOutput tokensMean time
YandexGPT30,52229,222,832 (~957 per call)8,477,615 (~278)3,869 ms
OpenAI1,274969,165 (~761)448,216 (~352)5,419 ms

Three observations.

Input is three times larger than output. Roughly three and a half request tokens per response token. Since most providers price input below output but not by a factor of three and a half, shortening the prompt usually pays better than shortening the answer — while it is the answer that gets optimised more often.

A response takes seconds, not milliseconds. Averages of 3.9 and 5.4 seconds are two orders of magnitude slower than our ordinary tools, where the median is 95 ms. Embedding a model in an interface means assuming the answer arrives in seconds, and showing the user that it will.

A caveat on the OpenAI timing: our requests to it pass through an intermediate node outside Russia, and part of those 5.4 seconds is network path rather than model work. This column must not be used to compare providers directly.

The language split and what follows from it

Russian calls number 60,545 and English 1,432 — a ratio of 42 to 1. That reflects the audience rather than model quality, but it has a direct consequence for cost: the bulk of the load falls on the provider serving Russian, and its rates set the bill almost entirely.

Our language split was not made for price: Russian requests go to a provider with infrastructure in Russia, English to a foreign one. That is a data-handling requirement, not an optimisation.

The overall conclusion from three months of operation: the cost of an embedded model is set by architecture, not by rates. Cache share, input repetitiveness and prompt length produce multiples; the choice between models of comparable class produces fractions.

A caveat on applicability: this is one product with a particular set of tasks. The 48.6% cache share is ours, not an industry figure; a product with unique input on every request will see it near zero.

Learn more

Frequently Asked Questions

When does self-host pay off?

>10M tokens/day at constant load. 1 H100 $3/h × 24 × 30 = $2,160/mo = ~2.4B tokens throughput.

gpt-4o-mini vs GPT-5?

Mini: $0.15/$0.60. 25x cheaper than GPT-5. Quality: 70-85% on most tasks. For chatbot / classification / simple extraction — use mini.

Cache effectiveness?

Anthropic cache 90% cheaper on hit. OpenAI automatic 50% cheaper. 35% cache hit = 30%+ cost reduction.

How to monitor AI spend?

Per-provider dashboard + app-level tagging via X-Project header. Anomalies → alert (daily spend > threshold).

Try the live tool that powered this guide

Free plan — 10 monitors, checks every 5 min, no card required. Upgrade for 1-minute interval and multi-region monitoring.