vercel/ai · error · NoSuchModelError
ElevenLabs does not provide embedding models
Error message
ElevenLabs does not provide embedding models
What it means
ElevenLabs does not offer an embeddings API, so its embeddingModel/textEmbeddingModel factories throw NoSuchModelError with the message 'ElevenLabs does not provide embedding models'. This enforces the provider's actual capability set (speech, transcription).
Source
Thrown at packages/elevenlabs/src/elevenlabs-provider.ts:124
};
};
provider.specificationVersion = 'v4' as const;
provider.transcription = createTranscriptionModel;
provider.transcriptionModel = createTranscriptionModel;
provider.speech = createSpeechModel;
provider.speechModel = createSpeechModel;
provider.languageModel = (modelId: string) => {
throw new NoSuchModelError({
modelId,
modelType: 'languageModel',
message: 'ElevenLabs does not provide language models',
});
};
provider.embeddingModel = (modelId: string) => {
throw new NoSuchModelError({
modelId,
modelType: 'embeddingModel',
message: 'ElevenLabs does not provide embedding models',
});
};
provider.textEmbeddingModel = provider.embeddingModel;
provider.imageModel = (modelId: string) => {
throw new NoSuchModelError({
modelId,
modelType: 'imageModel',
message: 'ElevenLabs does not provide image models',
});
};
return provider as ElevenLabsProvider;
}
View on GitHub (pinned to 69428b1f8b)
Solutions
- Use an embedding-capable provider (e.g. @ai-sdk/openai, @ai-sdk/google, @ai-sdk/mistral, @ai-sdk/amazon-bedrock) for embed/embedMany.
- Keep a dedicated embedding provider in your config separate from the ElevenLabs voice provider.
- Check provider capabilities before resolving embedding models in generic code.
Example fix
// before
await embed({ model: elevenlabs.embeddingModel('x'), value });
// after
await embed({ model: openai.embedding('text-embedding-3-small'), value }); Defensive patterns
Strategy: validation
Validate before calling
function supportsEmbeddings(provider: unknown): boolean {
return !/elevenlabs/i.test((provider as any)?.provider ?? '');
} Type guard
function isEmbeddingCapable(p: any): p is { embeddingModel: (id: string) => unknown } {
return typeof p?.embeddingModel === 'function' && !/elevenlabs/i.test(p?.provider ?? '');
} Try / catch
try {
await embed({ model: provider.embeddingModel(id), value });
} catch (e) {
if (NoSuchModelError.isInstance(e) && e.modelType === 'embeddingModel') {
throw new Error('ElevenLabs has no embeddings; configure an embedding provider for RAG.');
}
throw e;
} Prevention
- Dedicate a known embedding provider (OpenAI, Google, etc.) in your RAG config.
- Never iterate 'all providers' for embeddings without a capability filter.
- Document per-provider capabilities where providers are configured.
When it happens
Trigger: Calling embed()/embedMany() with an ElevenLabs model or provider.embeddingModel('some-id') / textEmbeddingModel('some-id').
Common situations: RAG setups that iterate over all configured providers to build embeddings, or assuming a voice-AI vendor also provides embedding endpoints.
Related errors
- AI_NoSuchModelError
- embeddingModel
- AI_NoSuchModelError
- No such embeddingModel: ${modelId}
- No such embeddingModel: ${modelId}
AI-assisted analysis of vercel/ai@69428b1f8b (2026-08-30).
Data as JSON: /api/errors/b608a93b175b75b0.
Report an issue: GitHub.