usage property

  1. @override
UsageInfo? get usage
override

Get usage information if available

Implementation

@override
UsageInfo? get usage {
  final rawUsage = _rawResponse['usage'];
  if (rawUsage == null) return null;

  // Safely convert Map<dynamic, dynamic> to Map<String, dynamic>
  final Map<String, dynamic> usageData;
  if (rawUsage is Map<String, dynamic>) {
    usageData = rawUsage;
  } else if (rawUsage is Map) {
    usageData = Map<String, dynamic>.from(rawUsage);
  } else {
    return null;
  }

  final inputTokens = usageData['input_tokens'] as int? ?? 0;
  final outputTokens = usageData['output_tokens'] as int? ?? 0;

  // Note: Anthropic also provides cache_creation_input_tokens and cache_read_input_tokens
  // These could be exposed in a future version of UsageInfo

  return UsageInfo(
    promptTokens: inputTokens,
    completionTokens: outputTokens,
    totalTokens: inputTokens + outputTokens,
    // Anthropic doesn't provide separate thinking_tokens in usage
    // Thinking content is handled separately through content blocks
    reasoningTokens: null,
  );
}