From d06c2a79085316175896b2b9d3a30703a00cd71c Mon Sep 17 00:00:00 2001 From: namansleeps Date: Wed, 9 Aug 2023 13:17:17 +0530 Subject: [PATCH 1/3] weaviate frontend complete --- .../Content/Marketplace/KnowledgeTemplate.js | 24 +++++++ gui/pages/Dashboard/Settings/AddDatabase.js | 71 ++++++++++++++++++- gui/pages/_app.css | 1 + gui/pages/api/DashboardService.js | 4 ++ gui/public/images/weaviate.svg | 9 +++ gui/utils/utils.js | 3 +- 6 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 gui/public/images/weaviate.svg diff --git a/gui/pages/Content/Marketplace/KnowledgeTemplate.js b/gui/pages/Content/Marketplace/KnowledgeTemplate.js index d83551e60..2ccbebe4a 100644 --- a/gui/pages/Content/Marketplace/KnowledgeTemplate.js +++ b/gui/pages/Content/Marketplace/KnowledgeTemplate.js @@ -25,6 +25,7 @@ export default function KnowledgeTemplate({template, env}) { const [indexDropdown, setIndexDropdown] = useState(false); const [pinconeIndices, setPineconeIndices] = useState([]); const [qdrantIndices, setQdrantIndices] = useState([]); + const [weaviateIndices, setWeaviateIndices] = useState([]); useEffect(() => { getValidMarketplaceIndices(template.name) @@ -33,6 +34,7 @@ export default function KnowledgeTemplate({template, env}) { if (data) { setPineconeIndices(data.pinecone || []); setQdrantIndices(data.qdrant || []); + setWeaviateIndices(data.weaviate || []) } }) .catch((error) => { @@ -239,6 +241,28 @@ export default function KnowledgeTemplate({template, env}) { } ))} } + {weaviateIndices && weaviateIndices.length > 0 && +
+
Weaviate
+ {weaviateIndices.map((index) => (
handleInstallClick(index.id)} style={{ + padding: '12px 14px', + maxWidth: '100%', + display: 'flex', + justifyContent: 'space-between' + }}> +
{index.name}
+ {!checkIndexValidity(index.is_valid_state, index.is_valid_dimension)[0] && +
+ info-icon +
} +
))} +
} } } diff --git a/gui/pages/Dashboard/Settings/AddDatabase.js b/gui/pages/Dashboard/Settings/AddDatabase.js index 0383f972a..7e8a19c9e 100644 --- a/gui/pages/Dashboard/Settings/AddDatabase.js +++ b/gui/pages/Dashboard/Settings/AddDatabase.js @@ -13,7 +13,7 @@ import knowledgeStyles from "@/pages/Content/Knowledge/Knowledge.module.css"; import styles from "@/pages/Content/Marketplace/Market.module.css"; import Image from "next/image"; import styles1 from "@/pages/Content/Agents/Agents.module.css"; -import {connectPinecone, connectQdrant, fetchVectorDBList} from "@/pages/api/DashboardService"; +import {connectPinecone, connectQdrant, connectWeaviate, fetchVectorDBList} from "@/pages/api/DashboardService"; export default function AddDatabase({internalId, sendDatabaseDetailsData}) { const [activeView, setActiveView] = useState('select_database'); @@ -27,6 +27,10 @@ export default function AddDatabase({internalId, sendDatabaseDetailsData}) { const [qdrantApiKey, setQdrantApiKey] = useState(''); const [qdrantURL, setQdrantURL] = useState(''); + + const [weaviateApiKey, setWeaviateApiKey] = useState(''); + const [weaviateURL, setWeaviateURL] = useState(''); + const [qdrantPort, setQdrantPort] = useState(8001); const [connectText, setConnectText] = useState('Connect'); @@ -70,6 +74,17 @@ export default function AddDatabase({internalId, sendDatabaseDetailsData}) { if (qdrant_port) { setQdrantPort(Number(qdrant_port)); } + + const weaviate_api = localStorage.getItem('weaviate_api_' + String(internalId)); + if (weaviate_api) { + setWeaviateApiKey(weaviate_api); + } + + const weaviate_url = localStorage.getItem('weaviate_url_' + String(internalId)); + if (weaviate_url) { + setWeaviateURL(weaviate_url); + } + }, [internalId]); useEffect(() => { @@ -109,6 +124,14 @@ export default function AddDatabase({internalId, sendDatabaseDetailsData}) { setLocalStorageValue('qdrant_port_' + String(internalId), event.target.value, setQdrantPort); } + const handleWeaviateAPIKeyChange = (event) => { + setLocalStorageValue('weaviate_api_' + String(internalId), event.target.value, setWeaviateApiKey); + } + + const handleWeaviateURLChange = (event) => { + setLocalStorageValue('weaviate_url_' + String(internalId), event.target.value, setWeaviateURL); + } + const addCollection = () => { setLocalStorageArray("db_collections_" + String(internalId), [...collections, 'collection name'], setCollections); }; @@ -140,6 +163,11 @@ export default function AddDatabase({internalId, sendDatabaseDetailsData}) { return; } + if(collections.length === 1 && collections[0].length < 1){ + toast.error("Atleast add 1 Collection/Index", {autoClose: 1800}); + return; + } + if (selectedDB === 'Pinecone') { if (pineconeApiKey.replace(/\s/g, '') === '') { toast.error("Pinecone API key is empty", {autoClose: 1800}); @@ -207,6 +235,37 @@ export default function AddDatabase({internalId, sendDatabaseDetailsData}) { setConnectText("Connect"); }); } + + if (selectedDB === 'Weaviate') { + if (weaviateApiKey.replace(/\s/g, '') === '') { + toast.error("Weaviate API key is empty", {autoClose: 1800}); + return; + } + + if (weaviateURL.replace(/\s/g, '') === '') { + toast.error("Weaviate URL is empty", {autoClose: 1800}); + return; + } + + setConnectText("Connecting..."); + + const weaviateData = { + "name": databaseName, + "collections": collections, + "api_key": weaviateApiKey, + "url": weaviateURL, + } + + connectWeaviate(weaviateData) + .then((response) => { + connectResponse(response.data); + }) + .catch((error) => { + toast.error("Unable to connect database", {autoClose: 1800}); + console.error('Error fetching vector databases:', error); + setConnectText("Connect"); + }); + } } const proceedAddDatabase = () => { @@ -321,6 +380,16 @@ export default function AddDatabase({internalId, sendDatabaseDetailsData}) { } + {selectedDB === 'Weaviate' &&
+
+ + +
+
+ + +
+
}
} ))} } + {weaviateIndices && weaviateIndices.length > 0 && +
+
Weaviate
+ {weaviateIndices.map((index) => (
handleIndexSelect(index)}> +
{index.name}
+ {!checkIndexValidity(index.is_valid_state)[0] && +
+ info-icon +
} +
))} +
} } From 989c62bd4a107adf84d71a8c05cd066bc56d28c4 Mon Sep 17 00:00:00 2001 From: namansleeps Date: Thu, 10 Aug 2023 18:24:40 +0530 Subject: [PATCH 3/3] minor bug --- gui/pages/Content/Knowledge/KnowledgeForm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/pages/Content/Knowledge/KnowledgeForm.js b/gui/pages/Content/Knowledge/KnowledgeForm.js index 46f222c7b..7ba785812 100644 --- a/gui/pages/Content/Knowledge/KnowledgeForm.js +++ b/gui/pages/Content/Knowledge/KnowledgeForm.js @@ -34,7 +34,7 @@ export default function KnowledgeForm({ if (data) { setPineconeIndices(data.pinecone || []); setQdrantIndices(data.qdrant || []); - setWeaviateIndices(data.qdrant || []); + setWeaviateIndices(data.weaviate || []); } }) .catch((error) => {