@@ -26,6 +26,7 @@ import {
26
26
LanguageModelCreateOptions ,
27
27
LanguageModelMessage
28
28
} from '../types/language-model' ;
29
+ import { UADataValues } from '../types/user-agent-data' ;
29
30
import { match , stub } from 'sinon' ;
30
31
import { GenerateContentRequest , AIErrorCode } from '../types' ;
31
32
import { Schema } from '../api' ;
@@ -68,6 +69,7 @@ describe('ChromeAdapter', () => {
68
69
} as LanguageModelCreateOptions ;
69
70
const adapter = new ChromeAdapter (
70
71
languageModelProvider ,
72
+ undefined ,
71
73
'prefer_on_device' ,
72
74
{
73
75
createOptions
@@ -94,15 +96,19 @@ describe('ChromeAdapter', () => {
94
96
) . to . be . false ;
95
97
} ) ;
96
98
it ( 'returns false if mode is only cloud' , async ( ) => {
97
- const adapter = new ChromeAdapter ( undefined , 'only_in_cloud' ) ;
99
+ const adapter = new ChromeAdapter ( undefined , undefined , 'only_in_cloud' ) ;
98
100
expect (
99
101
await adapter . isAvailable ( {
100
102
contents : [ ]
101
103
} )
102
104
) . to . be . false ;
103
105
} ) ;
104
106
it ( 'returns false if LanguageModel API is undefined' , async ( ) => {
105
- const adapter = new ChromeAdapter ( undefined , 'prefer_on_device' ) ;
107
+ const adapter = new ChromeAdapter (
108
+ undefined ,
109
+ undefined ,
110
+ 'prefer_on_device'
111
+ ) ;
106
112
expect (
107
113
await adapter . isAvailable ( {
108
114
contents : [ ]
@@ -114,6 +120,7 @@ describe('ChromeAdapter', () => {
114
120
{
115
121
availability : async ( ) => Availability . available
116
122
} as LanguageModel ,
123
+ undefined ,
117
124
'prefer_on_device'
118
125
) ;
119
126
expect (
@@ -122,11 +129,57 @@ describe('ChromeAdapter', () => {
122
129
} )
123
130
) . to . be . false ;
124
131
} ) ;
132
+ it ( 'returns false if unsupported browser' , async ( ) => {
133
+ const adapter = new ChromeAdapter (
134
+ {
135
+ availability : async ( ) => Availability . available
136
+ } as LanguageModel ,
137
+ // Defines user agent, but no supported browser.
138
+ {
139
+ brands : [ ]
140
+ } as UADataValues ,
141
+ 'prefer_on_device'
142
+ ) ;
143
+ expect (
144
+ await adapter . isAvailable ( {
145
+ contents : [ ]
146
+ } )
147
+ ) . to . be . false ;
148
+ } ) ;
149
+ it ( 'returns true if supported browser' , async ( ) => {
150
+ const adapter = new ChromeAdapter (
151
+ {
152
+ availability : async ( ) => Availability . available
153
+ } as LanguageModel ,
154
+ {
155
+ // Defines supported browser.
156
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
157
+ } as UADataValues ,
158
+ 'prefer_on_device'
159
+ ) ;
160
+ expect (
161
+ await adapter . isAvailable ( {
162
+ contents : [
163
+ {
164
+ role : 'user' ,
165
+ parts : [
166
+ {
167
+ text : 'hi'
168
+ }
169
+ ]
170
+ }
171
+ ]
172
+ } )
173
+ ) . to . be . true ;
174
+ } ) ;
125
175
it ( 'returns false if request content has "function" role' , async ( ) => {
126
176
const adapter = new ChromeAdapter (
127
177
{
128
178
availability : async ( ) => Availability . available
129
179
} as LanguageModel ,
180
+ {
181
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
182
+ } as UADataValues ,
130
183
'prefer_on_device'
131
184
) ;
132
185
expect (
@@ -145,6 +198,9 @@ describe('ChromeAdapter', () => {
145
198
{
146
199
availability : async ( ) => Availability . available
147
200
} as LanguageModel ,
201
+ {
202
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
203
+ } as UADataValues ,
148
204
'prefer_on_device'
149
205
) ;
150
206
for ( const mimeType of ChromeAdapter . SUPPORTED_MIME_TYPES ) {
@@ -173,6 +229,9 @@ describe('ChromeAdapter', () => {
173
229
} as LanguageModel ;
174
230
const adapter = new ChromeAdapter (
175
231
languageModelProvider ,
232
+ {
233
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
234
+ } as UADataValues ,
176
235
'prefer_on_device'
177
236
) ;
178
237
expect (
@@ -202,6 +261,7 @@ describe('ChromeAdapter', () => {
202
261
} as LanguageModelCreateOptions ;
203
262
const adapter = new ChromeAdapter (
204
263
languageModelProvider ,
264
+ undefined ,
205
265
'prefer_on_device' ,
206
266
{ createOptions }
207
267
) ;
@@ -225,6 +285,7 @@ describe('ChromeAdapter', () => {
225
285
) ;
226
286
const adapter = new ChromeAdapter (
227
287
languageModelProvider ,
288
+ undefined ,
228
289
'prefer_on_device'
229
290
) ;
230
291
await adapter . isAvailable ( {
@@ -249,6 +310,7 @@ describe('ChromeAdapter', () => {
249
310
) ;
250
311
const adapter = new ChromeAdapter (
251
312
languageModelProvider ,
313
+ undefined ,
252
314
'prefer_on_device'
253
315
) ;
254
316
await adapter . isAvailable ( {
@@ -267,6 +329,9 @@ describe('ChromeAdapter', () => {
267
329
} as LanguageModel ;
268
330
const adapter = new ChromeAdapter (
269
331
languageModelProvider ,
332
+ {
333
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
334
+ } as UADataValues ,
270
335
'prefer_on_device'
271
336
) ;
272
337
expect (
@@ -285,6 +350,7 @@ describe('ChromeAdapter', () => {
285
350
) . resolves ( Availability . available ) ;
286
351
const adapter = new ChromeAdapter (
287
352
languageModelProvider ,
353
+ undefined ,
288
354
'prefer_on_device' ,
289
355
{
290
356
createOptions : {
@@ -311,7 +377,7 @@ describe('ChromeAdapter', () => {
311
377
} ) ;
312
378
describe ( 'generateContent' , ( ) => {
313
379
it ( 'throws if Chrome API is undefined' , async ( ) => {
314
- const adapter = new ChromeAdapter ( undefined , 'only_on_device' ) ;
380
+ const adapter = new ChromeAdapter ( undefined , undefined , 'only_on_device' ) ;
315
381
await expect (
316
382
adapter . generateContent ( {
317
383
contents : [ ]
@@ -342,6 +408,9 @@ describe('ChromeAdapter', () => {
342
408
} as LanguageModelCreateOptions ;
343
409
const adapter = new ChromeAdapter (
344
410
languageModelProvider ,
411
+ {
412
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
413
+ } as UADataValues ,
345
414
'prefer_on_device' ,
346
415
{ createOptions }
347
416
) ;
@@ -389,6 +458,9 @@ describe('ChromeAdapter', () => {
389
458
const promptStub = stub ( languageModel , 'prompt' ) . resolves ( promptOutput ) ;
390
459
const adapter = new ChromeAdapter (
391
460
languageModelProvider ,
461
+ {
462
+ brands : [ { brand : 'Google Chrome' , version : '138' } ]
463
+ } as UADataValues ,
392
464
'prefer_on_device'
393
465
) ;
394
466
const request = {
@@ -456,6 +528,7 @@ describe('ChromeAdapter', () => {
456
528
} ;
457
529
const adapter = new ChromeAdapter (
458
530
languageModelProvider ,
531
+ undefined ,
459
532
'prefer_on_device' ,
460
533
{ promptOptions }
461
534
) ;
@@ -489,6 +562,7 @@ describe('ChromeAdapter', () => {
489
562
} as LanguageModel ;
490
563
const adapter = new ChromeAdapter (
491
564
languageModelProvider ,
565
+ undefined ,
492
566
'prefer_on_device'
493
567
) ;
494
568
const request = {
@@ -525,6 +599,7 @@ describe('ChromeAdapter', () => {
525
599
526
600
const adapter = new ChromeAdapter (
527
601
languageModelProvider ,
602
+ undefined ,
528
603
'prefer_on_device'
529
604
) ;
530
605
@@ -534,6 +609,8 @@ describe('ChromeAdapter', () => {
534
609
535
610
try {
536
611
await adapter . countTokens ( countTokenRequest ) ;
612
+ // eslint-disable-next-line no-throw-literal
613
+ throw 'unthrown' ;
537
614
} catch ( e ) {
538
615
// the call to countToken should be rejected with Error
539
616
expect ( ( e as AIError ) . code ) . to . equal ( AIErrorCode . REQUEST_ERROR ) ;
@@ -569,6 +646,7 @@ describe('ChromeAdapter', () => {
569
646
} as LanguageModelCreateOptions ;
570
647
const adapter = new ChromeAdapter (
571
648
languageModelProvider ,
649
+ undefined ,
572
650
'prefer_on_device' ,
573
651
{ createOptions }
574
652
) ;
@@ -614,6 +692,7 @@ describe('ChromeAdapter', () => {
614
692
) ;
615
693
const adapter = new ChromeAdapter (
616
694
languageModelProvider ,
695
+ undefined ,
617
696
'prefer_on_device'
618
697
) ;
619
698
const request = {
@@ -674,6 +753,7 @@ describe('ChromeAdapter', () => {
674
753
} ;
675
754
const adapter = new ChromeAdapter (
676
755
languageModelProvider ,
756
+ undefined ,
677
757
'prefer_on_device' ,
678
758
{ promptOptions }
679
759
) ;
@@ -709,6 +789,7 @@ describe('ChromeAdapter', () => {
709
789
} as LanguageModel ;
710
790
const adapter = new ChromeAdapter (
711
791
languageModelProvider ,
792
+ undefined ,
712
793
'prefer_on_device'
713
794
) ;
714
795
const request = {
0 commit comments