Skip to content

Commit 068b7a1

Browse files
committed
Use parseUsageMetadata for both backends
1 parent 7c694e6 commit 068b7a1

File tree

2 files changed

+8
-70
lines changed

2 files changed

+8
-70
lines changed

packages/firebase_ai/firebase_ai/lib/src/api.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,7 +1128,7 @@ final class VertexSerialization implements SerializationStrategy {
11281128
};
11291129
final usageMedata = switch (jsonObject) {
11301130
{'usageMetadata': final usageMetadata?} =>
1131-
_parseUsageMetadata(usageMetadata),
1131+
parseUsageMetadata(usageMetadata),
11321132
{'totalTokens': final int totalTokens} =>
11331133
UsageMetadata._(totalTokenCount: totalTokens),
11341134
_ => null,
@@ -1258,7 +1258,10 @@ PromptFeedback _parsePromptFeedback(Object jsonObject) {
12581258
};
12591259
}
12601260

1261-
UsageMetadata _parseUsageMetadata(Object jsonObject) {
1261+
/// Parses a UsageMetadata from a JSON object.
1262+
///
1263+
/// Expose access to the private helper for use within the package.
1264+
UsageMetadata parseUsageMetadata(Object jsonObject) {
12621265
if (jsonObject is! Map<String, Object?>) {
12631266
throw unhandledFormat('UsageMetadata', jsonObject);
12641267
}

packages/firebase_ai/firebase_ai/lib/src/developer/api.dart

Lines changed: 3 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ import '../api.dart'
3434
SafetySetting,
3535
SerializationStrategy,
3636
UsageMetadata,
37-
createUsageMetadata;
37+
createUsageMetadata,
38+
parseUsageMetadata;
3839
import '../content.dart'
3940
show Content, FunctionCall, InlineDataPart, Part, TextPart;
4041
import '../error.dart';
@@ -118,7 +119,7 @@ final class DeveloperSerialization implements SerializationStrategy {
118119
};
119120
final usageMedata = switch (jsonObject) {
120121
{'usageMetadata': final usageMetadata?} =>
121-
_parseUsageMetadata(usageMetadata),
122+
parseUsageMetadata(usageMetadata),
122123
_ => null,
123124
};
124125
return GenerateContentResponse(candidates, promptFeedback,
@@ -232,72 +233,6 @@ PromptFeedback _parsePromptFeedback(Object jsonObject) {
232233
};
233234
}
234235

235-
UsageMetadata _parseUsageMetadata(Object jsonObject) {
236-
if (jsonObject is! Map<String, Object?>) {
237-
throw unhandledFormat('UsageMetadata', jsonObject);
238-
}
239-
final promptTokenCount = switch (jsonObject) {
240-
{'promptTokenCount': final int promptTokenCount} => promptTokenCount,
241-
_ => null,
242-
};
243-
final candidatesTokenCount = switch (jsonObject) {
244-
{'candidatesTokenCount': final int candidatesTokenCount} =>
245-
candidatesTokenCount,
246-
_ => null,
247-
};
248-
final totalTokenCount = switch (jsonObject) {
249-
{'totalTokenCount': final int totalTokenCount} => totalTokenCount,
250-
_ => null,
251-
};
252-
final thoughtsTokenCount = switch (jsonObject) {
253-
{'thoughtsTokenCount': final int thoughtsTokenCount} => thoughtsTokenCount,
254-
_ => null,
255-
};
256-
final promptTokensDetails = switch (jsonObject) {
257-
{'promptTokensDetails': final List<Object?> promptTokensDetails} =>
258-
promptTokensDetails.map(_parseModalityTokenCount).toList(),
259-
_ => null,
260-
};
261-
final candidatesTokensDetails = switch (jsonObject) {
262-
{'candidatesTokensDetails': final List<Object?> candidatesTokensDetails} =>
263-
candidatesTokensDetails.map(_parseModalityTokenCount).toList(),
264-
_ => null,
265-
};
266-
return createUsageMetadata(
267-
promptTokenCount: promptTokenCount,
268-
candidatesTokenCount: candidatesTokenCount,
269-
totalTokenCount: totalTokenCount,
270-
thoughtsTokenCount: thoughtsTokenCount,
271-
promptTokensDetails: promptTokensDetails,
272-
candidatesTokensDetails: candidatesTokensDetails,
273-
);
274-
}
275-
276-
ModalityTokenCount _parseModalityTokenCount(Object? jsonObject) {
277-
if (jsonObject is! Map) {
278-
throw unhandledFormat('ModalityTokenCount', jsonObject);
279-
}
280-
final modality = _parseContentModality(jsonObject['modality']);
281-
282-
if (jsonObject.containsKey('tokenCount')) {
283-
return ModalityTokenCount(modality, jsonObject['tokenCount'] as int);
284-
} else {
285-
return ModalityTokenCount(modality, 0);
286-
}
287-
}
288-
289-
ContentModality _parseContentModality(Object jsonObject) {
290-
return switch (jsonObject) {
291-
'MODALITY_UNSPECIFIED' => ContentModality.unspecified,
292-
'TEXT' => ContentModality.text,
293-
'IMAGE' => ContentModality.image,
294-
'VIDEO' => ContentModality.video,
295-
'AUDIO' => ContentModality.audio,
296-
'DOCUMENT' => ContentModality.document,
297-
_ => throw unhandledFormat('ContentModality', jsonObject),
298-
};
299-
}
300-
301236
SafetyRating _parseSafetyRating(Object? jsonObject) {
302237
return switch (jsonObject) {
303238
{

0 commit comments

Comments
 (0)