@@ -20,13 +20,15 @@ import '../api.dart'
20
20
Candidate,
21
21
Citation,
22
22
CitationMetadata,
23
+ ContentModality,
23
24
CountTokensResponse,
24
25
FinishReason,
25
26
GenerateContentResponse,
26
27
GenerationConfig,
27
28
HarmBlockThreshold,
28
29
HarmCategory,
29
30
HarmProbability,
31
+ ModalityTokenCount,
30
32
PromptFeedback,
31
33
SafetyRating,
32
34
SafetySetting,
@@ -38,6 +40,31 @@ import '../content.dart'
38
40
import '../error.dart' ;
39
41
import '../tool.dart' show Tool, ToolConfig;
40
42
43
+ ContentModality _parseContentModality (Object jsonObject) {
44
+ return switch (jsonObject) {
45
+ 'MODALITY_UNSPECIFIED' => ContentModality .unspecified,
46
+ 'TEXT' => ContentModality .text,
47
+ 'IMAGE' => ContentModality .image,
48
+ 'VIDEO' => ContentModality .video,
49
+ 'AUDIO' => ContentModality .audio,
50
+ 'DOCUMENT' => ContentModality .document,
51
+ _ => throw unhandledFormat ('ContentModality' , jsonObject),
52
+ };
53
+ }
54
+
55
+ ModalityTokenCount _parseModalityTokenCount (Object ? jsonObject) {
56
+ if (jsonObject is ! Map ) {
57
+ throw unhandledFormat ('ModalityTokenCount' , jsonObject);
58
+ }
59
+ final modality = _parseContentModality (jsonObject['modality' ]);
60
+
61
+ if (jsonObject.containsKey ('tokenCount' )) {
62
+ return ModalityTokenCount (modality, jsonObject['tokenCount' ] as int );
63
+ } else {
64
+ return ModalityTokenCount (modality, 0 );
65
+ }
66
+ }
67
+
41
68
HarmProbability _parseHarmProbability (Object jsonObject) =>
42
69
switch (jsonObject) {
43
70
'UNSPECIFIED' => HarmProbability .unknown,
@@ -251,13 +278,23 @@ UsageMetadata _parseUsageMetadata(Object jsonObject) {
251
278
{'thoughtsTokenCount' : final int thoughtsTokenCount} => thoughtsTokenCount,
252
279
_ => null ,
253
280
};
281
+ final promptTokensDetails = switch (jsonObject) {
282
+ {'promptTokensDetails' : final List <Object ?> promptTokensDetails} =>
283
+ promptTokensDetails.map (_parseModalityTokenCount).toList (),
284
+ _ => null ,
285
+ };
286
+ final candidatesTokensDetails = switch (jsonObject) {
287
+ {'candidatesTokensDetails' : final List <Object ?> candidatesTokensDetails} =>
288
+ candidatesTokensDetails.map (_parseModalityTokenCount).toList (),
289
+ _ => null ,
290
+ };
254
291
return createUsageMetadata (
255
292
promptTokenCount: promptTokenCount,
256
293
candidatesTokenCount: candidatesTokenCount,
257
294
totalTokenCount: totalTokenCount,
258
295
thoughtsTokenCount: thoughtsTokenCount,
259
- promptTokensDetails: null ,
260
- candidatesTokensDetails: null ,
296
+ promptTokensDetails: promptTokensDetails ,
297
+ candidatesTokensDetails: candidatesTokensDetails ,
261
298
);
262
299
}
263
300
0 commit comments