35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import type { RequestFailureDetails } from "@/lib/request-error";
|
|
|
|
export type ImageGenerationStatusStreamPayload = {
|
|
phase?: "queued" | "processing" | "finalizing" | "failed" | "completed";
|
|
userMessageId?: string;
|
|
requestId?: string;
|
|
failure?: RequestFailureDetails;
|
|
providerType?: string;
|
|
modelName?: string;
|
|
imageCount?: number;
|
|
queuePosition?: number;
|
|
sameModelRunningCount?: number;
|
|
concurrencyLimit?: number;
|
|
estimatedWaitMs?: number;
|
|
};
|
|
|
|
export function findImageGenerationFailure(
|
|
messages: { role: string; parts?: unknown[] }[],
|
|
userMessageId: string,
|
|
): ImageGenerationStatusStreamPayload | null {
|
|
if (!userMessageId) return null;
|
|
for (const message of [...messages].reverse()) {
|
|
if (message.role !== "assistant") continue;
|
|
for (const part of message.parts || []) {
|
|
const candidate = part as { type?: string; data?: ImageGenerationStatusStreamPayload };
|
|
if (candidate.type !== "data-imageGenerationStatus") continue;
|
|
const status = candidate.data;
|
|
if (status?.phase === "failed" && status.failure && status.userMessageId === userMessageId) {
|
|
return status;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|