import { z } from "zod"; import { isCanvasLanguageModel, type CanvasModelDescriptor } from "./model-matching"; export const promptToolSchema = z.object({ mode: z.enum(["optimize", "translate"]), prompt: z.string().trim().min(1, "请先输入提示词").max(12000, "提示词不能超过 12000 字"), model: z.string().trim().max(200).optional(), }); export type PromptToolMode = z.infer["mode"]; export const promptToolFunctionKey = (mode: PromptToolMode) => `video-prompt-${mode}`; export function selectPromptToolModel(models: T[], requested?: string) { const candidates = models.filter(model => model.isEnabled !== false && isCanvasLanguageModel(model)); const ref = requested?.trim(); const model = ref && ref !== "auto" ? candidates.find(item => item.id === ref || item.modelId === ref) : candidates[0]; if (!model) throw new Error(ref && ref !== "auto" ? "所选提示词模型不可用或不是文字模型,请重新选择" : "当前没有可用的提示词处理模型"); return model; } export function promptToolErrorMessage(error: unknown) { const message = error instanceof Error ? error.message : ""; if (/overdue|good standing|insufficient.*balance|欠费/i.test(message)) { return "模型服务商账户余额或状态异常,请管理员检查。原提示词已保留。"; } if (/abort|timeout|timed out/i.test(message)) return "提示词处理超时,请重试。原提示词已保留。"; return "提示词模型调用失败,请稍后重试或选择其他文字模型。原提示词已保留。"; }