diff --git a/package-lock.json b/package-lock.json
index ee54855d85d..59719e7cac0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8009,6 +8009,10 @@
"resolved": "packages/compass-utils",
"link": true
},
+ "node_modules/@mongodb-js/compass-vector-embedding-visualizer": {
+ "resolved": "packages/compass-vector-embedding-visualizer",
+ "link": true
+ },
"node_modules/@mongodb-js/compass-web": {
"resolved": "packages/compass-web",
"link": true
@@ -47127,6 +47131,29 @@
"node": ">=0.3.1"
}
},
+ "packages/compass-vector-embedding-visualizer": {
+ "name": "@mongodb-js/compass-vector-embedding-visualizer",
+ "version": "0.0.1",
+ "license": "SSPL",
+ "dependencies": {
+ "react": "^18.2.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "packages/compass-vector-embedding-visualizer/node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"packages/compass-web": {
"name": "@mongodb-js/compass-web",
"version": "0.16.0",
@@ -58940,6 +58967,22 @@
}
}
},
+ "@mongodb-js/compass-vector-embedding-visualizer": {
+ "version": "file:packages/compass-vector-embedding-visualizer",
+ "requires": {
+ "react": "^18.2.0"
+ },
+ "dependencies": {
+ "react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ }
+ }
+ },
"@mongodb-js/compass-web": {
"version": "file:packages/compass-web",
"requires": {
diff --git a/packages/compass-vector-embedding-visualizer/components/vector-visualizer.tsx b/packages/compass-vector-embedding-visualizer/components/vector-visualizer.tsx
new file mode 100644
index 00000000000..a5b00a6c9e7
--- /dev/null
+++ b/packages/compass-vector-embedding-visualizer/components/vector-visualizer.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+
+const VectorVisualizer = () => {
+ // Placeholder points
+ const points = [
+ { x: 30, y: 20 },
+ { x: 80, y: 90 },
+ { x: 150, y: 50 },
+ { x: 200, y: 120 },
+ ];
+
+ return (
+
+
Vector Embedding Visualization (Placeholder)
+
+
+ );
+};
+
+export default VectorVisualizer;
diff --git a/packages/compass-vector-embedding-visualizer/index.tsx b/packages/compass-vector-embedding-visualizer/index.tsx
new file mode 100644
index 00000000000..1110b6451f6
--- /dev/null
+++ b/packages/compass-vector-embedding-visualizer/index.tsx
@@ -0,0 +1 @@
+export * from './plugin';
diff --git a/packages/compass-vector-embedding-visualizer/package.json b/packages/compass-vector-embedding-visualizer/package.json
new file mode 100644
index 00000000000..926cfdb5fb2
--- /dev/null
+++ b/packages/compass-vector-embedding-visualizer/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@mongodb-js/compass-vector-embedding-visualizer",
+ "version": "0.0.1",
+ "description": "Compass plugin for visualizing vector embeddings",
+ "main": "plugin.tsx",
+ "license": "SSPL",
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha"
+ },
+ "dependencies": {
+ "react": "^18.2.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+}
diff --git a/packages/compass-vector-embedding-visualizer/plugin.tsx b/packages/compass-vector-embedding-visualizer/plugin.tsx
new file mode 100644
index 00000000000..e892f1f3738
--- /dev/null
+++ b/packages/compass-vector-embedding-visualizer/plugin.tsx
@@ -0,0 +1,38 @@
+// plugin.tsx
+import React from 'react';
+import { registerHadronPlugin } from 'hadron-app-registry';
+import { collectionModelLocator } from '@mongodb-js/compass-app-stores/provider';
+import { dataServiceLocator } from '@mongodb-js/compass-connections/provider';
+import { createLoggerLocator } from '@mongodb-js/compass-logging/provider';
+import { telemetryLocator } from '@mongodb-js/compass-telemetry/provider';
+
+import VectorVisualizer from './components/vector-visualizer';
+
+export const CompassVectorPluginProvider = registerHadronPlugin(
+ {
+ name: 'CompassVectorEmbeddingVisualizer',
+ component: function VectorVisualizerProvider({ children }) {
+ return <>{children}>;
+ },
+ activate: () => {
+ return {
+ store: () => () => null,
+ deactivate: () => {},
+ };
+ },
+ },
+ {
+ collection: collectionModelLocator,
+ dataService: dataServiceLocator,
+ logger: createLoggerLocator('COMPASS-VECTOR-VISUALIZER'),
+ track: telemetryLocator,
+ }
+);
+
+export const CompassVectorPlugin = {
+ name: 'Vector Embeddings',
+ type: 'Collection' as const,
+ provider: CompassVectorPluginProvider,
+ content: VectorVisualizer,
+ header: () => Vector Embeddings,
+};
diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx
index a3d835b5fac..a1362357db3 100644
--- a/packages/compass-web/src/entrypoint.tsx
+++ b/packages/compass-web/src/entrypoint.tsx
@@ -34,6 +34,7 @@ import { CompassIndexesPlugin } from '@mongodb-js/compass-indexes';
import { CompassSchemaValidationPlugin } from '@mongodb-js/compass-schema-validation';
import { CompassGlobalWritesPlugin } from '@mongodb-js/compass-global-writes';
import { CompassGenerativeAIPlugin } from '@mongodb-js/compass-generative-ai';
+import { CompassVectorPlugin } from '@mongodb-js/compass-vector-embedding-visualizer';
import ExplainPlanCollectionTabModal from '@mongodb-js/compass-explain-plan';
import ExportToLanguageCollectionTabModal from '@mongodb-js/compass-export-to-language';
import {
@@ -188,6 +189,7 @@ function CompassWorkspace({
CompassIndexesPlugin,
CompassSchemaValidationPlugin,
CompassGlobalWritesPlugin,
+ CompassVectorPlugin,
]}
modals={[
ExplainPlanCollectionTabModal,
diff --git a/packages/compass/src/app/components/workspace.tsx b/packages/compass/src/app/components/workspace.tsx
index cbef0332fce..5d37af047ac 100644
--- a/packages/compass/src/app/components/workspace.tsx
+++ b/packages/compass/src/app/components/workspace.tsx
@@ -27,6 +27,7 @@ import { CompassSchemaPlugin } from '@mongodb-js/compass-schema';
import { CompassIndexesPlugin } from '@mongodb-js/compass-indexes';
import { CompassSchemaValidationPlugin } from '@mongodb-js/compass-schema-validation';
import { CompassGlobalWritesPlugin } from '@mongodb-js/compass-global-writes';
+import { CompassVectorPlugin } from '@mongodb-js/compass-vector-embedding-visualizer';
import { CreateViewPlugin } from '@mongodb-js/compass-aggregations';
import {
CreateNamespacePlugin,
@@ -93,6 +94,7 @@ export default function Workspace({
CompassIndexesPlugin,
CompassSchemaValidationPlugin,
CompassGlobalWritesPlugin,
+ CompassVectorPlugin,
]}
modals={[
ExplainPlanCollectionTabModal,