{"record":{"id":"fdfcfa1c2f967a78","repo":"vercel/ai","slug":"fish-audio-does-not-provide-image-models","errorCode":null,"errorMessage":"Fish Audio does not provide image models","messagePattern":"Fish Audio does not provide image models","errorType":"exception","errorClass":"NoSuchModelError","httpStatus":null,"severity":"error","filePath":"packages/fish-audio/src/fish-audio-provider.ts","lineNumber":150,"sourceCode":"  provider.languageModel = (modelId: string) => {\n    throw new NoSuchModelError({\n      modelId,\n      modelType: 'languageModel',\n      message: 'Fish Audio does not provide language models',\n    });\n  };\n\n  provider.embeddingModel = (modelId: string) => {\n    throw new NoSuchModelError({\n      modelId,\n      modelType: 'embeddingModel',\n      message: 'Fish Audio does not provide embedding models',\n    });\n  };\n  provider.textEmbeddingModel = provider.embeddingModel;\n\n  provider.imageModel = (modelId: string) => {\n    throw new NoSuchModelError({\n      modelId,\n      modelType: 'imageModel',\n      message: 'Fish Audio does not provide image models',\n    });\n  };\n\n  return provider as FishAudioProvider;\n}\n\n/**\n * Default Fish Audio provider instance.\n */\nexport const fishAudio = createFishAudio();\n","sourceCodeStart":132,"sourceCodeEnd":164,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/fish-audio/src/fish-audio-provider.ts#L132-L164","documentation":"The Fish Audio provider's `imageModel` always throws `NoSuchModelError` because Fish Audio does not generate images. Like the other unsupported model types, this stub fulfills the ProviderV4 interface requirement and explains the limitation in its message.","triggerScenarios":"Calling `fishAudio.imageModel('id')` or passing the fishAudio provider to generateImage.","commonSituations":"Provider-agnostic image generation code that assumes all providers implement imageModel; swapping fal/fireworks for fishAudio without checking capabilities.","solutions":["Use an image-capable provider (e.g. @ai-sdk/fal, @ai-sdk/fireworks, @ai-sdk/openai) with generateImage","Limit fishAudio to its speech and transcription capabilities","Check provider capabilities before dispatching media generation to a dynamically selected provider"],"exampleFix":"// before\nconst model = fishAudio.imageModel('img');\nawait generateImage({ model, prompt: 'a cat' });\n// after\nconst model = fal.image('fal-ai/flux/dev');\nawait generateImage({ model, prompt: 'a cat' });","handlingStrategy":"validation","validationCode":"// route image generation only to image-capable providers\nconst IMAGE_PROVIDERS = new Set(['fal', 'fireworks', 'openai', 'google', 'amazon-bedrock']);\nif (!IMAGE_PROVIDERS.has(providerName)) throw new Error(`${providerName} does not support image generation`);","typeGuard":"function isNoSuchModelError(e: unknown): e is NoSuchModelError {\n  return NoSuchModelError.isInstance(e);\n}","tryCatchPattern":"try {\n  return await generateImage({ model: fishAudio.imageModel('x'), prompt });\n} catch (e) {\n  if (NoSuchModelError.isInstance(e) && e.modelType === 'imageModel') {\n    return generateImage({ model: fal.image('fal-ai/flux/dev'), prompt });\n  }\n  throw e;\n}","preventionTips":["Only call generateImage with image-capable providers (fal, fireworks, openai, google)","Keep a provider capability registry for media generation dispatch","Restrict fishAudio imports to speech/transcription modules to avoid accidental use"],"tags":["unsupported-model-type","provider-api","image-generation","fish-audio"],"backgroundTag":"unsupported-model-type","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}