costTrackingHook static method
Hook that tracks token usage and estimated cost.
Accumulates token counts from API responses and provides running totals via the hook context metadata.
Implementation
static HookRegistration costTrackingHook({
required void Function(int inputTokens, int outputTokens, double cost)
onUsage,
double costPerInputToken = 0.000003,
double costPerOutputToken = 0.000015,
}) {
var totalInputTokens = 0;
var totalOutputTokens = 0;
var totalCost = 0.0;
return HookRegistration(
id: 'builtin:cost-tracking',
type: HookType.postApiCall,
priority: HookPriority.monitor,
name: 'Cost Tracking',
description: 'Tracks token usage and estimated cost.',
source: 'builtin',
tags: {'analytics', 'cost'},
handler: (context) {
if (context is ApiHookContext && context.tokenUsage != null) {
final usage = context.tokenUsage!;
totalInputTokens += usage.inputTokens;
totalOutputTokens += usage.outputTokens;
final callCost =
(usage.inputTokens * costPerInputToken) +
(usage.outputTokens * costPerOutputToken);
totalCost += callCost;
onUsage(usage.inputTokens, usage.outputTokens, callCost);
}
return HookContinue(
modifiedData: {
'totalInputTokens': totalInputTokens,
'totalOutputTokens': totalOutputTokens,
'totalCost': totalCost,
},
);
},
);
}