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

  1. Switch embedding workloads to a provider that implements embeddings (e.g. @ai-sdk/openai, @ai-sdk/azure, @ai-sdk/amazon-bedrock).
  2. Create a separate embedding provider instance just for embed() calls and keep DeepSeek for chat.
  3. 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

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-assisted analysis of vercel/ai@69428b1f8b (2026-08-30). Data as JSON: /api/errors/b879ff56d7ef2149. Report an issue: GitHub.