diff --git a/README.md b/README.md index 696eff2..a8e6efe 100644 --- a/README.md +++ b/README.md @@ -62,11 +62,13 @@ - 文本类任务使用 `LLM_API_URL` / `LLM_API_KEY` / `LLM_MODEL` - 图片类任务可单独指定 `LLM_VISION_API_URL` / `LLM_VISION_API_KEY` / `LLM_VISION_MODEL` - 所有图片输入都要求可从公网访问,因此本地相对路径会通过 `APP_PUBLIC_BASE_URL` 规范化为绝对 URL +- 若视觉模型链路返回非标准 JSON 或缺失数组字段,服务端会先做结构兼容和字段补全,再尝试生成视觉报告 - 若视觉模型链路不可用,系统会自动回退到结构化指标驱动的文本纠正,避免任务直接失败 - 系统内置“视觉标准图库”页面 `/vision-lab`,可把公网网球参考图入库并保存每次识别结果 - `ADMIN_USERNAMES` 可指定哪些用户名账号拥有 admin 视角,例如 `H1` - 用户名登录支持直接进入系统;仅首次创建新用户时需要填写 `REGISTRATION_INVITE_CODE` - 新用户首次登录时只需提交一次用户名;若用户名不存在才需要额外填写邀请码 +- `vision-lab` 支持对历史 `fallback/failed` 记录重新排队,便于修复上游返回不稳定导致的旧数据 ## Quick Start diff --git a/client/src/pages/VisionLab.tsx b/client/src/pages/VisionLab.tsx index c8b2a9d..1156c95 100644 --- a/client/src/pages/VisionLab.tsx +++ b/client/src/pages/VisionLab.tsx @@ -100,6 +100,22 @@ export default function VisionLab() { onError: (error) => toast.error(`批量视觉测试提交失败: ${error.message}`), }); + const retryRunMutation = trpc.vision.retryRun.useMutation({ + onSuccess: () => { + toast.success("视觉记录已重新加入队列"); + utils.vision.runs.invalidate(); + }, + onError: (error) => toast.error(`重新执行失败: ${error.message}`), + }); + + const retryFallbacksMutation = trpc.vision.retryFallbacks.useMutation({ + onSuccess: (data) => { + toast.success(`已重新排队 ${data.count} 条历史视觉记录`); + utils.vision.runs.invalidate(); + }, + onError: (error) => toast.error(`批量修复失败: ${error.message}`), + }); + useEffect(() => { if (activeTask.data?.status === "succeeded" || activeTask.data?.status === "failed") { utils.vision.runs.invalidate(); @@ -131,15 +147,26 @@ export default function VisionLab() {
错误:{run.error}