1
1
// @vitest -environment edge-runtime
2
- import { GenerateContentRequest , GenerateContentStreamResult , Part } from '@google/generative-ai' ;
3
2
import OpenAI from 'openai' ;
4
3
import { Mock , afterEach , beforeEach , describe , expect , it , vi } from 'vitest' ;
5
4
@@ -317,17 +316,55 @@ describe('LobeGoogleAI', () => {
317
316
} ) ;
318
317
319
318
describe ( 'buildGoogleMessages' , ( ) => {
320
- it ( 'should use default text model when no images are included in messages' , ( ) => {
319
+ it ( 'get default result with gemini-pro' , ( ) => {
320
+ const messages : OpenAIChatMessage [ ] = [ { content : 'Hello' , role : 'user' } ] ;
321
+
322
+ const contents = instance [ 'buildGoogleMessages' ] ( messages , 'gemini-pro' ) ;
323
+
324
+ expect ( contents ) . toHaveLength ( 1 ) ;
325
+ expect ( contents ) . toEqual ( [ { parts : [ { text : 'Hello' } ] , role : 'user' } ] ) ;
326
+ } ) ;
327
+
328
+ it ( 'messages should end with user if using gemini-pro' , ( ) => {
321
329
const messages : OpenAIChatMessage [ ] = [
322
330
{ content : 'Hello' , role : 'user' } ,
323
331
{ content : 'Hi' , role : 'assistant' } ,
324
332
] ;
325
- const model = 'text-davinci-003' ;
326
333
327
- // 调用 buildGoogleMessages 方法
328
- const { contents, model : usedModel } = instance [ 'buildGoogleMessages' ] ( messages , model ) ;
334
+ const contents = instance [ 'buildGoogleMessages' ] ( messages , 'gemini-pro' ) ;
335
+
336
+ expect ( contents ) . toHaveLength ( 3 ) ;
337
+ expect ( contents ) . toEqual ( [
338
+ { parts : [ { text : 'Hello' } ] , role : 'user' } ,
339
+ { parts : [ { text : 'Hi' } ] , role : 'model' } ,
340
+ { parts : [ { text : '' } ] , role : 'user' } ,
341
+ ] ) ;
342
+ } ) ;
343
+
344
+ it ( 'should include system role if there is a system role prompt' , ( ) => {
345
+ const messages : OpenAIChatMessage [ ] = [
346
+ { content : 'you are ChatGPT' , role : 'system' } ,
347
+ { content : 'Who are you' , role : 'user' } ,
348
+ ] ;
349
+
350
+ const contents = instance [ 'buildGoogleMessages' ] ( messages , 'gemini-pro' ) ;
351
+
352
+ expect ( contents ) . toHaveLength ( 3 ) ;
353
+ expect ( contents ) . toEqual ( [
354
+ { parts : [ { text : 'you are ChatGPT' } ] , role : 'user' } ,
355
+ { parts : [ { text : '' } ] , role : 'model' } ,
356
+ { parts : [ { text : 'Who are you' } ] , role : 'user' } ,
357
+ ] ) ;
358
+ } ) ;
359
+
360
+ it ( 'should not modify the length if model is gemini-1.5-pro' , ( ) => {
361
+ const messages : OpenAIChatMessage [ ] = [
362
+ { content : 'Hello' , role : 'user' } ,
363
+ { content : 'Hi' , role : 'assistant' } ,
364
+ ] ;
365
+
366
+ const contents = instance [ 'buildGoogleMessages' ] ( messages , 'gemini-1.5-pro-latest' ) ;
329
367
330
- expect ( usedModel ) . toEqual ( 'gemini-pro' ) ; // 假设 'gemini-pro' 是默认文本模型
331
368
expect ( contents ) . toHaveLength ( 2 ) ;
332
369
expect ( contents ) . toEqual ( [
333
370
{ parts : [ { text : 'Hello' } ] , role : 'user' } ,
@@ -348,9 +385,8 @@ describe('LobeGoogleAI', () => {
348
385
const model = 'gemini-pro-vision' ;
349
386
350
387
// 调用 buildGoogleMessages 方法
351
- const { contents, model : usedModel } = instance [ 'buildGoogleMessages' ] ( messages , model ) ;
388
+ const contents = instance [ 'buildGoogleMessages' ] ( messages , model ) ;
352
389
353
- expect ( usedModel ) . toEqual ( model ) ;
354
390
expect ( contents ) . toHaveLength ( 1 ) ;
355
391
expect ( contents ) . toEqual ( [
356
392
{
@@ -360,5 +396,35 @@ describe('LobeGoogleAI', () => {
360
396
] ) ;
361
397
} ) ;
362
398
} ) ;
399
+
400
+ describe ( 'convertModel' , ( ) => {
401
+ it ( 'should use default text model when no images are included in messages' , ( ) => {
402
+ const messages : OpenAIChatMessage [ ] = [
403
+ { content : 'Hello' , role : 'user' } ,
404
+ { content : 'Hi' , role : 'assistant' } ,
405
+ ] ;
406
+
407
+ // 调用 buildGoogleMessages 方法
408
+ const model = instance [ 'convertModel' ] ( 'gemini-pro-vision' , messages ) ;
409
+
410
+ expect ( model ) . toEqual ( 'gemini-pro' ) ; // 假设 'gemini-pro' 是默认文本模型
411
+ } ) ;
412
+
413
+ it ( 'should use specified model when images are included in messages' , ( ) => {
414
+ const messages : OpenAIChatMessage [ ] = [
415
+ {
416
+ content : [
417
+ { type : 'text' , text : 'Hello' } ,
418
+ { type : 'image_url' , image_url : { url : 'data:image/png;base64,...' } } ,
419
+ ] ,
420
+ role : 'user' ,
421
+ } ,
422
+ ] ;
423
+
424
+ const model = instance [ 'convertModel' ] ( 'gemini-pro-vision' , messages ) ;
425
+
426
+ expect ( model ) . toEqual ( 'gemini-pro-vision' ) ;
427
+ } ) ;
428
+ } ) ;
363
429
} ) ;
364
430
} ) ;
0 commit comments