vercel/ai · error · NoSuchModelError
embeddingModel
Error message
embeddingModel
What it means
The DeepSeek provider does not support embedding models, so its embeddingModel/textEmbeddingModel factory always throws NoSuchModelError. The provider only implements languageModel (chat) and files capabilities; this stub exists so the provider satisfies the Provider interface and fails fast with a clear message instead of returning undefined.
Source
Thrown at packages/deepseek/src/deepseek-provider.ts:116
const createFiles = () =>
new DeepSeekFiles({
provider: 'deepseek.files',
baseURL,
headers: getHeaders,
fetch: options.fetch,
});
const provider = (modelId: DeepSeekChatModelId) =>
createLanguageModel(modelId);
provider.specificationVersion = 'v4' as const;
provider.languageModel = createLanguageModel;
provider.chat = createLanguageModel;
provider.files = createFiles;
provider.embeddingModel = (modelId: string) => {
throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });
};
provider.textEmbeddingModel = provider.embeddingModel;
provider.imageModel = (modelId: string) => {
throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
};
return provider;
}
export const deepSeek = createDeepSeek();
View on GitHub (pinned to 69428b1f8b)
Solutions
- Switch embedding workloads to a provider that implements embeddings (e.g. @ai-sdk/openai, @ai-sdk/azure, @ai-sdk/amazon-bedrock).
- Create a separate embedding provider instance just for embed() calls and keep DeepSeek for chat.
- Feature-check at runtime: only call embed()/embeddingModel if the provider actually supports it, otherwise surface a clear configuration error.
Example fix
// before
import { createDeepSeek } from '@ai-sdk/deepseek';
import { embed } from 'ai';
const deepseek = createDeepSeek({ apiKey });
await embed({ model: deepseek.embeddingModel('x'), value: 'hi' });
// after
import { createOpenAI } from '@ai-sdk/openai';
const openai = createOpenAI({ apiKey: openaiKey });
await embed({ model: openai.embedding('text-embedding-3-small'), value: 'hi' }); Defensive patterns
Strategy: validation
Validate before calling
import { NoSuchModelError } from '@ai-sdk/provider';
function supportsEmbeddings(provider: unknown): boolean {
return typeof (provider as any)?.embeddingModel === 'function' &&
!/deepseek/i.test((provider as any)?.provider ?? '');
} Type guard
function isEmbeddingCapable(p: any): p is { embeddingModel: (id: string) => unknown } {
return typeof p?.embeddingModel === 'function';
} Try / catch
try {
await embed({ model: provider.embeddingModel(id), value });
} catch (e) {
if (NoSuchModelError.isInstance(e) && e.modelType === 'embeddingModel') {
throw new Error(`Provider ${id} does not support embeddings; configure an embedding provider.`);
}
throw e;
} Prevention
- Check the provider's README capability matrix before wiring embed() to it.
- Keep separate provider instances for chat and embedding workloads.
- Wrap model resolution in a helper that maps NoSuchModelError to a clear config error.
When it happens
Trigger: Calling embed(), embedMany(), or provider.embeddingModel('some-id') / provider.textEmbeddingModel('some-id') on the DeepSeek provider (deepseek('id').embeddingModel).
Common situations: Developers assume every AI SDK provider supports embeddings and try generate embeddings with DeepSeek (which offers no embedding API), or share generic provider-agnostic code that resolves embedding models from any configured provider.
Related errors
- AI_NoSuchModelError
- ElevenLabs does not provide embedding models
- 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/b879ff56d7ef2149.
Report an issue: GitHub.