@@ -307,4 +307,56 @@ describe('ChromeAdapter', () => {
307
307
} ) ;
308
308
} ) ;
309
309
} ) ;
310
+ describe ( 'countTokens' , ( ) => {
311
+ it ( 'counts tokens from a singular input' , async ( ) => {
312
+ const inputText = 'first' ;
313
+ const expectedCount = 10 ;
314
+ const onDeviceParams = {
315
+ systemPrompt : 'be yourself'
316
+ } as LanguageModelCreateOptions ;
317
+
318
+ // setting up stubs
319
+ const languageModelProvider = {
320
+ create : ( ) => Promise . resolve ( { } )
321
+ } as LanguageModel ;
322
+ const languageModel = {
323
+ measureInputUsage : _i => Promise . resolve ( 123 )
324
+ } as LanguageModel ;
325
+ const createStub = stub ( languageModelProvider , 'create' ) . resolves (
326
+ languageModel
327
+ ) ;
328
+ // overrides impl with stub method
329
+ const measureInputUsageStub = stub (
330
+ languageModel ,
331
+ 'measureInputUsage'
332
+ ) . resolves ( expectedCount ) ;
333
+
334
+ const adapter = new ChromeAdapter (
335
+ languageModelProvider ,
336
+ 'prefer_on_device' ,
337
+ onDeviceParams
338
+ ) ;
339
+ const countTokenRequest = {
340
+ contents : [ { role : 'user' , parts : [ { text : inputText } ] } ]
341
+ } as GenerateContentRequest ;
342
+ const response = await adapter . countTokens ( countTokenRequest ) ;
343
+ // Asserts initialization params are proxied.
344
+ expect ( createStub ) . to . have . been . calledOnceWith ( onDeviceParams ) ;
345
+ // Asserts Vertex input type is mapped to Chrome type.
346
+ expect ( measureInputUsageStub ) . to . have . been . calledOnceWith ( [
347
+ {
348
+ role : 'user' ,
349
+ content : [
350
+ {
351
+ type : 'text' ,
352
+ content : inputText
353
+ }
354
+ ]
355
+ }
356
+ ] ) ;
357
+ expect ( await response . json ( ) ) . to . deep . equal ( {
358
+ totalTokens : expectedCount
359
+ } ) ;
360
+ } ) ;
361
+ } ) ;
310
362
} ) ;
0 commit comments