Skip to content

Commit cbaccd7

Browse files
committed
feat: add support for gemini 3.1 flash-lite
1 parent 7c7832e commit cbaccd7

3 files changed

Lines changed: 99 additions & 0 deletions

File tree

packages/typescript/ai-gemini/src/adapters/summarize.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export interface GeminiSummarizeConfig extends GeminiClientConfig {}
2121
* Available Gemini models for summarization
2222
*/
2323
export const GeminiSummarizeModels = [
24+
'gemini-3.1-flash-lite',
2425
'gemini-2.0-flash',
2526
'gemini-1.5-flash',
2627
'gemini-1.5-pro',

packages/typescript/ai-gemini/src/model-meta.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,43 @@ const GEMINI_3_1_FLASH_IMAGE = {
228228
GeminiThinkingOptions
229229
>
230230

231+
const GEMINI_3_1_FLASH_LITE = {
232+
name: 'gemini-3.1-flash-lite',
233+
max_input_tokens: 1_048_576,
234+
max_output_tokens: 65_536,
235+
knowledge_cutoff: '2025-01-01',
236+
supports: {
237+
input: ['text', 'image', 'audio', 'video', 'document'],
238+
output: ['text'],
239+
capabilities: [
240+
'batch_api',
241+
'caching',
242+
'code_execution',
243+
'file_search',
244+
'function_calling',
245+
'search_grounding',
246+
'structured_output',
247+
'thinking',
248+
'url_context',
249+
],
250+
},
251+
pricing: {
252+
input: {
253+
normal: 0.25,
254+
},
255+
output: {
256+
normal: 1.5,
257+
},
258+
},
259+
} as const satisfies ModelMeta<
260+
GeminiToolConfigOptions &
261+
GeminiSafetyOptions &
262+
GeminiCommonConfigOptions &
263+
GeminiCachedContentOptions &
264+
GeminiStructuredOutputOptions &
265+
GeminiThinkingOptions
266+
>
267+
231268
const GEMINI_2_5_PRO = {
232269
name: 'gemini-2.5-pro',
233270
max_input_tokens: 1_048_576,
@@ -894,6 +931,7 @@ export const GEMINI_MODELS = [
894931
GEMINI_3_1_PRO.name,
895932
GEMINI_3_PRO.name,
896933
GEMINI_3_FLASH.name,
934+
GEMINI_3_1_FLASH_LITE.name,
897935
GEMINI_2_5_PRO.name,
898936
GEMINI_2_5_FLASH.name,
899937
GEMINI_2_5_FLASH_PREVIEW.name,
@@ -1005,6 +1043,12 @@ export type GeminiChatModelProviderOptionsByName = {
10051043
GeminiStructuredOutputOptions &
10061044
GeminiThinkingOptions &
10071045
GeminiThinkingAdvancedOptions
1046+
[GEMINI_3_1_FLASH_LITE.name]: GeminiToolConfigOptions &
1047+
GeminiSafetyOptions &
1048+
GeminiCommonConfigOptions &
1049+
GeminiCachedContentOptions &
1050+
GeminiStructuredOutputOptions &
1051+
GeminiThinkingOptions
10081052
[GEMINI_2_5_PRO.name]: GeminiToolConfigOptions &
10091053
GeminiSafetyOptions &
10101054
GeminiCommonConfigOptions &
@@ -1066,6 +1110,7 @@ export type GeminiModelInputModalitiesByName = {
10661110
[GEMINI_3_1_PRO.name]: typeof GEMINI_3_1_PRO.supports.input
10671111
[GEMINI_3_PRO.name]: typeof GEMINI_3_PRO.supports.input
10681112
[GEMINI_3_FLASH.name]: typeof GEMINI_3_FLASH.supports.input
1113+
[GEMINI_3_1_FLASH_LITE.name]: typeof GEMINI_3_1_FLASH_LITE.supports.input
10691114
[GEMINI_2_5_PRO.name]: typeof GEMINI_2_5_PRO.supports.input
10701115
[GEMINI_2_5_FLASH_LITE.name]: typeof GEMINI_2_5_FLASH_LITE.supports.input
10711116
[GEMINI_2_5_FLASH_LITE_PREVIEW.name]: typeof GEMINI_2_5_FLASH_LITE_PREVIEW.supports.input

packages/typescript/ai-gemini/tests/model-meta.test.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,28 @@ describe('Gemini Model Provider Options Type Assertions', () => {
151151
// Should have base options
152152
expectTypeOf<Options>().toExtend<BaseOptions>()
153153
})
154+
155+
it('gemini-3.1-flash-lite should support thinking options', () => {
156+
type Model = 'gemini-3.1-flash-lite'
157+
type Options = GeminiChatModelProviderOptionsByName[Model]
158+
159+
// Should have thinking options
160+
expectTypeOf<Options>().toExtend<GeminiThinkingOptions>()
161+
162+
// Should have structured output options
163+
expectTypeOf<Options>().toExtend<GeminiStructuredOutputOptions>()
164+
165+
// Should have base options
166+
expectTypeOf<Options>().toExtend<BaseOptions>()
167+
168+
// Verify specific properties exist
169+
expectTypeOf<Options>().toHaveProperty('generationConfig')
170+
expectTypeOf<Options>().toHaveProperty('safetySettings')
171+
expectTypeOf<Options>().toHaveProperty('toolConfig')
172+
expectTypeOf<Options>().toHaveProperty('cachedContent')
173+
expectTypeOf<Options>().toHaveProperty('responseMimeType')
174+
expectTypeOf<Options>().toHaveProperty('responseSchema')
175+
})
154176
})
155177

156178
describe('Models WITHOUT thinking support', () => {
@@ -195,6 +217,7 @@ describe('Gemini Model Provider Options Type Assertions', () => {
195217

196218
expectTypeOf<'gemini-3-pro-preview'>().toExtend<Keys>()
197219
expectTypeOf<'gemini-3-flash-preview'>().toExtend<Keys>()
220+
expectTypeOf<'gemini-3.1-flash-lite'>().toExtend<Keys>()
198221
expectTypeOf<'gemini-2.5-pro'>().toExtend<Keys>()
199222
expectTypeOf<'gemini-2.5-flash'>().toExtend<Keys>()
200223
expectTypeOf<'gemini-2.5-flash-preview-09-2025'>().toExtend<Keys>()
@@ -244,6 +267,9 @@ describe('Gemini Model Provider Options Type Assertions', () => {
244267
expectTypeOf<
245268
GeminiChatModelProviderOptionsByName['gemini-2.5-flash-lite-preview-09-2025']
246269
>().toHaveProperty('safetySettings')
270+
expectTypeOf<
271+
GeminiChatModelProviderOptionsByName['gemini-3.1-flash-lite']
272+
>().toHaveProperty('safetySettings')
247273
expectTypeOf<
248274
GeminiChatModelProviderOptionsByName['gemini-2.0-flash']
249275
>().toHaveProperty('safetySettings')
@@ -274,6 +300,9 @@ describe('Gemini Model Provider Options Type Assertions', () => {
274300
expectTypeOf<
275301
GeminiChatModelProviderOptionsByName['gemini-2.5-flash-lite-preview-09-2025']
276302
>().toHaveProperty('toolConfig')
303+
expectTypeOf<
304+
GeminiChatModelProviderOptionsByName['gemini-3.1-flash-lite']
305+
>().toHaveProperty('toolConfig')
277306
expectTypeOf<
278307
GeminiChatModelProviderOptionsByName['gemini-2.0-flash']
279308
>().toHaveProperty('toolConfig')
@@ -304,6 +333,9 @@ describe('Gemini Model Provider Options Type Assertions', () => {
304333
expectTypeOf<
305334
GeminiChatModelProviderOptionsByName['gemini-2.5-flash-lite-preview-09-2025']
306335
>().toHaveProperty('cachedContent')
336+
expectTypeOf<
337+
GeminiChatModelProviderOptionsByName['gemini-3.1-flash-lite']
338+
>().toHaveProperty('cachedContent')
307339
expectTypeOf<
308340
GeminiChatModelProviderOptionsByName['gemini-2.0-flash']
309341
>().toHaveProperty('cachedContent')
@@ -336,6 +368,9 @@ describe('Gemini Model Provider Options Type Assertions', () => {
336368
expectTypeOf<
337369
GeminiChatModelProviderOptionsByName['gemini-2.5-flash-lite-preview-09-2025']
338370
>().toExtend<GeminiThinkingOptions>()
371+
expectTypeOf<
372+
GeminiChatModelProviderOptionsByName['gemini-3.1-flash-lite']
373+
>().toExtend<GeminiThinkingOptions>()
339374
})
340375

341376
it('models without thinking should NOT extend GeminiThinkingOptions', () => {
@@ -369,6 +404,9 @@ describe('Gemini Model Provider Options Type Assertions', () => {
369404
expectTypeOf<
370405
GeminiChatModelProviderOptionsByName['gemini-2.5-flash-lite-preview-09-2025']
371406
>().toExtend<GeminiStructuredOutputOptions>()
407+
expectTypeOf<
408+
GeminiChatModelProviderOptionsByName['gemini-3.1-flash-lite']
409+
>().toExtend<GeminiStructuredOutputOptions>()
372410
expectTypeOf<
373411
GeminiChatModelProviderOptionsByName['gemini-2.0-flash']
374412
>().toExtend<GeminiStructuredOutputOptions>()
@@ -387,7 +425,9 @@ describe('Gemini Model Provider Options Type Assertions', () => {
387425
*
388426
* Models with full multimodal (text + image + audio + video + document):
389427
* - gemini-3-pro-preview
428+
* - gemini-3-flash-preview
390429
* - gemini-2.5-pro
430+
* - gemini-3.1-flash-lite
391431
* - gemini-2.5-flash-lite (and preview)
392432
*
393433
* Models with limited multimodal (text + image + audio + video, NO document):
@@ -439,6 +479,19 @@ describe('Gemini Model Input Modality Type Assertions', () => {
439479
})
440480
})
441481

482+
describe('gemini-3.1-flash-lite (full multimodal)', () => {
483+
type Modalities = GeminiModelInputModalitiesByName['gemini-3.1-flash-lite']
484+
type Message = ConstrainedModelMessage<Modalities>
485+
486+
it('should allow all content part types', () => {
487+
expectTypeOf<MessageWithContent<TextPart>>().toExtend<Message>()
488+
expectTypeOf<MessageWithContent<ImagePart>>().toExtend<Message>()
489+
expectTypeOf<MessageWithContent<AudioPart>>().toExtend<Message>()
490+
expectTypeOf<MessageWithContent<VideoPart>>().toExtend<Message>()
491+
expectTypeOf<MessageWithContent<DocumentPart>>().toExtend<Message>()
492+
})
493+
})
494+
442495
describe('gemini-2.5-flash-lite (full multimodal)', () => {
443496
type Modalities = GeminiModelInputModalitiesByName['gemini-2.5-flash-lite']
444497
type Message = ConstrainedModelMessage<Modalities>

0 commit comments

Comments
 (0)