diff --git a/docker/.env.example b/docker/.env.example index 5ea5ce609da9707b58e640f046207d2d47a19a3d..3f99e52d436bb781ec9532160f94b637c8c2552d 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 ec29222d24482696272b7b92dad47e328d6a8e69..50bb841545b835696199f2698bd2af90d288e6d2 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 008d90d2fc7d94294932b2cff58a4259fe933fb9..8f424d82a6eba6688d926f46744e6cb83999db79 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 21d7af217975d17d505960f44778d006f00d0971..3c23a7d3925cfc64afbcfe2379a254238af34f4e 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 ae0282a30fce4579a6f5eafc7c8e7b089a9052a8..dfce76a5a5ec50dd40ae202981c6f493ef91f455 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 767577d423c0c1841ba5fb05596c9c9a7d869260..d1e424255a4a298e3df45049bcf85f70dd5f56e8 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 e2f5c7526e9ae0562d011f7e47f4a7aeab7e5cbb..947fbc62492e51de25bf21e02bd8fd7b60b49021 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: {