diff --git a/.changeset/shiny-dogs-argue.md b/.changeset/shiny-dogs-argue.md new file mode 100644 index 0000000000000000000000000000000000000000..99dfe6405f83bf93fec8a4ac5443355879bb3032 --- /dev/null +++ b/.changeset/shiny-dogs-argue.md @@ -0,0 +1,5 @@ +--- +"llamaindex": patch +--- + +Added the latest preview gemini models and multi modal images taken into account diff --git a/packages/core/src/llm/gemini/base.ts b/packages/core/src/llm/gemini/base.ts index c959c2732f2e122059dac196826df2bba2fc2c0c..5cc072bca8b2206b9193fabb5eae683392ad2be4 100644 --- a/packages/core/src/llm/gemini/base.ts +++ b/packages/core/src/llm/gemini/base.ts @@ -35,11 +35,16 @@ export const GEMINI_MODEL_INFO_MAP: Record<GEMINI_MODEL, GeminiModelInfo> = { [GEMINI_MODEL.GEMINI_PRO]: { contextWindow: 30720 }, [GEMINI_MODEL.GEMINI_PRO_VISION]: { contextWindow: 12288 }, [GEMINI_MODEL.GEMINI_PRO_LATEST]: { contextWindow: 10 ** 6 }, + // multi-modal/multi turn + [GEMINI_MODEL.GEMINI_PRO_1_5_PRO_PREVIEW]: { contextWindow: 10 ** 6 }, + [GEMINI_MODEL.GEMINI_PRO_1_5_FLASH_PREVIEW]: { contextWindow: 10 ** 6 }, }; const SUPPORT_TOOL_CALL_MODELS: GEMINI_MODEL[] = [ GEMINI_MODEL.GEMINI_PRO, GEMINI_MODEL.GEMINI_PRO_VISION, + GEMINI_MODEL.GEMINI_PRO_1_5_PRO_PREVIEW, + GEMINI_MODEL.GEMINI_PRO_1_5_FLASH_PREVIEW, ]; const DEFAULT_GEMINI_PARAMS = { diff --git a/packages/core/src/llm/gemini/types.ts b/packages/core/src/llm/gemini/types.ts index 112accea64386c2b30c1bab605ba83f6058656ee..1ef3a881a4407fe6af498c66ee4403a5757cc230 100644 --- a/packages/core/src/llm/gemini/types.ts +++ b/packages/core/src/llm/gemini/types.ts @@ -51,6 +51,8 @@ export enum GEMINI_MODEL { GEMINI_PRO = "gemini-pro", GEMINI_PRO_VISION = "gemini-pro-vision", GEMINI_PRO_LATEST = "gemini-1.5-pro-latest", + GEMINI_PRO_1_5_PRO_PREVIEW = "gemini-1.5-pro-preview-0514", + GEMINI_PRO_1_5_FLASH_PREVIEW = "gemini-1.5-flash-preview-0514", } export interface GeminiModelInfo { diff --git a/packages/core/src/llm/gemini/utils.ts b/packages/core/src/llm/gemini/utils.ts index fdbd6ef77a998570327a5c44aba8b614b9366831..e20b5f06500a3860ee0dc6113d0964213935a164 100644 --- a/packages/core/src/llm/gemini/utils.ts +++ b/packages/core/src/llm/gemini/utils.ts @@ -99,7 +99,13 @@ export const cleanParts = ( ): GeminiMessageContent => { return { ...message, - parts: message.parts.filter((part) => part.text?.trim()), + parts: message.parts.filter( + (part) => + part.text?.trim() || + part.inlineData || + part.fileData || + part.functionCall, + ), }; }; @@ -147,24 +153,28 @@ export class GeminiHelper { public static mergeNeighboringSameRoleMessages( messages: GeminiMessageContent[], ): GeminiMessageContent[] { - return messages.reduce( - ( - result: GeminiMessageContent[], - current: GeminiMessageContent, - index: number, - ) => { - if (index > 0 && messages[index - 1].role === current.role) { - result[result.length - 1].parts = [ - ...result[result.length - 1].parts, - ...current.parts, - ]; - } else { - result.push(current); - } - return result; - }, - [], - ); + return messages + .map(cleanParts) + .filter((message) => message.parts.length) + .reduce( + ( + result: GeminiMessageContent[], + current: GeminiMessageContent, + index: number, + original: GeminiMessageContent[], + ) => { + if (index > 0 && original[index - 1].role === current.role) { + result[result.length - 1].parts = [ + ...result[result.length - 1].parts, + ...current.parts, + ]; + } else { + result.push(current); + } + return result; + }, + [], + ); } public static messageContentToGeminiParts(content: MessageContent): Part[] {