ai-chatbot/lib/ai/runtime/fal-image-edit-task.ts
Your Name 44dee6314a
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
fix: run fal gpt image edit asynchronously
2026-04-28 22:16:57 +08:00

59 lines
1.6 KiB
TypeScript

export type FalImageEditTaskStatus = "queued" | "running" | "completed" | "failed";
export interface FalImageEditTaskMetadata {
taskKind: "fal_gpt_image_2_edit";
provider: "fal-image";
providerId: string;
endpointId: string;
requestId: string;
modelId: string;
modelRef: string;
modelDisplayName: string;
prompt: string;
optimizedPrompt?: string;
userPrompt?: string;
requestedImageCount: number;
aspectRatio?: string;
imageSize?: string;
outputSizeLabel: string;
sourceImageUrls: string[];
sourceAssetIds?: string[];
relationType?: "generated_from" | "edited_from";
sourceType?: string;
projectId?: string | null;
contextSource?: string | null;
status: FalImageEditTaskStatus;
startedAt: number;
updatedAt: number;
queuePosition?: number | null;
lastLogs?: Array<{
message?: string;
level?: string;
timestamp?: string;
}>;
error?: string | null;
}
export function isFalImageEditTaskMetadata(
value: unknown,
): value is FalImageEditTaskMetadata {
if (!value || typeof value !== "object") return false;
const maybe = value as Record<string, unknown>;
return (
maybe.taskKind === "fal_gpt_image_2_edit" &&
maybe.provider === "fal-image" &&
typeof maybe.providerId === "string" &&
typeof maybe.endpointId === "string" &&
typeof maybe.requestId === "string"
);
}
export function isPendingFalImageEditTaskMetadata(
value: unknown,
): value is FalImageEditTaskMetadata {
return (
isFalImageEditTaskMetadata(value) &&
(value.status === "queued" || value.status === "running")
);
}