vercel/ai · error · NoSuchModelError

No such imageModel: ${modelId}

Error message

No such imageModel: ${modelId}

What it means

The z.ai provider does not implement image models; its imageModel factory unconditionally throws NoSuchModelError with modelType 'imageModel'. Only language models are supported by this provider, so any imageModel lookup fails immediately without a network call.

Source

Thrown at packages/zai/src/zai-provider.ts:97

    new ZaiChatLanguageModel(modelId, {
      provider: 'zai.chat',
      baseURL,
      headers: getHeaders,
      fetch: options.fetch,
    });

  const provider = (modelId: ZaiChatModelId) => createLanguageModel(modelId);

  provider.specificationVersion = 'v4' as const;
  provider.languageModel = createLanguageModel;
  provider.chat = createLanguageModel;

  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 zai = createZai();

View on GitHub (pinned to 69428b1f8b)

Solutions

  1. Use an image-capable provider, e.g. openai.image('gpt-image-1') or another provider implementing image models.
  2. Restrict zai usage to text/chat workloads in your model registry.
  3. Check @ai-sdk/zai release notes for future image model support.

Example fix

// before
const { image } = await generateImage({ model: zai.imageModel('cogview-4'), prompt });

// after
import { openai } from '@ai-sdk/openai';
const { image } = await generateImage({ model: openai.image('gpt-image-1'), prompt });
Defensive patterns

Strategy: fallback

Validate before calling

const ZAI_SUPPORTS_IMAGES = false;
function getImageModel(preferred: 'zai' | 'openai') {
  if (preferred === 'zai' && !ZAI_SUPPORTS_IMAGES) {
    return openai.image('gpt-image-1');
  }
  // ...
}

Type guard

function supportsImages(provider: any): boolean {
  return typeof provider?.imageModel === 'function' &&
    !/NoSuchModelError/.test(provider.imageModel.toString());
}

Try / catch

try {
  return await generateImage({ model: zai.imageModel(id), prompt });
} catch (e) {
  if (NoSuchModelError.isInstance(e) && e.modelType === 'imageModel') {
    return await generateImage({ model: openai.image('gpt-image-1'), prompt });
  }
  throw e;
}

Prevention

When it happens

Trigger: zai.imageModel('cogview-4') called directly; generateImage() with model: zai('some-model'); provider factories that resolve image models by provider string.

Common situations: Multi-provider image pipelines routing to zai by mistake; assuming z.ai image APIs are wrapped by the SDK; configuration tables listing providers without per-capability support flags.

Related errors


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