{"record":{"id":"2edf9f07edfbbde0","repo":"linshenkx/prompt-optimizer","slug":"this-model-does-not-support-text-to-image-or-image","errorCode":null,"errorMessage":"This model does not support text-to-image or image-to-image generation","messagePattern":"This model does not support text-to-image or image-to-image generation","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/ui/src/composables/model/useImageModelManager.ts","lineNumber":397,"sourceCode":"  // 辅助函数：根据模型能力选择测试类型\n  const selectTestType = (model: ImageModel): 'text2image' | 'image2image' => {\n    const capabilities = model.capabilities || {}\n    const text2image = capabilities?.text2image\n    const image2image = capabilities?.image2image\n\n    if (text2image && !image2image) {\n      return 'text2image'  // 只支持文生图\n    }\n\n    if (!text2image && image2image) {\n      return 'image2image' // 只支持图生图\n    }\n\n    if (text2image && image2image) {\n      return 'text2image'  // 两种都支持，优先文生图\n    }\n\n    throw new Error('This model does not support text-to-image or image-to-image generation')\n  }\n\n  const testConnection = async () => {\n    if (!selectedProvider.value || !hasValidConnectionConfig(configForm.value.connectionConfig || {})) {\n      return\n    }\n\n    // 检查是否选择了模型\n    if (!configForm.value.modelId) {\n      toast.error(t('image.model.selectRequired'))\n      return\n    }\n\n    isTestingConnection.value = true\n    connectionStatus.value = { type: 'info', messageKey: 'image.connection.testing' }\n\n    try {\n      // 本地先做详细校验，给出缺失与类型错误提示","sourceCodeStart":379,"sourceCodeEnd":415,"githubUrl":"https://github.com/linshenkx/prompt-optimizer/blob/3e677b1d9f7e0493c142c175560531e7ae786dce/packages/ui/src/composables/model/useImageModelManager.ts#L379-L415","documentation":"selectTestType in useImageModelManager derives which generation mode to test by checking the selected model's text2image/image2image capability flags. If neither capability is true, it throws because there is no valid image test to run for that model.","triggerScenarios":"Calling testType/selectTestType for a model whose capabilities object has text2image=false (or missing) and image2image=false (or missing), e.g. an LLM-only or video-only model selected in the image model manager.","commonSituations":"User pastes a custom model ID that defaults to no image capabilities; provider returns a model listing where capability flags were not mapped; model metadata cached from an older version lacking the capability fields.","solutions":["Filter or flag models in the picker so only models with text2image or image2image capability can reach the test flow.","Ensure capability detection (probe/adapter) runs and populates text2image/image2image before selectTestType is called.","Catch the error and show a capability warning instead of crashing the dialog."],"exampleFix":"// before\nconst testType = selectTestType(model)\n\n// after\nconst caps = model.capabilities ?? {}\nif (!caps.text2image && !caps.image2image) {\n  toast.warning('Selected model has no image generation capability')\n  return null\n}\nconst testType = selectTestType(model)","handlingStrategy":"validation","validationCode":"const caps = model?.capabilities ?? {}\nconst canTestImage = Boolean(caps.text2image || caps.image2image)\nif (!canTestImage) { /* skip test, warn user */ }","typeGuard":"const supportsImageGeneration = (m: { capabilities?: { text2image?: boolean; image2image?: boolean } }): boolean =>\n  Boolean(m.capabilities?.text2image || m.capabilities?.image2image)","tryCatchPattern":"try { const t = selectTestType(model) } catch (e) { if (e instanceof Error && /does not support/.test(e.message)) { warnNoImageCapability(); return } throw e }","preventionTips":["Run capability detection before offering the test action","Only list image-capable models in the image manager"],"tags":["model-capabilities","validation","image-generation"],"backgroundTag":"unsupported-model-capability","analyzedSha":"3e677b1d9f7e0493c142c175560531e7ae786dce","analyzedAt":"2026-08-27T21:29:16.709Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}