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[] {