fix: avoid blocking canvas refs on local url checks
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-04-26 14:40:40 +08:00
parent 0b3f1e7c15
commit 00a6f70990

View File

@ -52,6 +52,22 @@ const SUPPORTED_CANVAS_PROVIDER_TYPES = new Set([
"krea", "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[] { function parseImagesFromMarkdown(markdown: string): ParsedImage[] {
const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g; const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
const matches = [...markdown.matchAll(imageRegex)]; const matches = [...markdown.matchAll(imageRegex)];
@ -202,14 +218,23 @@ export async function generateCanvasImage(
).slice(0, 12); ).slice(0, 12);
const { kept: reachableReferenceImages, dropped: unreachableReferenceImages } = const { kept: reachableReferenceImages, dropped: unreachableReferenceImages } =
await filterReachableRemoteUrls(normalizedReferenceImages, { timeoutMs: 3000 }); await filterReachableRemoteUrls(normalizedReferenceImages, { timeoutMs: 3000 });
const effectiveReferenceImages = normalizedReferenceImages;
if (unreachableReferenceImages.length > 0) { 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, count: unreachableReferenceImages.length,
urls: unreachableReferenceImages.slice(0, 6), urls: unreachableReferenceImages.slice(0, 6),
hosts: summarizeReferenceImageHosts(unreachableReferenceImages),
}); });
} }
if (normalizedReferenceImages.length > 0 && reachableReferenceImages.length === 0) { 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:", { console.info("[Canvas Generate Image] Started:", {
@ -220,6 +245,8 @@ export async function generateCanvasImage(
imageCount, imageCount,
requestedReferenceImageCount: normalizedReferenceImages.length, requestedReferenceImageCount: normalizedReferenceImages.length,
reachableReferenceImageCount: reachableReferenceImages.length, reachableReferenceImageCount: reachableReferenceImages.length,
effectiveReferenceImageCount: effectiveReferenceImages.length,
referenceImageHosts: summarizeReferenceImageHosts(effectiveReferenceImages),
selectedModelRef: selectedModel.model.id, selectedModelRef: selectedModel.model.id,
selectedModelId: selectedModel.model.modelId, selectedModelId: selectedModel.model.modelId,
providerType: provider.type, providerType: provider.type,
@ -230,10 +257,10 @@ export async function generateCanvasImage(
{ {
role: "user" as const, role: "user" as const,
content: content:
reachableReferenceImages.length > 0 effectiveReferenceImages.length > 0
? [ ? [
{ type: "text" as const, text: prompt }, { type: "text" as const, text: prompt },
...reachableReferenceImages.map((url) => ({ ...effectiveReferenceImages.map((url) => ({
type: "image_url" as const, type: "image_url" as const,
image_url: { url }, image_url: { url },
})), })),