costTrackingHook static method

HookRegistration costTrackingHook({
  1. required void onUsage(
    1. int inputTokens,
    2. int outputTokens,
    3. double cost
    ),
  2. double costPerInputToken = 0.000003,
  3. double costPerOutputToken = 0.000015,
})

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,
        },
      );
    },
  );
}