usage property

  1. @override
UsageInfo? get usage
override

Get usage information if available

Implementation

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

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

  return UsageInfo(
    promptTokens: usageMetadata['promptTokenCount'] as int?,
    completionTokens: usageMetadata['candidatesTokenCount'] as int?,
    totalTokens: usageMetadata['totalTokenCount'] as int?,
    reasoningTokens: usageMetadata['thoughtsTokenCount'] as int?,
  );
}