Problems / Cache-Blind Chatbot
Cache-Blind Chatbot
Guest variant: changes monthly- Sheet
- C-01
- Revision
- 1, 23 Oct 2026
- Difficulty
- 4, Medium
- Format
- Config
- Mode
- Simulated
- Topics
- Breakpoint Placement, Cache Lifetime, Prompt Layout
Open this on a computer to solve it. Config problems need a wider screen.
A support bot resends its whole product manual on every turn. Cut the bill without losing a single answer.
The Situation
The support bot for the Tidewater dishwasher answers customer questions from the product manual. On every turn it sends the whole manual (25,300 tokens) to the model again. Nothing is cached. Yesterday's bill was $28.77.
Your job: edit chatbot.yaml so the same day of traffic costs at least 70% less, without a single wrong answer (see Targets).
Your Day of Traffic
- 47 chats, 199 turns in total, from 08:18:30 to 10:24:38.
- Every turn sends one request. All chats share one cache.
- Idle time between one request and the next (across all chats): median 27s, longest 3m 31s. 0 of those gaps are longer than 5 minutes.
After you press Run, the results list every turn.
The Settings
| Setting | Allowed values | What it does |
|---|---|---|
model |
large, medium, small |
The model tier (R1, R7). |
context |
a list of timestamp, instructions, manual, history, question, each at most once |
The blocks each request contains, in order (R2). |
cache.breakpoints |
up to 4 block names from context |
Where cached prefixes end (R5). |
cache.ttl |
5m, 1h |
The cache lifetime (R4). |
The Rules
R1. Prices
Dollars per million tokens:
| Tier | Input | Output |
|---|---|---|
| large | 5 | 25 |
| medium | 3 | 15 |
| small | 1 | 5 |
R2. Requests
Each turn sends the blocks in context, in that order. Their sizes:
timestamp: 14 tokens. It holds the current date and time, so it's different on every request.instructions: 1,500 tokens.manual: 25,300 tokens.history: each earlier turn of this chat, meaning its question and the bot's answer. It's empty on a chat's first turn. Answers are 150–400 tokens each.question: this turn's question, 30–120 tokens.
R3. Cache Reads
When a request starts with exactly the same content as an unexpired cache entry (see R4), those tokens cost 0.1× the input price. The longest matching entry is used. A read resets the expiry clock of that entry and of every shorter entry it starts with.
R4. Expiry
The TTL (time to live) is how long a cache entry lasts without being used. An entry expires once longer than the TTL has passed since it was last written or read. 5m is 5 minutes and 1h is 1 hour.
R5. Cache Writes
Each breakpoint caches a prefix: the request from its start to the end of the breakpoint's block.
A breakpoint writes only when no unexpired entry (R4) for its prefix exists. Only the tokens after the longest cache read (R3) count as newly written. Newly written tokens cost 1.25× the input price with a 5m TTL, or 2× with 1h.
A prefix shorter than 1,024 tokens can't be cached, and its breakpoint is ignored.
R6. Everything Else
Input tokens that aren't read from or written to the cache cost the normal input price. Output tokens cost the output price.
R7. Accuracy
A question is answered correctly only if every block it needs is sent and the model's capability is at least the question's level (1–100).
- Every question needs
instructions,manualandquestion. - Some also need
timestamp(e.g. "Is my warranty still valid?") orhistory(follow-ups such as "And after that?"). - Capability: large 95, medium 80, small 60.
- Question levels aren't listed. The results flag every wrong answer and say why.
- Block order doesn't affect accuracy.
Targets
- Cost cut, compared with the starting system on your day: at least 70% to pass, and 80% for full points.
- Accuracy must stay at 100%. The starting system answers every question correctly.
Need a Hint?
Hint 1 of 3 lowers the most you can earn from 40 to 36 points. Points you've already earned stay.