From 3e71b4f90f8c700bde45b0a168d4bacf37c86031 Mon Sep 17 00:00:00 2001 From: angelplusultra Date: Wed, 17 Sep 2025 10:36:05 -0700 Subject: [PATCH 1/2] Add User-Agent header on the requests sent by Generic OpenAI providers. --- server/endpoints/utils.js | 1 + server/utils/AiProviders/genericOpenAi/index.js | 4 ++++ server/utils/agents/aibitat/providers/genericOpenAi.js | 4 ++++ server/utils/helpers/getUserAgent.js | 10 ++++++++++ 4 files changed, 19 insertions(+) create mode 100644 server/utils/helpers/getUserAgent.js diff --git a/server/endpoints/utils.js b/server/endpoints/utils.js index e971290755d..f30d709c12e 100644 --- a/server/endpoints/utils.js +++ b/server/endpoints/utils.js @@ -169,5 +169,6 @@ function getDeploymentVersion() { module.exports = { utilEndpoints, getGitVersion, + getDeploymentVersion, getModelTag, }; diff --git a/server/utils/AiProviders/genericOpenAi/index.js b/server/utils/AiProviders/genericOpenAi/index.js index e7b35c74f93..24938f8afe9 100644 --- a/server/utils/AiProviders/genericOpenAi/index.js +++ b/server/utils/AiProviders/genericOpenAi/index.js @@ -8,6 +8,7 @@ const { clientAbortedHandler, } = require("../../helpers/chat/responses"); const { toValidNumber } = require("../../http"); +const { getAnythingLLMUserAgent } = require("../../helpers/getUserAgent"); class GenericOpenAiLLM { constructor(embedder = null, modelPreference = null) { @@ -21,6 +22,9 @@ class GenericOpenAiLLM { this.openai = new OpenAIApi({ baseURL: this.basePath, apiKey: process.env.GENERIC_OPEN_AI_API_KEY ?? null, + defaultHeaders: { + "User-Agent": getAnythingLLMUserAgent(), + }, }); this.model = modelPreference ?? process.env.GENERIC_OPEN_AI_MODEL_PREF ?? null; diff --git a/server/utils/agents/aibitat/providers/genericOpenAi.js b/server/utils/agents/aibitat/providers/genericOpenAi.js index c902dcb79ef..9b8fce12119 100644 --- a/server/utils/agents/aibitat/providers/genericOpenAi.js +++ b/server/utils/agents/aibitat/providers/genericOpenAi.js @@ -3,6 +3,7 @@ const Provider = require("./ai-provider.js"); const InheritMultiple = require("./helpers/classes.js"); const UnTooled = require("./helpers/untooled.js"); const { toValidNumber } = require("../../../http/index.js"); +const { getAnythingLLMUserAgent } = require("../../../helpers/getUserAgent"); /** * The agent provider for the Generic OpenAI provider. @@ -20,6 +21,9 @@ class GenericOpenAiProvider extends InheritMultiple([Provider, UnTooled]) { baseURL: process.env.GENERIC_OPEN_AI_BASE_PATH, apiKey: process.env.GENERIC_OPEN_AI_API_KEY ?? null, maxRetries: 3, + defaultHeaders: { + "User-Agent": getAnythingLLMUserAgent(), + }, }); this._client = client; diff --git a/server/utils/helpers/getUserAgent.js b/server/utils/helpers/getUserAgent.js new file mode 100644 index 00000000000..9353a7e61d4 --- /dev/null +++ b/server/utils/helpers/getUserAgent.js @@ -0,0 +1,10 @@ +const { getDeploymentVersion } = require("../../endpoints/utils"); + +function getAnythingLLMUserAgent() { + const version = getDeploymentVersion() || "VERSION_NOT_FOUND"; + return `AnythingLLM/${version}`; +} + +module.exports = { + getAnythingLLMUserAgent, +}; From f997d8712c14c9cf3d4d68720937d8d0d90a28d9 Mon Sep 17 00:00:00 2001 From: angelplusultra Date: Wed, 17 Sep 2025 12:53:30 -0700 Subject: [PATCH 2/2] Moved getAnythingLLMUserAgent helper fn to server/endpoints/utils.js and changed fallback version string to "unknown" --- server/endpoints/utils.js | 11 ++++++++++- server/utils/AiProviders/genericOpenAi/index.js | 2 +- .../utils/agents/aibitat/providers/genericOpenAi.js | 2 +- server/utils/helpers/getUserAgent.js | 10 ---------- 4 files changed, 12 insertions(+), 13 deletions(-) delete mode 100644 server/utils/helpers/getUserAgent.js diff --git a/server/endpoints/utils.js b/server/endpoints/utils.js index f30d709c12e..0bb51b83052 100644 --- a/server/endpoints/utils.js +++ b/server/endpoints/utils.js @@ -166,9 +166,18 @@ function getDeploymentVersion() { return null; } +/** + * Returns the user agent for the AnythingLLM deployment. + * @returns {string} The user agent. + */ +function getAnythingLLMUserAgent() { + const version = getDeploymentVersion() || "unknown"; + return `AnythingLLM/${version}`; +} + module.exports = { utilEndpoints, getGitVersion, - getDeploymentVersion, getModelTag, + getAnythingLLMUserAgent, }; diff --git a/server/utils/AiProviders/genericOpenAi/index.js b/server/utils/AiProviders/genericOpenAi/index.js index 24938f8afe9..3b4c179d1ed 100644 --- a/server/utils/AiProviders/genericOpenAi/index.js +++ b/server/utils/AiProviders/genericOpenAi/index.js @@ -8,7 +8,7 @@ const { clientAbortedHandler, } = require("../../helpers/chat/responses"); const { toValidNumber } = require("../../http"); -const { getAnythingLLMUserAgent } = require("../../helpers/getUserAgent"); +const { getAnythingLLMUserAgent } = require("../../../endpoints/utils"); class GenericOpenAiLLM { constructor(embedder = null, modelPreference = null) { diff --git a/server/utils/agents/aibitat/providers/genericOpenAi.js b/server/utils/agents/aibitat/providers/genericOpenAi.js index 9b8fce12119..c067584994f 100644 --- a/server/utils/agents/aibitat/providers/genericOpenAi.js +++ b/server/utils/agents/aibitat/providers/genericOpenAi.js @@ -3,7 +3,7 @@ const Provider = require("./ai-provider.js"); const InheritMultiple = require("./helpers/classes.js"); const UnTooled = require("./helpers/untooled.js"); const { toValidNumber } = require("../../../http/index.js"); -const { getAnythingLLMUserAgent } = require("../../../helpers/getUserAgent"); +const { getAnythingLLMUserAgent } = require("../../../../endpoints/utils"); /** * The agent provider for the Generic OpenAI provider. diff --git a/server/utils/helpers/getUserAgent.js b/server/utils/helpers/getUserAgent.js deleted file mode 100644 index 9353a7e61d4..00000000000 --- a/server/utils/helpers/getUserAgent.js +++ /dev/null @@ -1,10 +0,0 @@ -const { getDeploymentVersion } = require("../../endpoints/utils"); - -function getAnythingLLMUserAgent() { - const version = getDeploymentVersion() || "VERSION_NOT_FOUND"; - return `AnythingLLM/${version}`; -} - -module.exports = { - getAnythingLLMUserAgent, -};