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

  1. Use an embedding-capable provider (e.g. @ai-sdk/openai, @ai-sdk/google, @ai-sdk/mistral, @ai-sdk/amazon-bedrock) for embed/embedMany.
  2. Keep a dedicated embedding provider in your config separate from the ElevenLabs voice provider.
  3. 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

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