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).

Starting system: what every request looks like
timestamp14instructions1,500manual25,300historygrowsquestion30–120model: largechanges every request, so nothing after it is ever reused

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, manual and question.
  • Some also need timestamp (e.g. "Is my warranty still valid?") or history (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.

chatbot.yaml
Runs the simulator in your browser, then the server checks it. Tab leaves the editor.
Your request layout
timestamp14instructions1,500manual25,300historygrowsquestion30–120model: large