From b2dd35fe152e901b06f2666ee5a9f2ae56af0437 Mon Sep 17 00:00:00 2001
From: Timothy Carambat <rambat1010@gmail.com>
Date: Thu, 5 Dec 2024 10:38:23 -0800
Subject: [PATCH] Add Support for NVIDIA NIM (#2766)

* Add Support for NVIDIA NIM

* update README

* linting
---
 README.md                                     |   1 +
 docker/.env.example                           |   4 +
 .../LLMSelection/NvidiaNimOptions/index.jsx   |  11 +
 .../LLMSelection/NvidiaNimOptions/managed.jsx |   7 +
 .../LLMSelection/NvidiaNimOptions/remote.jsx  | 130 +++++++++++
 frontend/src/hooks/useGetProvidersModels.js   |   1 +
 frontend/src/media/llmprovider/nvidia-nim.png | Bin 0 -> 65902 bytes
 .../GeneralSettings/LLMPreference/index.jsx   |  11 +
 .../Steps/DataHandling/index.jsx              |   8 +
 .../Steps/LLMPreference/index.jsx             |  11 +-
 .../AgentConfig/AgentLLMSelection/index.jsx   |   1 +
 frontend/src/utils/constants.js               |   7 +
 server/.env.example                           |   4 +
 server/models/systemSettings.js               |   5 +
 server/utils/AiProviders/nvidiaNim/index.js   | 220 ++++++++++++++++++
 server/utils/agents/aibitat/index.js          |   2 +
 .../agents/aibitat/providers/ai-provider.js   |  14 +-
 .../utils/agents/aibitat/providers/index.js   |   2 +
 .../agents/aibitat/providers/nvidiaNim.js     | 117 ++++++++++
 server/utils/agents/index.js                  |   8 +
 server/utils/helpers/customModels.js          |  36 +++
 server/utils/helpers/index.js                 |   6 +
 server/utils/helpers/updateENV.js             |  24 ++
 23 files changed, 626 insertions(+), 4 deletions(-)
 create mode 100644 frontend/src/components/LLMSelection/NvidiaNimOptions/index.jsx
 create mode 100644 frontend/src/components/LLMSelection/NvidiaNimOptions/managed.jsx
 create mode 100644 frontend/src/components/LLMSelection/NvidiaNimOptions/remote.jsx
 create mode 100644 frontend/src/media/llmprovider/nvidia-nim.png
 create mode 100644 server/utils/AiProviders/nvidiaNim/index.js
 create mode 100644 server/utils/agents/aibitat/providers/nvidiaNim.js

diff --git a/README.md b/README.md
index b8202ecd0..90adb0430 100644
--- a/README.md
+++ b/README.md
@@ -78,6 +78,7 @@ AnythingLLM divides your documents into objects called `workspaces`. A Workspace
 - [Azure OpenAI](https://azure.microsoft.com/en-us/products/ai-services/openai-service)
 - [AWS Bedrock](https://aws.amazon.com/bedrock/)
 - [Anthropic](https://www.anthropic.com/)
+- [NVIDIA NIM (chat models)](https://build.nvidia.com/explore/discover)
 - [Google Gemini Pro](https://ai.google.dev/)
 - [Hugging Face (chat models)](https://huggingface.co/)
 - [Ollama (chat models)](https://ollama.ai/)
diff --git a/docker/.env.example b/docker/.env.example
index 2b3d10629..ee53c718b 100644
--- a/docker/.env.example
+++ b/docker/.env.example
@@ -117,6 +117,10 @@ GID='1000'
 # XAI_LLM_API_KEY='xai-your-api-key-here'
 # XAI_LLM_MODEL_PREF='grok-beta'
 
+# LLM_PROVIDER='nvidia-nim'
+# NVIDIA_NIM_LLM_BASE_PATH='http://127.0.0.1:8000'
+# NVIDIA_NIM_LLM_MODEL_PREF='meta/llama-3.2-3b-instruct'
+
 ###########################################
 ######## Embedding API SElECTION ##########
 ###########################################
diff --git a/frontend/src/components/LLMSelection/NvidiaNimOptions/index.jsx b/frontend/src/components/LLMSelection/NvidiaNimOptions/index.jsx
new file mode 100644
index 000000000..ed8747a8f
--- /dev/null
+++ b/frontend/src/components/LLMSelection/NvidiaNimOptions/index.jsx
@@ -0,0 +1,11 @@
+import RemoteNvidiaNimOptions from "./remote";
+import ManagedNvidiaNimOptions from "./managed";
+
+export default function NvidiaNimOptions({ settings }) {
+  const version = "remote"; // static to "remote" when in docker version.
+  return version === "remote" ? (
+    <RemoteNvidiaNimOptions settings={settings} />
+  ) : (
+    <ManagedNvidiaNimOptions settings={settings} />
+  );
+}
diff --git a/frontend/src/components/LLMSelection/NvidiaNimOptions/managed.jsx b/frontend/src/components/LLMSelection/NvidiaNimOptions/managed.jsx
new file mode 100644
index 000000000..0dce898ab
--- /dev/null
+++ b/frontend/src/components/LLMSelection/NvidiaNimOptions/managed.jsx
@@ -0,0 +1,7 @@
+/**
+ * This component is used to select, start, and manage NVIDIA NIM
+ * containers and images via docker management tools.
+ */
+export default function ManagedNvidiaNimOptions({ settings }) {
+  return null;
+}
diff --git a/frontend/src/components/LLMSelection/NvidiaNimOptions/remote.jsx b/frontend/src/components/LLMSelection/NvidiaNimOptions/remote.jsx
new file mode 100644
index 000000000..f1fa4153d
--- /dev/null
+++ b/frontend/src/components/LLMSelection/NvidiaNimOptions/remote.jsx
@@ -0,0 +1,130 @@
+import PreLoader from "@/components/Preloader";
+import useProviderEndpointAutoDiscovery from "@/hooks/useProviderEndpointAutoDiscovery";
+import System from "@/models/system";
+import { NVIDIA_NIM_COMMON_URLS } from "@/utils/constants";
+import { useState, useEffect } from "react";
+
+/**
+ * This component is used to select a remote Nvidia NIM model endpoint
+ * This is the default component and way to connect to NVIDIA NIM
+ * as the "managed" provider can only work in the Desktop context.
+ */
+export default function RemoteNvidiaNimOptions({ settings }) {
+  const {
+    autoDetecting: loading,
+    basePath,
+    basePathValue,
+    handleAutoDetectClick,
+  } = useProviderEndpointAutoDiscovery({
+    provider: "nvidia-nim",
+    initialBasePath: settings?.NvidiaNimLLMBasePath,
+    ENDPOINTS: NVIDIA_NIM_COMMON_URLS,
+  });
+
+  return (
+    <div className="flex gap-[36px] mt-1.5">
+      <div className="flex flex-col w-60">
+        <div className="flex justify-between items-center mb-2">
+          <label className="text-white text-sm font-semibold">
+            Nvidia Nim Base URL
+          </label>
+          {loading ? (
+            <PreLoader size="6" />
+          ) : (
+            <>
+              {!basePathValue.value && (
+                <button
+                  onClick={handleAutoDetectClick}
+                  className="bg-primary-button text-xs font-medium px-2 py-1 rounded-lg hover:bg-secondary hover:text-white shadow-[0_4px_14px_rgba(0,0,0,0.25)]"
+                >
+                  Auto-Detect
+                </button>
+              )}
+            </>
+          )}
+        </div>
+        <input
+          type="url"
+          name="NvidiaNimLLMBasePath"
+          className="border-none bg-theme-settings-input-bg text-white placeholder:text-theme-settings-input-placeholder text-sm rounded-lg focus:outline-primary-button active:outline-primary-button outline-none block w-full p-2.5"
+          placeholder="http://localhost:8000/v1"
+          value={basePathValue.value}
+          required={true}
+          autoComplete="off"
+          spellCheck={false}
+          onChange={basePath.onChange}
+          onBlur={basePath.onBlur}
+        />
+        <p className="text-xs leading-[18px] font-base text-white text-opacity-60 mt-2">
+          Enter the URL where Nvidia NIM is running.
+        </p>
+      </div>
+      {!settings?.credentialsOnly && (
+        <NvidiaNimModelSelection
+          settings={settings}
+          basePath={basePath.value}
+        />
+      )}
+    </div>
+  );
+}
+function NvidiaNimModelSelection({ settings, basePath }) {
+  const [models, setModels] = useState([]);
+  const [loading, setLoading] = useState(true);
+
+  useEffect(() => {
+    async function findCustomModels() {
+      setLoading(true);
+      const { models } = await System.customModels(
+        "nvidia-nim",
+        null,
+        basePath
+      );
+      setModels(models);
+      setLoading(false);
+    }
+    findCustomModels();
+  }, [basePath]);
+
+  if (loading || models.length === 0) {
+    return (
+      <div className="flex flex-col w-60">
+        <label className="text-white text-sm font-semibold block mb-3">
+          Chat Model Selection
+        </label>
+        <select
+          name="NvidiaNimLLMModelPref"
+          disabled={true}
+          className="border-none bg-theme-settings-input-bg border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
+        >
+          <option disabled={true} selected={true}>
+            -- loading available models --
+          </option>
+        </select>
+      </div>
+    );
+  }
+
+  return (
+    <div className="flex flex-col w-60">
+      <label className="text-white text-sm font-semibold block mb-3">
+        Chat Model Selection
+      </label>
+      <select
+        name="NvidiaNimLLMModelPref"
+        required={true}
+        className="border-none bg-theme-settings-input-bg border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
+      >
+        {models.map((model) => (
+          <option
+            key={model.id}
+            value={model.id}
+            selected={settings?.NvidiaNimLLMModelPref === model.id}
+          >
+            {model.name}
+          </option>
+        ))}
+      </select>
+    </div>
+  );
+}
diff --git a/frontend/src/hooks/useGetProvidersModels.js b/frontend/src/hooks/useGetProvidersModels.js
index 57cf65018..52e84122b 100644
--- a/frontend/src/hooks/useGetProvidersModels.js
+++ b/frontend/src/hooks/useGetProvidersModels.js
@@ -43,6 +43,7 @@ const PROVIDER_DEFAULT_MODELS = {
   ollama: [],
   togetherai: [],
   fireworksai: [],
+  "nvidia-nim": [],
   groq: [],
   native: [],
   cohere: [
diff --git a/frontend/src/media/llmprovider/nvidia-nim.png b/frontend/src/media/llmprovider/nvidia-nim.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdec289cf6f28b4a6cb62c868525ed2f9a7d740f
GIT binary patch
literal 65902
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

literal 0
HcmV?d00001

diff --git a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
index 14c5ea11d..f4cead2b8 100644
--- a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
+++ b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
@@ -29,6 +29,7 @@ import AWSBedrockLogo from "@/media/llmprovider/bedrock.png";
 import DeepSeekLogo from "@/media/llmprovider/deepseek.png";
 import APIPieLogo from "@/media/llmprovider/apipie.png";
 import XAILogo from "@/media/llmprovider/xai.png";
+import NvidiaNimLogo from "@/media/llmprovider/nvidia-nim.png";
 
 import PreLoader from "@/components/Preloader";
 import OpenAiOptions from "@/components/LLMSelection/OpenAiOptions";
@@ -56,6 +57,7 @@ import AWSBedrockLLMOptions from "@/components/LLMSelection/AwsBedrockLLMOptions
 import DeepSeekOptions from "@/components/LLMSelection/DeepSeekOptions";
 import ApiPieLLMOptions from "@/components/LLMSelection/ApiPieOptions";
 import XAILLMOptions from "@/components/LLMSelection/XAiLLMOptions";
+import NvidiaNimOptions from "@/components/LLMSelection/NvidiaNimOptions";
 
 import LLMItem from "@/components/LLMSelection/LLMItem";
 import { CaretUpDown, MagnifyingGlass, X } from "@phosphor-icons/react";
@@ -94,6 +96,15 @@ export const AVAILABLE_LLM_PROVIDERS = [
     description: "Google's largest and most capable AI model",
     requiredConfig: ["GeminiLLMApiKey"],
   },
+  {
+    name: "Nvidia NIM",
+    value: "nvidia-nim",
+    logo: NvidiaNimLogo,
+    options: (settings) => <NvidiaNimOptions settings={settings} />,
+    description:
+      "Run full parameter LLMs directly on your GPU using Nvidia's inference microservice via Docker.",
+    requiredConfig: ["NvidiaNimLLMBasePath"],
+  },
   {
     name: "HuggingFace",
     value: "huggingface",
diff --git a/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx b/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx
index ab83a5af2..1fefca235 100644
--- a/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx
+++ b/frontend/src/pages/OnboardingFlow/Steps/DataHandling/index.jsx
@@ -9,6 +9,7 @@ import GeminiLogo from "@/media/llmprovider/gemini.png";
 import OllamaLogo from "@/media/llmprovider/ollama.png";
 import TogetherAILogo from "@/media/llmprovider/togetherai.png";
 import FireworksAILogo from "@/media/llmprovider/fireworksai.jpeg";
+import NvidiaNimLogo from "@/media/llmprovider/nvidia-nim.png";
 import LMStudioLogo from "@/media/llmprovider/lmstudio.png";
 import LocalAiLogo from "@/media/llmprovider/localai.png";
 import MistralLogo from "@/media/llmprovider/mistral.jpeg";
@@ -76,6 +77,13 @@ export const LLM_SELECTION_PRIVACY = {
     ],
     logo: GeminiLogo,
   },
+  "nvidia-nim": {
+    name: "Nvidia NIM",
+    description: [
+      "Your model and chats are only accessible on the machine running the Nvidia NIM service",
+    ],
+    logo: NvidiaNimLogo,
+  },
   lmstudio: {
     name: "LMStudio",
     description: [
diff --git a/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx b/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx
index 69704f19c..ea78d6c05 100644
--- a/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx
+++ b/frontend/src/pages/OnboardingFlow/Steps/LLMPreference/index.jsx
@@ -24,7 +24,7 @@ import DeepSeekLogo from "@/media/llmprovider/deepseek.png";
 import APIPieLogo from "@/media/llmprovider/apipie.png";
 import NovitaLogo from "@/media/llmprovider/novita.png";
 import XAILogo from "@/media/llmprovider/xai.png";
-
+import NvidiaNimLogo from "@/media/llmprovider/nvidia-nim.png";
 import CohereLogo from "@/media/llmprovider/cohere.png";
 import OpenAiOptions from "@/components/LLMSelection/OpenAiOptions";
 import GenericOpenAiOptions from "@/components/LLMSelection/GenericOpenAiOptions";
@@ -51,6 +51,7 @@ import DeepSeekOptions from "@/components/LLMSelection/DeepSeekOptions";
 import ApiPieLLMOptions from "@/components/LLMSelection/ApiPieOptions";
 import NovitaLLMOptions from "@/components/LLMSelection/NovitaLLMOptions";
 import XAILLMOptions from "@/components/LLMSelection/XAiLLMOptions";
+import NvidiaNimOptions from "@/components/LLMSelection/NvidiaNimOptions";
 
 import LLMItem from "@/components/LLMSelection/LLMItem";
 import System from "@/models/system";
@@ -91,6 +92,14 @@ const LLMS = [
     options: (settings) => <GeminiLLMOptions settings={settings} />,
     description: "Google's largest and most capable AI model",
   },
+  {
+    name: "Nvidia NIM",
+    value: "nvidia-nim",
+    logo: NvidiaNimLogo,
+    options: (settings) => <NvidiaNimOptions settings={settings} />,
+    description:
+      "Run full parameter LLMs directly on your GPU using Nvidia's inference microservice via Docker.",
+  },
   {
     name: "HuggingFace",
     value: "huggingface",
diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx
index 6025d2953..effc7b744 100644
--- a/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx
+++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/AgentLLMSelection/index.jsx
@@ -28,6 +28,7 @@ const ENABLED_PROVIDERS = [
   "litellm",
   "apipie",
   "xai",
+  "nvidia-nim",
   // TODO: More agent support.
   // "cohere",         // Has tool calling and will need to build explicit support
   // "huggingface"     // Can be done but already has issues with no-chat templated. Needs to be tested.
diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js
index 6333ef8bf..71f3048b7 100644
--- a/frontend/src/utils/constants.js
+++ b/frontend/src/utils/constants.js
@@ -37,6 +37,13 @@ export const LOCALAI_COMMON_URLS = [
   "http://172.17.0.1:8080/v1",
 ];
 
+export const NVIDIA_NIM_COMMON_URLS = [
+  "http://127.0.0.1:8000/v1/version",
+  "http://localhost:8000/v1/version",
+  "http://host.docker.internal:8000/v1/version",
+  "http://172.17.0.1:8000/v1/version",
+];
+
 export function fullApiUrl() {
   if (API_BASE !== "/api") return API_BASE;
   return `${window.location.origin}/api`;
diff --git a/server/.env.example b/server/.env.example
index ba56517a8..fb84a9f8d 100644
--- a/server/.env.example
+++ b/server/.env.example
@@ -107,6 +107,10 @@ SIG_SALT='salt' # Please generate random string at least 32 chars long.
 # XAI_LLM_API_KEY='xai-your-api-key-here'
 # XAI_LLM_MODEL_PREF='grok-beta'
 
+# LLM_PROVIDER='nvidia-nim'
+# NVIDIA_NIM_LLM_BASE_PATH='http://127.0.0.1:8000'
+# NVIDIA_NIM_LLM_MODEL_PREF='meta/llama-3.2-3b-instruct'
+
 ###########################################
 ######## Embedding API SElECTION ##########
 ###########################################
diff --git a/server/models/systemSettings.js b/server/models/systemSettings.js
index 58011d868..3403c0824 100644
--- a/server/models/systemSettings.js
+++ b/server/models/systemSettings.js
@@ -547,6 +547,11 @@ const SystemSettings = {
       // xAI LLM API Keys
       XAIApiKey: !!process.env.XAI_LLM_API_KEY,
       XAIModelPref: process.env.XAI_LLM_MODEL_PREF,
+
+      // Nvidia NIM Keys
+      NvidiaNimLLMBasePath: process.env.NVIDIA_NIM_LLM_BASE_PATH,
+      NvidiaNimLLMModelPref: process.env.NVIDIA_NIM_LLM_MODEL_PREF,
+      NvidiaNimLLMTokenLimit: process.env.NVIDIA_NIM_LLM_MODEL_TOKEN_LIMIT,
     };
   },
 
diff --git a/server/utils/AiProviders/nvidiaNim/index.js b/server/utils/AiProviders/nvidiaNim/index.js
new file mode 100644
index 000000000..6deb7b2e4
--- /dev/null
+++ b/server/utils/AiProviders/nvidiaNim/index.js
@@ -0,0 +1,220 @@
+const { NativeEmbedder } = require("../../EmbeddingEngines/native");
+const {
+  handleDefaultStreamResponseV2,
+} = require("../../helpers/chat/responses");
+
+class NvidiaNimLLM {
+  constructor(embedder = null, modelPreference = null) {
+    if (!process.env.NVIDIA_NIM_LLM_BASE_PATH)
+      throw new Error("No Nvidia NIM API Base Path was set.");
+
+    const { OpenAI: OpenAIApi } = require("openai");
+    this.nvidiaNim = new OpenAIApi({
+      baseURL: parseNvidiaNimBasePath(process.env.NVIDIA_NIM_LLM_BASE_PATH),
+      apiKey: null,
+    });
+
+    this.model = modelPreference || process.env.NVIDIA_NIM_LLM_MODEL_PREF;
+    this.limits = {
+      history: this.promptWindowLimit() * 0.15,
+      system: this.promptWindowLimit() * 0.15,
+      user: this.promptWindowLimit() * 0.7,
+    };
+
+    this.embedder = embedder ?? new NativeEmbedder();
+    this.defaultTemp = 0.7;
+    this.#log(
+      `Loaded with model: ${this.model} with context window: ${this.promptWindowLimit()}`
+    );
+  }
+
+  #log(text, ...args) {
+    console.log(`\x1b[36m[${this.constructor.name}]\x1b[0m ${text}`, ...args);
+  }
+
+  #appendContext(contextTexts = []) {
+    if (!contextTexts || !contextTexts.length) return "";
+    return (
+      "\nContext:\n" +
+      contextTexts
+        .map((text, i) => {
+          return `[CONTEXT ${i}]:\n${text}\n[END CONTEXT ${i}]\n\n`;
+        })
+        .join("")
+    );
+  }
+
+  /**
+   * Set the model token limit `NVIDIA_NIM_LLM_TOKEN_LIMIT` for the given model ID
+   * @param {string} modelId
+   * @param {string} basePath
+   * @returns {Promise<void>}
+   */
+  static async setModelTokenLimit(modelId, basePath = null) {
+    if (!modelId) return;
+    const { OpenAI: OpenAIApi } = require("openai");
+    const openai = new OpenAIApi({
+      baseURL: parseNvidiaNimBasePath(
+        basePath || process.env.NVIDIA_NIM_LLM_BASE_PATH
+      ),
+      apiKey: null,
+    });
+    const model = await openai.models
+      .list()
+      .then((results) => results.data)
+      .catch(() => {
+        return [];
+      });
+
+    if (!model.length) return;
+    const modelInfo = model.find((model) => model.id === modelId);
+    if (!modelInfo) return;
+    process.env.NVIDIA_NIM_LLM_TOKEN_LIMIT = Number(
+      modelInfo.max_model_len || 4096
+    );
+  }
+
+  streamingEnabled() {
+    return "streamGetChatCompletion" in this;
+  }
+
+  static promptWindowLimit(_modelName) {
+    const limit = process.env.NVIDIA_NIM_LLM_MODEL_TOKEN_LIMIT || 4096;
+    if (!limit || isNaN(Number(limit)))
+      throw new Error("No Nvidia NIM token context limit was set.");
+    return Number(limit);
+  }
+
+  // Ensure the user set a value for the token limit
+  // and if undefined - assume 4096 window.
+  promptWindowLimit() {
+    const limit = process.env.NVIDIA_NIM_LLM_MODEL_TOKEN_LIMIT || 4096;
+    if (!limit || isNaN(Number(limit)))
+      throw new Error("No Nvidia NIM token context limit was set.");
+    return Number(limit);
+  }
+
+  async isValidChatCompletionModel(_ = "") {
+    return true;
+  }
+
+  /**
+   * Generates appropriate content array for a message + attachments.
+   * @param {{userPrompt:string, attachments: import("../../helpers").Attachment[]}}
+   * @returns {string|object[]}
+   */
+  #generateContent({ userPrompt, attachments = [] }) {
+    if (!attachments.length) {
+      return userPrompt;
+    }
+
+    const content = [{ type: "text", text: userPrompt }];
+    for (let attachment of attachments) {
+      content.push({
+        type: "image_url",
+        image_url: {
+          url: attachment.contentString,
+          detail: "auto",
+        },
+      });
+    }
+    return content.flat();
+  }
+
+  /**
+   * Construct the user prompt for this model.
+   * @param {{attachments: import("../../helpers").Attachment[]}} param0
+   * @returns
+   */
+  constructPrompt({
+    systemPrompt = "",
+    contextTexts = [],
+    chatHistory = [],
+    userPrompt = "",
+    attachments = [],
+  }) {
+    const prompt = {
+      role: "system",
+      content: `${systemPrompt}${this.#appendContext(contextTexts)}`,
+    };
+    return [
+      prompt,
+      ...chatHistory,
+      {
+        role: "user",
+        content: this.#generateContent({ userPrompt, attachments }),
+      },
+    ];
+  }
+
+  async getChatCompletion(messages = null, { temperature = 0.7 }) {
+    if (!this.model)
+      throw new Error(
+        `Nvidia NIM chat: ${this.model} is not valid or defined model for chat completion!`
+      );
+
+    const result = await this.nvidiaNim.chat.completions.create({
+      model: this.model,
+      messages,
+      temperature,
+    });
+
+    if (!result.hasOwnProperty("choices") || result.choices.length === 0)
+      return null;
+    return result.choices[0].message.content;
+  }
+
+  async streamGetChatCompletion(messages = null, { temperature = 0.7 }) {
+    if (!this.model)
+      throw new Error(
+        `Nvidia NIM chat: ${this.model} is not valid or defined model for chat completion!`
+      );
+
+    const streamRequest = await this.nvidiaNim.chat.completions.create({
+      model: this.model,
+      stream: true,
+      messages,
+      temperature,
+    });
+    return streamRequest;
+  }
+
+  handleStream(response, stream, responseProps) {
+    return handleDefaultStreamResponseV2(response, stream, responseProps);
+  }
+
+  // Simple wrapper for dynamic embedder & normalize interface for all LLM implementations
+  async embedTextInput(textInput) {
+    return await this.embedder.embedTextInput(textInput);
+  }
+  async embedChunks(textChunks = []) {
+    return await this.embedder.embedChunks(textChunks);
+  }
+
+  async compressMessages(promptArgs = {}, rawHistory = []) {
+    const { messageArrayCompressor } = require("../../helpers/chat");
+    const messageArray = this.constructPrompt(promptArgs);
+    return await messageArrayCompressor(this, messageArray, rawHistory);
+  }
+}
+
+/**
+ * Parse the base path for the Nvidia NIM container API. Since the base path must end in /v1 and cannot have a trailing slash,
+ * and the user can possibly set it to anything and likely incorrectly due to pasting behaviors, we need to ensure it is in the correct format.
+ * @param {string} basePath
+ * @returns {string}
+ */
+function parseNvidiaNimBasePath(providedBasePath = "") {
+  try {
+    const baseURL = new URL(providedBasePath);
+    const basePath = `${baseURL.origin}/v1`;
+    return basePath;
+  } catch (e) {
+    return providedBasePath;
+  }
+}
+
+module.exports = {
+  NvidiaNimLLM,
+  parseNvidiaNimBasePath,
+};
diff --git a/server/utils/agents/aibitat/index.js b/server/utils/agents/aibitat/index.js
index d61867f4d..3c2faf5b1 100644
--- a/server/utils/agents/aibitat/index.js
+++ b/server/utils/agents/aibitat/index.js
@@ -783,6 +783,8 @@ ${this.getHistory({ to: route.to })
         return new Providers.AWSBedrockProvider({});
       case "fireworksai":
         return new Providers.FireworksAIProvider({ model: config.model });
+      case "nvidia-nim":
+        return new Providers.NvidiaNimProvider({ model: config.model });
       case "deepseek":
         return new Providers.DeepSeekProvider({ model: config.model });
       case "litellm":
diff --git a/server/utils/agents/aibitat/providers/ai-provider.js b/server/utils/agents/aibitat/providers/ai-provider.js
index 4ba6840d7..bd7920611 100644
--- a/server/utils/agents/aibitat/providers/ai-provider.js
+++ b/server/utils/agents/aibitat/providers/ai-provider.js
@@ -155,6 +155,14 @@ class Provider {
           apiKey: process.env.XAI_LLM_API_KEY ?? null,
           ...config,
         });
+      case "novita":
+        return new ChatOpenAI({
+          configuration: {
+            baseURL: "https://api.novita.ai/v3/openai",
+          },
+          apiKey: process.env.NOVITA_LLM_API_KEY ?? null,
+          ...config,
+        });
 
       // OSS Model Runners
       // case "anythingllm_ollama":
@@ -207,12 +215,12 @@ class Provider {
           apiKey: process.env.LITE_LLM_API_KEY ?? null,
           ...config,
         });
-      case "novita":
+      case "nvidia-nim":
         return new ChatOpenAI({
           configuration: {
-            baseURL: "https://api.novita.ai/v3/openai",
+            baseURL: process.env.NVIDIA_NIM_LLM_BASE_PATH,
           },
-          apiKey: process.env.NOVITA_LLM_API_KEY ?? null,
+          apiKey: null,
           ...config,
         });
 
diff --git a/server/utils/agents/aibitat/providers/index.js b/server/utils/agents/aibitat/providers/index.js
index c454c3938..e5c01123c 100644
--- a/server/utils/agents/aibitat/providers/index.js
+++ b/server/utils/agents/aibitat/providers/index.js
@@ -19,6 +19,7 @@ const LiteLLMProvider = require("./litellm.js");
 const ApiPieProvider = require("./apipie.js");
 const XAIProvider = require("./xai.js");
 const NovitaProvider = require("./novita.js");
+const NvidiaNimProvider = require("./nvidiaNim.js");
 
 module.exports = {
   OpenAIProvider,
@@ -42,4 +43,5 @@ module.exports = {
   ApiPieProvider,
   XAIProvider,
   NovitaProvider,
+  NvidiaNimProvider,
 };
diff --git a/server/utils/agents/aibitat/providers/nvidiaNim.js b/server/utils/agents/aibitat/providers/nvidiaNim.js
new file mode 100644
index 000000000..50132abcb
--- /dev/null
+++ b/server/utils/agents/aibitat/providers/nvidiaNim.js
@@ -0,0 +1,117 @@
+const OpenAI = require("openai");
+const Provider = require("./ai-provider.js");
+const InheritMultiple = require("./helpers/classes.js");
+const UnTooled = require("./helpers/untooled.js");
+
+/**
+ * The agent provider for the Nvidia NIM provider.
+ * We wrap Nvidia NIM in UnTooled because its tool-calling may not be supported for specific models and this normalizes that.
+ */
+class NvidiaNimProvider extends InheritMultiple([Provider, UnTooled]) {
+  model;
+
+  constructor(config = {}) {
+    const { model } = config;
+    super();
+    const client = new OpenAI({
+      baseURL: process.env.NVIDIA_NIM_LLM_BASE_PATH,
+      apiKey: null,
+      maxRetries: 0,
+    });
+
+    this._client = client;
+    this.model = model;
+    this.verbose = true;
+  }
+
+  get client() {
+    return this._client;
+  }
+
+  async #handleFunctionCallChat({ messages = [] }) {
+    return await this.client.chat.completions
+      .create({
+        model: this.model,
+        temperature: 0,
+        messages,
+      })
+      .then((result) => {
+        if (!result.hasOwnProperty("choices"))
+          throw new Error("Nvidia NIM chat: No results!");
+        if (result.choices.length === 0)
+          throw new Error("Nvidia NIM chat: No results length!");
+        return result.choices[0].message.content;
+      })
+      .catch((_) => {
+        return null;
+      });
+  }
+
+  /**
+   * Create a completion based on the received messages.
+   *
+   * @param messages A list of messages to send to the API.
+   * @param functions
+   * @returns The completion.
+   */
+  async complete(messages, functions = null) {
+    try {
+      let completion;
+      if (functions.length > 0) {
+        const { toolCall, text } = await this.functionCall(
+          messages,
+          functions,
+          this.#handleFunctionCallChat.bind(this)
+        );
+
+        if (toolCall !== null) {
+          this.providerLog(`Valid tool call found - running ${toolCall.name}.`);
+          this.deduplicator.trackRun(toolCall.name, toolCall.arguments);
+          return {
+            result: null,
+            functionCall: {
+              name: toolCall.name,
+              arguments: toolCall.arguments,
+            },
+            cost: 0,
+          };
+        }
+        completion = { content: text };
+      }
+
+      if (!completion?.content) {
+        this.providerLog(
+          "Will assume chat completion without tool call inputs."
+        );
+        const response = await this.client.chat.completions.create({
+          model: this.model,
+          messages: this.cleanMsgs(messages),
+        });
+        completion = response.choices[0].message;
+      }
+
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
+      return {
+        result: completion.content,
+        cost: 0,
+      };
+    } catch (error) {
+      throw error;
+    }
+  }
+
+  /**
+   * Get the cost of the completion.
+   *
+   * @param _usage The completion to get the cost for.
+   * @returns The cost of the completion.
+   */
+  getCost(_usage) {
+    return 0;
+  }
+}
+
+module.exports = NvidiaNimProvider;
diff --git a/server/utils/agents/index.js b/server/utils/agents/index.js
index 6b1d42af2..2263a5968 100644
--- a/server/utils/agents/index.js
+++ b/server/utils/agents/index.js
@@ -177,6 +177,12 @@ class AgentHandler {
         if (!process.env.NOVITA_LLM_API_KEY)
           throw new Error("Novita API Key must be provided to use agents.");
         break;
+      case "nvidia-nim":
+        if (!process.env.NVIDIA_NIM_LLM_BASE_PATH)
+          throw new Error(
+            "Nvidia NIM base path must be provided to use agents."
+          );
+        break;
 
       default:
         throw new Error(
@@ -240,6 +246,8 @@ class AgentHandler {
         return process.env.XAI_LLM_MODEL_PREF ?? "grok-beta";
       case "novita":
         return process.env.NOVITA_LLM_MODEL_PREF ?? "gryphe/mythomax-l2-13b";
+      case "nvidia-nim":
+        return process.env.NVIDIA_NIM_LLM_MODEL_PREF ?? null;
       default:
         return null;
     }
diff --git a/server/utils/helpers/customModels.js b/server/utils/helpers/customModels.js
index 72882d6d1..35ab5570d 100644
--- a/server/utils/helpers/customModels.js
+++ b/server/utils/helpers/customModels.js
@@ -6,6 +6,8 @@ const { fireworksAiModels } = require("../AiProviders/fireworksAi");
 const { ElevenLabsTTS } = require("../TextToSpeech/elevenLabs");
 const { fetchNovitaModels } = require("../AiProviders/novita");
 const { parseLMStudioBasePath } = require("../AiProviders/lmStudio");
+const { parseNvidiaNimBasePath } = require("../AiProviders/nvidiaNim");
+
 const SUPPORT_CUSTOM_MODELS = [
   "openai",
   "localai",
@@ -13,6 +15,7 @@ const SUPPORT_CUSTOM_MODELS = [
   "native-llm",
   "togetherai",
   "fireworksai",
+  "nvidia-nim",
   "mistral",
   "perplexity",
   "openrouter",
@@ -68,6 +71,8 @@ async function getCustomModels(provider = "", apiKey = null, basePath = null) {
       return await getNovitaModels();
     case "xai":
       return await getXAIModels(apiKey);
+    case "nvidia-nim":
+      return await getNvidiaNimModels(basePath);
     default:
       return { models: [], error: "Invalid provider for custom models" };
   }
@@ -520,6 +525,37 @@ async function getXAIModels(_apiKey = null) {
   return { models, error: null };
 }
 
+async function getNvidiaNimModels(basePath = null) {
+  try {
+    const { OpenAI: OpenAIApi } = require("openai");
+    const openai = new OpenAIApi({
+      baseURL: parseNvidiaNimBasePath(
+        basePath ?? process.env.NVIDIA_NIM_LLM_BASE_PATH
+      ),
+      apiKey: null,
+    });
+    const modelResponse = await openai.models
+      .list()
+      .then((results) => results.data)
+      .catch((e) => {
+        throw new Error(e.message);
+      });
+
+    const models = modelResponse.map((model) => {
+      return {
+        id: model.id,
+        name: model.id,
+        organization: model.owned_by,
+      };
+    });
+
+    return { models, error: null };
+  } catch (e) {
+    console.error(`Nvidia NIM:getNvidiaNimModels`, e.message);
+    return { models: [], error: "Could not fetch Nvidia NIM Models" };
+  }
+}
+
 module.exports = {
   getCustomModels,
 };
diff --git a/server/utils/helpers/index.js b/server/utils/helpers/index.js
index cbf07fbd0..e599078b6 100644
--- a/server/utils/helpers/index.js
+++ b/server/utils/helpers/index.js
@@ -171,6 +171,9 @@ function getLLMProvider({ provider = null, model = null } = {}) {
     case "xai":
       const { XAiLLM } = require("../AiProviders/xai");
       return new XAiLLM(embedder, model);
+    case "nvidia-nim":
+      const { NvidiaNimLLM } = require("../AiProviders/nvidiaNim");
+      return new NvidiaNimLLM(embedder, model);
     default:
       throw new Error(
         `ENV: No valid LLM_PROVIDER value found in environment! Using ${process.env.LLM_PROVIDER}`
@@ -309,6 +312,9 @@ function getLLMProviderClass({ provider = null } = {}) {
     case "xai":
       const { XAiLLM } = require("../AiProviders/xai");
       return XAiLLM;
+    case "nvidia-nim":
+      const { NvidiaNimLLM } = require("../AiProviders/nvidiaNim");
+      return NvidiaNimLLM;
     default:
       return null;
   }
diff --git a/server/utils/helpers/updateENV.js b/server/utils/helpers/updateENV.js
index 0af4b839b..3165dc40a 100644
--- a/server/utils/helpers/updateENV.js
+++ b/server/utils/helpers/updateENV.js
@@ -578,6 +578,29 @@ const KEY_MAPPING = {
     envKey: "XAI_LLM_MODEL_PREF",
     checks: [isNotEmpty],
   },
+
+  // Nvidia NIM Options
+  NvidiaNimLLMBasePath: {
+    envKey: "NVIDIA_NIM_LLM_BASE_PATH",
+    checks: [isValidURL],
+    postUpdate: [
+      (_, __, nextValue) => {
+        const { parseNvidiaNimBasePath } = require("../AiProviders/nvidiaNim");
+        process.env.NVIDIA_NIM_LLM_BASE_PATH =
+          parseNvidiaNimBasePath(nextValue);
+      },
+    ],
+  },
+  NvidiaNimLLMModelPref: {
+    envKey: "NVIDIA_NIM_LLM_MODEL_PREF",
+    checks: [],
+    postUpdate: [
+      async (_, __, nextValue) => {
+        const { NvidiaNimLLM } = require("../AiProviders/nvidiaNim");
+        await NvidiaNimLLM.setModelTokenLimit(nextValue);
+      },
+    ],
+  },
 };
 
 function isNotEmpty(input = "") {
@@ -684,6 +707,7 @@ function supportedLLM(input = "") {
     "deepseek",
     "apipie",
     "xai",
+    "nvidia-nim",
   ].includes(input);
   return validSelection ? null : `${input} is not a valid LLM provider.`;
 }
-- 
GitLab