Last week I wired a small webhook to a free model on a free server, mostly to see how far the pair could carry real work. I built the summarizer on MonkeyCode's free model access, deployed it to the free server option, and let an external service send events into it. The idea was simple: parse the payload, ask the model for a one-line summary, and store the result in SQLite. The next morning the database had two rows for the same event, and the summaries differed enough that I almost blamed the model.

Disclosure: This article was prepared as part of MonkeyCode's product outreach.

It took me a while to realize the model was innocent, the server was fine, and the bug was in the shape of my request path. This is the story of that debugging session, plus the idempotency fix that ended it. Along the way I learned a few techniques that apply to any webhook, not just this one.

The symptom that looked like model nondeterminism

Here is what the table looked like when I first opened it: