GEMINI LABJP
API — The deprecation of temperature, top_p, and top_k is a silent no-op rather than an error: requests still return 200 and the values are simply ignoredAUDIT — There is no runtime signal to catch it, so auditing means searching your codebase statically for the parameters, a gap developers are actively discussingCHECK — Send the same prompt several times at temperature 0 and again at 1, then compare the spread of the outputs, and you can confirm for yourself that nothing changesMODELS — Gemini 3.7 Flash scores 65.3% on DeepSWE v1.1 and 43.6% on FrontierCode 1.1 Main, with introductory pricing available through December 31, 2026SEARCH — File Search now supports multimodal search through gemini-embedding-2, so images can be embedded and searched directly without a transcription stepDEPRECATION — gemini-robotics-er-1.6-preview shuts down on August 31, four days from now, with the ER 2 line in public preview since July 30 as the migration pathAPI — The deprecation of temperature, top_p, and top_k is a silent no-op rather than an error: requests still return 200 and the values are simply ignoredAUDIT — There is no runtime signal to catch it, so auditing means searching your codebase statically for the parameters, a gap developers are actively discussingCHECK — Send the same prompt several times at temperature 0 and again at 1, then compare the spread of the outputs, and you can confirm for yourself that nothing changesMODELS — Gemini 3.7 Flash scores 65.3% on DeepSWE v1.1 and 43.6% on FrontierCode 1.1 Main, with introductory pricing available through December 31, 2026SEARCH — File Search now supports multimodal search through gemini-embedding-2, so images can be embedded and searched directly without a transcription stepDEPRECATION — gemini-robotics-er-1.6-preview shuts down on August 31, four days from now, with the ER 2 line in public preview since July 30 as the migration path
Articles/Dev Tools
Dev Tools/2026-08-28Intermediate

A twice-daily batch that only ran once — reconstructing run counts from artifacts

One half of a scheduled job silently never fired, and throughput sat at half of plan for over a week without a single error in the logs. Here is how I reconstructed actual run counts from artifacts and backlog, with working code.

Gemini API223batch processing4scheduled jobsoperations16observability14

Premium Article

The queue folder was not shrinking as fast as it should have been.

I hand wallpaper category classification off to Gemini, and the pile of unprocessed images is supposed to come down every day. But the gap between what I saw on Monday and what I saw on Friday did not match the arithmetic in my head.

So I opened the logs. No errors. Not a single failed run. Every classification result file I opened was correctly filled in.

My first suspicion was that the work itself had gotten slower — fewer items per run, for some reason. That was wrong. Items per run were exactly as designed. The number of runs was half of what I thought.

The signal was the drain rate, not a failure

I had quietly assumed that trouble always announces itself through a broken artifact. A corrupt file, a dead job, a red alert. This time everything that came out was clean.

Clean, and simply not enough of it.

That shape of failure is structurally hard to see, because a log is a record of things that happened. A run that never started has no row. You cannot grep for a row that does not exist.

I have been running scheduled jobs as an indie developer for over a decade, and I had never built the habit of suspecting this. "If it breaks, I'll hear about it" was baked in deep enough that I stopped questioning it.

Success-only logs cannot show you a run that never happened

The first thing I did was inventory what I could actually observe.

SignalWhat it tells youCan it catch a missed run?
Run logs (success and failure)Breakdown of runs that happenedNo — there is no row to inspect
Gemini API error rateHealth of the calls you madeNo — the calls were never made
Output artifactsWhat was processed, and whenYes, once you aggregate timestamps
Unprocessed backlogEffective throughputYes — it shows up as a gap against plan

No amount of precision on the first two would have helped, because both of them observe the inside of a call. To see a run that did not happen, you have to stand outside the processing system — on the artifacts, or on the backlog.

That distinction ended up dictating the whole design that follows.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You will be able to check, before it costs you anything, whether one slot of your own scheduled job is quietly failing to fire
You will be able to port a run-count reconstruction built on artifacts and backlog, rather than success logs, straight into your own pipeline
You will be able to compute a plan ratio like 0.5 from backlog movement yourself, and know to suspect missing runs instead of slow ones
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Gemini Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

Dev Tools2026-08-25
Turning Logging Off in AI Studio Also Turns Off Interactions API Conversation History
When no Gemini API logs show up in AI Studio, the usual culprit is the store default, which is inverted between the two APIs. Here is the side effect that quietly stops conversation history, and how to set store per request so it never surprises you.
Dev Tools2026-08-17
Your Shipped App Still Remembers the Retired Model
Finishing the server-side migration is only half of a model retirement. The older builds of your app still hold the old model name, and once the cutoff passes, rolling back stops being a recovery option. Here is how I moved model resolution onto the server.
Dev Tools2026-07-25
The Day I Stopped Tracking gemini-flash-latest: Batch Design That Survives Silent Model Swaps
A silent model swap pushed my batch rejection rate from 2.1% to 9.8% overnight. The pinning-plus-canary design I moved to, with the harness and numbers.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →