@@ -86,14 +86,16 @@ describe('ChromeAdapter', () => {
86
86
languageModelProvider ,
87
87
'availability'
88
88
) . resolves ( Availability . available ) ;
89
- const onDeviceParams = {
89
+ const createOptions = {
90
90
// Explicitly sets expected inputs.
91
91
expectedInputs : [ { type : 'text' } ]
92
92
} as LanguageModelCreateOptions ;
93
93
const adapter = new ChromeAdapter (
94
94
languageModelProvider ,
95
95
'prefer_on_device' ,
96
- onDeviceParams
96
+ {
97
+ createOptions
98
+ }
97
99
) ;
98
100
await adapter . isAvailable ( {
99
101
contents : [
@@ -103,7 +105,7 @@ describe('ChromeAdapter', () => {
103
105
}
104
106
]
105
107
} ) ;
106
- expect ( availabilityStub ) . to . have . been . calledWith ( onDeviceParams ) ;
108
+ expect ( availabilityStub ) . to . have . been . calledWith ( createOptions ) ;
107
109
} ) ;
108
110
} ) ;
109
111
describe ( 'isAvailable' , ( ) => {
@@ -211,20 +213,20 @@ describe('ChromeAdapter', () => {
211
213
const createStub = stub ( languageModelProvider , 'create' ) . resolves (
212
214
{ } as LanguageModel
213
215
) ;
214
- const expectedOnDeviceParams = {
216
+ const createOptions = {
215
217
expectedInputs : [ { type : 'image' } ]
216
218
} as LanguageModelCreateOptions ;
217
219
const adapter = new ChromeAdapter (
218
220
languageModelProvider ,
219
221
'prefer_on_device' ,
220
- expectedOnDeviceParams
222
+ { createOptions }
221
223
) ;
222
224
expect (
223
225
await adapter . isAvailable ( {
224
226
contents : [ { role : 'user' , parts : [ { text : 'hi' } ] } ]
225
227
} )
226
228
) . to . be . false ;
227
- expect ( createStub ) . to . have . been . calledOnceWith ( expectedOnDeviceParams ) ;
229
+ expect ( createStub ) . to . have . been . calledOnceWith ( createOptions ) ;
228
230
} ) ;
229
231
it ( 'avoids redundant downloads' , async ( ) => {
230
232
const languageModelProvider = {
@@ -311,21 +313,21 @@ describe('ChromeAdapter', () => {
311
313
) ;
312
314
const promptOutput = 'hi' ;
313
315
const promptStub = stub ( languageModel , 'prompt' ) . resolves ( promptOutput ) ;
314
- const expectedOnDeviceParams = {
316
+ const createOptions = {
315
317
systemPrompt : 'be yourself' ,
316
318
expectedInputs : [ { type : 'image' } ]
317
319
} as LanguageModelCreateOptions ;
318
320
const adapter = new ChromeAdapter (
319
321
languageModelProvider ,
320
322
'prefer_on_device' ,
321
- expectedOnDeviceParams
323
+ { createOptions }
322
324
) ;
323
325
const request = {
324
326
contents : [ { role : 'user' , parts : [ { text : 'anything' } ] } ]
325
327
} as GenerateContentRequest ;
326
328
const response = await adapter . generateContent ( request ) ;
327
329
// Asserts initialization params are proxied.
328
- expect ( createStub ) . to . have . been . calledOnceWith ( expectedOnDeviceParams ) ;
330
+ expect ( createStub ) . to . have . been . calledOnceWith ( createOptions ) ;
329
331
// Asserts Vertex input type is mapped to Chrome type.
330
332
expect ( promptStub ) . to . have . been . calledOnceWith ( [
331
333
{
@@ -357,14 +359,14 @@ describe('ChromeAdapter', () => {
357
359
) ;
358
360
const promptOutput = 'hi' ;
359
361
const promptStub = stub ( languageModel , 'prompt' ) . resolves ( promptOutput ) ;
360
- const expectedOnDeviceParams = {
362
+ const createOptions = {
361
363
systemPrompt : 'be yourself' ,
362
364
expectedInputs : [ { type : 'image' } ]
363
365
} as LanguageModelCreateOptions ;
364
366
const adapter = new ChromeAdapter (
365
367
languageModelProvider ,
366
368
'prefer_on_device' ,
367
- expectedOnDeviceParams
369
+ { createOptions }
368
370
) ;
369
371
const request = {
370
372
contents : [
@@ -384,7 +386,7 @@ describe('ChromeAdapter', () => {
384
386
} as GenerateContentRequest ;
385
387
const response = await adapter . generateContent ( request ) ;
386
388
// Asserts initialization params are proxied.
387
- expect ( createStub ) . to . have . been . calledOnceWith ( expectedOnDeviceParams ) ;
389
+ expect ( createStub ) . to . have . been . calledOnceWith ( createOptions ) ;
388
390
// Asserts Vertex input type is mapped to Chrome type.
389
391
expect ( promptStub ) . to . have . been . calledOnceWith ( [
390
392
{
@@ -407,7 +409,7 @@ describe('ChromeAdapter', () => {
407
409
]
408
410
} ) ;
409
411
} ) ;
410
- it ( 'supports structured output by mapping responseSchema to responseConstraint ' , async ( ) => {
412
+ it ( 'honors prompt options ' , async ( ) => {
411
413
const languageModel = {
412
414
// eslint-disable-next-line @typescript-eslint/no-unused-vars
413
415
prompt : ( p : LanguageModelMessageContent [ ] ) => Promise . resolve ( '' )
@@ -417,17 +419,17 @@ describe('ChromeAdapter', () => {
417
419
} as LanguageModel ;
418
420
const promptOutput = '{}' ;
419
421
const promptStub = stub ( languageModel , 'prompt' ) . resolves ( promptOutput ) ;
422
+ const promptOptions = {
423
+ responseConstraint : Schema . object ( {
424
+ properties : { }
425
+ } )
426
+ } ;
420
427
const adapter = new ChromeAdapter (
421
428
languageModelProvider ,
422
- 'prefer_on_device'
429
+ 'prefer_on_device' ,
430
+ { promptOptions }
423
431
) ;
424
- const responseSchema = Schema . object ( {
425
- properties : { }
426
- } ) ;
427
432
const request = {
428
- generationConfig : {
429
- responseSchema
430
- } ,
431
433
contents : [ { role : 'user' , parts : [ { text : 'anything' } ] } ]
432
434
} as GenerateContentRequest ;
433
435
await adapter . generateContent ( request ) ;
@@ -438,9 +440,7 @@ describe('ChromeAdapter', () => {
438
440
content : request . contents [ 0 ] . parts [ 0 ] . text
439
441
}
440
442
] ,
441
- {
442
- responseConstraint : responseSchema
443
- }
443
+ promptOptions
444
444
) ;
445
445
} ) ;
446
446
} ) ;
@@ -499,19 +499,19 @@ describe('ChromeAdapter', () => {
499
499
}
500
500
} )
501
501
) ;
502
- const expectedOnDeviceParams = {
502
+ const createOptions = {
503
503
expectedInputs : [ { type : 'image' } ]
504
504
} as LanguageModelCreateOptions ;
505
505
const adapter = new ChromeAdapter (
506
506
languageModelProvider ,
507
507
'prefer_on_device' ,
508
- expectedOnDeviceParams
508
+ { createOptions }
509
509
) ;
510
510
const request = {
511
511
contents : [ { role : 'user' , parts : [ { text : 'anything' } ] } ]
512
512
} as GenerateContentRequest ;
513
513
const response = await adapter . generateContentStream ( request ) ;
514
- expect ( createStub ) . to . have . been . calledOnceWith ( expectedOnDeviceParams ) ;
514
+ expect ( createStub ) . to . have . been . calledOnceWith ( createOptions ) ;
515
515
expect ( promptStub ) . to . have . been . calledOnceWith ( [
516
516
{
517
517
type : 'text' ,
@@ -542,13 +542,13 @@ describe('ChromeAdapter', () => {
542
542
}
543
543
} )
544
544
) ;
545
- const expectedOnDeviceParams = {
545
+ const createOptions = {
546
546
expectedInputs : [ { type : 'image' } ]
547
547
} as LanguageModelCreateOptions ;
548
548
const adapter = new ChromeAdapter (
549
549
languageModelProvider ,
550
550
'prefer_on_device' ,
551
- expectedOnDeviceParams
551
+ { createOptions }
552
552
) ;
553
553
const request = {
554
554
contents : [
@@ -567,7 +567,7 @@ describe('ChromeAdapter', () => {
567
567
]
568
568
} as GenerateContentRequest ;
569
569
const response = await adapter . generateContentStream ( request ) ;
570
- expect ( createStub ) . to . have . been . calledOnceWith ( expectedOnDeviceParams ) ;
570
+ expect ( createStub ) . to . have . been . calledOnceWith ( createOptions ) ;
571
571
expect ( promptStub ) . to . have . been . calledOnceWith ( [
572
572
{
573
573
type : 'text' ,
@@ -583,7 +583,7 @@ describe('ChromeAdapter', () => {
583
583
`data: {"candidates":[{"content":{"role":"model","parts":[{"text":["${ part } "]}]}}]}\n\n`
584
584
] ) ;
585
585
} ) ;
586
- it ( 'supports structured output by mapping responseSchema to responseConstraint ' , async ( ) => {
586
+ it ( 'honors prompt options ' , async ( ) => {
587
587
const languageModel = {
588
588
// eslint-disable-next-line @typescript-eslint/no-unused-vars
589
589
promptStreaming : p => new ReadableStream ( )
@@ -594,17 +594,17 @@ describe('ChromeAdapter', () => {
594
594
const promptStub = stub ( languageModel , 'promptStreaming' ) . returns (
595
595
new ReadableStream ( )
596
596
) ;
597
+ const promptOptions = {
598
+ responseConstraint : Schema . object ( {
599
+ properties : { }
600
+ } )
601
+ } ;
597
602
const adapter = new ChromeAdapter (
598
603
languageModelProvider ,
599
- 'prefer_on_device'
604
+ 'prefer_on_device' ,
605
+ { promptOptions }
600
606
) ;
601
- const responseSchema = Schema . object ( {
602
- properties : { }
603
- } ) ;
604
607
const request = {
605
- generationConfig : {
606
- responseSchema
607
- } ,
608
608
contents : [ { role : 'user' , parts : [ { text : 'anything' } ] } ]
609
609
} as GenerateContentRequest ;
610
610
await adapter . generateContentStream ( request ) ;
@@ -615,9 +615,7 @@ describe('ChromeAdapter', () => {
615
615
content : request . contents [ 0 ] . parts [ 0 ] . text
616
616
}
617
617
] ,
618
- {
619
- responseConstraint : responseSchema
620
- }
618
+ promptOptions
621
619
) ;
622
620
} ) ;
623
621
} ) ;
0 commit comments