{"record":{"id":"37d9639241c868c9","repo":"linshenkx/prompt-optimizer","slug":"model-not-support-image2image","errorCode":"MODEL_NOT_SUPPORT_IMAGE2IMAGE","errorMessage":"MODEL_NOT_SUPPORT_IMAGE2IMAGE","messagePattern":"MODEL_NOT_SUPPORT_IMAGE2IMAGE","errorType":"error_code","errorClass":"ImageError","httpStatus":null,"severity":"error","filePath":"packages/core/src/services/image/adapters/modelscope.ts","lineNumber":125,"sourceCode":"\n    throw new ImageError(IMAGE_ERROR_CODES.UNSUPPORTED_TEST_TYPE, undefined, { testType })\n  }\n\n  protected getParameterDefinitions(_modelId: string): readonly ImageParameterDefinition[] {\n    return this.getDefaultParameterDefinitions()\n  }\n\n  protected getDefaultParameterValues(_modelId: string): Record<string, unknown> {\n    return {\n      size: '1024x1024',\n      n: 1\n    }\n  }\n\n  protected async doGenerate(request: ImageRequest, config: ImageModelConfig): Promise<ImageResult> {\n    // ModelScope 适配器仅支持文生图\n    if (request.inputImage) {\n      throw new ImageError(IMAGE_ERROR_CODES.MODEL_NOT_SUPPORT_IMAGE2IMAGE, undefined, { modelName: config.modelId })\n    }\n\n    return await this.generateImage(request, config)\n  }\n\n  private async generateImage(request: ImageRequest, config: ImageModelConfig): Promise<ImageResult> {\n    const url = this.resolveEndpointUrl(config, '/images/generations')\n\n    const merged: Record<string, any> = {\n      ...config.paramOverrides,\n      ...request.paramOverrides\n    }\n\n    const payload = {\n      model: config.modelId,\n      prompt: request.prompt,\n      size: merged.size || '1024x1024',\n      n: merged.n || request.count || 1","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/core/src/services/image/adapters/modelscope.ts#L107-L143","documentation":"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.","triggerScenarios":"Calling generate() with a request whose inputImage is set (image edit / image-to-image) while the configured provider is ModelScope.","commonSituations":"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.","solutions":["Remove the input image for ModelScope generation — use text-to-image only","Switch to a provider that supports image2image (e.g. OpenAI/Gemini adapters)","Check provider capabilities before building the request"],"exampleFix":"// before\nawait adapter.generate({ prompt, inputImage: { b64 } }, config)\n\n// after\nawait adapter.generate({ prompt }, config) // ModelScope: t2i only","handlingStrategy":"validation","validationCode":"if (provider === 'modelscope' && request.inputImage) {\n  throw new Error('ModelScope supports text-to-image only; remove inputImage')\n}","typeGuard":"function supportsImage2Image(provider: string): boolean {\n  return ['openai', 'gemini'].includes(provider)\n}","tryCatchPattern":"if (request.inputImage && !supportsImage2Image(provider)) {\n  return errorToUser('This model cannot edit images')\n}","preventionTips":["Expose capability flags per adapter in the UI","Disable attach-image controls for t2i-only providers"],"tags":["modelscope","image2image","capability-mismatch"],"backgroundTag":"unsupported-image-edit-operation","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}