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",
]);
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 },
})),