ai-chatbot/services/pascal-editor/apps/editor/lib/pascal-agent-intent.ts

43 lines
1.5 KiB
TypeScript

const MUTATION_INTENT =
/(?:设计|创建|生成|添加|增加|新增|修改|调整|编辑|删除|移动|旋转|缩放|布置|装修|建造|搭建|修复|design|create|generate|add|modify|update|edit|delete|remove|move|rotate|scale|furnish|build|repair|fix)/i
export function requiresPascalMutation(messages: unknown[]): boolean {
const latestUserMessage = [...messages]
.reverse()
.find(
(message) =>
Boolean(message) &&
typeof message === 'object' &&
(message as { role?: unknown }).role === 'user',
) as { parts?: unknown } | undefined
if (!Array.isArray(latestUserMessage?.parts)) return false
const text = latestUserMessage.parts
.filter((part): part is { text: string; type: 'text' } =>
Boolean(
part &&
typeof part === 'object' &&
(part as { type?: unknown }).type === 'text' &&
typeof (part as { text?: unknown }).text === 'string',
),
)
.map((part) => part.text)
.join(' ')
return MUTATION_INTENT.test(text)
}
export function pascalAgentStepPolicy(params: {
hasMutation: boolean
mutationRequired: boolean
mutationToolNames: string[]
stepNumber: number
}): { activeTools?: string[]; toolChoice: 'auto' | 'required' } {
if (!(params.mutationRequired && !params.hasMutation)) return { toolChoice: 'auto' }
if (params.stepNumber < 2) return { toolChoice: 'required' }
return {
activeTools: params.mutationToolNames,
toolChoice: 'required',
}
}