ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

cua-bench Task Registry 格式详解:用 dump_task_registry.py 生成标准化的数据集与环境清单

cua-bench Task Registry 格式详解:用 dump_task_registry.py 生成标准化的数据集与环境清单 cua-bench Task Registry 格式详解用 dump_task_registry.py 生成标准化的数据集与环境清单【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cuatask_registry.json是 cua-bench 生态中描述数据集dataset与环境environment的标准化清单文件由libs/cua-bench/cua_bench/scripts/dump_task_registry.py自动生成。本文以官方文档 task_registry.md 为主体骨架结合生成脚本、CLI 注册表解析器与真实数据集配置完整讲解其 JSON 结构、字段来源、任务计数与预览截图的生成机制帮助你在阅读、生成或二次消费这份注册表时做到字段级理解。一、概述task_registry.json 是什么task_registry.json的顶层结构是一个JSON 数组数组中每个元素对应一个数据集对象dataset object例如cua-bench-basic、cua-bench-kicad、cua-bench-workflows等。每个数据集对象内部包含一个environments数组逐条记录该数据集下每个环境的元数据与任务预览。类型JSON array数据集对象数组输出位置cua_bench/scripts/task_registry.json即 libs/cua-bench/cua_bench/scripts/task_registry.json这份文件的价值在于它把散落在各环境目录下的pyproject.toml元数据、cb.tasks_config声明的任务数量以及前几个任务的真实运行截图统一汇总成一份机器可读的索引。无论是做数据集可视化、容量统计还是构建基准测试的目录页都可以直接消费这份 JSON。二、生成工具与数据来源2.1 脚本入口与输出生成脚本为 dump_task_registry.py。脚本的默认输入、输出路径定义在 第 24-29 行task_registry Path(os.environ.get(CUA_REGISTRY_HOME) or Path(__file__).resolve().parents[2]) task_registry_url https://github.com/trycua/cua/tree/main/libs/cua-bench/datasets/ task_datasets task_registry / datasets task_metadata task_datasets / meta.json output_metadata Path(__file__).parent / Path(./task_registry.json)关键点注册表根目录优先读取环境变量CUA_REGISTRY_HOME未设置时回退到脚本所在包的上两级目录即本仓库内的libs/cua-bench。这与cbCLI 的注册表解析器registry.py 中get_registry_path的优先级CUA_REGISTRY_HOME→~/.cua/cbregistry/libs/cua-bench保持了同一个环境变量约定保证工具间路径一致。数据集目录约定为registry/datasets/dataset_id/environment_id/{pyproject.toml, main.py}可选的datasets/meta.json用于提供数据集级别的描述。源码注释明确说明独立的cua-bench-registry仓库已DEPRECATED现在数据集直接随 cua monorepo 分发cb run dataset通过libs/cua-bench/datasets/解析数据集。因此github_url字段指向的是 cua 仓库内libs/cua-bench/datasets/目录。2.2 数据集清单来源meta.json 或自动推导脚本main()第 209-238 行会优先读取datasets/meta.jsonif task_metadata.exists(): meta_entries read_meta(task_metadata) else: # No meta.json (monorepo default): derive the dataset list from the # datasets/ subdirectories. Dataset-level descriptions stay null. print(fNo meta.json at {task_metadata}; deriving datasets from subdirectories.) meta_entries [ {id: p.name, description: None} for p in sorted(task_datasets.iterdir()) if p.is_dir() ]也就是说meta.json存在时以它为准可附带description描述不存在时monorepo 内的默认情况脚本直接扫描datasets/下的子目录自动推导数据集列表此时数据集级description为null。2.3 并行处理与 --parallelism环境处理使用ThreadPoolExecutor并行执行默认 16 个 workerpython cua_bench/scripts/dump_task_registry.py python cua_bench/scripts/dump_task_registry.py --parallelism 32--parallelism控制同时处理多少个环境目录第 213-218 行默认16。单个环境处理失败不会中断整个流程而是打印到stderr后跳过该环境第 192-194 行。最终产物以indent2缩进写入 JSON 文件并在 stdout 打印输出路径。三、顶层结构数据集对象Dataset object每个数据集对象包含以下字段字段类型说明idstring数据集标识符例如cua-bench-basicgithub_urlstring指向注册表中该数据集文件夹的链接descriptionstring数据集的可读描述num_environmentsnumber在该数据集中发现的环境数量num_tasksnumber所有环境任务数的总和来自cb.tasks_config的首轮估算environmentsarray环境对象列表见下一节示例继承自原文档URL 已用占位符替换{ id: cua-bench-basic, github_url: https://registry/datasets/cua-bench-basic/, description: A collection of basic, miniwob-style desktop environments for CUA agents., num_environments: 15, num_tasks: 1532, environments: [] }其中num_environments来自build_registry中对datasets/id下子目录的排序扫描第 176-205 行num_tasks是各环境num_tasks的累加值。注意若数据集目录不存在脚本仍会输出该数据集对象但num_environments与num_tasks均为0、environments为空数组第 163-174 行。四、环境对象Environment object与 pyproject.toml 元数据映射4.1 字段表每个环境对象包含字段类型来源idstring环境标识符目录名例如click-buttongithub_urlstring注册表中该环境文件夹的链接descriptionstring|null来自[tool.cua-bench].description或[project].descriptionnum_tasksnumber环境cb.tasks_config报告的任务数licensestring|null来自[project].licenseversionstring|null来自[project].versionauthorsarray|null来自[project].authors形如[{name: ..., email: ...}]difficultystring|null来自[tool.cua-bench].difficulty例如easy、medium、hardcategorystring|null来自[tool.cua-bench].category例如grounding、software-engineeringtagsarray|null来自[tool.cua-bench].tagspreviewsarray早期任务设置的预览对象见下一节4.2 parse_pyproject 的字段解析实现字段提取逻辑集中在parse_pyproject第 37-62 行def parse_pyproject(env_dir: Path): data { description: None, license: None, version: None, authors: None, difficulty: None, category: None, tags: None, } pp env_dir / pyproject.toml if not pp.exists(): return data with open(pp, rb) as f: toml tomllib.load(f) proj toml.get(project, {}) tool toml.get(tool, {}) cb tool.get(cua-bench, {}) data[description] cb.get(description) or proj.get(description) data[license] proj.get(license) ...实现要点description优先取[tool.cua-bench].description其次回退到[project].descriptionlicense、version、authors只从[project]段读取difficulty、category、tags只从[tool.cua-bench]段读取环境目录下没有pyproject.toml时全部字段保持nullTOML 解析优先使用 Python 3.11 标准库tomllib低版本回退到tomli第 9-12 行。4.3 真实环境配置示例以cua-bench-basic数据集下的 click-button/pyproject.toml 为例[project] name simple-click-button-task-env version 0.1.0 license MIT authors [ { name Dillon DuPont, email dillontrycua.com } ] requires-python 3.11 dependencies [ beautifulsoup44.14.2, html5lib1.1, pyquery2.0.1, ] [tool.cua-bench] description simple click button task difficulty easy category grounding tags []这份配置会被解析成环境对象继承原文档示例{ id: click-button, github_url: https://registry/datasets/cua-bench-basic/click-button, description: Click a simple button., num_tasks: 42, license: MIT, version: 0.1.0, authors: [{ name: Jane Doe, email: janeexample.com }], difficulty: easy, category: grounding, tags: [click], previews: [] }五、任务计数与预览生成机制这是task_registry.json最重的部分为了得到num_tasks和previews脚本会真正导入并运行环境代码而不是静态解析。5.1 任务计数count_tasks_in_envcount_tasks_in_env第 65-79 行的流程环境目录下必须存在main.py否则返回0通过cua_bench.make(str(env_dir))构造环境对象若env.tasks_config_fn is None关闭环境并返回0调用tasks_config_fn()得到任务列表len(tasks)即num_tasks。tasks_config_fn正是由装饰器cb.tasks_config注册的见 decorators.py 中tasks_config的实现第 22-63 行。装饰器支持裸用cb.tasks_config或带参数cb.tasks_config(train)/split...并为被装饰函数标记_td_type tasks_config和_td_split默认 split 为train。以 click-button/main.py 为例其任务配置通过参数化组合生成1 种系统 × 7 种按钮文本 7 个任务实际由各环境自行决定数量cb.tasks_config(splittrain) def load(): os_types [linux] # [macos, win11, win10] button_texts [Submit, Click Me, Click Here, OK, Cancel, Close, Start] return [ cb.Task( descriptionfClick the {button_text} button on the page., metadata{button_text: button_text}, computer{ provider: native, setup_config: { os_type: os_type, width: 1024, height: 768, background: #c0c0c0, }, }, ) for os_type in os_types for button_text in button_texts ]5.2 预览生成generate_previewsgenerate_previews第 82-132 行为每个环境最多生成前 5 个任务max_previews5的预览完整流程为导入环境并确认tasks_config_fn存在对i in range(min(len(tasks), 5))依次调用env.reset(task_idi)初始化任务等待 5 秒time.sleep(5)让环境稳定下来用env.provider.screenshot()重新截取新鲜截图用 PIL 将截图转为 RGB 并保存为JPEGquality95再 base64 编码为 Data URI第 107-115 行img Image.open(BytesIO(screenshot_bytes)).convert(RGB) buf BytesIO() img.save(buf, formatJPEG, quality95) screenshot_b64 base64.b64encode(buf.getvalue()).decode(utf-8)从任务配置对象提取摘要字段第 117-121 行task_dict { description: getattr(task_cfg, description, None), task_id: getattr(task_cfg, task_id, None) or i, metadata: getattr(task_cfg, metadata, None), }注意task_id在任务配置缺失时回退为预览索引i每处理完一个预览就env.close()重置环境保证下一个预览从干净状态开始。5.3 预览对象Preview object字段表字段类型说明indexnumber用于初始化的任务索引screenshotstring截图 Data URI可用时为image/jpegquality 95否则为image/png形如data:image/jpeg;base64,...taskobject任务配置摘要包含descriptionstring|null、task_idstring|number|null缺失时回退为预览索引、metadataobject|null示例继承原文档{ index: 0, screenshot: data:image/jpeg;base64,/9j/4AAQSkZJRgAB..., task: { description: Click the \Click Me\ button on the page., task_id: 0, metadata: { button_text: Click Me, os_type: macos } } }metadata的内容完全由环境自身在cb.Task(...)中声明如上面的button_text是下游做任务筛选、提示词构建的重要钩子。六、字段空值与兼容性注意事项元数据可为null所有来自pyproject.toml的字段description、license、version、authors、difficulty、category、tags在对应配置缺失时均为null解析时需做空值防御。Data URI 可直接渲染screenshot是完整的 base64 Data URI可以直接放进 HTML 的img src... /标签中展示无需二次请求文件img srcdata:image/jpeg;base64,/9j/4AAQSkZJRgAB... altpreview /任务计数是首轮估算数据集级num_tasks是各环境cb.tasks_config返回列表长度的累加文档中明确标注为 first-pass estimate环境没有main.py、没有注册tasks_config_fn时计为0。注册表路径的演进原文档 Notes 中记录环境发现路径为~/cua-bench-registry/datasets/dataset_id/*而当前生成脚本第 17-23 行注释已说明独立 registry 仓库弃用、改从 monorepo 内libs/cua-bench/datasets/解析。以CUA_REGISTRY_HOME环境变量为统一入口可同时兼容两类场景。失败隔离单环境处理抛出的异常不会中止整体生成只会输出到stderr并跳过该环境最终仍产出其余环境的注册表。七、下游消费注册表如何与 cb CLI 联动task_registry.json是展示层索引而实际运行数据集时cbCLI 通过 registry.py 做路径解析get_registry_path()第 20-33 行返回注册表根目录优先级为CUA_REGISTRY_HOME→~/.cua/cbregistry/libs/cua-benchensure_registry()第 36-121 行注册表不存在时自动 clone cua 仓库先 SSH 后 HTTPS已存在时执行git pull更新数据集resolve_dataset_path(dataset_name)/resolve_task_path(dataset_name, task_name)第 124-165 行将数据集名/任务名解析为磁盘上的实际目录供cb run dataset等命令使用。由此可以看到完整闭环dump_task_registry.py负责把注册表内容固化为可读的 JSON 索引registry.py负责在运行期把同样的数据集解析回磁盘路径两者共享CUA_REGISTRY_HOME这一环境变量约定保证文档里的注册表与命令行实际跑的数据集始终指向同一份数据。八、相关参考文件格式文档libs/cua-bench/cua_bench/scripts/task_registry.md生成脚本libs/cua-bench/cua_bench/scripts/dump_task_registry.py配套拼图渲染脚本libs/cua-bench/cua_bench/scripts/dump_task_registry_mosaic.pyCLI 注册表解析器libs/cua-bench/cua_bench/cli/commands/registry.py环境装饰器定义libs/cua-bench/cua_bench/decorators.py真实数据集配置示例libs/cua-bench/datasets/cua-bench-basic/click-button/pyproject.toml 与 libs/cua-bench/datasets/cua-bench-basic/click-button/main.py【免费下载链接】cuaScale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation.项目地址: https://gitcode.com/GitHub_Trending/cua/cua创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表