n8n-io/n8n · error · OperationalError

NVIDIA embeddings API returned

Error message

NVIDIA embeddings API returned ${data.length} embeddings for a batch of ${expected} inputs

What it means

An OperationalError raised while flattening NVIDIA embeddings batch responses: each batch must return exactly one embedding per input so the caller can zip them by position. If data.length !== expected for any batch, embedding alignment would be corrupted, so the helper fails loudly instead of silently shifting vectors.

Solutions

  1. Reduce the batch size (chunk documents before calling embedDocuments) to stay under the NVIDIA model's limit.
  2. Sanitise inputs — remove empty/whitespace strings and de-duplicate before embedding, then re-expand the result.
  3. Confirm the NVIDIA model id is an embeddings model (e.g. NV-Embed-QA, nvidia/embedqa-4).
  4. Retry once; if intermittent, lower concurrency or add maxRetries/timeout options.
Defensive patterns

Strategy: validation

Validate before calling

// Chunk inputs to a safe batch size before calling embedDocuments
const MAX_BATCH = 16; // consult NVIDIA model docs
for (let i = 0; i < documents.length; i += MAX_BATCH) {
  const batch = documents.slice(i, i + MAX_BATCH).filter(d => d.trim().length > 0);
  // ... call embedWithRetry(batch)
}

Type guard

const matchesBatchSize = (data: unknown[], expected: number): boolean =>
  Array.isArray(data) && data.length === expected;

Try / catch

try {
  return embedBatch(batch);
} catch (e) {
  if (/returned \d+ embeddings for a batch of/i.test((e as Error).message)) {
    // retry with batch size 1 to localise the failing input
    return batch.map(one => embedBatch([one])[0]);
  }
  throw e;
}

Prevention

When it happens

Trigger: NVIDIA's /v1/embeddings endpoint returns fewer or more entries than the number of input texts in a batch — caused by the API dropping empty inputs, deduplicating identical texts, a rate-limit returning a partial body, or a model cap on batch size that truncates the response.

Common situations: Sending a batch larger than the model's max batch size; sending duplicate or whitespace-only strings the API collapses; endpoint misbehaviour under load; using a non-embedding NVIDIA model that returns a single aggregate vector.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/05bd1b56db80f3b5. Report an issue: GitHub.

Appendix: source

Thrown at packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsNvidia/helpers.ts:70

				model: this.model,
				input: batch,
				input_type: inputType,
			};
			if (this.dimensions) params.dimensions = this.dimensions;
			if (this.encodingFormat) params.encoding_format = this.encodingFormat;
			const { data } = await this.embeddingWithRetry(params);
			return { expected: batch.length, data };
		});

		const batchResponses = await Promise.all(batchRequests);

		// The caller maps each input text to the embedding at the same position, so every batch must
		// return exactly one embedding per input. Flatten by input position (like the base class) and
		// fail loudly on a malformed response rather than silently dropping or shifting embeddings.
		const embeddings: number[][] = [];
		for (const { expected, data } of batchResponses) {
			if (data.length !== expected) {
				throw new OperationalError(
					`NVIDIA embeddings API returned ${data.length} embeddings for a batch of ${expected} inputs`,
				);
			}
			for (const entry of data) {
				embeddings.push(entry.embedding);
			}
		}
		return embeddings;
	}
}

View on GitHub (pinned to 5ac6606e81)