From 00a6f7099097072a38db19436def6fe3692f9ac3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 26 Apr 2026 14:40:40 +0800 Subject: [PATCH] fix: avoid blocking canvas refs on local url checks --- lib/canvas/generate-image.ts | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/canvas/generate-image.ts b/lib/canvas/generate-image.ts index 3b8e76c8d..d79d1c7c2 100644 --- a/lib/canvas/generate-image.ts +++ b/lib/canvas/generate-image.ts @@ -52,6 +52,22 @@ const SUPPORTED_CANVAS_PROVIDER_TYPES = new Set([ "krea", ]); +function summarizeReferenceImageHosts(urls: string[]) { + return Array.from( + new Set( + urls + .map((value) => { + try { + return new URL(value).host; + } catch { + return ""; + } + }) + .filter(Boolean) + ) + ); +} + function parseImagesFromMarkdown(markdown: string): ParsedImage[] { const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g; const matches = [...markdown.matchAll(imageRegex)]; @@ -202,14 +218,23 @@ export async function generateCanvasImage( ).slice(0, 12); const { kept: reachableReferenceImages, dropped: unreachableReferenceImages } = await filterReachableRemoteUrls(normalizedReferenceImages, { timeoutMs: 3000 }); + const effectiveReferenceImages = normalizedReferenceImages; if (unreachableReferenceImages.length > 0) { - console.warn("[Canvas Generate Image] Dropping unreachable reference images:", { + console.warn("[Canvas Generate Image] Local reachability check failed for some reference images:", { count: unreachableReferenceImages.length, urls: unreachableReferenceImages.slice(0, 6), + hosts: summarizeReferenceImageHosts(unreachableReferenceImages), }); } if (normalizedReferenceImages.length > 0 && reachableReferenceImages.length === 0) { - throw new Error("参考图片链接不可访问,请重新上传后再试"); + console.warn( + "[Canvas Generate Image] All reference images failed local reachability check; proceeding with original URLs.", + { + count: normalizedReferenceImages.length, + hosts: summarizeReferenceImageHosts(normalizedReferenceImages), + debugLabel, + } + ); } console.info("[Canvas Generate Image] Started:", { @@ -220,6 +245,8 @@ export async function generateCanvasImage( imageCount, requestedReferenceImageCount: normalizedReferenceImages.length, reachableReferenceImageCount: reachableReferenceImages.length, + effectiveReferenceImageCount: effectiveReferenceImages.length, + referenceImageHosts: summarizeReferenceImageHosts(effectiveReferenceImages), selectedModelRef: selectedModel.model.id, selectedModelId: selectedModel.model.modelId, providerType: provider.type, @@ -230,10 +257,10 @@ export async function generateCanvasImage( { role: "user" as const, content: - reachableReferenceImages.length > 0 + effectiveReferenceImages.length > 0 ? [ { type: "text" as const, text: prompt }, - ...reachableReferenceImages.map((url) => ({ + ...effectiveReferenceImages.map((url) => ({ type: "image_url" as const, image_url: { url }, })),