vercel/ai · error · NoSuchModelError
No such embeddingModel: ${modelId}
Error message
No such embeddingModel: ${modelId} What it means
The xAI provider does not implement an embedding model, so its `embeddingModel`/`textEmbeddingModel` factory deliberately throws NoSuchModelError for every modelId. xAI's API surface supported here covers language, image, and video models only. Calling xai.embeddingModel('...') or xai.textEmbeddingModel('...'), or invoking embed/embedMany with an xai model string, produces this error.
Source
Thrown at packages/xai/src/xai-provider.ts:260
) as RealtimeFactoryV4;
const createFiles = () =>
new XaiFiles({
provider: 'xai.files',
baseURL,
headers: getHeaders,
fetch: options.fetch,
});
const provider = (modelId: XaiResponsesModelId) =>
createResponsesLanguageModel(modelId);
provider.specificationVersion = 'v4' as const;
provider.languageModel = createResponsesLanguageModel;
provider.chat = createChatLanguageModel;
provider.responses = createResponsesLanguageModel;
provider.embeddingModel = (modelId: string) => {
throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });
};
provider.textEmbeddingModel = provider.embeddingModel;
provider.imageModel = createImageModel;
provider.image = createImageModel;
provider.videoModel = createVideoModel;
provider.video = createVideoModel;
provider.experimental_realtime = experimentalRealtimeFactory;
provider.speechModel = createSpeechModel;
provider.speech = createSpeechModel;
provider.transcriptionModel = createTranscriptionModel;
provider.transcription = createTranscriptionModel;
provider.files = createFiles;
provider.tools = xaiTools;
return provider;
}
export const xai = createXai();View on GitHub (pinned to 69428b1f8b)
Solutions
- Use a provider that implements embeddings, e.g. openai.textEmbeddingModel('text-embedding-3-small') or another supported embedding provider.
- Call embed/embedMany with a textEmbedding model from a capable provider instead of xai.
- If xAI embedding support is needed, check for a newer @ai-sdk/xai release or file/track a feature request.
Example fix
// before
const { embedding } = await embed({ model: xai.textEmbeddingModel('grok-embed'), value: 'hi' });
// after
import { createOpenAI } from '@ai-sdk/openai';
const openai = createOpenAI();
const { embedding } = await embed({ model: openai.textEmbeddingModel('text-embedding-3-small'), value: 'hi' }); Defensive patterns
Strategy: fallback
Validate before calling
const XAI_SUPPORTS_EMBEDDINGS = false;
function resolveEmbeddingModel(provider: 'xai' | 'openai') {
if (provider === 'xai' && !XAI_SUPPORTS_EMBEDDINGS) {
return openai.textEmbeddingModel('text-embedding-3-small');
}
// ...
} Type guard
function providerSupportsEmbeddings(p: unknown): p is { textEmbeddingModel: (id: string) => unknown } {
return typeof (p as any)?.textEmbeddingModel === 'function' &&
!(p as any).textEmbeddingModel.toString().includes('NoSuchModelError');
} Try / catch
try {
return await embed({ model: xai.textEmbeddingModel(id), value });
} catch (e) {
if (NoSuchModelError.isInstance(e) && e.modelType === 'embeddingModel') {
return await embed({ model: openai.textEmbeddingModel('text-embedding-3-small'), value });
}
throw e;
} Prevention
- Check the provider's supported model types in docs before routing embeddings to it.
- Keep a capability map (provider -> supported model types) in multi-provider apps.
- Cover provider capability with tests so a wrong routing fails in CI, not production.
When it happens
Trigger: xai.embeddingModel('grok-embedding') or xai.textEmbeddingModel('...') called directly; embed()/embedMany() with model: xai('some-id'); provider factory strings like xai.embeddingModel in generic model-selection code.
Common situations: Mistaking xAI for a provider with embedding support; switching a project's embedding provider from OpenAI to xAI without checking capability; generic code that resolves models by provider string without capability checks.
Related errors
- AI_NoSuchModelError
- embeddingModel
- ElevenLabs does not provide embedding models
- AI_NoSuchModelError
- No such embeddingModel: ${modelId}
AI-assisted analysis of vercel/ai@69428b1f8b (2026-08-30).
Data as JSON: /api/errors/50b3bd2500a64b0f.
Report an issue: GitHub.