Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Linux 默认构建只启用 Inferlet,也可运行无需模型的示例。其
./tools/pipeline_studio/server.py configs/pipeline_keyword_match_rules.json --web
```

工作台监听 `127.0.0.1`,支持连线、参数编辑、校验和运行。
编辑器监听 `127.0.0.1`,直接编辑和保存 Pipeline JSON,支持连线、参数编辑、检查与试运行;无需管理 `.conf`。
接下来,按 [Studio 编排练习](tools/pipeline_studio/README.md#第一次编排)修改规则。用 Demo 验证修改后的方案。

## 架构与扩展
Expand Down
5 changes: 0 additions & 5 deletions include/contracts/error_codes.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,10 @@
X(kValidationFailed, -3068, "VALIDATION_FAILED") \
X(kBodyTooLarge, -3069, "BODY_TOO_LARGE") \
X(kDemoNotBuilt, -3070, "DEMO_NOT_BUILT") \
X(kDeploymentMismatch, -3071, "DEPLOYMENT_MISMATCH") \
X(kDeploymentNotFound, -3073, "DEPLOYMENT_NOT_FOUND") \
X(kDeploymentValidationFailed, -3074, "DEPLOYMENT_VALIDATION_FAILED") \
X(kDocumentTooLarge, -3075, "DOCUMENT_TOO_LARGE") \
X(kFileExists, -3076, "FILE_EXISTS") \
X(kInvalidAuthoringRequest, -3077, "INVALID_AUTHORING_REQUEST") \
X(kInvalidDeploymentConfig, -3078, "INVALID_DEPLOYMENT_CONFIG") \
X(kInvalidDeploymentName, -3079, "INVALID_DEPLOYMENT_NAME") \
X(kInvalidDeploymentPath, -3080, "INVALID_DEPLOYMENT_PATH") \
X(kInvalidInitRequest, -3081, "INVALID_INIT_REQUEST") \
X(kInvalidPipelineDocument, -3083, "INVALID_PIPELINE_DOCUMENT") \
X(kInvalidPipelineFile, -3084, "INVALID_PIPELINE_FILE") \
Expand Down
488 changes: 257 additions & 231 deletions tests/tooling/studio_browser_test.mjs

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions tests/tooling/studio_editor_test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ const declarations = [
];
for (const field of declarations) editor.appendConfigField(fields, field, {prompt: ' line\r\n提示 '});
assert.deepEqual(editor.readConfigFields(fields), {prompt: ' line\r\n提示 '});
assert.deepEqual(editor.readConfigFields(fields, {future: {nested: ['保留', 1]}}), {
prompt: ' line\r\n提示 ', future: {nested: ['保留', 1]},
});
const [prompt, optional, count, enabled, options] = fields.querySelectorAll('[data-field]');
assert.equal(prompt.required, false);
count.value = '0';
Expand Down
221 changes: 73 additions & 148 deletions tests/tooling/test_pipeline_studio.py

Large diffs are not rendered by default.

150 changes: 61 additions & 89 deletions tools/pipeline_studio/README.md

Large diffs are not rendered by default.

70 changes: 30 additions & 40 deletions tools/pipeline_studio/acceptance.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,41 @@
# Studio 操作验收

范围:单用户本机方案编排、浏览与 Demo 草稿验证。
范围:单用户本机 Pipeline JSON 编辑、浏览与示例试运行。JSON 是唯一方案文档;
服务端临时 `.conf` 是运行适配细节,界面及保存 API 不管理部署关联。

## 交互目标

首次使用者应能找到开始入口,区分查看与修改、应用与保存,并知道运行使用哪组数据。
常用路径是选择示例或打开文件、调整节点、校验并运行、保存;空白编排和部署关联保留明确入口。
复杂图的全图预览用于理解关系,选中节点后可直接放大阅读;不要求用户记住隐藏手势。
自动化通过不等于首次用户体验通过,仍需人工检查文案、信息密度与阅读效果。
首次使用者应能独立完成“打开示例 → 修改关键词 → 试运行 → 核对输出 → 保存重开”。
常规修改自动更新,保存与运行合法性分开;高级 JSON 和模型配置按需打开。
自动化不能证明首次用户无需教程,仍需用上述任务观察用户的发现时间、犹豫与误操作。

## 操作路径与验收标准

| 任务 | 当前路径 | 验收标准 |
| --- | --- | --- |
| 首次进入 | 空画布 → 新建方案或导入文件 | 可见入口;顶部列表仍可打开已有方案 |
| 从示例新建 | 新建 → 从示例开始 → 选择示例 → 创建方案 | 先选择再创建;输入输出高级选择不干扰示例路径 |
| 从空白新建 | 新建 → 从空白开始 → 选择输入输出 → 创建方案 | 可分别添加多个输入输出项;不误用之前选中的示例 |
| 查看参数 | 打开 → 单击节点 | 属性直接可见且只读;详情可收起,浏览不产生修改 |
| 阅读复杂图 | 选中节点 → 放大选中节点 → 查看全图 | 可读文字和端口;缩放不修改文档;手动缩放在切换编辑时保持 |
| 设置输入输出 | 单击业务输入或业务输出 | 自动展开设置;当前构建不支持的 Converter 保留已有参数 |
| 校验 | 画布校验 | 浏览态可调用;原生诊断保留节点定位 |
| 连续调参 | 修改 → 切换节点 → 应用并继续 | 保留未完成输入;成功后切换;放弃不修改方案;撤销恢复已应用修改 |
| 处理非法字段 | 修改 → 校验 → 应用并继续 | 错误字段获得焦点,原输入保留;修正后完成原校验 |
| 保存 | 保存 → 必要时应用并继续 | 只替换 JSON;关联的 .conf 核对版本且保持原文;外部修改冲突不覆盖文件 |
| 同时保存 | 两个页签保存同一版本 | 一个成功,另一个收到冲突;成功 revision 与磁盘内容一致 |
| 命令附件失败 | 成套保存时输出目录不可写 | 文件和 revision 仍显示已保存,另行提示运行命令未生成 |
| 草稿运行 | 画布运行… → 选择示例数据 → 运行当前方案 | 打开面板不应用草稿;实际运行先应用合法修改,首条命中新规则、第二条未命中 |
| 无匹配示例 | 运行页 | 明确说明原因及配置入口,运行按钮禁用;仍可编辑和保存 |
| 结果时效 | 完成运行 → 修改或撤销 | 修改后提示旧版本;撤销回相同内容及设置恢复匹配 |
| 跨文档任务 | A 提交运行 → 打开 B → A 返回 | B 不显示 A 的样本和日志;仍在执行的任务可取消 |
| 任务 | 验收标准 |
| --- | --- |
| 首次进入 | 可见示例、打开 JSON 入口;空白创建保留在创建方式中 |
| 修改规则 | 节点可按 Catalog 类型与说明搜索;映射与规则列表无需手写 JSON;完成输入自动更新 |
| 输入未完成 | 保存、试运行切回并展开定位非法字段;可撤回当前输入且保留已完成修改;有未保存修改时离开页面前提示 |
| 重命名后保存 | 修改步骤标识后直接点击一次保存,等待重命名完成后保存新名称及更新后的引用 |
| 保存半成品 | 缺失连接或运行工具也可保存 JSON;文件名限定 `pipeline_[a-z0-9_]+.json`;同名冲突、外部修改、符号链接仍受保护 |
| 文件边界 | 保存仅写 JSON;旁边 `.conf` 的内容及变化不影响保存 |
| 连线 | 点击与拖放共用吸附规则;目标高亮、拖动时边缘平移、Esc 取消与键盘端口选择;缩小后端口不互相遮挡 |
| 复杂图 | 首次进入保持可读;全图概览、选中聚焦可切换;参数面板可调宽 |
| 撤销与修复 | 已完成修改可撤销重做;原生修复先预览,再整体应用和撤销 |
| 试运行 | 使用当前文档及所选数据;第一条命中新规则、第二条未命中;不完整方案拒绝执行 |
| 结果时效 | 修改后提示旧版本;切换方案隔离结果,旧任务仍可取消 |
| 未知配置 | 编辑已知字段不丢弃未知参数;定义不可用时保留高级 JSON 编辑 |

## 验证方式

- 简单方案:生产 `keyword_match` 契约及 `keyword_match_rules` Profile。
- 多节点方案:`pipeline_doc_qa_rerank_cpu.json` 的临时副本,仅用于浏览和编辑路径。
- 桌面:1280×768、1366×768、1920×1080,检查浏览与编辑模式的关键按钮可达、
页面无水平溢出、画布可用;保存截图用于人工核对布局。
- `tests/tooling/studio_editor_test.mjs` 验证快照不可变、草稿/设置变化导致过期、
Demo 样本计数及输出纯文本渲染。
- `tests/tooling/test_pipeline_studio.py` 验证关联后的 JSON 保存、.conf 保持不变及重启后的区别,
以及并发保存、命令附件失败、自动 Profile 匹配、忽略终止信号的子进程取消/超时回收与日志保留,
并通过可选 `studio_browser_test.mjs` 检查新建入口、示例克隆、规则编辑、撤销/重做、
保存(含命令附件失败提示)、修复预览、节点聚焦、I/O 参数保留、运行与结果过期。所有方案写入临时目录。
- 浏览器回归使用真实关键词 Demo 检查改动后的 `BROWSER_VIP` 命中结果及第二条未命中,
并检查三个桌面尺寸的按钮可达性与水平溢出。水平 SVG 连线以实际路径中点点击。
- 跨文档任务和非法字段后的继续操作仍应按表中步骤人工检查;当前浏览器脚本未覆盖
延迟任务响应下的跨文档竞态,不能据此声称该竞态已自动验收。

不以自动化推断首次使用者的发现时间,也不将关键词 Demo 成功作为真实模型效果
或目标硬件验收。浏览器组件为本地已安装工具,不增加项目依赖。
- `tests/tooling/test_pipeline_studio.py` 覆盖 JSON 保存、结构错误、文件名规则、
不依赖运行工具的半成品保存、执行前校验、并发保存、外部冲突、临时运行文件清理与取消/超时。
- `studio_editor_test.mjs`、`studio_graph_test.mjs`、`studio_config_roundtrip_test.mjs`、
`studio_fix_workflow_test.mjs` 覆盖字段默认值、字符串保真、图几何、模型绑定与原生修复。
- 可选 `studio_browser_test.mjs` 使用真实关键词 Demo 检查自动更新、表单、节点搜索、
重命名后一次保存、非法输入的定位与撤回、点击与拖放连接、概览缩放下的端口命中、
半成品保存、外部修改冲突、修复预览、结果时效和复杂图阅读。
在 1280×768、1366×768、1920×1080 检查关键操作可达与水平溢出,可保存截图人工核对。
- 浏览器组件使用本机已安装的 Playwright,不新增项目依赖。
- 边缘平移的连续手感、首次用户发现时间、触屏及超大图性能仍需要人工验收;
关键词 Demo 成功不代表真实模型效果或目标硬件验收。
Loading
Loading