From cc7e7fb3ac493765d3887b12792120391e77f45f Mon Sep 17 00:00:00 2001
From: Sean Hatfield <seanhatfield5@gmail.com>
Date: Thu, 23 May 2024 09:42:30 -0700
Subject: [PATCH] [FEAT] Add support for gemini-1.5-flash-latest model (#1502)

* add support for gemini-1.5-flash-latest

* update comment in gemini LLM provider
---
 .../LLMSelection/GeminiLLMOptions/index.jsx        |  6 +++++-
 frontend/src/hooks/useGetProvidersModels.js        |  2 +-
 server/utils/AiProviders/gemini/index.js           | 14 +++++++++++---
 server/utils/helpers/updateENV.js                  |  6 +++++-
 4 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/frontend/src/components/LLMSelection/GeminiLLMOptions/index.jsx b/frontend/src/components/LLMSelection/GeminiLLMOptions/index.jsx
index d2846704d..87e058827 100644
--- a/frontend/src/components/LLMSelection/GeminiLLMOptions/index.jsx
+++ b/frontend/src/components/LLMSelection/GeminiLLMOptions/index.jsx
@@ -30,7 +30,11 @@ export default function GeminiLLMOptions({ settings }) {
                 required={true}
                 className="bg-zinc-900 border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
               >
-                {["gemini-pro", "gemini-1.5-pro-latest"].map((model) => {
+                {[
+                  "gemini-pro",
+                  "gemini-1.5-pro-latest",
+                  "gemini-1.5-flash-latest",
+                ].map((model) => {
                   return (
                     <option key={model} value={model}>
                       {model}
diff --git a/frontend/src/hooks/useGetProvidersModels.js b/frontend/src/hooks/useGetProvidersModels.js
index 29075c557..6687f0a7b 100644
--- a/frontend/src/hooks/useGetProvidersModels.js
+++ b/frontend/src/hooks/useGetProvidersModels.js
@@ -10,7 +10,7 @@ export const DISABLED_PROVIDERS = [
 ];
 const PROVIDER_DEFAULT_MODELS = {
   openai: [],
-  gemini: ["gemini-pro", "gemini-1.5-pro-latest"],
+  gemini: ["gemini-pro", "gemini-1.5-pro-latest", "gemini-1.5-flash-latest"],
   anthropic: [
     "claude-instant-1.2",
     "claude-2.0",
diff --git a/server/utils/AiProviders/gemini/index.js b/server/utils/AiProviders/gemini/index.js
index 0c2cc7697..30c9ffa35 100644
--- a/server/utils/AiProviders/gemini/index.js
+++ b/server/utils/AiProviders/gemini/index.js
@@ -17,8 +17,12 @@ class GeminiLLM {
     this.gemini = genAI.getGenerativeModel(
       { model: this.model },
       {
-        // Gemini-1.5-pro is only available on the v1beta API.
-        apiVersion: this.model === "gemini-1.5-pro-latest" ? "v1beta" : "v1",
+        // Gemini-1.5-pro and Gemini-1.5-flash are only available on the v1beta API.
+        apiVersion:
+          this.model === "gemini-1.5-pro-latest" ||
+          this.model === "gemini-1.5-flash-latest"
+            ? "v1beta"
+            : "v1",
       }
     );
     this.limits = {
@@ -95,7 +99,11 @@ class GeminiLLM {
   }
 
   isValidChatCompletionModel(modelName = "") {
-    const validModels = ["gemini-pro", "gemini-1.5-pro-latest"];
+    const validModels = [
+      "gemini-pro",
+      "gemini-1.5-pro-latest",
+      "gemini-1.5-flash-latest",
+    ];
     return validModels.includes(modelName);
   }
 
diff --git a/server/utils/helpers/updateENV.js b/server/utils/helpers/updateENV.js
index c8811c9de..c95ccd57d 100644
--- a/server/utils/helpers/updateENV.js
+++ b/server/utils/helpers/updateENV.js
@@ -526,7 +526,11 @@ function supportedTranscriptionProvider(input = "") {
 }
 
 function validGeminiModel(input = "") {
-  const validModels = ["gemini-pro", "gemini-1.5-pro-latest"];
+  const validModels = [
+    "gemini-pro",
+    "gemini-1.5-pro-latest",
+    "gemini-1.5-flash-latest",
+  ];
   return validModels.includes(input)
     ? null
     : `Invalid Model type. Must be one of ${validModels.join(", ")}.`;