Skip to content

Commit d2dfdd3

Browse files
committed
recorder toolUsePromptTokenCount and improve tests
1 parent c0f092d commit d2dfdd3

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ final class UsageMetadata {
187187
this.candidatesTokenCount,
188188
this.totalTokenCount,
189189
this.thoughtsTokenCount,
190+
this.toolUsePromptTokenCount,
190191
this.promptTokensDetails,
191192
this.candidatesTokensDetails,
192-
this.toolUsePromptTokenCount,
193193
this.toolUsePromptTokensDetails,
194194
});
195195

packages/firebase_ai/firebase_ai/test/api_test.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,6 +1055,51 @@ void main() {
10551055
expect(urlMetadata.urlRetrievalStatus, UrlRetrievalStatus.success);
10561056
});
10571057

1058+
test(
1059+
'parses valid response with full url context metadata and list of url metadata',
1060+
() {
1061+
final jsonResponse = {
1062+
'candidates': [
1063+
{
1064+
'content': {
1065+
'parts': [
1066+
{'text': 'Some text'}
1067+
]
1068+
},
1069+
'finishReason': 'STOP',
1070+
'urlContextMetadata': {
1071+
'urlMetadata': [
1072+
{
1073+
'retrievedUrl': 'https://example.com',
1074+
'urlRetrievalStatus': 'URL_RETRIEVAL_STATUS_SUCCESS'
1075+
},
1076+
{
1077+
'retrievedUrl': 'https://foo.com',
1078+
'urlRetrievalStatus': 'URL_RETRIEVAL_STATUS_ERROR'
1079+
}
1080+
]
1081+
}
1082+
}
1083+
]
1084+
};
1085+
final response =
1086+
VertexSerialization().parseGenerateContentResponse(jsonResponse);
1087+
final urlContextMetadata =
1088+
response.candidates.first.urlContextMetadata;
1089+
expect(urlContextMetadata, isNotNull);
1090+
expect(urlContextMetadata!.urlMetadata, hasLength(2));
1091+
final firstUrlMetadata = urlContextMetadata.urlMetadata.first;
1092+
expect(
1093+
firstUrlMetadata.retrievedUrl, Uri.parse('https://example.com'));
1094+
expect(
1095+
firstUrlMetadata.urlRetrievalStatus, UrlRetrievalStatus.success);
1096+
final secondUrlMetadata = urlContextMetadata.urlMetadata[1];
1097+
expect(
1098+
secondUrlMetadata.retrievedUrl, Uri.parse('https://foo.com'));
1099+
expect(
1100+
secondUrlMetadata.urlRetrievalStatus, UrlRetrievalStatus.error);
1101+
});
1102+
10581103
test('parses response with missing retrievedUrl', () {
10591104
final jsonResponse = {
10601105
'candidates': [

packages/firebase_ai/firebase_ai/test/google_ai_response_parsing_test.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -853,14 +853,20 @@ void main() {
853853
generateContentResponse.candidates.first.urlContextMetadata;
854854
expect(urlContextMetadata, isNotNull);
855855
expect(urlContextMetadata!.urlMetadata, hasLength(3));
856-
expect(urlContextMetadata.urlMetadata[2].retrievedUrl,
857-
Uri.parse('https://a-completely-non-existent-url-for-testing.org'));
858-
expect(urlContextMetadata.urlMetadata[2].urlRetrievalStatus,
856+
expect(
857+
urlContextMetadata.urlMetadata[0].retrievedUrl,
858+
Uri.parse(
859+
'https://www.nytimes.com/2023/06/25/realestate/barbiecore-home-decor-interior-design.html?action=click&contentCollection=undefined&region=Footer&module=WhatsNext&version=WhatsNext&contentID=WhatsNext&moduleDetail=most-emailed-0&pgtype=undefinedl'));
860+
expect(urlContextMetadata.urlMetadata[0].urlRetrievalStatus,
859861
UrlRetrievalStatus.error);
860862
expect(urlContextMetadata.urlMetadata[1].retrievedUrl,
861863
Uri.parse('https://ai.google.dev'));
862864
expect(urlContextMetadata.urlMetadata[1].urlRetrievalStatus,
863865
UrlRetrievalStatus.success);
866+
expect(urlContextMetadata.urlMetadata[2].retrievedUrl,
867+
Uri.parse('https://a-completely-non-existent-url-for-testing.org'));
868+
expect(urlContextMetadata.urlMetadata[2].urlRetrievalStatus,
869+
UrlRetrievalStatus.error);
864870
});
865871

866872
test('allows missing content', () async {

0 commit comments

Comments
 (0)