feat: change scene fusion to serial processing with 5s delay and add detailed logging
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-01-18 15:57:21 +08:00
parent 42ca0b0db1
commit 230e101858

View File

@ -328,58 +328,66 @@ export async function POST(request: Request) {
})
);
// 6. 并发处理所有场景
const results = await Promise.all(
processedScenes.map(async (scene) => {
// 6. 串行处理所有场景,每次间隔5秒
const results = [];
for (let i = 0; i < processedScenes.length; i++) {
const scene = processedScenes[i];
// 如果不是第一张图,等待5秒
if (i > 0) {
console.log(`[SceneFusion] Waiting 5 seconds before processing scene ${i + 1}/${processedScenes.length}...`);
await new Promise((resolve) => setTimeout(resolve, 5000));
}
try {
const result = await processScene(
productImageUrl,
scene.imageUrl,
scene.customPrompt,
config.defaultPrompt,
provider.baseUrl,
provider.apiKey,
model.modelId
);
// 保存到数据库
const messageId = `scene-fusion-${Date.now()}-${scene.id}`;
const chatId = `scene-fusion-batch-${Date.now()}`;
try {
const result = await processScene(
productImageUrl,
scene.imageUrl,
scene.customPrompt,
config.defaultPrompt,
provider.baseUrl,
provider.apiKey,
model.modelId
);
// 保存到数据库
const messageId = `scene-fusion-${Date.now()}-${scene.id}`;
const chatId = `scene-fusion-batch-${Date.now()}`;
try {
await db.insert(generatedImage).values({
userId: session.user.id,
chatId,
messageId,
thumbnailUrl: result.thumbnail,
originalUrl: result.original,
imageSize: "2K",
prompt: scene.customPrompt
? `${config.defaultPrompt} ${scene.customPrompt}`
: config.defaultPrompt,
modelId: model.modelId,
});
console.log(`[SceneFusion] Saved image to gallery: ${result.original.substring(0, 80)}...`);
} catch (dbError) {
console.error("[SceneFusion] Failed to save to gallery:", dbError);
}
return {
id: scene.id,
status: "completed" as const,
result: result.thumbnail, // 返回缩略图用于预览
originalUrl: result.original, // 原图用于下载
};
} catch (error) {
console.error(`[SceneFusion] Failed to process scene ${scene.id}:`, error);
return {
id: scene.id,
status: "failed" as const,
error: error instanceof Error ? error.message : "处理失败",
};
await db.insert(generatedImage).values({
userId: session.user.id,
chatId,
messageId,
thumbnailUrl: result.thumbnail,
originalUrl: result.original,
imageSize: "2K",
prompt: scene.customPrompt
? `${config.defaultPrompt} ${scene.customPrompt}`
: config.defaultPrompt,
modelId: model.modelId,
});
console.log(`[SceneFusion] Saved image to gallery: ${result.original.substring(0, 80)}...`);
} catch (dbError) {
console.error("[SceneFusion] Failed to save to gallery:", dbError);
}
})
);
results.push({
id: scene.id,
status: "completed" as const,
result: result.thumbnail, // 返回缩略图用于预览
originalUrl: result.original, // 原图用于下载
});
} catch (error) {
console.error(`[SceneFusion] Failed to process scene ${scene.id}:`, error);
results.push({
id: scene.id,
status: "failed" as const,
error: error instanceof Error ? error.message : "处理失败",
});
}
}
// 6. 返回结果
const successCount = results.filter((r) => r.status === "completed").length;