GEMINI LABJP
MCPCONN — Gemini in Google Workspace now connects to Asana, Atlassian Rovo, HubSpot, Mailchimp, QuickBooks, Monday and Salesforce over MCP. It is on by default and managed from the admin consoleGLOBAL — The Gmail Search AI Overviews rollout described as global comes with conditions. The announcement itself requires English as the display language and excludes personal accounts in Japan10/02 — gemini-2.5-flash-image shuts down on October 2, ten days away. The replacement is gemini-3.1-flash-image-preview402 — Depleted prepay credits now return HTTP 402 instead of 429. The status field still reads RESOURCE_EXHAUSTED, so retry logic that branches on status will never stopNEW — The day I first disconnected an MCP server: how I choose which tools stay enabledSKILLS — In-app notices point from Gems to Skills, but Skills is described as unavailable on work and school accounts, and the dates have not been confirmed officiallyMCPCONN — Gemini in Google Workspace now connects to Asana, Atlassian Rovo, HubSpot, Mailchimp, QuickBooks, Monday and Salesforce over MCP. It is on by default and managed from the admin consoleGLOBAL — The Gmail Search AI Overviews rollout described as global comes with conditions. The announcement itself requires English as the display language and excludes personal accounts in Japan10/02 — gemini-2.5-flash-image shuts down on October 2, ten days away. The replacement is gemini-3.1-flash-image-preview402 — Depleted prepay credits now return HTTP 402 instead of 429. The status field still reads RESOURCE_EXHAUSTED, so retry logic that branches on status will never stopNEW — The day I first disconnected an MCP server: how I choose which tools stay enabledSKILLS — In-app notices point from Gems to Skills, but Skills is described as unavailable on work and school accounts, and the dates have not been confirmed officially
Articles/API / SDK
API / SDK/2026-06-12Intermediate

Is Anyone Actually Using Your Gemini Feature? Measuring Acceptance, Regeneration, and Edit Distance

Token charts will not tell you whether users embrace a Gemini-powered feature. A practical design for measuring acceptance rate, regeneration rate, and edit distance with Swift and BigQuery, with two weeks of real numbers.

gemini-api284product analyticsinstrumentation3Firebase AnalyticsBigQueryindie development26

Premium Article

When the major Gemini API outage hit on June 11, I sat watching error-rate graphs, waiting for recovery. The next morning, with every chart back to normal, a different question crept in. Error rate: fine. Latency: fine. Token consumption: exactly as projected. But was the feature actually being used? I had not a single number that could answer that.

One of the wellness apps I run as an indie developer has a small Gemini-powered feature that generates a short encouraging message when the app opens in the morning. For the two weeks after launch, everything I monitored lived on the API side. Whether users saved the output, immediately regenerated it, or quietly closed the screen — I was collecting none of it. This article is the design record of the product-side instrumentation I built after that realization.

Token Consumption Does Not Measure Value

An API dashboard reports request counts, error rates, latency, and token consumption. All of these are essential for operational health, but every one of them is a supply-side number. None of them describe demand.

In my app, generations held steady at roughly 1,900 per day, and from the supply side things looked healthy. Once the instrumentation described below went in, a different picture emerged: only 41% of generated messages were saved, and 28% were discarded through the regenerate button. Tokens were being consumed on schedule while nearly half the output was a miss for the person reading it. The supply-side charts stay clean while the demand side fails silently — that, I learned firsthand, is the uncomfortable property of AI features.

LLM-ops practice has plenty to say about automated quality evaluation and cost monitoring, but user acceptance is a different layer. A response that scores perfectly on a quality rubric still gets discarded if it does not match the reader's mood. A product feature needs product measurement.

Break the Generation Lifecycle into Five Events

I started by writing down, in chronological order, everything that happens between the user and a generated message, and collapsed it into five events.

  • ai_shown — the feature's entry point became visible (the generate button is on screen)
  • ai_generated — the first generation completed and the output was presented
  • ai_regenerated — the user tapped "try again" and replaced the output
  • ai_accepted — the user did something that counts as acceptance, such as saving or sharing
  • ai_generation_failed — the generation ended in an error

There is deliberately no abandoned event. A silent exit means the user did nothing, and "nothing" is unreliable to emit from a client. Instead, abandonment is derived at query time: a session with ai_generated but neither ai_accepted nor ai_regenerated. Deriving it turned out to be the only way to count it without gaps.

Every event carries the same four parameters.

  • feature — an identifier such as daily_message, so multiple AI features in one app can be compared on the same axis
  • prompt_version — a version string for the prompt; every improvement is evaluated by splitting on this
  • model_id — the model that served the call, so model migrations can be isolated from prompt changes
  • latency_ms — perceived wait time, measured from tap to render, not the API-side latency

The discipline that matters most here is keeping the event count small. My first draft had twelve events; the rollup queries only ever touched five. The customer of your instrumentation is the future you writing SQL. An event that never appears in a query is nothing but transmission cost.

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
A five-event taxonomy for the generation lifecycle, with a complete Swift instrumentation wrapper
Working definitions for acceptance rate, regeneration rate, and normalized edit distance, plus weekly rollup SQL for the GA4 BigQuery export
Two weeks of real numbers that raised acceptance from 41% to 63%, and a triage checklist for when the metrics stay low
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

API / SDK2026-07-01
When a Prompt That Worked in AI Studio Quietly Breaks Over the API — Field Notes on Measuring the Difference
A prompt that behaves perfectly in AI Studio returns an empty string or a 404 the moment you call the Gemini API from your own code. Instead of eyeballing the two, here is a small harness that records the config diff plus finish_reason, token usage, and the model name the server actually resolved — so you can isolate the cause by layer.
API / SDK2026-09-11
When Transcription Keeps Mangling Proper Nouns: Choosing What Earns a Custom Vocabulary Slot
gemini-3.5-transcribe accepts up to 1,000 custom_vocabulary entries, but filling the list is not the goal. Here is a 60-line script that picks entries from your own reference-and-hypothesis pairs, plus the rules I use to decide what to leave out.
API / SDK2026-09-08
Writing my first Gemini cost estimate in two columns, one for now and one for January
Introductory pricing for Gemini Flash ends on December 31, 2026, and standard pricing starts on January 1, 2027. Staying on an older generation does not avoid it. Here is the small, working estimator I use to see both prices at once.
📚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