145 lines
4.7 KiB
TypeScript
145 lines
4.7 KiB
TypeScript
import {
|
|
persistImageWorkflowTurn,
|
|
persistVideoGenerationCompletedTurn,
|
|
persistVideoGenerationFailedTurn,
|
|
} from "@/lib/ai/conversation-state-protocol";
|
|
import type { DirectAgentToolCapability } from "@/lib/ai/runtime/direct-agent-execution";
|
|
|
|
export async function safePersistDirectAgentAnalyzeTurn(params: {
|
|
userId: string;
|
|
chatId: string;
|
|
projectId?: string | null;
|
|
currentSubIntent?: string | null;
|
|
targetAssetIds?: string[] | null;
|
|
targetImageUrls: string[];
|
|
messageId: string;
|
|
requestTextContent: string;
|
|
}) {
|
|
try {
|
|
const targetImageUrls = params.targetImageUrls.length > 0 ? params.targetImageUrls : null;
|
|
await persistImageWorkflowTurn({
|
|
userId: params.userId,
|
|
chatId: params.chatId,
|
|
projectId: params.projectId || null,
|
|
currentIntent: "vision",
|
|
currentSubIntent: params.currentSubIntent || "analyze",
|
|
currentFocusAssetIds: params.targetAssetIds || null,
|
|
currentFocusImageUrls: targetImageUrls,
|
|
lastResolvedTargetAssetIds: params.targetAssetIds || null,
|
|
lastResolvedTargetImageUrls: targetImageUrls,
|
|
lastMessageId: params.messageId,
|
|
lastUserPrompt: params.requestTextContent,
|
|
lastSourceImageUrls: targetImageUrls,
|
|
});
|
|
} catch (memoryError) {
|
|
console.warn("[Direct Agent Working State] Failed to persist analyze turn:", memoryError);
|
|
}
|
|
}
|
|
|
|
export async function safePersistDirectAgentImageEditTurn(params: {
|
|
userId: string;
|
|
chatId: string;
|
|
projectId?: string | null;
|
|
capability: DirectAgentToolCapability;
|
|
currentSubIntent?: string | null;
|
|
resultAssetId?: string | null;
|
|
resultOriginalUrl?: string | null;
|
|
resultImageSize?: string | null;
|
|
sourceImageUrls: string[];
|
|
messageId: string;
|
|
requestTextContent: string;
|
|
optimizedPrompt?: string | null;
|
|
}) {
|
|
try {
|
|
const resultAssetIds = params.resultAssetId ? [params.resultAssetId] : null;
|
|
const resultImageUrls = params.resultOriginalUrl ? [params.resultOriginalUrl] : null;
|
|
await persistImageWorkflowTurn({
|
|
userId: params.userId,
|
|
chatId: params.chatId,
|
|
projectId: params.projectId || null,
|
|
currentIntent: "image_edit",
|
|
currentSubIntent: params.currentSubIntent || params.capability,
|
|
currentFocusAssetIds: resultAssetIds,
|
|
currentFocusImageUrls: resultImageUrls,
|
|
lastGeneratedAssetIds: resultAssetIds,
|
|
lastGeneratedImageUrls: resultImageUrls,
|
|
lastResolvedTargetAssetIds: resultAssetIds,
|
|
lastResolvedTargetImageUrls: resultImageUrls,
|
|
lastMessageId: params.messageId,
|
|
lastUserPrompt: params.requestTextContent,
|
|
lastOptimizedPrompt: params.optimizedPrompt || undefined,
|
|
lastRequestedImageCount: resultImageUrls?.length || 1,
|
|
lastImageSize: params.resultImageSize || undefined,
|
|
lastSourceImageUrls: params.sourceImageUrls,
|
|
lastResultImageUrls: resultImageUrls,
|
|
});
|
|
} catch (memoryError) {
|
|
console.warn(
|
|
`[Direct Agent Working State] Failed to persist image edit turn after ${params.capability}:`,
|
|
memoryError,
|
|
);
|
|
}
|
|
}
|
|
|
|
export async function safePersistDirectAgentVideoCompletedTurn(params: {
|
|
userId: string;
|
|
chatId: string;
|
|
projectId?: string | null;
|
|
messageId: string;
|
|
requestTextContent: string;
|
|
modelRef: string;
|
|
mode: string;
|
|
temporaryVideoUrl: string;
|
|
}) {
|
|
try {
|
|
await persistVideoGenerationCompletedTurn({
|
|
userId: params.userId,
|
|
chatId: params.chatId,
|
|
projectId: params.projectId || null,
|
|
messageId: params.messageId,
|
|
text: params.requestTextContent,
|
|
source: "agent_direct_generate_video",
|
|
providerType: "direct-video",
|
|
modelRef: params.modelRef,
|
|
mode: params.mode as any,
|
|
status: "completed",
|
|
temporaryVideoUrl: params.temporaryVideoUrl,
|
|
});
|
|
} catch (memoryError) {
|
|
console.warn(
|
|
"[Direct Agent Working State] Failed to persist direct video generation:",
|
|
memoryError,
|
|
);
|
|
}
|
|
}
|
|
|
|
export async function safePersistDirectAgentVideoFailedTurn(params: {
|
|
userId: string;
|
|
chatId: string;
|
|
projectId?: string | null;
|
|
messageId: string;
|
|
requestTextContent: string;
|
|
modelRef: string;
|
|
error: unknown;
|
|
}) {
|
|
try {
|
|
await persistVideoGenerationFailedTurn({
|
|
userId: params.userId,
|
|
chatId: params.chatId,
|
|
projectId: params.projectId || null,
|
|
messageId: params.messageId,
|
|
text: params.requestTextContent,
|
|
source: "agent_direct_generate_video",
|
|
providerType: "direct-video",
|
|
modelRef: params.modelRef,
|
|
status: "failed",
|
|
error: params.error instanceof Error ? params.error.message : String(params.error),
|
|
});
|
|
} catch (videoMemoryError) {
|
|
console.warn(
|
|
"[Direct Agent Working State] Failed to persist direct video failure:",
|
|
videoMemoryError,
|
|
);
|
|
}
|
|
}
|