详情替换原来把整批生图挂在浏览器保持的对话流上,切换标签页、断网或连接中断后 结果就再也回不来,前端还会继续播放按时间推算的 96% 假进度。 现在改为服务器端后台批次:提交时先落任务,再按参考图逐张生成并把每张结果写进 项目,页面刷新、切页或服务重启后都能按任务状态恢复,不再依赖前端连接。 - 新增 /api/agents/detail-replacement/batches(提交/查询、幂等去重、重试上限) - 前端只在服务端确认批次后显示处理中,卡片显示排队/生成/完成/失败真实状态 - 去掉假进度动画;没有产品输入图时提交前直接拦截 - 服务重启后自动恢复未完成批次,长批次不再被通用 30 分钟清理误判 - 单张失败只落到该卡片并继续后续图片,已完成的图片不重复生成和扣费 - 详情替换默认模型由持续 404 的 gpt-image-2.5-flare 改回 gpt-image-2.5
19 lines
744 B
TypeScript
19 lines
744 B
TypeScript
import { registerOTel } from "@vercel/otel";
|
|
|
|
export function register() {
|
|
registerOTel({ serviceName: "ai-chatbot" });
|
|
if (process.env.NEXT_RUNTIME !== "nodejs") return;
|
|
|
|
const globalState = globalThis as typeof globalThis & { detailReplacementRecoveryStarted?: boolean };
|
|
if (globalState.detailReplacementRecoveryStarted) return;
|
|
globalState.detailReplacementRecoveryStarted = true;
|
|
|
|
const recover = () => {
|
|
void import("@/lib/canvas/image-task-queue")
|
|
.then(({ resumeDetailReplacementBatchTasks }) => resumeDetailReplacementBatchTasks())
|
|
.catch((error) => console.error("[Detail Replacement Batch] Recovery failed", error));
|
|
};
|
|
setTimeout(recover, 5000).unref?.();
|
|
setInterval(recover, 60_000).unref?.();
|
|
}
|