n8n-io/n8n · error · Error

Unsupported embedding provider: "${provider}". Supported: ${

Error message

Unsupported embedding provider: "${provider}". Supported: ${supported}

What it means

`createEmbeddingModel` splits the embedder string at `/` to get a provider key and model name, then looks up the provider in `EMBEDDING_PROVIDERS`. If the provider is not registered, it throws listing the supported keys: `openai`, `google`, `mistral`, `cohere`, `amazon`, `bedrock`. Note the embedding registry is separate from the language-model registry and has different keys (e.g. `amazon`/`bedrock` but not `aws-bedrock`).

Source

Thrown at packages/@n8n/agents/src/runtime/model/model-factory.ts:313

type EmbeddingProvider = keyof typeof EMBEDDING_PROVIDERS;
type EmbeddingModelId = `${EmbeddingProvider}/${string}`;

/**
 * Create an embedding model from a "provider/model" string (e.g. "openai/text-embedding-3-small").
 * Supports any AI SDK provider that exposes `.embeddingModel()`.
 * The provider package must be installed at runtime.
 */
export function createEmbeddingModel(
	embedderString: EmbeddingModelId | (string & {}),
	options?: string | EmbeddingProviderOptions,
): EmbeddingModel {
	const [provider, ...rest] = embedderString.split('/');
	const modelName = rest.join('/');

	const entry = EMBEDDING_PROVIDERS[provider as EmbeddingProvider];
	if (!entry) {
		const supported = Object.keys(EMBEDDING_PROVIDERS).join(', ');
		throw new Error(`Unsupported embedding provider: "${provider}". Supported: ${supported}`);
	}

	const mod = require(entry.pkg) as Record<string, CreateEmbeddingProviderFn>;
	const factory = mod[entry.factory];
	const providerOptions = typeof options === 'string' ? { apiKey: options } : options;
	return factory(providerOptions).embeddingModel(modelName);
}

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Read the error message — it lists the supported embedding providers.
  2. Use the correct embedding provider key: for AWS Bedrock embeddings use `bedrock/` or `amazon/`, not `aws-bedrock/`.
  3. Switch to an embedding-capable provider (e.g. `openai/text-embedding-3-small`, `google/text-embedding-004`, `cohere/embed-english-v3.0`).
  4. Ensure the corresponding `@ai-sdk/*` package is installed as a dependency.

Example fix

// before:
createEmbeddingModel('aws-bedrock/titan-embed-text-v2');

// after:
createEmbeddingModel('bedrock/titan-embed-text-v2');
// or use OpenAI:
createEmbeddingModel('openai/text-embedding-3-small');
Defensive patterns

Strategy: validation

Validate before calling

const EMBEDDING_PROVIDERS = new Set(['openai','google','mistral','cohere','amazon','bedrock']);

function validateEmbeddingProvider(embedderString: string): void {
  const provider = embedderString.slice(0, embedderString.indexOf('/'));
  if (!EMBEDDING_PROVIDERS.has(provider)) {
    throw new Error(`Unknown embedding provider "${provider}". Supported: ${[...EMBEDDING_PROVIDERS].join(', ')}`);
  }
}

validateEmbeddingProvider(config.embedder);

Type guard

function isKnownEmbeddingProvider(id: string): boolean {
  const provider = id.slice(0, id.indexOf('/'));
  return ['openai','google','mistral','cohere','amazon','bedrock'].includes(provider);
}

Prevention

When it happens

Trigger: Calling `createEmbeddingModel('anthropic/text-embedding-3')` (Anthropic does not offer embeddings). Calling `createEmbeddingModel('aws-bedrock/titan-embed')` using the language-model provider key instead of the embedding key `bedrock`. Typo in the provider segment.

Common situations: Confusing the language-model provider keys with the embedding provider keys. Using a provider that has no embedding offering. Typo in the provider name. The embedding provider's `@ai-sdk/*` package naming differs from expectations.

Related errors


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