Notes

Atomic Firestore Token Bucket Increments Under Concurrency

Firestore, Tokenomics

To prevent client retry loops from overwhelming per-UID token allowances, do not use read-then-write transactions. Instead, use FieldValue.increment(consumedTokens) within a Firestore document update.

Atomic field increments execute at database speed without transaction retry contention, ensuring accurate token accounting even when an AI agent fires 50 concurrent tool calls.

tokenCounter.ts
import { FieldValue } from "firebase-admin/firestore";

export async function recordTokenUsage(db, userId, promptTokens, completionTokens) {
  const ref = db.collection("token_usage").doc(userId);
  await ref.set(
    {
      promptTokens: FieldValue.increment(promptTokens),
      completionTokens: FieldValue.increment(completionTokens),
      totalInvocations: FieldValue.increment(1),
      lastUpdated: FieldValue.serverTimestamp(),
    },
    { merge: true }
  );
}

All 7 notes