diff --git a/packages/@n8n/nodes-langchain/credentials/ChatHubVectorStoreQdrantApi.credentials.ts b/packages/@n8n/nodes-langchain/credentials/ChatHubVectorStoreQdrantApi.credentials.ts index ffb215eeabb..8ad6dc23170 100644 --- a/packages/@n8n/nodes-langchain/credentials/ChatHubVectorStoreQdrantApi.credentials.ts +++ b/packages/@n8n/nodes-langchain/credentials/ChatHubVectorStoreQdrantApi.credentials.ts @@ -16,7 +16,7 @@ export class ChatHubVectorStoreQdrantApi implements ICredentialType { type: 'string', default: 'n8n_vectors', description: - 'The Qdrant collection to use. All users share this collection; access is scoped per user via a userId metadata field.', + 'The Qdrant collection to use. All users share this collection; access is scoped per user via a userId metadata field. The collection is created automatically if it does not exist.', }, ]; } diff --git a/packages/@n8n/nodes-langchain/nodes/vector_store/ChatHubVectorStorePinecone/ChatHubVectorStorePinecone.node.ts b/packages/@n8n/nodes-langchain/nodes/vector_store/ChatHubVectorStorePinecone/ChatHubVectorStorePinecone.node.ts index fc8c9cb3b0a..b8b58dea90f 100644 --- a/packages/@n8n/nodes-langchain/nodes/vector_store/ChatHubVectorStorePinecone/ChatHubVectorStorePinecone.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/vector_store/ChatHubVectorStorePinecone/ChatHubVectorStorePinecone.node.ts @@ -2,8 +2,11 @@ import type { PineconeStoreParams } from '@langchain/pinecone'; import { PineconeStore } from '@langchain/pinecone'; import { Pinecone } from '@pinecone-database/pinecone'; import type { + ICredentialsDecrypted, + ICredentialTestFunctions, IDataObject, ILoadOptionsFunctions, + INodeCredentialTestResult, INodeProperties, NodeParameterValueType, } from 'n8n-workflow'; @@ -39,6 +42,35 @@ const insertFields: INodeProperties[] = [ }, ]; +async function chatHubVectorStorePineconeApiConnectionTest( + this: ICredentialTestFunctions, + credential: ICredentialsDecrypted, +): Promise { + const credentials = credential.data as ChatHubVectorStorePineconeApiCredentials; + + try { + const client = new Pinecone({ apiKey: credentials.apiKey }); + const indexes = ((await client.listIndexes()).indexes ?? []).map((i) => i.name); + + if (!indexes.includes(credentials.pineconeIndex)) { + return { + status: 'Error', + message: `Index "${credentials.pineconeIndex}" not found. Please create the index first or check the index name.`, + }; + } + } catch (error) { + return { + status: 'Error', + message: error.message as string, + }; + } + + return { + status: 'OK', + message: 'Connection successful', + }; +} + async function deleteDocuments( this: ILoadOptionsFunctions, payload: IDataObject | string | undefined, @@ -78,12 +110,16 @@ export class ChatHubVectorStorePinecone extends createVectorStoreNode { + const credentials = credential.data as ChatHubVectorStoreQdrantApiCredentials; + + try { + const client = createQdrantClient(credentials); + await client.getCollections(); + } catch (error) { + return { + status: 'Error', + message: error.message as string, + }; + } + + return { + status: 'OK', + message: 'Connection successful', + }; +} + async function deleteDocuments( this: ILoadOptionsFunctions, payload: IDataObject | string | undefined, @@ -80,12 +105,16 @@ export class ChatHubVectorStoreQdrant extends createVectorStoreNode