vercel/ai · error · NoSuchModelError

AssemblyAI does not provide language models

Error message

AssemblyAI does not provide language models

What it means

The AssemblyAI provider is transcription-only. Its `languageModel` factory throws NoSuchModelError with modelType 'languageModel' and a custom message clarifying that AssemblyAI does not provide language models, regardless of the requested modelId.

Source

Thrown at packages/assemblyai/src/assemblyai-provider.ts:90

    new AssemblyAITranscriptionModel(modelId, {
      provider: `assemblyai.transcription`,
      url: ({ path }) => `https://api.assemblyai.com${path}`,
      headers: getHeaders,
      fetch: options.fetch,
    });

  const provider = function (modelId: AssemblyAITranscriptionModelId) {
    return {
      transcription: createTranscriptionModel(modelId),
    };
  };

  provider.specificationVersion = 'v4' as const;
  provider.transcription = createTranscriptionModel;
  provider.transcriptionModel = createTranscriptionModel;

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

  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 as AssemblyAIProvider;
}

View on GitHub (pinned to 69428b1f8b)

Solutions

  1. Use a language-capable provider (OpenAI, Anthropic, Google, etc.) for generateText/streamText.
  2. Reserve the AssemblyAI provider for `transcribe()` / transcription workflows.
  3. Fix provider registries so language-model lookups skip AssemblyAI.

Example fix

// before
const result = await generateText({ model: assemblyai.languageModel('universal') });
// after
const transcript = await transcribe({ model: assemblyai.transcriptionModel('universal-2'), audio });
// and use e.g. openai('gpt-4o') for generateText
Defensive patterns

Strategy: type-guard

Validate before calling

if (providerId === 'assemblyai') {
  throw new Error('AssemblyAI supports only transcription; use a different provider for language models');
}

Type guard

function isLanguageModelProvider(p: any): boolean {
  try {
    p.languageModel?.('probe');
    return true;
  } catch (e) {
    return !(NoSuchModelError.isInstance(e) && e.modelType === 'languageModel');
  }
}

Try / catch

try {
  return assemblyai.languageModel(id);
} catch (error) {
  if (NoSuchModelError.isInstance(error)) {
    throw new Error(`Provider does not support language models: ${error.message}`);
  }
  throw error;
}

Prevention

When it happens

Trigger: Calling `assemblyai.languageModel(...)` or passing the AssemblyAI provider where a chat/language model is expected (e.g. `generateText({ model: assemblyai(...) })`).

Common situations: Assuming every @ai-sdk provider supports chat; building a multi-provider registry that resolves language models by provider name; mistaking transcription (speech-to-text) for LLM capability.

Related errors


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