diff --git a/ui/litellm-dashboard/public/assets/logos/mongodb.svg b/ui/litellm-dashboard/public/assets/logos/mongodb.svg
new file mode 100644
index 00000000000..fb0d3cbdfab
--- /dev/null
+++ b/ui/litellm-dashboard/public/assets/logos/mongodb.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.test.tsx
index 71e2a7224ae..94aa6cc99a0 100644
--- a/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.test.tsx
+++ b/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.test.tsx
@@ -110,6 +110,57 @@ describe("buildVectorStoreLitellmParams", () => {
});
});
+ it("renames embedding_model to litellm_embedding_model for mongodb", () => {
+ const params = buildVectorStoreLitellmParams("mongodb", {
+ mongodb_connection_string: "mongodb+srv://user:pass@cluster0.mongodb.net",
+ mongodb_database: "sample_mflix",
+ mongodb_collection: "embedded_movies",
+ mongodb_embedding_field: "plot_embedding",
+ mongodb_text_field: "plot",
+ mongodb_num_candidates: "200",
+ embedding_model: "text-embedding-ada-002",
+ });
+
+ expect(params).toEqual({
+ mongodb_connection_string: "mongodb+srv://user:pass@cluster0.mongodb.net",
+ mongodb_database: "sample_mflix",
+ mongodb_collection: "embedded_movies",
+ mongodb_embedding_field: "plot_embedding",
+ mongodb_text_field: "plot",
+ mongodb_num_candidates: "200",
+ litellm_embedding_model: "text-embedding-ada-002",
+ });
+ });
+
+ it("sends only mongodb fields when an earlier provider left values in the form", () => {
+ const params = buildVectorStoreLitellmParams("mongodb", {
+ mongodb_connection_string: "mongodb+srv://user:pass@cluster0.mongodb.net",
+ mongodb_database: "sample_mflix",
+ mongodb_collection: "embedded_movies",
+ embedding_model: "text-embedding-ada-002",
+ valkey_host: "left-over-from-valkey.example.com",
+ valkey_port: "6379",
+ aws_region_name: "us-west-2",
+ });
+
+ expect(params).not.toHaveProperty("valkey_host");
+ expect(params).not.toHaveProperty("valkey_port");
+ expect(params).not.toHaveProperty("aws_region_name");
+ expect(params.mongodb_connection_string).toBe("mongodb+srv://user:pass@cluster0.mongodb.net");
+ });
+
+ it("omits a blank mongodb_num_candidates so litellm picks its own candidate count", () => {
+ const params = buildVectorStoreLitellmParams("mongodb", {
+ mongodb_connection_string: "mongodb+srv://user:pass@cluster0.mongodb.net",
+ mongodb_database: "sample_mflix",
+ mongodb_collection: "embedded_movies",
+ embedding_model: "text-embedding-ada-002",
+ });
+
+ expect(params.mongodb_num_candidates).toBeUndefined();
+ expect(JSON.parse(JSON.stringify(params))).not.toHaveProperty("mongodb_num_candidates");
+ });
+
it("keeps embedding_model as-is for providers outside the rename set", () => {
const params = buildVectorStoreLitellmParams("s3_vectors", {
vector_bucket_name: "my-vector-bucket",
diff --git a/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.tsx b/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.tsx
index 9d78b727768..e25dbe30005 100644
--- a/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.tsx
+++ b/ui/litellm-dashboard/src/app/(dashboard)/vector-stores/_components/VectorStoreForm.tsx
@@ -34,7 +34,7 @@ import { Textarea } from "@/components/ui/textarea";
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";
import { useZodForm } from "@/lib/forms/useZodForm";
-const EMBEDDING_MODEL_RENAME_PROVIDERS = new Set(["milvus", "valkey"]);
+const EMBEDDING_MODEL_RENAME_PROVIDERS = new Set(["milvus", "valkey", "mongodb"]);
export const buildVectorStoreLitellmParams = (
provider: string,
@@ -70,6 +70,12 @@ const PROVIDER_FIELD_NAMES = [
"vector_bucket_name",
"index_name",
"aws_region_name",
+ "mongodb_connection_string",
+ "mongodb_database",
+ "mongodb_collection",
+ "mongodb_embedding_field",
+ "mongodb_text_field",
+ "mongodb_num_candidates",
"valkey_host",
"valkey_port",
"valkey_password",
@@ -101,6 +107,12 @@ const vectorStoreShape = {
vector_bucket_name: optionalText,
index_name: optionalText,
aws_region_name: optionalText,
+ mongodb_connection_string: optionalText,
+ mongodb_database: optionalText,
+ mongodb_collection: optionalText,
+ mongodb_embedding_field: optionalText,
+ mongodb_text_field: optionalText,
+ mongodb_num_candidates: optionalText,
valkey_host: optionalText,
valkey_port: optionalText,
valkey_password: optionalText,
@@ -130,6 +142,8 @@ const EMPTY_VALUES: VectorStoreFormValues = {
custom_llm_provider: "bedrock",
vector_store_id: "",
vertex_location: "global",
+ mongodb_embedding_field: "embedding",
+ mongodb_text_field: "text",
valkey_port: "6379",
valkey_ssl: "false",
valkey_text_field: "text",
@@ -262,7 +276,9 @@ const VectorStoreForm: React.FC = ({
: 'my-datastore_1234567890 (data store ID from Vertex AI / "Agent Search" console)'
: selectedProvider === "valkey"
? "my-search-index (FT index name in Valkey)"
- : "Enter vector store ID from your provider";
+ : selectedProvider === "mongodb"
+ ? "my-vector-index (Atlas Vector Search index name)"
+ : "Enter vector store ID from your provider";
return (