fix: poll SnapGen history for final images

This commit is contained in:
134 2026-06-24 11:29:46 +08:00
parent 9b94aae898
commit ed2c64d2a6

View File

@ -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)}`