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.
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.
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.
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.
The One Call I Refuse to Hand Gemini During a Phased Release
Day one of a phased release has nowhere near the sample size to tell a healthy build from a broken one. Here is the three-state rollout gate I use, and the narrow job I give Gemini inside it.
How Many Assistant-Dependent Lines Are Still in Your App?
On September 4th, Google Assistant on Android begins its replacement by Gemini. Here is how to grep your own project for every entry point an assistant can open, and how to turn that list into utterances you can actually test on a device.
A minimal pre-send guard for Gemini-drafted app review replies
Store replies are risky after you hit send, not before. Here is a short Python guard that blocks unkeepable promises, leaked contact details, and register slips, plus the two false positives it produced on the first run.
The Assistant Switch Is One-Way, So the Baseline Has to Be Captured Now
From September 4, Google Assistant is replaced by Gemini, and a device that has switched cannot go back. Here is how I started recording voice-originated launches inside my own apps, and the assumption about splitting before and after by date that turned out to be wrong.
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.
Moving to the Batch Tier Cancels Out the Gemini 3.7 Flash Price Increase Exactly
Introductory pricing for Gemini 3.7 Flash ends on December 31, 2026, and the rate doubles the next day. Here is which models are affected, which are not, and how to project your January bill from the usage you already have.
The Memory Wasn't Lost — It Was Written to a Different Profile
A Memory Bank profile is identified by the pair of schema and scope. When call sites build that scope slightly differently, extra profiles appear with no error at all. Here are the measured numbers for how badly it fragments, and how three candidate fixes actually performed.