The streamObject result contains a usage promise that resolves to the total token usage.
index.ts
import { streamObject, TokenUsage } from 'ai';import { z } from 'zod';const result = streamObject({ model: 'openai/gpt-4.1', schema: z.object({ recipe: z.object({ name: z.string(), ingredients: z.array(z.string()), steps: z.array(z.string()), }), }), prompt: 'Generate a lasagna recipe.',});// your custom function to record token usage:function recordTokenUsage({ inputTokens, outputTokens, totalTokens,}: TokenUsage) { console.log('Prompt tokens:', inputTokens); console.log('Completion tokens:', outputTokens); console.log('Total tokens:', totalTokens);}// use as promise:result.usage.then(recordTokenUsage);// use with async/await:recordTokenUsage(await result.usage);// note: the stream needs to be consumed because of backpressurefor await (const partialObject of result.partialObjectStream) {}