diff --git a/lib/ai/providers/snapgen-image.ts b/lib/ai/providers/snapgen-image.ts index 912d9f9a3..51f38da52 100644 --- a/lib/ai/providers/snapgen-image.ts +++ b/lib/ai/providers/snapgen-image.ts @@ -332,7 +332,38 @@ function collectImageUrls(payload: any): string[] { } }; - walk(payload); + const outputRoots = [ + payload?.generate_result, + payload?.generated_image, + payload?.generated_images, + payload?.image_urls, + payload?.images, + payload?.output, + payload?.outputs, + payload?.result, + payload?.results, + payload?.data?.generate_result, + payload?.data?.generated_image, + payload?.data?.generated_images, + payload?.data?.image_urls, + payload?.data?.images, + payload?.data?.output, + payload?.data?.outputs, + payload?.data?.result, + payload?.data?.results, + payload?.detail?.generate_result, + payload?.detail?.generated_image, + payload?.detail?.generated_images, + ].filter((value) => value !== undefined && value !== null); + + if (outputRoots.length > 0) { + for (const root of outputRoots) { + walk(root); + } + } else if (typeof payload === "string" || Array.isArray(payload)) { + walk(payload); + } + return Array.from(urls); } @@ -711,15 +742,20 @@ export function createSnapgenImage({ apiKey, baseURL }: SnapgenImageConfig) { formData, }); - let outputUrls = filterSourceImages(collectImageUrls(createPayload), imageUrls); - let base64Images = collectBase64Images(createPayload); + let outputUrls: string[] = []; + let base64Images: Array<{ buffer: Buffer; mimeType: string }> = []; const statusCode = extractStatusCode(createPayload); + const uuid = extractUuid(createPayload); if (statusCode === 3) { throw new Error(extractErrorMessage(createPayload)); } - if (outputUrls.length === 0 && base64Images.length === 0) { - const uuid = extractUuid(createPayload); + if (statusCode === 2 || !uuid) { + outputUrls = filterSourceImages(collectImageUrls(createPayload), imageUrls); + base64Images = collectBase64Images(createPayload); + } + + if ((uuid && statusCode !== 2) || (outputUrls.length === 0 && base64Images.length === 0)) { if (!uuid) { throw new Error( `SnapGen 创建任务成功,但未返回 uuid 或图片结果,响应片段: ${compactPayloadSnippet(createPayload)}`