2025-06-13 01:25:42 -07:00
|
|
|
/**
|
|
|
|
|
* @license
|
|
|
|
|
* Copyright 2025 Google LLC
|
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
*/
|
|
|
|
|
|
2025-11-18 12:01:16 -05:00
|
|
|
export const PREVIEW_GEMINI_MODEL = 'gemini-3-pro-preview';
|
2025-12-17 09:43:21 -08:00
|
|
|
export const PREVIEW_GEMINI_FLASH_MODEL = 'gemini-3-flash-preview';
|
2025-06-17 23:08:04 -07:00
|
|
|
export const DEFAULT_GEMINI_MODEL = 'gemini-2.5-pro';
|
2025-06-19 22:54:00 -07:00
|
|
|
export const DEFAULT_GEMINI_FLASH_MODEL = 'gemini-2.5-flash';
|
2025-07-27 17:40:55 -04:00
|
|
|
export const DEFAULT_GEMINI_FLASH_LITE_MODEL = 'gemini-2.5-flash-lite';
|
2025-08-01 17:11:51 -04:00
|
|
|
|
2025-12-09 15:09:46 -05:00
|
|
|
export const VALID_GEMINI_MODELS = new Set([
|
|
|
|
|
PREVIEW_GEMINI_MODEL,
|
2025-12-17 09:43:21 -08:00
|
|
|
PREVIEW_GEMINI_FLASH_MODEL,
|
2025-12-09 15:09:46 -05:00
|
|
|
DEFAULT_GEMINI_MODEL,
|
|
|
|
|
DEFAULT_GEMINI_FLASH_MODEL,
|
|
|
|
|
DEFAULT_GEMINI_FLASH_LITE_MODEL,
|
|
|
|
|
]);
|
|
|
|
|
|
2025-12-17 09:43:21 -08:00
|
|
|
export const PREVIEW_GEMINI_MODEL_AUTO = 'auto-gemini-3';
|
|
|
|
|
export const DEFAULT_GEMINI_MODEL_AUTO = 'auto-gemini-2.5';
|
2025-09-12 15:57:07 -04:00
|
|
|
|
2025-11-18 12:01:16 -05:00
|
|
|
// Model aliases for user convenience.
|
2025-12-17 09:43:21 -08:00
|
|
|
export const GEMINI_MODEL_ALIAS_AUTO = 'auto';
|
2025-11-18 12:01:16 -05:00
|
|
|
export const GEMINI_MODEL_ALIAS_PRO = 'pro';
|
|
|
|
|
export const GEMINI_MODEL_ALIAS_FLASH = 'flash';
|
|
|
|
|
export const GEMINI_MODEL_ALIAS_FLASH_LITE = 'flash-lite';
|
|
|
|
|
|
2025-06-13 01:25:42 -07:00
|
|
|
export const DEFAULT_GEMINI_EMBEDDING_MODEL = 'gemini-embedding-001';
|
2025-08-29 09:20:50 -07:00
|
|
|
|
2025-11-03 13:39:06 -05:00
|
|
|
// Cap the thinking at 8192 to prevent run-away thinking loops.
|
|
|
|
|
export const DEFAULT_THINKING_MODE = 8192;
|
2025-09-11 13:38:50 -04:00
|
|
|
|
2025-11-18 12:01:16 -05:00
|
|
|
/**
|
2025-12-22 10:18:51 -05:00
|
|
|
* Resolves the requested model alias (e.g., 'auto-gemini-3', 'pro', 'flash', 'flash-lite')
|
2025-11-18 12:01:16 -05:00
|
|
|
* to a concrete model name, considering preview features.
|
|
|
|
|
*
|
|
|
|
|
* @param requestedModel The model alias or concrete model name requested by the user.
|
|
|
|
|
* @param previewFeaturesEnabled A boolean indicating if preview features are enabled.
|
|
|
|
|
* @returns The resolved concrete model name.
|
|
|
|
|
*/
|
|
|
|
|
export function resolveModel(
|
|
|
|
|
requestedModel: string,
|
2025-12-17 09:43:21 -08:00
|
|
|
previewFeaturesEnabled: boolean = false,
|
2025-11-18 12:01:16 -05:00
|
|
|
): string {
|
|
|
|
|
switch (requestedModel) {
|
2025-12-17 09:43:21 -08:00
|
|
|
case PREVIEW_GEMINI_MODEL_AUTO: {
|
|
|
|
|
return PREVIEW_GEMINI_MODEL;
|
|
|
|
|
}
|
|
|
|
|
case DEFAULT_GEMINI_MODEL_AUTO: {
|
|
|
|
|
return DEFAULT_GEMINI_MODEL;
|
|
|
|
|
}
|
2026-01-20 16:03:34 -05:00
|
|
|
case GEMINI_MODEL_ALIAS_AUTO:
|
2025-11-18 12:01:16 -05:00
|
|
|
case GEMINI_MODEL_ALIAS_PRO: {
|
|
|
|
|
return previewFeaturesEnabled
|
|
|
|
|
? PREVIEW_GEMINI_MODEL
|
|
|
|
|
: DEFAULT_GEMINI_MODEL;
|
|
|
|
|
}
|
|
|
|
|
case GEMINI_MODEL_ALIAS_FLASH: {
|
2025-12-17 09:43:21 -08:00
|
|
|
return previewFeaturesEnabled
|
|
|
|
|
? PREVIEW_GEMINI_FLASH_MODEL
|
|
|
|
|
: DEFAULT_GEMINI_FLASH_MODEL;
|
2025-11-18 12:01:16 -05:00
|
|
|
}
|
|
|
|
|
case GEMINI_MODEL_ALIAS_FLASH_LITE: {
|
|
|
|
|
return DEFAULT_GEMINI_FLASH_LITE_MODEL;
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
return requestedModel;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-11 13:38:50 -04:00
|
|
|
/**
|
2025-12-17 09:43:21 -08:00
|
|
|
* Resolves the appropriate model based on the classifier's decision.
|
2025-09-11 13:38:50 -04:00
|
|
|
*
|
2025-12-17 09:43:21 -08:00
|
|
|
* @param requestedModel The current requested model (e.g. auto-gemini-2.5).
|
|
|
|
|
* @param modelAlias The alias selected by the classifier ('flash' or 'pro').
|
|
|
|
|
* @param previewFeaturesEnabled Whether preview features are enabled.
|
|
|
|
|
* @returns The resolved concrete model name.
|
|
|
|
|
*/
|
|
|
|
|
export function resolveClassifierModel(
|
|
|
|
|
requestedModel: string,
|
|
|
|
|
modelAlias: string,
|
|
|
|
|
previewFeaturesEnabled: boolean = false,
|
|
|
|
|
): string {
|
|
|
|
|
if (modelAlias === GEMINI_MODEL_ALIAS_FLASH) {
|
|
|
|
|
if (
|
|
|
|
|
requestedModel === DEFAULT_GEMINI_MODEL_AUTO ||
|
|
|
|
|
requestedModel === DEFAULT_GEMINI_MODEL
|
|
|
|
|
) {
|
|
|
|
|
return DEFAULT_GEMINI_FLASH_MODEL;
|
|
|
|
|
}
|
|
|
|
|
if (
|
|
|
|
|
requestedModel === PREVIEW_GEMINI_MODEL_AUTO ||
|
|
|
|
|
requestedModel === PREVIEW_GEMINI_MODEL
|
|
|
|
|
) {
|
|
|
|
|
return PREVIEW_GEMINI_FLASH_MODEL;
|
|
|
|
|
}
|
|
|
|
|
return resolveModel(GEMINI_MODEL_ALIAS_FLASH, previewFeaturesEnabled);
|
|
|
|
|
}
|
|
|
|
|
return resolveModel(requestedModel, previewFeaturesEnabled);
|
|
|
|
|
}
|
|
|
|
|
export function getDisplayString(
|
|
|
|
|
model: string,
|
|
|
|
|
previewFeaturesEnabled: boolean = false,
|
|
|
|
|
) {
|
|
|
|
|
switch (model) {
|
|
|
|
|
case PREVIEW_GEMINI_MODEL_AUTO:
|
|
|
|
|
return 'Auto (Gemini 3)';
|
|
|
|
|
case DEFAULT_GEMINI_MODEL_AUTO:
|
|
|
|
|
return 'Auto (Gemini 2.5)';
|
|
|
|
|
case GEMINI_MODEL_ALIAS_PRO:
|
2026-01-05 23:07:44 -05:00
|
|
|
return previewFeaturesEnabled
|
|
|
|
|
? PREVIEW_GEMINI_MODEL
|
|
|
|
|
: DEFAULT_GEMINI_MODEL;
|
2025-12-17 09:43:21 -08:00
|
|
|
case GEMINI_MODEL_ALIAS_FLASH:
|
2026-01-05 23:07:44 -05:00
|
|
|
return previewFeaturesEnabled
|
|
|
|
|
? PREVIEW_GEMINI_FLASH_MODEL
|
|
|
|
|
: DEFAULT_GEMINI_FLASH_MODEL;
|
2025-12-17 09:43:21 -08:00
|
|
|
default:
|
2026-01-05 23:07:44 -05:00
|
|
|
return model;
|
2025-09-11 13:38:50 -04:00
|
|
|
}
|
2025-12-17 09:43:21 -08:00
|
|
|
}
|
2025-09-11 13:38:50 -04:00
|
|
|
|
2025-12-17 09:43:21 -08:00
|
|
|
/**
|
|
|
|
|
* Checks if the model is a preview model.
|
|
|
|
|
*
|
|
|
|
|
* @param model The model name to check.
|
|
|
|
|
* @returns True if the model is a preview model.
|
|
|
|
|
*/
|
|
|
|
|
export function isPreviewModel(model: string): boolean {
|
|
|
|
|
return (
|
|
|
|
|
model === PREVIEW_GEMINI_MODEL ||
|
|
|
|
|
model === PREVIEW_GEMINI_FLASH_MODEL ||
|
|
|
|
|
model === PREVIEW_GEMINI_MODEL_AUTO
|
|
|
|
|
);
|
2025-09-11 13:38:50 -04:00
|
|
|
}
|
2025-11-18 12:01:16 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if the model is a Gemini 2.x model.
|
|
|
|
|
*
|
|
|
|
|
* @param model The model name to check.
|
2025-12-15 15:36:34 -05:00
|
|
|
* @returns True if the model is a Gemini-2.x model.
|
2025-11-18 12:01:16 -05:00
|
|
|
*/
|
|
|
|
|
export function isGemini2Model(model: string): boolean {
|
|
|
|
|
return /^gemini-2(\.|$)/.test(model);
|
|
|
|
|
}
|
2025-12-15 15:36:34 -05:00
|
|
|
|
2026-01-07 13:21:10 -08:00
|
|
|
/**
|
|
|
|
|
* Checks if the model is an auto model.
|
|
|
|
|
*
|
|
|
|
|
* @param model The model name to check.
|
|
|
|
|
* @returns True if the model is an auto model.
|
|
|
|
|
*/
|
|
|
|
|
export function isAutoModel(model: string): boolean {
|
|
|
|
|
return (
|
|
|
|
|
model === GEMINI_MODEL_ALIAS_AUTO ||
|
|
|
|
|
model === PREVIEW_GEMINI_MODEL_AUTO ||
|
|
|
|
|
model === DEFAULT_GEMINI_MODEL_AUTO
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-15 15:36:34 -05:00
|
|
|
/**
|
|
|
|
|
* Checks if the model supports multimodal function responses (multimodal data nested within function response).
|
|
|
|
|
* This is supported in Gemini 3.
|
|
|
|
|
*
|
|
|
|
|
* @param model The model name to check.
|
|
|
|
|
* @returns True if the model supports multimodal function responses.
|
|
|
|
|
*/
|
|
|
|
|
export function supportsMultimodalFunctionResponse(model: string): boolean {
|
|
|
|
|
return model.startsWith('gemini-3-');
|
|
|
|
|
}
|