Your New Gemini API Key Never Took Effect, and Load Order Wasn't the Reason
When several sources supply the same environment variable, swapping your key can leave the old value in place. Here is what four load orders actually produced, and a ledger that records which source won.
gemini-robotics-er-1.6-preview Shut Down Today — Your Next Deadline Is September 30, When gemini-omni-flash-preview Goes Away
From today's gemini-robotics-er-1.6-preview shutdown to the September 30 retirement of gemini-omni-flash-preview and the December 31 pricing change, here is every upcoming Gemini deadline in one table, with what to do about each.
Define What Counts as a Duplicate Before Adding Embedding Search to Your Image Pipeline
My dedup check flagged two prints with identical composition but different colors as one image. Here is how I split duplicate detection into three layers, measured where perceptual hashing ends, and decided what embedding search is actually for.
Why Shipped Clients Deserve a Refusal, Not a Silent Model Substitution
A model can retire, but the apps already on people's phones cannot. This is how I built a sunset ledger keyed on output contracts, and how I now back-date my own deadline from the version residue curve.
Smart mode in gemini-3.5-transcribe returns no speaker labels and no word timestamps
Smart mode in gemini-3.5-transcribe cannot be combined with diarization_mode or timestamp_granularities. Here is why the mode field accepts two types, and why enabling features halves your audio limit.
What decides whether your Gemini API data trains Google's models, and the one exception on the paid tier
Whether your Gemini API prompts feed model training is not settled by the paid tier alone. Here is how AI Studio and the API define paid differently, how dataset sharing reverses the protection, and what changes by region.
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.
Your Spreadsheet Breaks Before Gemini Ever Sees It
Merged cells and two-row headers quietly strip rows of their keys during extraction, long before the model reads anything. Here is what gets lost, measured, plus the Python that flattens the table and catches the total row.
Record what you send before you try to measure whether temperature still works
Deprecated sampling parameters still return 200 and are silently ignored. Here is how a runtime recorder caught the call sites grep and AST both missed, kept the construction site attached to each config, and turned the ledger into a CI gate.
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.
Gemini quietly drops %1$s from translations, and no reviewer catches it
Format specifiers go missing, turn full-width, or get duplicated when Gemini translates app strings. Here are the four failure modes I keep seeing in production, how to stop them at generation time, and a short check that catches the rest.
Streaming Gemini TTS: concatenate the PCM, write the WAV header once
Streamed Gemini TTS does not arrive as an audio file. It arrives as raw PCM fragments. Here is what happens when you wrap each fragment in its own WAV header, measured on my machine, plus the receiving code that avoids it.