feature: 增加功能 导出详细报告
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
| 提供商 | 列表、详情、创建、修改、删除 | `GET/POST /providers`, `GET/PATCH/DELETE /providers/{id}` |
|
||||
| 提供商 | 连通检查、模型发现 | `POST /providers/{id}/check`, `GET /providers/{id}/models` |
|
||||
| 运行 | 列表、创建、详情、取消、删除 | `GET/POST /runs`, `GET/PATCH/DELETE /runs/{id}` |
|
||||
| 运行 | 恢复、重试错误、单条重试、逐条结果 | `POST /runs/{id}/resume`, `POST /runs/{id}/retry-errors`, `POST /runs/{id}/results/{execution_id}/retry`, `GET /runs/{id}/results` |
|
||||
| 运行 | 恢复、重试错误、单条重试、逐条结果、导出详细报告 | `POST /runs/{id}/resume`, `POST /runs/{id}/retry-errors`, `POST /runs/{id}/results/{execution_id}/retry`, `GET /runs/{id}/results`, `GET /runs/{id}/export` |
|
||||
| 报告 | 列表、详情 | `GET /reports`, `GET /reports/{run_id}` |
|
||||
| 系统 | 健康状态 | `GET /health` |
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
- 运行详情必须满足 `processed_count = completed_count + error_count`;`error_count` 仅统计执行异常,不包含 `verdict = fail`;终态必须有 `poll_after_seconds = 0`。
|
||||
- 逐条结果使用 `execution_status`(`completed | error`)表示调用是否完成,使用可空 `verdict`(`pass | fail | needs_human_review | judge_format_error | null`)表示仲裁结论;前端不读取旧 `status`。
|
||||
- 逐条结果的执行 ID 搜索直接使用 `GET /runs/{id}/results` 已返回的 `execution_id` 在 UI 过滤,不新增请求参数或后端端点。
|
||||
- `GET /runs/{id}/export` 仅允许终态 Run,返回 `text/markdown` 文件而非 JSON;可组合传入 `execution_status=completed|error` 与 `verdict=pass|fail|needs_human_review|judge_format_error|none`,其中 `none` 表示未评价。前端复用结果筛选器,但执行 ID 搜索不参与导出。
|
||||
- 报告的 `summary.execution_statuses` 与 `summary.verdicts` 分开统计;`by_mode` 下也分别包含 `execution_statuses` 和 `verdicts`。
|
||||
- `POST /runs/{id}/retry-errors` 只重试 `execution_status = error`,不重试任何仲裁结论。
|
||||
- `POST /runs/{id}/results/{execution_id}/retry` 无请求体,沿用原 Run 的测试范围和自动仲裁配置,并以相同 `execution_id` 替换旧结果;仅 `completed / completed_with_errors` 状态允许提交。
|
||||
@@ -29,4 +30,4 @@
|
||||
- access token 剩余不超过 30 分钟且用户最近 30 分钟有真实操作时,`POST /auth/refresh` 携带同一共享生成器产生的 UUID v4 `Idempotency-Key`。
|
||||
- 网络错误和 5xx 最多尝试 3 次,且一直复用原 refresh token 和原 key;409 保留凭据并等待 `refresh_after`。
|
||||
- 普通业务请求首次 401 共享 single-flight 续约,成功后仅重放一次;只有 refresh 本身返回 401 才清除会话。
|
||||
- HTTP 204 按无响应体处理;403/404/409/422/502 映射为可操作的用户消息。
|
||||
- HTTP 204 按无响应体处理;Markdown 成功响应按 Blob 读取;错误响应仍按 JSON 归一化。403/404/409/422/502 映射为可操作的用户消息。
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
UI 页面只调用 `services/`;service 先用 `schemas/` 中的 Zod schema 校验请求,再由 `api/client.ts` 发起请求并用 Zod 校验响应。跨字段业务不变量也在 schema 层完成。错误统一进入 `errors/`,日志进入 `logging/` 并在输出前递归脱敏。
|
||||
|
||||
API 客户端默认读取并校验 JSON;文件端点显式选择 Blob 响应类型,同时复用 Bearer Token、401 单次续约重放和 JSON 错误归一化。下载由页面使用浏览器原生 Object URL 完成,不引入额外下载依赖。
|
||||
|
||||
创建运行和 Token 续约统一通过 `idempotencyKey.ts` 生成 UUID v4 幂等键:安全上下文优先使用浏览器原生 `crypto.randomUUID()`,HTTP 或旧浏览器回退到 `crypto.getRandomValues()`;不使用可预测的 `Math.random()`。
|
||||
|
||||
```text
|
||||
|
||||
@@ -8,10 +8,11 @@
|
||||
3. 管理员在模型配置页建立 target/judge 配置,可查询模型并执行最小连通性检查。
|
||||
4. 用户选择 smoke/all 与是否自动裁判,确认后创建运行。客户端自动携带 UUID 幂等键,避免重复提交。
|
||||
5. 详情页展示探测、执行、裁判和完成阶段,按后端 `poll_after_seconds` 轮询。
|
||||
6. 运行中可取消;中断后可恢复;局部错误可只重试错误样例;终态后可查看逐条结果、汇总报告或确认删除。
|
||||
6. 运行中可取消;中断后可恢复;局部错误可只重试错误样例;终态后可查看逐条结果、汇总报告、导出 Markdown 详细报告或确认删除。
|
||||
`cancelled / failed / pending / probing / running` 可确认后“恢复运行”;`completed_with_errors` 且 `error_count > 0` 可确认后“重试错误(N)”。提交期间按钮禁用,成功提示跳过或重试数量;409 会刷新详情以校正操作状态。
|
||||
7. 逐条结果可按执行状态、仲裁结论筛选,并可按执行 ID 搜索;三项条件组合生效,执行 ID 支持忽略大小写的片段匹配。
|
||||
8. `completed / completed_with_errors` 的每条结果可确认后单独“重新执行”。提交中仅该按钮显示“提交中…”,受理后该 Run 的全部单条重试按钮锁定并显示目标执行 ID“重新执行中…”,直到 Run 再次进入终态。目标结果会进入跟踪状态并置顶,暂时绕过执行状态、仲裁结论和执行 ID 筛选,用户可手动停止跟踪;原筛选值始终保留。
|
||||
9. “导出详细报告”位于逐条结果筛选栏,复用当前执行状态和仲裁结论筛选,不占用页头运行控制区;“全部”不传参数,“未仲裁”映射为 `verdict=none`,执行 ID 搜索不参与导出。非终态按钮禁用,导出期间显示加载状态并阻止重复提交,文件名为 `run_{run_id}_results.md`;409 会刷新运行详情。
|
||||
|
||||
## 模型等待交互
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
## 测试
|
||||
|
||||
`tests/unit` 覆盖脱敏、错误归一化、主题持久化、API 响应校验、认证原子存储、single-flight 续约、HTTP/HTTPS UUID v4 幂等键生成、幂等重试、401 单次重放、运行数据不变量、结果语义标识和运行进入终态时的最终结果同步。`tests/integration` 验证主题切换、逐条结果筛选与搜索、单条重试结果跨筛选置顶跟踪等页面交互,以及所有 service 到后端路由的映射。
|
||||
`tests/unit` 覆盖脱敏、错误归一化、主题持久化、JSON/Blob API 响应、认证原子存储、single-flight 续约、HTTP/HTTPS UUID v4 幂等键生成、幂等重试、401 单次重放、运行数据不变量、结果语义标识和运行进入终态时的最终结果同步。`tests/integration` 验证主题切换、逐条结果筛选与搜索、终态 Markdown 导出、单条重试结果跨筛选置顶跟踪等页面交互,以及所有 service 到后端路由的映射。
|
||||
|
||||
```bash
|
||||
pnpm test
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
- 运行详情:阶段、进度、计数和当前样例位于首屏,结果和报告位于下方标签页。
|
||||
- 结果卡片:顶部使用统一 Tag 明确标识“类型 / 模式 / 执行状态 / 仲裁结论”,将后端原始值转为中文语义。执行状态和仲裁结论使用两个独立筛选器,不混合 `completed/error` 与 `pass/fail`;执行 ID 搜索与两个筛选器组合生效,并支持忽略大小写的片段匹配。所有标签使用相同的 `8px` 圆角;结论只增加字重和状态点。通过为绿色、未通过或错误为红色、待复核为橙色,文字始终保留。
|
||||
- 结果卡片在 Run 完成或部分错误时提供“重新执行”;使用 Ant Design 确认框说明结果将被替换。提交、运行中状态以按钮文字和信息提示表达,不只依赖颜色;Run 非终态时同 Run 的全部单条重试按钮禁用。重试目标使用信息提示说明跟踪状态并置顶显示,不修改用户已有筛选;提示提供“停止跟踪”按钮。
|
||||
- Run 详情页在逐条结果筛选栏提供 Markdown 详细报告导出,复用执行状态和仲裁结论筛选,不复制第二组筛选器,也不占用页头运行控制区;非终态保留禁用按钮以说明能力,加载状态使用按钮文字和图标表达。执行 ID 搜索只影响页面结果,不影响导出。
|
||||
|
||||
## 响应式与可访问性
|
||||
|
||||
|
||||
Reference in New Issue
Block a user