feat: enhance canvas and node components with error handling and retry logic
- Integrated retry logic for AI image generation to handle transient errors and improve user experience. - Updated error categorization to provide more informative feedback based on different failure scenarios. - Enhanced node components to display retry attempts and error messages, improving visibility during image generation failures. - Refactored canvas and node components to include retry count in status updates, ensuring accurate tracking of generation attempts.
This commit is contained in:
@@ -160,6 +160,7 @@ export const create = mutation({
|
||||
width: args.width,
|
||||
height: args.height,
|
||||
status: "idle",
|
||||
retryCount: 0,
|
||||
data: args.data,
|
||||
parentId: args.parentId,
|
||||
zIndex: args.zIndex,
|
||||
@@ -276,14 +277,19 @@ export const updateStatus = mutation({
|
||||
v.literal("error")
|
||||
),
|
||||
statusMessage: v.optional(v.string()),
|
||||
retryCount: v.optional(v.number()),
|
||||
},
|
||||
handler: async (ctx, { nodeId, status, statusMessage }) => {
|
||||
handler: async (ctx, { nodeId, status, statusMessage, retryCount }) => {
|
||||
const user = await requireAuth(ctx);
|
||||
const node = await ctx.db.get(nodeId);
|
||||
if (!node) throw new Error("Node not found");
|
||||
|
||||
await getCanvasOrThrow(ctx, node.canvasId, user.userId);
|
||||
const patch: { status: typeof status; statusMessage?: string } = {
|
||||
const patch: {
|
||||
status: typeof status;
|
||||
statusMessage?: string;
|
||||
retryCount?: number;
|
||||
} = {
|
||||
status,
|
||||
};
|
||||
if (statusMessage !== undefined) {
|
||||
@@ -291,6 +297,9 @@ export const updateStatus = mutation({
|
||||
} else if (status === "done" || status === "executing" || status === "idle") {
|
||||
patch.statusMessage = undefined;
|
||||
}
|
||||
if (retryCount !== undefined) {
|
||||
patch.retryCount = retryCount;
|
||||
}
|
||||
await ctx.db.patch(nodeId, patch);
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user