From 8c5a30db9da64e94033a138e173c846985ce999d Mon Sep 17 00:00:00 2001
From: Timothy Carambat <rambat1010@gmail.com>
Date: Wed, 22 May 2024 10:53:49 -0500
Subject: [PATCH] Support dynamic context length - VoyageAI (#1489)

---
 .../GeneralSettings/LLMPreference/index.jsx     |  9 +++++----
 server/utils/EmbeddingEngines/voyageAi/index.js | 17 ++++++++++++++++-
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
index 5c4b0b2f0..70d1d135a 100644
--- a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
+++ b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
@@ -394,16 +394,17 @@ export default function GeneralLLMPreference() {
                   >
                     <div className="flex gap-x-4 items-center">
                       <img
-                        src={selectedLLMObject.logo}
-                        alt={`${selectedLLMObject.name} logo`}
+                        src={selectedLLMObject?.logo || AnythingLLMIcon}
+                        alt={`${selectedLLMObject?.name} logo`}
                         className="w-10 h-10 rounded-md"
                       />
                       <div className="flex flex-col text-left">
                         <div className="text-sm font-semibold text-white">
-                          {selectedLLMObject.name}
+                          {selectedLLMObject?.name || "None selected"}
                         </div>
                         <div className="mt-1 text-xs text-[#D2D5DB]">
-                          {selectedLLMObject.description}
+                          {selectedLLMObject?.description ||
+                            "You need to select an LLM"}
                         </div>
                       </div>
                     </div>
diff --git a/server/utils/EmbeddingEngines/voyageAi/index.js b/server/utils/EmbeddingEngines/voyageAi/index.js
index b25d3208d..fe2a39643 100644
--- a/server/utils/EmbeddingEngines/voyageAi/index.js
+++ b/server/utils/EmbeddingEngines/voyageAi/index.js
@@ -15,7 +15,22 @@ class VoyageAiEmbedder {
 
     // Limit of how many strings we can process in a single pass to stay with resource or network limits
     this.batchSize = 128; // Voyage AI's limit per request is 128 https://docs.voyageai.com/docs/rate-limits#use-larger-batches
-    this.embeddingMaxChunkLength = 4000; // https://docs.voyageai.com/docs/embeddings - assume a token is roughly 4 letters with some padding
+    this.embeddingMaxChunkLength = this.#getMaxEmbeddingLength();
+  }
+
+  // https://docs.voyageai.com/docs/embeddings
+  #getMaxEmbeddingLength() {
+    switch (this.model) {
+      case "voyage-large-2-instruct":
+      case "voyage-law-2":
+      case "voyage-code-2":
+      case "voyage-large-2":
+        return 16_000;
+      case "voyage-2":
+        return 4_000;
+      default:
+        return 4_000;
+    }
   }
 
   async embedTextInput(textInput) {
-- 
GitLab