From 9ed2309757e7280e280785885a0a37e1598bec2d Mon Sep 17 00:00:00 2001
From: Sean Hatfield <seanhatfield5@gmail.com>
Date: Mon, 13 May 2024 12:58:16 -0700
Subject: [PATCH] [FEAT] Add API key support for Oobabooga Web UI (#1354)

* add api key support for oobabooga web ui

* dont expose API Key for TextWebGenUi

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>
---
 docker/.env.example                                |  1 +
 .../LLMSelection/TextGenWebUIOptions/index.jsx     | 14 ++++++++++++++
 server/.env.example                                |  1 +
 server/models/systemSettings.js                    |  1 +
 server/utils/AiProviders/textGenWebUI/index.js     |  2 +-
 .../utils/agents/aibitat/providers/textgenwebui.js |  2 +-
 server/utils/helpers/updateENV.js                  |  4 ++++
 7 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/docker/.env.example b/docker/.env.example
index 5ea5ce609..3f99e52d4 100644
--- a/docker/.env.example
+++ b/docker/.env.example
@@ -74,6 +74,7 @@ GID='1000'
 # LLM_PROVIDER='textgenwebui'
 # TEXT_GEN_WEB_UI_BASE_PATH='http://127.0.0.1:5000/v1'
 # TEXT_GEN_WEB_UI_TOKEN_LIMIT=4096
+# TEXT_GEN_WEB_UI_API_KEY='sk-123abc'
 
 # LLM_PROVIDER='generic-openai'
 # GENERIC_OPEN_AI_BASE_PATH='http://proxy.url.openai.com/v1'
diff --git a/frontend/src/components/LLMSelection/TextGenWebUIOptions/index.jsx b/frontend/src/components/LLMSelection/TextGenWebUIOptions/index.jsx
index ec29222d2..50bb84154 100644
--- a/frontend/src/components/LLMSelection/TextGenWebUIOptions/index.jsx
+++ b/frontend/src/components/LLMSelection/TextGenWebUIOptions/index.jsx
@@ -32,6 +32,20 @@ export default function TextGenWebUIOptions({ settings }) {
           autoComplete="off"
         />
       </div>
+      <div className="flex flex-col w-60">
+        <label className="text-white text-sm font-semibold block mb-4">
+          API Key (Optional)
+        </label>
+        <input
+          type="password"
+          name="TextGenWebUIAPIKey"
+          className="bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+          placeholder="TextGen Web UI API Key"
+          defaultValue={settings?.TextGenWebUIAPIKey ? "*".repeat(20) : ""}
+          autoComplete="off"
+          spellCheck={false}
+        />
+      </div>
     </div>
   );
 }
diff --git a/server/.env.example b/server/.env.example
index 008d90d2f..8f424d82a 100644
--- a/server/.env.example
+++ b/server/.env.example
@@ -71,6 +71,7 @@ JWT_SECRET="my-random-string-for-seeding" # Please generate random string at lea
 # LLM_PROVIDER='textgenwebui'
 # TEXT_GEN_WEB_UI_BASE_PATH='http://127.0.0.1:5000/v1'
 # TEXT_GEN_WEB_UI_TOKEN_LIMIT=4096
+# TEXT_GEN_WEB_UI_API_KEY='sk-123abc'
 
 # LLM_PROVIDER='generic-openai'
 # GENERIC_OPEN_AI_BASE_PATH='http://proxy.url.openai.com/v1'
diff --git a/server/models/systemSettings.js b/server/models/systemSettings.js
index 21d7af217..3c23a7d39 100644
--- a/server/models/systemSettings.js
+++ b/server/models/systemSettings.js
@@ -367,6 +367,7 @@ const SystemSettings = {
       // Text Generation Web UI Keys
       TextGenWebUIBasePath: process.env.TEXT_GEN_WEB_UI_BASE_PATH,
       TextGenWebUITokenLimit: process.env.TEXT_GEN_WEB_UI_MODEL_TOKEN_LIMIT,
+      TextGenWebUIAPIKey: !!process.env.TEXT_GEN_WEB_UI_API_KEY,
 
       // Generic OpenAI Keys
       GenericOpenAiBasePath: process.env.GENERIC_OPEN_AI_BASE_PATH,
diff --git a/server/utils/AiProviders/textGenWebUI/index.js b/server/utils/AiProviders/textGenWebUI/index.js
index ae0282a30..dfce76a5a 100644
--- a/server/utils/AiProviders/textGenWebUI/index.js
+++ b/server/utils/AiProviders/textGenWebUI/index.js
@@ -14,7 +14,7 @@ class TextGenWebUILLM {
     this.basePath = process.env.TEXT_GEN_WEB_UI_BASE_PATH;
     this.openai = new OpenAIApi({
       baseURL: this.basePath,
-      apiKey: null,
+      apiKey: process.env.TEXT_GEN_WEB_UI_API_KEY ?? null,
     });
     this.model = null;
     this.limits = {
diff --git a/server/utils/agents/aibitat/providers/textgenwebui.js b/server/utils/agents/aibitat/providers/textgenwebui.js
index 767577d42..d1e424255 100644
--- a/server/utils/agents/aibitat/providers/textgenwebui.js
+++ b/server/utils/agents/aibitat/providers/textgenwebui.js
@@ -13,7 +13,7 @@ class TextWebGenUiProvider extends InheritMultiple([Provider, UnTooled]) {
     super();
     const client = new OpenAI({
       baseURL: process.env.TEXT_GEN_WEB_UI_BASE_PATH,
-      apiKey: null,
+      apiKey: process.env.TEXT_GEN_WEB_UI_API_KEY ?? null,
       maxRetries: 3,
     });
 
diff --git a/server/utils/helpers/updateENV.js b/server/utils/helpers/updateENV.js
index e2f5c7526..947fbc624 100644
--- a/server/utils/helpers/updateENV.js
+++ b/server/utils/helpers/updateENV.js
@@ -155,6 +155,10 @@ const KEY_MAPPING = {
     envKey: "TEXT_GEN_WEB_UI_MODEL_TOKEN_LIMIT",
     checks: [nonZero],
   },
+  TextGenWebUIAPIKey: {
+    envKey: "TEXT_GEN_WEB_UI_API_KEY",
+    checks: [],
+  },
 
   // Generic OpenAI InferenceSettings
   GenericOpenAiBasePath: {
-- 
GitLab