vercel/ai · error · NoSuchModelError

LMNT does not provide embedding models

Error message

LMNT does not provide embedding models

What it means

LMNT provides only speech models; its embeddingModel accessor always throws NoSuchModelError with this message. Embeddings are simply not part of LMNT's offering, so this is an intentional capability guard.

Source

Thrown at packages/lmnt/src/lmnt-provider.ts:91

    return {
      speech: createSpeechModel(modelId),
    };
  };

  provider.specificationVersion = 'v4' as const;
  provider.speech = createSpeechModel;
  provider.speechModel = createSpeechModel;

  provider.languageModel = (modelId: string) => {
    throw new NoSuchModelError({
      modelId,
      modelType: 'languageModel',
      message: 'LMNT does not provide language models',
    });
  };

  provider.embeddingModel = (modelId: string) => {
    throw new NoSuchModelError({
      modelId,
      modelType: 'embeddingModel',
      message: 'LMNT does not provide embedding models',
    });
  };

  provider.imageModel = (modelId: string) => {
    throw new NoSuchModelError({
      modelId,
      modelType: 'imageModel',
      message: 'LMNT does not provide image models',
    });
  };

  return provider as LMNTProvider;
}

/**

View on GitHub (pinned to 69428b1f8b)

Solutions

  1. Use an embedding-capable provider (openai.textEmbeddingModel, google, amazon-bedrock, etc.)
  2. Keep LMNT only for speech: lmnt.speech(modelId)
  3. Fix your provider registry so the embedding slot points to an embeddings provider

Example fix

// before
const { embedding } = await embed({ model: lmnt.embeddingModel('x'), value: 'text' });
// after
const { embedding } = await embed({ model: openai.textEmbeddingModel('text-embedding-3-small'), value: 'text' });
Defensive patterns

Strategy: type-guard

Validate before calling

// ensure the embedding provider supports embeddings
if (providerIsLMNT(embeddingProvider)) {
  embeddingProvider = openai.textEmbeddingModel('text-embedding-3-small');
}

Type guard

function supportsEmbeddings(p: any): boolean {
  try { p.embeddingModel?.('probe'); return true; } catch { return false; }
}

Try / catch

try {
  await embed({ model: lmnt.embeddingModel(id), value });
} catch (e) {
  if (NoSuchModelError.isInstance(e) && e.modelType === 'embeddingModel') {
    // fall back to an embeddings-capable provider
  } else throw e;
}

Prevention

When it happens

Trigger: Calling lmnt.embeddingModel('some-model') or passing the LMNT provider where an EmbeddingModel is expected, e.g. in embed/embedMany.

Common situations: Configuring an embedding registry entry to LMNT by mistake, or copy-pasting embedding setup from OpenAI/Google examples.

Related errors


AI-assisted analysis of vercel/ai@69428b1f8b (2026-08-30). Data as JSON: /api/errors/d027081d889defdc. Report an issue: GitHub.