cost:llm:request— emitted when an LLM call finishes (generateText/streamText), with an LLM usage attribute.cost:http:request— emitted when you attach a dollar cost to an HTTP response withaddRequestCostfrom@outputai/http, with an HTTP request cost attribute.
Setup
Cost events use the same hooks system as error hooks:- Create a hook file and import
onfrom@outputai/core/hooks. - Register a handler for
cost:llm:request,cost:http:request, or both. - Add the file path to
outputai.hookFilesinpackage.json.
src/llm_cost_hooks.ts
src/http_cost_hooks.ts
LLM request cost
When events fire
Ancost:llm:request event is emitted after every generateText and streamText call completes. For streaming, the event fires when the stream finishes, not when it starts.
Payload
The handler receives a single LLM usage attribute object:Usage entries
Cost is computed from the model’s per-million-token pricing, fetched from a built-in pricing source and cached for 24 hours. For each priced dimension, the dollar amount is(tokens / 1_000_000) * pricePerMillion. Non-cached input tokens use inputTokens - (cachedInputTokens ?? 0).
usage[].type values:
Only available, finite usage dimensions are included. For example,
reasoning is omitted when the model does not define separate reasoning pricing, and input_cached is omitted when there are no cached input tokens.
HTTP request cost
Events fire only when your code callsaddRequestCost( response, total ) with a response object created by @outputai/http (or its exported fetch). The SDK attaches the cost to the existing HTTP trace event and emits cost:http:request. If the response did not originate from this package, addRequestCost no-ops (with a console warning) and no hook event is emitted.