fix: avoid blocking canvas refs on local url checks
This commit is contained in:
parent
0b3f1e7c15
commit
00a6f70990
@ -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 },
|
||||||
})),
|
})),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user