UNPKG

n8n

Version:

n8n Workflow Automation Tool

105 lines 5.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildVectorStoreBackend = buildVectorStoreBackend; exports.buildVectorStore = buildVectorStore; const agents_1 = require("@n8n/agents"); const n8n_workflow_1 = require("n8n-workflow"); const embedding_credential_1 = require("./embedding-credential"); function requireCredentialField(credential, field, credentialLabel) { const value = credential[field]; if (typeof value !== 'string' || value.length === 0) { throw new n8n_workflow_1.UserError(`${credentialLabel} credential is missing "${field}"`); } return value; } function optionalCredentialField(credential, field) { const value = credential[field]; return typeof value === 'string' && value.length > 0 ? value : undefined; } function credentialFieldWithDefault(credential, field, defaultValue) { return optionalCredentialField(credential, field) ?? defaultValue; } async function buildPostgresBackend(config, credential) { if (credential.sshTunnel === true) { throw new n8n_workflow_1.UserError('SSH tunnel Postgres credentials are not supported for vector stores'); } const host = credentialFieldWithDefault(credential, 'host', 'localhost'); const database = credentialFieldWithDefault(credential, 'database', 'postgres'); const user = credentialFieldWithDefault(credential, 'user', 'postgres'); const password = optionalCredentialField(credential, 'password') ?? ''; const port = typeof credential.port === 'number' ? credential.port : Number(optionalCredentialField(credential, 'port') ?? 5432); const ssl = credential.ssl; const allowUnauthorizedCerts = credential.allowUnauthorizedCerts === true; const encodedUser = encodeURIComponent(user); const encodedPassword = encodeURIComponent(password); const encodedDatabase = encodeURIComponent(database); let connectionString = `postgresql://${encodedUser}:${encodedPassword}@${host}:${port}/${encodedDatabase}`; if (allowUnauthorizedCerts) { connectionString += '?sslmode=no-verify'; } else if (ssl === 'require') { connectionString += '?sslmode=require'; } const { PgVectorStore } = await import('@n8n/agents/vector-stores/postgres'); return new PgVectorStore(config.name, { connectionString, tableName: config.tableName, connectionTimeoutMillis: 10_000, }); } async function buildBackend(config, credential) { switch (config.provider) { case 'pinecone': { const apiKey = requireCredentialField(credential, 'apiKey', 'Pinecone'); const { PineconeVectorStore } = await import('@n8n/agents/vector-stores/pinecone'); return new PineconeVectorStore(config.name, { apiKey, indexName: config.indexName, ...(config.namespace ? { namespace: config.namespace } : {}), }); } case 'qdrant': { const url = requireCredentialField(credential, 'qdrantUrl', 'Qdrant'); const apiKey = optionalCredentialField(credential, 'apiKey'); const { QdrantVectorStore } = await import('@n8n/agents/vector-stores/qdrant'); return new QdrantVectorStore(config.name, { url, ...(apiKey ? { apiKey } : {}), collectionName: config.collectionName, }); } case 'supabase': { const url = requireCredentialField(credential, 'host', 'Supabase'); const apiKey = requireCredentialField(credential, 'serviceRole', 'Supabase'); const { SupabaseVectorStore } = await import('@n8n/agents/vector-stores/supabase'); return new SupabaseVectorStore(config.name, { url, apiKey, tableName: config.tableName, ...(config.queryName ? { queryName: config.queryName } : {}), }); } case 'postgres': return await buildPostgresBackend(config, credential); } } async function buildVectorStoreBackend(config, credentialProvider, resolvedCredential) { if (!config.credential) { throw new n8n_workflow_1.UserError(`Vector store "${config.name}" has no credential configured`); } const credential = resolvedCredential ?? (await credentialProvider.resolve(config.credential)); return await buildBackend(config, credential); } async function buildVectorStore(config, credentialProvider) { if (!config.embedding.credential) { throw new n8n_workflow_1.UserError(`Vector store "${config.name}" has no embedding credential configured`); } const backend = await buildVectorStoreBackend(config, credentialProvider); const embeddingOptions = await (0, embedding_credential_1.resolveEmbeddingProviderOptionsFromCredential)(config.embedding.credential, config.embedding.model, credentialProvider); return new agents_1.VectorStore(config.name) .store(backend) .embeddingModel(config.embedding.model, embeddingOptions); } //# sourceMappingURL=vector-store-factory.js.map