linshenkx/prompt-optimizer · error · ImageError

MODEL_NOT_SUPPORT_IMAGE2IMAGE

MODEL_NOT_SUPPORT_IMAGE2IMAGE

Error message

MODEL_NOT_SUPPORT_IMAGE2IMAGE

What it means

The ModelScope adapter is text-to-image only. doGenerate explicitly rejects any request containing inputImage with MODEL_NOT_SUPPORT_IMAGE2IMAGE, recording the model name in metadata.

Source

Thrown at packages/core/src/services/image/adapters/modelscope.ts:125

    throw new ImageError(IMAGE_ERROR_CODES.UNSUPPORTED_TEST_TYPE, undefined, { testType })
  }

  protected getParameterDefinitions(_modelId: string): readonly ImageParameterDefinition[] {
    return this.getDefaultParameterDefinitions()
  }

  protected getDefaultParameterValues(_modelId: string): Record<string, unknown> {
    return {
      size: '1024x1024',
      n: 1
    }
  }

  protected async doGenerate(request: ImageRequest, config: ImageModelConfig): Promise<ImageResult> {
    // ModelScope 适配器仅支持文生图
    if (request.inputImage) {
      throw new ImageError(IMAGE_ERROR_CODES.MODEL_NOT_SUPPORT_IMAGE2IMAGE, undefined, { modelName: config.modelId })
    }

    return await this.generateImage(request, config)
  }

  private async generateImage(request: ImageRequest, config: ImageModelConfig): Promise<ImageResult> {
    const url = this.resolveEndpointUrl(config, '/images/generations')

    const merged: Record<string, any> = {
      ...config.paramOverrides,
      ...request.paramOverrides
    }

    const payload = {
      model: config.modelId,
      prompt: request.prompt,
      size: merged.size || '1024x1024',
      n: merged.n || request.count || 1

View on GitHub (pinned to 3e677b1d9f)

Solutions

  1. Remove the input image for ModelScope generation — use text-to-image only
  2. Switch to a provider that supports image2image (e.g. OpenAI/Gemini adapters)
  3. Check provider capabilities before building the request

Example fix

// before
await adapter.generate({ prompt, inputImage: { b64 } }, config)

// after
await adapter.generate({ prompt }, config) // ModelScope: t2i only
Defensive patterns

Strategy: validation

Validate before calling

if (provider === 'modelscope' && request.inputImage) {
  throw new Error('ModelScope supports text-to-image only; remove inputImage')
}

Type guard

function supportsImage2Image(provider: string): boolean {
  return ['openai', 'gemini'].includes(provider)
}

Try / catch

if (request.inputImage && !supportsImage2Image(provider)) {
  return errorToUser('This model cannot edit images')
}

Prevention

When it happens

Trigger: Calling generate() with a request whose inputImage is set (image edit / image-to-image) while the configured provider is ModelScope.

Common situations: A provider-agnostic UI lets users attach an input image to every model; ModelScope models then fail. Also selecting a ModelScope model for an edit workflow.

Related errors


AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27). Data as JSON: /api/errors/37d9639241c868c9. Report an issue: GitHub.