ai-chatbot/lib/ai/runtime/direct-agent-progress.ts
Your Name 5239250465
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: improve agent progress feedback
2026-05-19 15:16:12 +08:00

264 lines
8.2 KiB
TypeScript

import type {
DirectAgentToolCapability,
DirectAgentToolName,
} from "@/lib/ai/runtime/direct-agent-execution";
type DirectAgentProgressStage =
| "planning"
| "clarify"
| "executing"
| "completed"
| "failed";
type DirectAgentProgressStep =
| "lock_target"
| "analyze"
| "select_tool"
| "execute"
| "finalize";
export interface DirectAgentProgressPayload {
stage: DirectAgentProgressStage;
currentStep: DirectAgentProgressStep;
title?: string;
message?: string;
toolName?: DirectAgentToolName;
capability?: DirectAgentToolCapability;
}
function buildDirectAgentProgressPayload(params: DirectAgentProgressPayload) {
return params;
}
export function buildDirectAgentImageContextProgress(params: {
imageCount?: number;
mode?: "generate" | "edit" | "video";
}) {
const imageCount = Math.max(0, Math.floor(Number(params.imageCount || 0)));
const hasMultipleImages = imageCount > 1;
const hasImage = imageCount > 0;
if (params.mode === "edit") {
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "lock_target",
title: hasMultipleImages ? "正在理解多张待编辑图片" : "正在理解待编辑图片",
message: hasImage
? "我会先识别主体、风格、构图和需要保留的内容,再确认这次要改变的部分。"
: "我会先根据你的文字需求确认编辑目标,再整理成适合模型执行的方向。",
toolName: "editImage",
capability: "generic_edit",
});
}
if (params.mode === "video") {
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "lock_target",
title: hasImage ? "正在理解视频参考图" : "正在规划视频画面",
message: hasImage
? "我会先提取参考图的主体、镜头、风格和运动约束,再整理成视频生成方向。"
: "我会先根据你的描述整理镜头主体、运动节奏和画面风格。",
toolName: "generateVideo",
capability: "generate_video",
});
}
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "lock_target",
title: hasMultipleImages
? "正在理解多张参考图片"
: hasImage
? "正在理解参考图片"
: "正在规划画面方向",
message: hasImage
? "我会先识别图片主体、风格、构图和关键约束,再提炼可执行的创作方向。"
: "我会先根据你的描述整理画面主体、风格和关键约束。",
toolName: "generateImage",
capability: "generate_image",
});
}
export function buildDirectAgentAnalyzePlanningProgress() {
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "analyze",
title: "正在描述目标图片",
message: "我会先识别主体、风格、构图、光线和材质,再整理成可直接阅读的观察结论。",
toolName: "analyzeImage",
capability: "analyze",
});
}
export function buildDirectAgentAnalyzeCompletedProgress() {
return buildDirectAgentProgressPayload({
stage: "completed",
currentStep: "finalize",
title: "图片分析完成",
message: "我已经把图片要点整理成清晰结论,方便继续修图、生图或做风格延展。",
toolName: "analyzeImage",
capability: "analyze",
});
}
export function buildDirectAgentAnalyzeFailedProgress(errorMessage: string) {
return buildDirectAgentProgressPayload({
stage: "failed",
currentStep: "analyze",
title: "图片分析失败",
message: errorMessage,
toolName: "analyzeImage",
capability: "analyze",
});
}
export function buildDirectAgentImageGenerateSelectProgress() {
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "select_tool",
title: "正在优化生图提示词",
message: "我会把你的需求转成更适合当前模型的提示词,并保留主体、风格、构图和画面约束。",
toolName: "generateImage",
capability: "generate_image",
});
}
export function buildDirectAgentImageGenerateExecutingProgress() {
return buildDirectAgentProgressPayload({
stage: "executing",
currentStep: "execute",
title: "正在提交生图模型",
message: "已将优化后的提示词与参考图一起提交生成,完成后会回写到对话和画布。",
toolName: "generateImage",
capability: "generate_image",
});
}
export function buildDirectAgentImageGenerateCompletedProgress() {
return buildDirectAgentProgressPayload({
stage: "completed",
currentStep: "finalize",
title: "图片生成完成",
message: "结果已整理并回写到当前对话和画布。",
toolName: "generateImage",
capability: "generate_image",
});
}
export function buildDirectAgentImageGenerateFailedProgress(errorMessage: string) {
return buildDirectAgentProgressPayload({
stage: "failed",
currentStep: "execute",
title: "图片生成失败",
message: errorMessage,
toolName: "generateImage",
capability: "generate_image",
});
}
export function buildDirectAgentVideoGenerateSelectProgress() {
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "select_tool",
title: "正在优化视频提示词",
message: "我会把你的描述整理成镜头、主体、运动和风格更明确的视频生成提示词。",
toolName: "generateVideo",
capability: "generate_video",
});
}
export function buildDirectAgentVideoGenerateExecutingProgress() {
return buildDirectAgentProgressPayload({
stage: "executing",
currentStep: "execute",
title: "正在提交视频生成",
message: "已将优化后的镜头提示词与参考图提交生成,完成后会回写到对话和画布。",
toolName: "generateVideo",
capability: "generate_video",
});
}
export function buildDirectAgentVideoGenerateCompletedProgress() {
return buildDirectAgentProgressPayload({
stage: "completed",
currentStep: "finalize",
title: "视频生成完成",
message: "结果已整理并回写到当前对话和画布。",
toolName: "generateVideo",
capability: "generate_video",
});
}
export function buildDirectAgentVideoGenerateFailedProgress(errorMessage: string) {
return buildDirectAgentProgressPayload({
stage: "failed",
currentStep: "execute",
title: "视频生成失败",
message: errorMessage,
toolName: "generateVideo",
capability: "generate_video",
});
}
export function buildDirectAgentImageEditSelectProgress(params: {
toolName: DirectAgentToolName;
capability: DirectAgentToolCapability;
label: string;
}) {
return buildDirectAgentProgressPayload({
stage: "planning",
currentStep: "select_tool",
title: "正在优化修图提示词",
message: `我会把你的编辑需求整理成更适合${params.label}执行的提示词,明确保留项和变化项。`,
toolName: params.toolName,
capability: params.capability,
});
}
export function buildDirectAgentImageEditExecutingProgress(params: {
toolName: DirectAgentToolName;
capability: DirectAgentToolCapability;
label: string;
}) {
return buildDirectAgentProgressPayload({
stage: "executing",
currentStep: "execute",
title: `正在提交${params.label}`,
message: "已将优化后的编辑提示词和目标图提交生成,完成后会回写到当前对话和画布。",
toolName: params.toolName,
capability: params.capability,
});
}
export function buildDirectAgentImageEditCompletedProgress(params: {
toolName: DirectAgentToolName;
capability: DirectAgentToolCapability;
label: string;
}) {
return buildDirectAgentProgressPayload({
stage: "completed",
currentStep: "finalize",
title: `${params.label}完成`,
message: "结果已整理并回写到当前对话和画布。",
toolName: params.toolName,
capability: params.capability,
});
}
export function buildDirectAgentImageEditFailedProgress(params: {
toolName: DirectAgentToolName;
capability: DirectAgentToolCapability;
label: string;
errorMessage: string;
}) {
return buildDirectAgentProgressPayload({
stage: "failed",
currentStep: "execute",
title: `${params.label}失败`,
message: params.errorMessage,
toolName: params.toolName,
capability: params.capability,
});
}