FlowiseAI/Flowise · error · Error
${e}
Error message
${e} What it means
In Qdrant's `add` path, `QdrantVectorStore.fromDocuments` is awaited inside a try/catch that re-wraps the caught value as `new Error(e)`. This stringifies whatever was thrown (an Error becomes its .message, a string stays a string, an object becomes '[object Object]'), discarding the original stack trace and `cause`. The real failure originates inside the LangChain Qdrant integration or the Qdrant server.
Source
Thrown at packages/components/nodes/vectorstores/Qdrant/Qdrant.ts:333
vectorStoreName: collectionName
}
})
return res
} else {
if (_batchSize) {
const batchSize = parseInt(_batchSize, 10)
for (let i = 0; i < finalDocs.length; i += batchSize) {
const batch = finalDocs.slice(i, i + batchSize)
await QdrantVectorStore.fromDocuments(batch, embeddings, dbConfig)
}
} else {
await QdrantVectorStore.fromDocuments(finalDocs, embeddings, dbConfig)
}
return { numAdded: finalDocs.length, addedDocs: finalDocs }
}
} catch (e) {
throw new Error(e)
}
},
async delete(nodeData: INodeData, ids: string[], options: ICommonObject): Promise<void> {
const qdrantServerUrl = nodeData.inputs?.qdrantServerUrl as string
const collectionName = nodeData.inputs?.qdrantCollection as string
const embeddings = nodeData.inputs?.embeddings as Embeddings
const qdrantSimilarity = nodeData.inputs?.qdrantSimilarity
const qdrantVectorDimension = nodeData.inputs?.qdrantVectorDimension
const recordManager = nodeData.inputs?.recordManager
const credentialData = await getCredentialData(nodeData.credential ?? '', options)
const qdrantApiKey = getCredentialParam('qdrantApiKey', credentialData, nodeData)
const port = Qdrant_VectorStores.determinePortByUrl(qdrantServerUrl)
const client = new QdrantClient({
url: qdrantServerUrl,
apiKey: qdrantApiKey,View on GitHub (pinned to abe4a8601a)
Solutions
- Verify `qdrantServerUrl` is reachable and the credential `qdrantApiKey` is valid for cloud clusters.
- Confirm the collection's configured vector dimension equals the embedding model's output dimension.
- Check that `qdrantCollection` exists (or that auto-create is enabled) and `qdrantSimilarity` matches the index.
- Parse `batchSize` to an integer before the loop; ignore non-numeric values.
- When debugging, log the original error (the wrapped message is lossy) to recover the underlying cause.
Example fix
// before
catch (e) { throw new Error(e) }
// after (preserve cause)
catch (e) { throw new Error(`Qdrant addDocuments failed: ${e instanceof Error ? e.message : String(e)}`, { cause: e }) } Defensive patterns
Strategy: try-catch
Validate before calling
function validateQdrantAddInputs(inputs: any) {
if (!inputs?.qdrantServerUrl) throw new Error('qdrantServerUrl is required')
if (!inputs?.embeddings) throw new Error('embeddings is required')
const dim = Number(inputs?.qdrantVectorDimension)
if (!Number.isFinite(dim) || dim <= 0) throw new Error('qdrantVectorDimension must be a positive number')
if (inputs?._batchSize != null && !/^\d+$/.test(String(inputs._batchSize))) throw new Error('batchSize must be an integer string')
} Type guard
null
Try / catch
try { await QdrantVectorStore.fromDocuments(batch, embeddings, dbConfig) }
catch (e) { throw new Error(`Qdrant ingest failed: ${e instanceof Error ? e.message : String(e)}`, { cause: e }) } Prevention
- Verify server URL reachability and API key before bulk ingest.
- Keep collection vector dimension in sync with the embedding model.
- Use numeric batchSize only; fall back to single batch on parse failure.
- Preserve the original error via `cause` instead of `new Error(e)`.
When it happens
Trigger: Qdrant server URL wrong/unreachable; invalid or missing `qdrantApiKey`; collection vector dimension does not match the embedding model output; `qdrantCollection` does not exist and cannot be auto-created; `batchSize` not parseable as int; TLS/DNS failure during `fromDocuments`.
Common situations: Embedding model swapped (e.g. 1536 -> 768 dims) without recreating the Qdrant collection; local Qdrant not running; cloud Qdrant URL typo; API key expired; network egress blocked from the worker.
Related errors
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/abe2ffa59a4fc5ea.
Report an issue: GitHub.