ai-chatbot/lib/ai/runtime/direct-agent-working-state.ts
Your Name dfc5f704b4
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
chore: sync latest app updates
2026-04-12 23:45:00 +08:00

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,
);
}
}