Feature Extraction
Transformers
Safetensors
English
multilingual
laya_browser
laya
custom_code
system-1
browser-agent
web-navigation
decision-model
mmbert
mind2web
tilelang
Instructions to use cklxx/laya-browser with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use cklxx/laya-browser with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="cklxx/laya-browser", trust_remote_code=True)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("cklxx/laya-browser", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
v14s checkpoint, held-out suite B (100 %), harness fixes, webgym + sub-goal data pipeline, DAgger leak correction
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +1 -0
- README.md +61 -2
- code/apps/browser_suite.py +3 -2
- code/apps/browser_suite_b.py +60 -0
- code/apps/browser_trace.py +39 -0
- code/finetune/annotate_subgoals.py +117 -0
- code/finetune/build_items.py +36 -5
- code/finetune/common_ft.py +1 -1
- code/finetune/convert_nnetnav.py +186 -0
- code/finetune/infra.sh +23 -0
- code/finetune/rollouts2.py +255 -0
- code/finetune/run_suite_v12s.sh +13 -0
- code/finetune/run_v12s.sh +15 -0
- code/finetune/run_v13s.sh +23 -0
- code/finetune/run_v14s.sh +23 -0
- code/finetune/run_v15s.sh +29 -0
- code/finetune/sites.txt +340 -0
- code/finetune/sites_autocomplete.txt +69 -0
- code/finetune/sites_paged.txt +57 -0
- code/finetune/sites_select.txt +38 -0
- code/finetune/sites_sort.txt +15 -0
- code/finetune/train.py +22 -2
- code/finetune/webgym/app.py +169 -0
- code/finetune/webgym/eval_gym.py +80 -0
- code/finetune/webgym/expert.py +330 -0
- code/finetune/webgym/serve.sh +6 -0
- code/finetune/webgym/spec.py +222 -0
- code/finetune/webgym/widgets.js +194 -0
- code/jev-ultrafast.patch +0 -0
- code/kernels/fast.py +18 -1
- results/round3/gym_eval_v14s.json +314 -0
- results/round3/gym_eval_v14s.log +28 -0
- results/round3/gym_eval_v14s_plan.json +391 -0
- results/round3/gym_eval_v14s_plan.log +28 -0
- results/round3/suiteA_v13s.json +338 -0
- results/round3/suiteA_v14s.json +338 -0
- results/round3/suiteB_v12s_c40.json +254 -0
- results/round3/suiteB_v13s.json +380 -0
- results/round3/suiteB_v14s.json +380 -0
- results/round3/suite_h2_laya-browser-v10s.json +338 -0
- results/round3/suite_h2_laya-browser-v12s.json +338 -0
- results/round3/suite_h2c40_laya-browser-v12s.json +338 -0
- results/round3/suite_v12s.log +103 -0
- results/round3/suite_v12s_c40.log +50 -0
- results/round3/train_domains.json +1 -0
- results/round3/v12s.log +314 -0
- results/round3/v13s.log +134 -0
- results/round3/v14s.log +134 -0
- v14s/encoder/config.json +79 -0
- v14s/model.safetensors +3 -0
.gitattributes
CHANGED
|
@@ -37,3 +37,4 @@ v10s/tokenizer/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
|
| 37 |
assets/laya_browser_demo.gif filter=lfs diff=lfs merge=lfs -text
|
| 38 |
assets/laya_browser_demo.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 39 |
v11s/tokenizer/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 37 |
assets/laya_browser_demo.gif filter=lfs diff=lfs merge=lfs -text
|
| 38 |
assets/laya_browser_demo.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 39 |
v11s/tokenizer/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
v14s/tokenizer/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -31,6 +31,64 @@ This repo is what it took to turn it into a usable decision head for [browser-us
|
|
| 31 |
whose `/v1/systemone` request format is identical to laya's `predict(state, questions)`. Everything was done locally on one RTX 4070 Ti SUPER (16 GB),
|
| 32 |
no paid API: the text helper and the DAgger teacher are a local Qwen3-8B-AWQ served by sglang.
|
| 33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
## What changed relative to the original laya
|
| 35 |
|
| 36 |
| | original laya (typed-decisions) | this repo |
|
|
@@ -41,7 +99,7 @@ no paid API: the text helper and the DAgger teacher are a local Qwen3-8B-AWQ ser
|
|
| 41 |
| latency per browser step (3 questions, 30–65 candidates) | 50–200 ms | 41–50 ms (v10), **17–23 ms** (v10s / v11s) |
|
| 42 |
| backbone | ModernBERT-large 421M | v10: same; v10s / v11s: mmBERT-base 322M |
|
| 43 |
| input format | jev's state verbatim (element table as JSON inside the state, truncated by the 1024-token window) | **format v2/v3**: elements live only in the option list (full label + role + current value), state keeps title / URL / history / 1.2–1.5k chars of text, `head_max_len` 512 → 768 |
|
| 44 |
-
| training data | LocalLLaMA/typed-decisions | 5,244 reverse-generated goals on 421 crawled pages (Qwen writes "the goal a user would state to need this element"), 700 real DONE states (clicks actually executed), 659 step-2 negatives, [Mind2Web](https://huggingface.co/datasets/osunlp/Mind2Web) train (7,296 steps, candidates re-rendered as an element table), 177 on-policy DAgger corrections |
|
| 45 |
| training | — | laya's RLCD recipe (noisy-logit policy gradient + soft CE), single GPU, no gradient checkpointing, 4 epochs (~2 h for v10, ~1 h for v10s), post-hoc temperature |
|
| 46 |
| inference | HF eager + autocast | optional TileLang fast path ([PR #25 to laya](https://github.com/NandhaKishorM/laya/pull/25)): fused GEMM/GEGLU/LayerNorm/RoPE, sliding-window flash attention, bf16-resident weights, CUDA graphs — 4–5× lower per-call latency, identical answers |
|
| 47 |
|
|
@@ -76,11 +134,12 @@ DAgger teacher or System-2 fallback here. Further gains need a stronger teacher
|
|
| 76 |
## Files
|
| 77 |
|
| 78 |
```
|
|
|
|
| 79 |
v10/ ModernBERT-large 421M, format v2, head_max_len 768 (best held-out top-1)
|
| 80 |
v10s/ mmBERT-base 322M, format v3, head_max_len 768 (17–23 ms per step; best on the live suite)
|
| 81 |
v11s/ v10s data + 682 scripted scroll / search-submit / select trajectories (equivalent to v10s within noise)
|
| 82 |
code/ finetune pipeline, laya systemone server, task suite, TileLang kernels, jev-ultrafast patch
|
| 83 |
-
results/ per-run suite JSONs and logs behind every number above
|
| 84 |
```
|
| 85 |
Each checkpoint is a laya checkpoint directory (`model.safetensors`, `encoder/`, `tokenizer/`, `rl_agent_config.json`); the config records
|
| 86 |
`laya_fmt` and `head_max_len_train` so the server applies the matching input format automatically.
|
|
|
|
| 31 |
whose `/v1/systemone` request format is identical to laya's `predict(state, questions)`. Everything was done locally on one RTX 4070 Ti SUPER (16 GB),
|
| 32 |
no paid API: the text helper and the DAgger teacher are a local Qwen3-8B-AWQ served by sglang.
|
| 33 |
|
| 34 |
+
## Progress update (2026-09-26): v12s–v14s, a held-out suite, and a data-leak correction
|
| 35 |
+
|
| 36 |
+
**New checkpoint `v14s/`** (mmBERT-base 322M, format v3, run the server with a 60-option chunk threshold:
|
| 37 |
+
`python apps/systemone_server.py 8791 /path/to/v14s 60`).
|
| 38 |
+
|
| 39 |
+
| | v10s | v12s | v13s | **v14s** |
|
| 40 |
+
|---|---|---|---|---|
|
| 41 |
+
| **Suite B: 18 tasks on 18 sites that appear in no training source** (×3, `code/apps/browser_suite_b.py`) | – | 94 % (34/36, ×2) | 93 % (50/54) | **100 % (54/54)** |
|
| 42 |
+
| Suite A: the original 16 tasks (×3, patched harness) — *contaminated, see below* | 62 % | 75 % | 75 % | 81 % (39/48) |
|
| 43 |
+
| Held-out long-horizon synthetic tasks (flight / hotel / shop, 8 each) | – | – | – | 0 / 0 / 50 % |
|
| 44 |
+
|
| 45 |
+
Suite B checks the held-out claim at start-up against `results/round3/train_domains.json` (every domain of every training source,
|
| 46 |
+
682 domains). Its tasks are mostly 1–2 steps: navigation, site search, man pages, RFC / package search, a shop's search, page 2 and
|
| 47 |
+
sort-by-price. Suite A still fails `books-page2` (0/3), Google Flights (0/3) and is flaky on two search tasks.
|
| 48 |
+
|
| 49 |
+
**Data leak found and removed.** `dagger_cases.jsonl` (the "177 on-policy DAgger corrections" in the table below, 331 cases by
|
| 50 |
+
now) came from running the Qwen teacher on the suite itself: 152 of its cases are suite-A goals, often with the teacher's *wrong*
|
| 51 |
+
label (e.g. "Go to page 2 of the catalogue" → click the first book), oversampled ×5. Every checkpoint from v10 to v14s was trained on
|
| 52 |
+
it, so **all suite-A numbers in this README, including v10s's 62 %, are contaminated** (and `books-page2` failing 0/3 is partly
|
| 53 |
+
the model faithfully reproducing a wrong label). Suite B is clean. From v15s on, `build_items.py` drops every DAgger case and every
|
| 54 |
+
case recorded on a suite A/B start page.
|
| 55 |
+
|
| 56 |
+
**What changed in the harness** (`code/jev-ultrafast.patch`, applies to jev-ultrafast `1231850`). Half of the original suite
|
| 57 |
+
failures were harness bugs, not model errors:
|
| 58 |
+
- a `PRESS_ENTER` control, offered while a non-empty text field is focused (arXiv's search overlay has no submit button);
|
| 59 |
+
- elements covered by an unrelated element (modals, overlays, banners) are no longer offered; a target covered by its own ancestor
|
| 60 |
+
is clicked through;
|
| 61 |
+
- observation retries while the document is navigating; a choice that fails 3× is excluded, as is the same action repeated on the
|
| 62 |
+
same URL (reload loops);
|
| 63 |
+
- an optional sub-goal planner (`JEV_PLANNER=1`: the text model splits the task once, DONE advances to the next sub-goal, a
|
| 64 |
+
text-model check rejects a sub-goal DONE the page does not show).
|
| 65 |
+
Server side: wide choices are split into chunks above 60 options (a 160-link page gave each label ~4 tokens and a flat
|
| 66 |
+
distribution), and a one-option choice no longer crashes the fast path.
|
| 67 |
+
|
| 68 |
+
**What changed in the data** (all collected in the real browser, no suite pages):
|
| 69 |
+
- `rollouts2.py`: scripted search → `PRESS_ENTER`/submit → DONE, "open the article about X", scroll-to-next-page, scroll-then-click,
|
| 70 |
+
`<select>` with intent-style goals ("Sort by price: low to high."), type-then-pick-a-suggestion; 2.3k cases on 206 sites.
|
| 71 |
+
- `convert_nnetnav.py`: 8.9k steps from [stanfordnlp/nnetnav-live](https://huggingface.co/datasets/stanfordnlp/nnetnav-live)
|
| 72 |
+
(element tables capped at 45, held out by site).
|
| 73 |
+
- target lists sampled to the server's chunk width (≤ 40) and final-round width (2–6) so labels are never truncated in training.
|
| 74 |
+
|
| 75 |
+
**Where it breaks: long horizons.** On held-out synthetic forms (below) v14s ends flight and hotel searches after 1–2 steps (DONE
|
| 76 |
+
too early) or loops. Jev's own Google Flights run needs 11 actions: one-way, type origin → pick the suggestion, type destination →
|
| 77 |
+
pick the suggestion, open the calendar, pick the day, Done, Search.
|
| 78 |
+
|
| 79 |
+
**In progress: v15s** (clean retrain from the base, no DAgger, no suite pages) adds:
|
| 80 |
+
- `code/finetune/webgym/`: a local synthetic web environment (flight / hotel search forms, shop listings) with randomized widget
|
| 81 |
+
implementations — autocomplete comboboxes inline or behind a trigger button, month-grid date pickers with Done/Apply, radio /
|
| 82 |
+
segmented / native / custom dropdowns, steppers and popups, cookie banners, forms pushed below the fold. A scripted expert
|
| 83 |
+
reads the page's own state, acts through jev's observations (so the format is exactly what the agent sees), and records each
|
| 84 |
+
step twice: under the full task and under the current sub-goal, plus a *verified* sub-goal DONE whenever a sub-goal is
|
| 85 |
+
satisfied. 12 % harmless detours teach recovery (including going back after a wrong submission). 1,408 successful episodes,
|
| 86 |
+
32k cases; seeds `900000 + 10·i` are held out for `eval_gym.py`.
|
| 87 |
+
- `annotate_subgoals.py`: Mind2Web trajectories segmented into planner-style sub-goals by the local Qwen
|
| 88 |
+
(trajectory-conditioned, Plan-and-Act style), 5.1k sub-goal-conditioned steps. Sub-goal DONE labels come only from webgym,
|
| 89 |
+
where they are checked against page state.
|
| 90 |
+
Results will be added here when the run finishes.
|
| 91 |
+
|
| 92 |
## What changed relative to the original laya
|
| 93 |
|
| 94 |
| | original laya (typed-decisions) | this repo |
|
|
|
|
| 99 |
| latency per browser step (3 questions, 30–65 candidates) | 50–200 ms | 41–50 ms (v10), **17–23 ms** (v10s / v11s) |
|
| 100 |
| backbone | ModernBERT-large 421M | v10: same; v10s / v11s: mmBERT-base 322M |
|
| 101 |
| input format | jev's state verbatim (element table as JSON inside the state, truncated by the 1024-token window) | **format v2/v3**: elements live only in the option list (full label + role + current value), state keeps title / URL / history / 1.2–1.5k chars of text, `head_max_len` 512 → 768 |
|
| 102 |
+
| training data | LocalLLaMA/typed-decisions | 5,244 reverse-generated goals on 421 crawled pages (Qwen writes "the goal a user would state to need this element"), 700 real DONE states (clicks actually executed), 659 step-2 negatives, [Mind2Web](https://huggingface.co/datasets/osunlp/Mind2Web) train (7,296 steps, candidates re-rendered as an element table), 177 on-policy DAgger corrections (later found to contain suite-A tasks, see the progress update) |
|
| 103 |
| training | — | laya's RLCD recipe (noisy-logit policy gradient + soft CE), single GPU, no gradient checkpointing, 4 epochs (~2 h for v10, ~1 h for v10s), post-hoc temperature |
|
| 104 |
| inference | HF eager + autocast | optional TileLang fast path ([PR #25 to laya](https://github.com/NandhaKishorM/laya/pull/25)): fused GEMM/GEGLU/LayerNorm/RoPE, sliding-window flash attention, bf16-resident weights, CUDA graphs — 4–5× lower per-call latency, identical answers |
|
| 105 |
|
|
|
|
| 134 |
## Files
|
| 135 |
|
| 136 |
```
|
| 137 |
+
v14s/ mmBERT-base 322M, format v3, head_max_len 768 (best: suite B 100 %; serve with chunk threshold 60)
|
| 138 |
v10/ ModernBERT-large 421M, format v2, head_max_len 768 (best held-out top-1)
|
| 139 |
v10s/ mmBERT-base 322M, format v3, head_max_len 768 (17–23 ms per step; best on the live suite)
|
| 140 |
v11s/ v10s data + 682 scripted scroll / search-submit / select trajectories (equivalent to v10s within noise)
|
| 141 |
code/ finetune pipeline, laya systemone server, task suite, TileLang kernels, jev-ultrafast patch
|
| 142 |
+
results/ per-run suite JSONs and logs behind every number above (round3/: v12s–v14s, suite B, webgym baseline)
|
| 143 |
```
|
| 144 |
Each checkpoint is a laya checkpoint directory (`model.safetensors`, `encoder/`, `tokenizer/`, `rl_agent_config.json`); the config records
|
| 145 |
`laya_fmt` and `head_max_len_train` so the server applies the matching input format automatically.
|
code/apps/browser_suite.py
CHANGED
|
@@ -41,8 +41,9 @@ TASKS = [
|
|
| 41 |
lambda u, t, x: "/tag/love" in u),
|
| 42 |
("hn-past", "https://news.ycombinator.com/", "Open the 'past' page (front pages from previous days).",
|
| 43 |
lambda u, t, x: "/front" in u),
|
| 44 |
-
(
|
| 45 |
-
|
|
|
|
| 46 |
("arxiv-search", "https://arxiv.org/", "Search arXiv for 'flash attention' papers and show the results list.",
|
| 47 |
lambda u, t, x: "search" in u and "flash" in u.lower()),
|
| 48 |
("flights", "https://www.google.com/travel/flights?hl=en", "Find one-way flights from Zurich to London on September 28, 2026, for one adult in economy. Stop when matching flight options are visible.",
|
|
|
|
| 41 |
lambda u, t, x: "/tag/love" in u),
|
| 42 |
("hn-past", "https://news.ycombinator.com/", "Open the 'past' page (front pages from previous days).",
|
| 43 |
lambda u, t, x: "/front" in u),
|
| 44 |
+
# NOTE: DuckDuckGo (all front ends), Bing, Ecosia and Startpage block headless Chromium (bot pages); Marginalia does not.
|
| 45 |
+
("web-search", "https://search.marginalia.nu/", "Search for 'tilelang github' and show the results.",
|
| 46 |
+
lambda u, t, x: "query=" in u and "tilelang" in u.lower()),
|
| 47 |
("arxiv-search", "https://arxiv.org/", "Search arXiv for 'flash attention' papers and show the results list.",
|
| 48 |
lambda u, t, x: "search" in u and "flash" in u.lower()),
|
| 49 |
("flights", "https://www.google.com/travel/flights?hl=en", "Find one-way flights from Zurich to London on September 28, 2026, for one adult in economy. Stop when matching flight options are visible.",
|
code/apps/browser_suite_b.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Held-out suite B: 18 tasks on sites that appear in NO training source (crawl, rollouts, Mind2Web, NNetNav; checked
|
| 2 |
+
against finetune/out/train_domains.json at start). Same runner and services as apps/browser_suite.py.
|
| 3 |
+
|
| 4 |
+
python apps/browser_suite_b.py [name-filter] REPEATS=3 SUITE_OUT=... for repeated runs
|
| 5 |
+
"""
|
| 6 |
+
import json, os, sys, time
|
| 7 |
+
from urllib.parse import urlparse
|
| 8 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 9 |
+
from browser_suite import run # noqa: E402 (sets up the jev env vars)
|
| 10 |
+
|
| 11 |
+
TASKS = [
|
| 12 |
+
# navigation
|
| 13 |
+
("sqlite-download", "https://www.sqlite.org/", "Go to the Download page.", lambda u, t, x: "download.html" in u),
|
| 14 |
+
("haskell-downloads", "https://www.haskell.org/", "Go to the Downloads page.", lambda u, t, x: "/downloads" in u),
|
| 15 |
+
("zig-download", "https://ziglang.org/", "Open the download page.", lambda u, t, x: "/download" in u),
|
| 16 |
+
("openbsd-faq", "https://www.openbsd.org/", "Open the FAQ.", lambda u, t, x: "faq" in u.lower()),
|
| 17 |
+
("nginx-download", "https://nginx.org/", "Go to the download page.", lambda u, t, x: "download" in u),
|
| 18 |
+
("xkcd-archive", "https://xkcd.com/", "Open the archive of all comics.", lambda u, t, x: "/archive" in u),
|
| 19 |
+
("elixir-install", "https://elixir-lang.org/", "Open the installation instructions.", lambda u, t, x: "install" in u),
|
| 20 |
+
("prometheus-download", "https://prometheus.io/", "Go to the Download page.", lambda u, t, x: "/download" in u),
|
| 21 |
+
("ocaml-install", "https://ocaml.org/", "Open the page that explains how to install OCaml.", lambda u, t, x: "install" in u),
|
| 22 |
+
# site search
|
| 23 |
+
("rosetta-quicksort", "https://rosettacode.org/wiki/Rosetta_Code", "Search Rosetta Code for 'quicksort'.",
|
| 24 |
+
lambda u, t, x: "quicksort" in u.lower() or "quicksort" in t.lower()),
|
| 25 |
+
("arch-man-grep", "https://man.archlinux.org/", "Look up the manual page for 'grep'.", lambda u, t, x: "grep" in u.lower()),
|
| 26 |
+
("debian-man-tar", "https://manpages.debian.org/", "Look up the manual page for 'tar'.", lambda u, t, x: "tar" in urlparse(u).path.lower() + urlparse(u).query.lower()),
|
| 27 |
+
("rfc-http-semantics", "https://www.rfc-editor.org/search/rfc_search.php", "Search for RFCs about 'HTTP semantics' and show the results.",
|
| 28 |
+
lambda u, t, x: "semantics" in u.lower()),
|
| 29 |
+
("nixos-ripgrep", "https://search.nixos.org/packages", "Search for the package 'ripgrep'.", lambda u, t, x: "ripgrep" in u.lower()),
|
| 30 |
+
("ocaml-pkg-yojson", "https://ocaml.org/", "Search OCaml packages for 'yojson'.", lambda u, t, x: "yojson" in u.lower()),
|
| 31 |
+
("shop-search-jacket", "https://www.scrapingcourse.com/ecommerce/", "Search the shop for 'jacket'.", lambda u, t, x: "s=jacket" in u.lower()),
|
| 32 |
+
# listing
|
| 33 |
+
("shop-page2", "https://www.scrapingcourse.com/ecommerce/", "Go to page 2 of the products.", lambda u, t, x: "page/2" in u),
|
| 34 |
+
("shop-sort-price", "https://www.scrapingcourse.com/ecommerce/", "Sort the products by price, from low to high.",
|
| 35 |
+
lambda u, t, x: "orderby=price" in u and "price-desc" not in u),
|
| 36 |
+
]
|
| 37 |
+
|
| 38 |
+
if __name__ == "__main__":
|
| 39 |
+
dom = lambda u: urlparse(u).netloc.lower().removeprefix("www.")
|
| 40 |
+
try:
|
| 41 |
+
seen = set(json.load(open(os.path.join(os.path.dirname(__file__), "..", "finetune", "out", "train_domains.json"))))
|
| 42 |
+
leak = sorted({dom(u) for _, u, _, _ in TASKS} & seen)
|
| 43 |
+
print("held-out check:", "OK, no suite-B domain appears in training data" if not leak else f"LEAK {leak}", flush=True)
|
| 44 |
+
except FileNotFoundError:
|
| 45 |
+
print("held-out check skipped (no finetune/out/train_domains.json)", flush=True)
|
| 46 |
+
flt = sys.argv[1] if len(sys.argv) > 1 else ""
|
| 47 |
+
repeats = int(os.environ.get("REPEATS", "1"))
|
| 48 |
+
rows = []
|
| 49 |
+
for name, url, goal, check in TASKS:
|
| 50 |
+
if flt and flt not in name: continue
|
| 51 |
+
for rep in range(repeats):
|
| 52 |
+
ok, steps, status, wall, final = run(name, url, goal, check)
|
| 53 |
+
rows.append((name, ok, steps, status, wall))
|
| 54 |
+
print(f"{'PASS' if ok else 'FAIL'} {name:20s} steps={steps:2d} status={status:9s} {wall:5.1f}s {final[:70]}", flush=True)
|
| 55 |
+
n = sum(r[1] for r in rows)
|
| 56 |
+
print(f"\n== {n}/{len(rows)} passed ({100*n/len(rows):.0f}%, {repeats} run(s) per task) | median wall {sorted(r[4] for r in rows)[len(rows)//2]:.1f}s")
|
| 57 |
+
per = {}
|
| 58 |
+
for r in rows: per.setdefault(r[0], []).append(r[1])
|
| 59 |
+
print(" per task: " + " ".join(f"{k}={sum(v)}/{len(v)}" for k, v in per.items()))
|
| 60 |
+
json.dump([dict(zip(("name", "pass", "steps", "status", "wall"), r)) for r in rows], open(os.environ.get("SUITE_OUT", "/tmp/suite_b.json"), "w"), indent=1)
|
code/apps/browser_trace.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Run suite tasks (by name filter) with a per-step trace: operation, target label, typed text, page change, url.
|
| 2 |
+
python apps/browser_trace.py [name-filter] [max_steps=12]
|
| 3 |
+
"""
|
| 4 |
+
import json, os, sys, time
|
| 5 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 6 |
+
from browser_suite import TASKS, Agent
|
| 7 |
+
flt = sys.argv[1] if len(sys.argv) > 1 else ""; max_steps = int(sys.argv[2]) if len(sys.argv) > 2 else 12
|
| 8 |
+
for name, url, goal, check in TASKS:
|
| 9 |
+
if flt and flt not in name.split(",") and flt not in name: continue
|
| 10 |
+
t0 = time.time(); page = None; status = "error"; err = ""
|
| 11 |
+
print(f"\n### {name}: {goal}", flush=True)
|
| 12 |
+
try:
|
| 13 |
+
with Agent(url, goal) as agent:
|
| 14 |
+
page = agent.state["page"]
|
| 15 |
+
print(f" start: {len(page['actions'])} actions, title={page['title'][:50]!r}", flush=True)
|
| 16 |
+
for state in agent.run():
|
| 17 |
+
status = state["status"]; page = state["page"]
|
| 18 |
+
h = state["history"][-1] if state["history"] else None
|
| 19 |
+
d = state["decisions"][-1] if state["decisions"] else None
|
| 20 |
+
if state.get("plan") and len(state["plan"]) > 1 and state.get("_shown_plan") is None:
|
| 21 |
+
state["_shown_plan"] = 1; print(" plan:", state["plan"], flush=True)
|
| 22 |
+
if state.get("subgoals_done") and state.get("_shown_sg") != state["subgoals_done"]:
|
| 23 |
+
state["_shown_sg"] = state["subgoals_done"]; print(f" -- sub-goal {state['subgoals_done']} done, now: {state['goal']!r}", flush=True)
|
| 24 |
+
if h and d and h["step"] == len(state["history"]):
|
| 25 |
+
tp = d.get("target_probabilities") or {}
|
| 26 |
+
top = sorted(tp.items(), key=lambda kv: -kv[1])[:3]
|
| 27 |
+
print(f" step {h['step']:2d} {d['operation']:10s} p_op={d['operation_probabilities'].get(d['operation'],0):.2f} "
|
| 28 |
+
f"target={h['action'][:60]!r} text={h['text']!r} changed={h['page_changed']} -> {page['url'][:80]}", flush=True)
|
| 29 |
+
if len(state["history"]) >= max_steps: break
|
| 30 |
+
if status in ("done", "blocked"):
|
| 31 |
+
d = state["decisions"][-1] if state["decisions"] else None
|
| 32 |
+
print(f" final decision: {status} p={d['operation_probabilities'].get(d['operation'],0) if d else 0:.2f}", flush=True)
|
| 33 |
+
time.sleep(1.5)
|
| 34 |
+
try: page = agent.browser.observe(screenshot=False)
|
| 35 |
+
except Exception: pass
|
| 36 |
+
except Exception as e:
|
| 37 |
+
status = f"error:{type(e).__name__}"; err = str(e)[:200]
|
| 38 |
+
ok = bool(page and check(page["url"], page["title"], page.get("text", "")))
|
| 39 |
+
print(f" => {'PASS' if ok else 'FAIL'} status={status} {err} url={(page or {}).get('url','')[:90]} wall={time.time()-t0:.1f}s", flush=True)
|
code/finetune/annotate_subgoals.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Sub-goal annotation of real trajectories (Plan-and-Act style), with the SAME planner prompt the agent uses at run time.
|
| 2 |
+
|
| 3 |
+
python finetune/annotate_subgoals.py finetune/out/m2w_cases.jsonl finetune/out/m2w_sub_cases.jsonl [max_tasks=0] [workers=12]
|
| 4 |
+
|
| 5 |
+
Per task (grouped by task_id, steps ordered by history length):
|
| 6 |
+
local Qwen (TEXT_MODEL_BASE_URL) segments the recorded steps, in order, into sub-goals written in the run-time
|
| 7 |
+
planner's style (trajectory-conditioned, so plan and steps agree).
|
| 8 |
+
Emits, per step, a copy of the case with goal = its sub-goal (same gold). With EMIT_DONE=1 it also emits, at every
|
| 9 |
+
boundary, the next step's page with goal = the finished sub-goal and gold = DONE. Single-sub-goal tasks are skipped.
|
| 10 |
+
"""
|
| 11 |
+
import json, os, sys, threading
|
| 12 |
+
from collections import defaultdict
|
| 13 |
+
from concurrent.futures import ThreadPoolExecutor
|
| 14 |
+
sys.path.insert(0, "/home/ckl/projects/S/jev-ultrafast")
|
| 15 |
+
import importlib.util
|
| 16 |
+
_spec = importlib.util.spec_from_file_location("jq", "/home/ckl/projects/S/jev-ultrafast/jev_ultrafast/questions.py")
|
| 17 |
+
jq = importlib.util.module_from_spec(_spec); _spec.loader.exec_module(jq)
|
| 18 |
+
import httpx
|
| 19 |
+
|
| 20 |
+
URL = os.environ.get("TEXT_MODEL_BASE_URL", "http://127.0.0.1:30000/v1").rstrip("/") + "/chat/completions"
|
| 21 |
+
MODEL = os.environ.get("TEXT_MODEL", "Qwen/Qwen3-8B-AWQ")
|
| 22 |
+
CLIENT = httpx.Client(timeout=120, trust_env=False) # local server: never through a proxy
|
| 23 |
+
# segment boundaries are right most of the time but not always; a wrong boundary turns into a wrong DONE label, so
|
| 24 |
+
# sub-goal DONE cases come only from webgym (verified by page state) unless EMIT_DONE=1
|
| 25 |
+
EMIT_DONE = os.environ.get("EMIT_DONE") == "1"
|
| 26 |
+
|
| 27 |
+
SEGMENT = """You annotate a recorded browser trajectory with the sub-goals a planner would have written for it.
|
| 28 |
+
Split the recorded steps, in their recorded order, into consecutive segments; each segment is one sub-goal.
|
| 29 |
+
Write each sub-goal as an instruction for the part of the task those steps accomplish, in the task's own words: name
|
| 30 |
+
what is set and repeat the value (patterns: "Set the <thing> to <value>", "Search for <query> and show the results",
|
| 31 |
+
"Sort the results by <order>", "Open <item>"). Steps that only open a menu or a picker belong to the sub-goal they
|
| 32 |
+
serve; a sub-goal ends with the step that actually commits its value. A task done in one go is one segment.
|
| 33 |
+
Return JSON {"segments": [{"subgoal": "...", "last_step": k}, ...]} where last_step is the 0-based index of the segment's
|
| 34 |
+
last step; last_step values increase and the final one is the last step index."""
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def chat(system, user, max_tokens=400):
|
| 38 |
+
r = CLIENT.post(URL, json={"model": MODEL, "max_tokens": max_tokens, "temperature": 0, "response_format": {"type": "json_object"},
|
| 39 |
+
"chat_template_kwargs": {"enable_thinking": False},
|
| 40 |
+
"messages": [{"role": "system", "content": system}, {"role": "user", "content": user}]})
|
| 41 |
+
r.raise_for_status()
|
| 42 |
+
return json.loads(r.json()["choices"][0]["message"]["content"])
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
def step_repr(c):
|
| 46 |
+
t = f" '{c['history'][-1]['text']}'" if False else ""
|
| 47 |
+
lab = (c.get("label") or "")[:80]
|
| 48 |
+
return f"{c['gold_op']} {lab}".strip()
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
def annotate(task_cases):
|
| 52 |
+
goal = task_cases[0]["goal"]
|
| 53 |
+
steps = [step_repr(c) for c in task_cases]
|
| 54 |
+
# typed / selected values are only visible in the next case's history; attach them for context
|
| 55 |
+
for i, c in enumerate(task_cases[:-1]):
|
| 56 |
+
h = task_cases[i + 1]["history"][-1] if task_cases[i + 1]["history"] else None
|
| 57 |
+
if h and h.get("text") and c["gold_op"] in ("TYPE_TEXT", "SELECT"):
|
| 58 |
+
steps[i] += f" = '{h['text']}'"
|
| 59 |
+
r = chat(SEGMENT, json.dumps({"task": goal, "steps": [f"{i}: {s}" for i, s in enumerate(steps)]}, ensure_ascii=False), max_tokens=600)
|
| 60 |
+
segs = r.get("segments") or []
|
| 61 |
+
plan, a, start = [], [None] * len(task_cases), 0
|
| 62 |
+
for sg in segs:
|
| 63 |
+
try:
|
| 64 |
+
last = int(sg["last_step"]); text = str(sg["subgoal"]).strip()
|
| 65 |
+
except Exception:
|
| 66 |
+
return None
|
| 67 |
+
if not text or last < start or last >= len(task_cases):
|
| 68 |
+
return None
|
| 69 |
+
for k in range(start, last + 1): a[k] = len(plan)
|
| 70 |
+
plan.append(text); start = last + 1
|
| 71 |
+
if start != len(task_cases) or len(plan) < 2:
|
| 72 |
+
return None
|
| 73 |
+
return plan, a
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
def main():
|
| 77 |
+
src, dst = sys.argv[1], sys.argv[2]
|
| 78 |
+
max_tasks = int(sys.argv[3]) if len(sys.argv) > 3 else 0
|
| 79 |
+
workers = int(sys.argv[4]) if len(sys.argv) > 4 else 12
|
| 80 |
+
by = defaultdict(list)
|
| 81 |
+
for l in open(src):
|
| 82 |
+
c = json.loads(l); by[c.get("task_id") or c["goal"]].append(c)
|
| 83 |
+
tasks = [sorted(v, key=lambda c: len(c["history"])) for v in by.values()]
|
| 84 |
+
tasks = [t for t in tasks if len(t) >= 2]
|
| 85 |
+
if max_tasks: tasks = tasks[:max_tasks]
|
| 86 |
+
lock = threading.Lock(); stats = {"tasks": 0, "skipped": 0, "sub": 0, "done": 0, "err": 0}
|
| 87 |
+
out = open(dst, "w")
|
| 88 |
+
|
| 89 |
+
def work(tc):
|
| 90 |
+
try:
|
| 91 |
+
r = annotate(tc)
|
| 92 |
+
except Exception:
|
| 93 |
+
with lock: stats["err"] += 1
|
| 94 |
+
return
|
| 95 |
+
if r is None:
|
| 96 |
+
with lock: stats["skipped"] += 1
|
| 97 |
+
return
|
| 98 |
+
plan, a = r
|
| 99 |
+
rows = []
|
| 100 |
+
for i, c in enumerate(tc):
|
| 101 |
+
rows.append({**c, "goal": plan[a[i]], "skill": "m2w@sub", "plan": plan, "sub_index": a[i]})
|
| 102 |
+
if EMIT_DONE and i > 0 and a[i] > a[i - 1]:
|
| 103 |
+
rows.append({**c, "goal": plan[a[i - 1]], "gold_op": "DONE", "gold_id": "DONE", "kind": "done", "label": "",
|
| 104 |
+
"skill": "subgoal_done", "plan": plan, "sub_index": a[i - 1]})
|
| 105 |
+
with lock:
|
| 106 |
+
for r_ in rows: out.write(json.dumps(r_, ensure_ascii=False) + "\n")
|
| 107 |
+
stats["tasks"] += 1; stats["sub"] += sum(r_["skill"] == "m2w@sub" for r_ in rows); stats["done"] += sum(r_["skill"] == "subgoal_done" for r_ in rows)
|
| 108 |
+
if stats["tasks"] % 50 == 0: print(" ", stats, flush=True)
|
| 109 |
+
|
| 110 |
+
with ThreadPoolExecutor(workers) as ex:
|
| 111 |
+
list(ex.map(work, tasks))
|
| 112 |
+
out.close()
|
| 113 |
+
print("done", stats, "->", dst)
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
if __name__ == "__main__":
|
| 117 |
+
main()
|
code/finetune/build_items.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
python finetune/build_items.py out/pages.jsonl out/cases.jsonl out/
|
| 4 |
"""
|
| 5 |
-
import json, os, sys
|
| 6 |
import torch
|
| 7 |
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 8 |
from common_ft import build_request, gold_for
|
|
@@ -11,6 +11,8 @@ from laya.common import QTYPES, build_sequence, render_options
|
|
| 11 |
|
| 12 |
MAX_LEN, HEAD_MAX_LEN = 1024, int(os.environ.get('LAYA_HEAD', '512'))
|
| 13 |
EVAL_EVERY = 5 # pages with index % 5 == 0 are held out
|
|
|
|
|
|
|
| 14 |
|
| 15 |
|
| 16 |
def main():
|
|
@@ -24,18 +26,31 @@ def main():
|
|
| 24 |
items, n_skip, ev = [], 0, []
|
| 25 |
import hashlib
|
| 26 |
STOPS = [" Stop when it is open.", " Stop once that page is visible.", " Then stop.", " Finish when it has loaded.", ""]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
for c in cases:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
if c["kind"] == "done" and "page_obj" not in c:
|
| 29 |
continue # template DONE cases leak phrasing; real ones come from make_done_cases.py
|
| 30 |
page = c.get("page_obj") or pages[c["page"]]
|
| 31 |
h = int(hashlib.md5(c["goal"].encode()).hexdigest(), 16)
|
| 32 |
-
|
|
|
|
| 33 |
c = {**c, "goal": goal}
|
| 34 |
state, questions, targets, controls = build_request(page, goal, c.get("history", []))
|
| 35 |
gop, gidx = gold_for(c, targets, controls)
|
| 36 |
if gop is None:
|
| 37 |
n_skip += 1; continue
|
| 38 |
-
held = (hashlib.md5(c["website"].encode()).digest()[0] % EVAL_EVERY == 0) if c.get("source")
|
| 39 |
if held:
|
| 40 |
ev.append({**c, "gold_index": gidx}); continue
|
| 41 |
golds = {"operation": gop}
|
|
@@ -43,6 +58,17 @@ def main():
|
|
| 43 |
golds[gop.lower() + "_target"] = gidx
|
| 44 |
for qid, gold in golds.items():
|
| 45 |
q = questions[qid]; keys = list(q["criteria"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
target = [1.0 if k == gold else 0.0 for k in keys]
|
| 47 |
qq = {"t": "choice", "ins": json.dumps(q["instructions"]), "crit": q["criteria"]}
|
| 48 |
seq, markers = build_sequence(tok, state, qq, MAX_LEN, HEAD_MAX_LEN)
|
|
@@ -50,13 +76,18 @@ def main():
|
|
| 50 |
n_skip += 1; continue
|
| 51 |
item = {"ids": seq, "markers": markers, "qtype": QTYPES["choice"], "target": target, "label": keys.index(gold), "qid": qid, "gold_op": gop}
|
| 52 |
# class balance: CLICK dominates the operation question, so repeat the rare operations
|
| 53 |
-
reps = {"DONE": 4, "TYPE_TEXT": 3, "SELECT": 3}.get(gop, 1) if qid == "operation" else 1
|
| 54 |
if c.get("source") == "dagger":
|
| 55 |
-
reps *= 5
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
items.extend([item] * reps)
|
| 57 |
torch.save(items, os.path.join(out, "train_items.pt"))
|
| 58 |
with open(os.path.join(out, "eval_cases.jsonl"), "w") as f:
|
| 59 |
for c in ev: f.write(json.dumps(c, ensure_ascii=False) + "\n")
|
|
|
|
| 60 |
lens = [len(i["ids"]) for i in items]
|
| 61 |
import collections
|
| 62 |
print("operation label counts:", dict(collections.Counter(i["gold_op"] for i in items if i["qid"] == "operation")))
|
|
|
|
| 2 |
|
| 3 |
python finetune/build_items.py out/pages.jsonl out/cases.jsonl out/
|
| 4 |
"""
|
| 5 |
+
import json, random, os, sys
|
| 6 |
import torch
|
| 7 |
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 8 |
from common_ft import build_request, gold_for
|
|
|
|
| 11 |
|
| 12 |
MAX_LEN, HEAD_MAX_LEN = 1024, int(os.environ.get('LAYA_HEAD', '512'))
|
| 13 |
EVAL_EVERY = 5 # pages with index % 5 == 0 are held out
|
| 14 |
+
MAX_TARGETS = int(os.environ.get('MAX_TARGETS', '40'))
|
| 15 |
+
FINAL_P = float(os.environ.get('FINAL_P', '0.2')) # share of target items built like the server's final round
|
| 16 |
|
| 17 |
|
| 18 |
def main():
|
|
|
|
| 26 |
items, n_skip, ev = [], 0, []
|
| 27 |
import hashlib
|
| 28 |
STOPS = [" Stop when it is open.", " Stop once that page is visible.", " Then stop.", " Finish when it has loaded.", ""]
|
| 29 |
+
# evaluation hygiene: never train on a suite task's start page (suite A and B start URLs), whatever the source
|
| 30 |
+
import re as _re
|
| 31 |
+
def _norm(u): return (u or "").split("#")[0].rstrip("/").replace("://www.", "://")
|
| 32 |
+
suite_urls = set()
|
| 33 |
+
for f in ("apps/browser_suite.py", "apps/browser_suite_b.py"):
|
| 34 |
+
if os.path.exists(f):
|
| 35 |
+
suite_urls |= {_norm(u) for u in _re.findall(r'\("[a-z0-9-]+", "(https?://[^"]+)"', open(f).read())}
|
| 36 |
+
n_suite = 0
|
| 37 |
for c in cases:
|
| 38 |
+
if _norm(c.get("url") or (c.get("page_obj") or {}).get("url")) in suite_urls or (c.get("page", -1) >= 0 and _norm(pages[c["page"]]["url"]) in suite_urls):
|
| 39 |
+
n_suite += 1; continue
|
| 40 |
+
if c.get("source") == "dagger":
|
| 41 |
+
continue
|
| 42 |
if c["kind"] == "done" and "page_obj" not in c:
|
| 43 |
continue # template DONE cases leak phrasing; real ones come from make_done_cases.py
|
| 44 |
page = c.get("page_obj") or pages[c["page"]]
|
| 45 |
h = int(hashlib.md5(c["goal"].encode()).hexdigest(), 16)
|
| 46 |
+
is_sub = str(c.get("skill", "")).endswith("@sub") or c.get("skill") == "subgoal_done"
|
| 47 |
+
goal = c["goal"] + ("" if is_sub or c.get("source") == "webgym" else STOPS[h % len(STOPS)])
|
| 48 |
c = {**c, "goal": goal}
|
| 49 |
state, questions, targets, controls = build_request(page, goal, c.get("history", []))
|
| 50 |
gop, gidx = gold_for(c, targets, controls)
|
| 51 |
if gop is None:
|
| 52 |
n_skip += 1; continue
|
| 53 |
+
held = (hashlib.md5(c["website"].encode()).digest()[0] % EVAL_EVERY == 0) if c.get("source") in ("mind2web", "nnetnav") else (c["page"] % EVAL_EVERY == 0)
|
| 54 |
if held:
|
| 55 |
ev.append({**c, "gold_index": gidx}); continue
|
| 56 |
golds = {"operation": gop}
|
|
|
|
| 58 |
golds[gop.lower() + "_target"] = gidx
|
| 59 |
for qid, gold in golds.items():
|
| 60 |
q = questions[qid]; keys = list(q["criteria"])
|
| 61 |
+
rs = random.Random(h + len(keys) + len(qid))
|
| 62 |
+
if qid != "operation" and len(keys) > 8 and rs.random() < FINAL_P:
|
| 63 |
+
width = rs.randint(2, 6) # the server's final round: only the chunk winners (2-6 options)
|
| 64 |
+
else:
|
| 65 |
+
width = MAX_TARGETS
|
| 66 |
+
if qid != "operation" and len(keys) > width:
|
| 67 |
+
# inference splits wide choices into chunks of <= MAX_TARGETS (systemone_server MAXOPT); train on the same
|
| 68 |
+
# widths, so option labels are never truncated to a few tokens: gold + a random sample, page order kept
|
| 69 |
+
keep = set(rs.sample([k for k in keys if k != gold], width - 1)) | {gold}
|
| 70 |
+
keys = [k for k in keys if k in keep]
|
| 71 |
+
q = {**q, "criteria": {k: q["criteria"][k] for k in keys}}
|
| 72 |
target = [1.0 if k == gold else 0.0 for k in keys]
|
| 73 |
qq = {"t": "choice", "ins": json.dumps(q["instructions"]), "crit": q["criteria"]}
|
| 74 |
seq, markers = build_sequence(tok, state, qq, MAX_LEN, HEAD_MAX_LEN)
|
|
|
|
| 76 |
n_skip += 1; continue
|
| 77 |
item = {"ids": seq, "markers": markers, "qtype": QTYPES["choice"], "target": target, "label": keys.index(gold), "qid": qid, "gold_op": gop}
|
| 78 |
# class balance: CLICK dominates the operation question, so repeat the rare operations
|
| 79 |
+
reps = {"DONE": 4, "TYPE_TEXT": 3, "SELECT": 3, "PRESS_ENTER": 4, "SCROLL_DOWN": 2}.get(gop, 1) if qid == "operation" else 1
|
| 80 |
if c.get("source") == "dagger":
|
| 81 |
+
reps *= 5
|
| 82 |
+
if c.get("source") == "webgym" or str(c.get("skill", "")).endswith("@sub"):
|
| 83 |
+
reps = 1 # webgym already pairs every DONE with its "keep going" twin; no op-level oversampling
|
| 84 |
+
if c.get("source") == "rollout":
|
| 85 |
+
reps *= 3 # scripted scroll / search-submit / select trajectories: the skills the model lacked # on-policy teacher corrections from real tasks: few but exactly where the policy fails
|
| 86 |
items.extend([item] * reps)
|
| 87 |
torch.save(items, os.path.join(out, "train_items.pt"))
|
| 88 |
with open(os.path.join(out, "eval_cases.jsonl"), "w") as f:
|
| 89 |
for c in ev: f.write(json.dumps(c, ensure_ascii=False) + "\n")
|
| 90 |
+
print(f"dropped {n_suite} cases on suite start pages; dagger cases are never used")
|
| 91 |
lens = [len(i["ids"]) for i in items]
|
| 92 |
import collections
|
| 93 |
print("operation label counts:", dict(collections.Counter(i["gold_op"] for i in items if i["qid"] == "operation")))
|
code/finetune/common_ft.py
CHANGED
|
@@ -69,7 +69,7 @@ def gold_for(case, targets, controls):
|
|
| 69 |
op = case["gold_op"]
|
| 70 |
if op == "DONE":
|
| 71 |
return "DONE", None
|
| 72 |
-
if op in ("SCROLL_DOWN", "SCROLL_UP", "WAIT"):
|
| 73 |
return (op, None) if op in {k.upper() for k in controls} else (None, None)
|
| 74 |
for index, a in targets.get(op, {}).items():
|
| 75 |
if a["id"] == case["gold_id"]:
|
|
|
|
| 69 |
op = case["gold_op"]
|
| 70 |
if op == "DONE":
|
| 71 |
return "DONE", None
|
| 72 |
+
if op in ("SCROLL_DOWN", "SCROLL_UP", "WAIT", "PRESS_ENTER"): # page-level controls: operation question only
|
| 73 |
return (op, None) if op in {k.upper() for k in controls} else (None, None)
|
| 74 |
for index, a in targets.get(op, {}).items():
|
| 75 |
if a["id"] == case["gold_id"]:
|
code/finetune/convert_nnetnav.py
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""NNetNav-live (stanfordnlp/nnetnav-live, WebArena-style accessibility-tree trajectories on live sites) -> jev-format cases.
|
| 2 |
+
|
| 3 |
+
python finetune/convert_nnetnav.py finetune/data/nnetnav/train.jsonl finetune/out/nnetnav_cases.jsonl [max_cases=20000] [seed=3]
|
| 4 |
+
|
| 5 |
+
Each record is one step: the user message holds OBSERVATION (accessibility tree), URL, OBJECTIVE, PREVIOUS ACTIONS; the
|
| 6 |
+
assistant message ends with ```action```. Mapping to jev's action space:
|
| 7 |
+
click [id] -> CLICK on the element (clickable link/button/checkbox/... nodes)
|
| 8 |
+
type [id] [text] [enter] -> TYPE_TEXT on the element (textbox/searchbox/combobox); the implicit Enter is dropped
|
| 9 |
+
scroll [down|up] -> SCROLL_DOWN / SCROLL_UP (page-level controls)
|
| 10 |
+
stop [...] -> DONE
|
| 11 |
+
hover / press / goto / go_back / new_tab / tab_focus / close_tab -> skipped
|
| 12 |
+
The element table is the tree's interactive nodes in document order (labels = accessible name, role kept), the page text
|
| 13 |
+
is the tree's static text. Cases carry `website` so build_items.py can hold out whole sites, and `source: "nnetnav"`.
|
| 14 |
+
Sampling: the action mix is capped so CLICK does not swamp TYPE_TEXT / SCROLL / DONE (see CAP).
|
| 15 |
+
"""
|
| 16 |
+
import json, random, re, sys
|
| 17 |
+
from collections import Counter
|
| 18 |
+
from urllib.parse import urlparse
|
| 19 |
+
|
| 20 |
+
NODE = re.compile(r"^\s*\[(\d+)\] (\w+) '((?:[^'\\]|\\.)*)'(.*)$")
|
| 21 |
+
STATIC = re.compile(r"^\s*StaticText '((?:[^'\\]|\\.)*)'")
|
| 22 |
+
ACTION = re.compile(r"```\s*(\w+)(?:\s+\[([^\]]*)\])?(?:\s+\[((?:[^\]\\]|\\.)*)\])?(?:\s+\[([^\]]*)\])?\s*```")
|
| 23 |
+
PREV = re.compile(r"^(\d+): (.*)$")
|
| 24 |
+
CLICK_ROLES = {"link", "button", "checkbox", "radio", "menuitem", "tab", "option", "switch", "menuitemcheckbox", "menuitemradio", "treeitem", "combobox", "listbox", "img", "image", "gridcell", "cell", "row", "listitem", "heading", "generic", "LabelText", "DisclosureTriangle", "Details", "Summary", "slider", "spinbutton"}
|
| 25 |
+
FILL_ROLES = {"textbox", "searchbox", "textarea"}
|
| 26 |
+
ROLE_OUT = {"img": "image", "image": "image", "LabelText": "label", "DisclosureTriangle": "button", "Summary": "button", "Details": "group", "combobox": "combobox"}
|
| 27 |
+
CAP = {"CLICK": 0.55, "TYPE_TEXT": 0.2, "SCROLL_DOWN": 0.1, "SCROLL_UP": 0.03, "DONE": 0.12}
|
| 28 |
+
TEXT_CHARS = 6000
|
| 29 |
+
MAX_ELEMENTS = 45
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def parse_obs(user):
|
| 33 |
+
"""-> (tree_lines, url, objective, previous action strings)"""
|
| 34 |
+
m = re.search(r"OBSERVATION:\n(.*?)\nURL: (\S+)\nOBJECTIVE: (.*?)\nPREVIOUS ACTIONS:\n(.*)$", user, re.S)
|
| 35 |
+
if not m:
|
| 36 |
+
return None
|
| 37 |
+
tree, url, objective, prev = m.groups()
|
| 38 |
+
prevs = [PREV.match(l).group(2).strip() for l in prev.strip().splitlines() if PREV.match(l)]
|
| 39 |
+
prevs = [p for p in prevs if p and p != "None"]
|
| 40 |
+
return tree.splitlines(), url, objective.strip(), prevs
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
def elements_of(tree_lines):
|
| 44 |
+
"""Interactive nodes -> jev actions; static text -> page text. Returns (actions, text, title, id->action)."""
|
| 45 |
+
actions, texts, by_id, title = [], [], {}, ""
|
| 46 |
+
for line in tree_lines:
|
| 47 |
+
if line.startswith("RootWebArea"):
|
| 48 |
+
m = re.match(r"RootWebArea '((?:[^'\\]|\\.)*)'", line)
|
| 49 |
+
title = m.group(1) if m else ""
|
| 50 |
+
continue
|
| 51 |
+
sm = STATIC.match(line)
|
| 52 |
+
if sm:
|
| 53 |
+
texts.append(sm.group(1)); continue
|
| 54 |
+
nm = NODE.match(line)
|
| 55 |
+
if not nm:
|
| 56 |
+
continue
|
| 57 |
+
nid, role, name, rest = nm.groups()
|
| 58 |
+
name = name.replace("\\'", "'").strip()
|
| 59 |
+
clickable = "clickable" in rest
|
| 60 |
+
if role in FILL_ROLES or (role == "combobox" and "hasPopup" not in rest and "autocomplete" in rest):
|
| 61 |
+
val = re.search(r"value='((?:[^'\\]|\\.)*)'", rest)
|
| 62 |
+
a = {"id": f"e{len(actions)+1}", "node": int(nid), "kind": "fill", "label": name or role, "role": "textbox" if role == "textarea" else role,
|
| 63 |
+
"value": val.group(1) if val else ""}
|
| 64 |
+
actions.append(a); by_id[nid] = a
|
| 65 |
+
texts.append(name)
|
| 66 |
+
continue
|
| 67 |
+
if role in CLICK_ROLES and (clickable or role in ("link", "button", "checkbox", "radio", "tab", "menuitem", "option")):
|
| 68 |
+
if not name and role in ("generic", "listitem", "row", "cell", "gridcell", "heading"):
|
| 69 |
+
continue
|
| 70 |
+
a = {"id": f"e{len(actions)+1}", "node": int(nid), "kind": "click", "label": name or role, "role": ROLE_OUT.get(role, role)}
|
| 71 |
+
for attr in ("checked", "expanded", "selected"):
|
| 72 |
+
mm = re.search(attr + r"=(\w+)", rest)
|
| 73 |
+
if mm:
|
| 74 |
+
a[attr] = mm.group(1) == "True"
|
| 75 |
+
actions.append(a); by_id[nid] = a
|
| 76 |
+
texts.append(name)
|
| 77 |
+
continue
|
| 78 |
+
if name and role in ("heading", "paragraph", "cell", "gridcell", "LabelText", "caption", "time", "code", "emphasis", "strong"):
|
| 79 |
+
texts.append(name)
|
| 80 |
+
return actions, "\n".join(t for t in texts if t)[:TEXT_CHARS], title, by_id
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
def parse_action(assistant):
|
| 84 |
+
m = ACTION.findall(assistant)
|
| 85 |
+
if not m:
|
| 86 |
+
return None
|
| 87 |
+
verb, a1, a2, a3 = m[-1]
|
| 88 |
+
return verb.lower(), a1, a2.replace("\\]", "]") if a2 else a2, a3
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
def history_of(prevs, tree_by_id_stack):
|
| 92 |
+
"""jev history from the textual previous actions. Labels come from 'where [id] is ...' suffixes when present."""
|
| 93 |
+
hist = []
|
| 94 |
+
for p in prevs[-10:]:
|
| 95 |
+
pa = ACTION.findall("```" + p + "```")
|
| 96 |
+
if not pa:
|
| 97 |
+
continue
|
| 98 |
+
verb, a1, a2, _ = pa[0]
|
| 99 |
+
verb = verb.lower()
|
| 100 |
+
where = re.search(r"where \[\d+\] is (\w+) '((?:[^'\\]|\\.)*)'", p)
|
| 101 |
+
label = where.group(2) if where else (f"[{a1}]" if a1 else "")
|
| 102 |
+
if verb == "click":
|
| 103 |
+
hist.append({"action": label, "kind": "click", "text": None, "page_changed": None})
|
| 104 |
+
elif verb == "type":
|
| 105 |
+
hist.append({"action": label, "kind": "fill", "text": a2, "page_changed": None})
|
| 106 |
+
elif verb == "scroll":
|
| 107 |
+
hist.append({"action": "Scroll down" if "down" in a1 else "Scroll up", "kind": "scroll", "text": None, "page_changed": False})
|
| 108 |
+
elif verb == "hover":
|
| 109 |
+
hist.append({"action": label, "kind": "click", "text": None, "page_changed": None})
|
| 110 |
+
else:
|
| 111 |
+
hist.append({"action": p[:60], "kind": verb, "text": None, "page_changed": None})
|
| 112 |
+
return hist
|
| 113 |
+
|
| 114 |
+
|
| 115 |
+
def main():
|
| 116 |
+
src, dst = sys.argv[1], sys.argv[2]
|
| 117 |
+
max_cases = int(sys.argv[3]) if len(sys.argv) > 3 else 20000
|
| 118 |
+
rng = random.Random(int(sys.argv[4]) if len(sys.argv) > 4 else 3)
|
| 119 |
+
counts, kept, skipped = Counter(), [], Counter()
|
| 120 |
+
with open(src) as f:
|
| 121 |
+
for line in f:
|
| 122 |
+
try:
|
| 123 |
+
d = json.loads(line)
|
| 124 |
+
except Exception:
|
| 125 |
+
skipped["json"] += 1; continue
|
| 126 |
+
msgs = d.get("messages") or []
|
| 127 |
+
user = next((m["content"] for m in msgs if m["role"] == "user"), None)
|
| 128 |
+
asst = next((m["content"] for m in reversed(msgs) if m["role"] == "assistant"), None) or d.get("output", "")
|
| 129 |
+
if not user or not asst:
|
| 130 |
+
skipped["msgs"] += 1; continue
|
| 131 |
+
obs = parse_obs(user)
|
| 132 |
+
act = parse_action(asst)
|
| 133 |
+
if not obs or not act:
|
| 134 |
+
skipped["parse"] += 1; continue
|
| 135 |
+
tree, url, objective, prevs = obs
|
| 136 |
+
verb, a1, a2, a3 = act
|
| 137 |
+
actions, text, title, by_id = elements_of(tree)
|
| 138 |
+
if len(actions) < 2:
|
| 139 |
+
skipped["few_elements"] += 1; continue
|
| 140 |
+
# keep the element table within laya's option budget (head_max_len 768 ~ 45 options, like the Mind2Web
|
| 141 |
+
# conversion): the gold element plus a random sample of the others, document order preserved
|
| 142 |
+
if len(actions) > MAX_ELEMENTS:
|
| 143 |
+
gold_a = by_id.get(a1) if verb in ("click", "type") else None
|
| 144 |
+
pool = [a for a in actions if a is not gold_a]
|
| 145 |
+
keep = set(id(a) for a in rng.sample(pool, MAX_ELEMENTS - (1 if gold_a else 0)))
|
| 146 |
+
actions = [a for a in actions if id(a) in keep or a is gold_a]
|
| 147 |
+
for j, a in enumerate(actions):
|
| 148 |
+
a["id"] = f"e{j+1}"
|
| 149 |
+
# page-level controls, as jev would offer them (scroll offered unless the tree is tiny)
|
| 150 |
+
if len(actions) > 8:
|
| 151 |
+
actions.append({"id": "scroll_down", "kind": "scroll", "label": "Scroll down", "delta": 560})
|
| 152 |
+
if any(p.startswith("scroll [down") for p in prevs):
|
| 153 |
+
actions.append({"id": "scroll_up", "kind": "scroll", "label": "Scroll up", "delta": -560})
|
| 154 |
+
actions.append({"id": "wait", "kind": "wait", "label": "Wait for the page to update"})
|
| 155 |
+
if verb == "click" and a1 in by_id and by_id[a1]["kind"] == "click":
|
| 156 |
+
gop, gid, kind, label = "CLICK", by_id[a1]["id"], "click", by_id[a1]["label"]
|
| 157 |
+
elif verb == "type" and a1 in by_id and by_id[a1]["kind"] == "fill":
|
| 158 |
+
gop, gid, kind, label = "TYPE_TEXT", by_id[a1]["id"], "fill", by_id[a1]["label"]
|
| 159 |
+
elif verb == "scroll" and "down" in (a1 or "") and any(a["id"] == "scroll_down" for a in actions):
|
| 160 |
+
gop, gid, kind, label = "SCROLL_DOWN", "scroll_down", "scroll", "Scroll down"
|
| 161 |
+
elif verb == "scroll" and "up" in (a1 or "") and any(a["id"] == "scroll_up" for a in actions):
|
| 162 |
+
gop, gid, kind, label = "SCROLL_UP", "scroll_up", "scroll", "Scroll up"
|
| 163 |
+
elif verb == "stop":
|
| 164 |
+
gop, gid, kind, label = "DONE", "DONE", "done", ""
|
| 165 |
+
else:
|
| 166 |
+
skipped["verb:" + verb] += 1; continue
|
| 167 |
+
site = urlparse(url).netloc
|
| 168 |
+
kept.append({"page": -1, "url": url, "title": title, "goal": objective, "gold_op": gop, "gold_id": gid, "kind": kind, "label": label,
|
| 169 |
+
"history": history_of(prevs, None), "source": "nnetnav", "website": site, "skill": "nnetnav",
|
| 170 |
+
"page_obj": {"url": url, "title": title, "text": text, "actions": actions}})
|
| 171 |
+
counts[gop] += 1
|
| 172 |
+
print("parsed", len(kept), dict(counts), "skipped", dict(skipped))
|
| 173 |
+
# cap the mix: sample per operation up to CAP share of max_cases
|
| 174 |
+
rng.shuffle(kept)
|
| 175 |
+
out, taken = [], Counter()
|
| 176 |
+
for c in kept:
|
| 177 |
+
if taken[c["gold_op"]] < CAP[c["gold_op"]] * max_cases:
|
| 178 |
+
out.append(c); taken[c["gold_op"]] += 1
|
| 179 |
+
with open(dst, "w") as f:
|
| 180 |
+
for c in out:
|
| 181 |
+
f.write(json.dumps(c, ensure_ascii=False) + "\n")
|
| 182 |
+
print("wrote", len(out), dict(taken), "->", dst)
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
if __name__ == "__main__":
|
| 186 |
+
main()
|
code/finetune/infra.sh
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# infra.sh start_chrome | start_sglang [model] | start_s1 <ckpt_dir> [maxopt] | stop_s1 | stop_all | status
|
| 3 |
+
S=${INFRA_DIR:-/tmp/laya-infra}; mkdir -p $S
|
| 4 |
+
L=~/projects/S/laya
|
| 5 |
+
case "$1" in
|
| 6 |
+
start_chrome)
|
| 7 |
+
curl -s -m 3 http://127.0.0.1:9222/json/version >/dev/null && { echo chrome up; exit 0; }
|
| 8 |
+
nohup chromium --headless=new --remote-debugging-port=9222 --user-data-dir=$S/chrome-profile --window-size=1120,780 --no-first-run --lang=en-US --accept-lang=en-US,en about:blank >$S/chrome.log 2>&1 &
|
| 9 |
+
sleep 3; curl -s -m 3 http://127.0.0.1:9222/json/version | head -c 120; echo ;;
|
| 10 |
+
start_sglang)
|
| 11 |
+
M=${2:-Qwen/Qwen3-8B-AWQ}
|
| 12 |
+
curl -s -m 3 http://127.0.0.1:30000/health >/dev/null && { echo sglang up; exit 0; }
|
| 13 |
+
cd $L; HF_HUB_OFFLINE=1 nohup ~/sglang-venv/bin/python -m sglang.launch_server --model-path $M --port 30000 --mem-fraction-static ${SGL_MEM:-0.35} --context-length 8192 --reasoning-parser qwen3 >$S/sglang.log 2>&1 &
|
| 14 |
+
echo "sglang starting (pid $!)";;
|
| 15 |
+
start_s1)
|
| 16 |
+
bash $0 stop_s1
|
| 17 |
+
cd $L; source env.sh; nohup env ESCALATE_TAU=${ESCALATE_TAU:-0} .venv/bin/python apps/systemone_server.py 8791 "$2" ${3:-999} >$S/s1.log 2>&1 &
|
| 18 |
+
for i in $(seq 1 90); do curl -s -m 2 http://127.0.0.1:8791/ >/dev/null 2>&1 && { echo "s1 up ($2)"; exit 0; }; sleep 2; done; echo "s1 FAILED"; tail -5 $S/s1.log;;
|
| 19 |
+
stop_chrome) pkill -f 'remote-debugging-port=922[2]' 2>/dev/null; sleep 2;;
|
| 20 |
+
stop_s1) pkill -f 'apps/systemone_serve[r]' 2>/dev/null; sleep 1;;
|
| 21 |
+
stop_all) bash $0 stop_s1; pkill -f 'sglang.launch_serve[r]' 2>/dev/null; pkill -f 'remote-debugging-port=9222' 2>/dev/null; echo stopped;;
|
| 22 |
+
status) for p in 9222 8791 30000; do (ss -ltn | grep -q ":$p ") && echo "$p up" || echo "$p down"; done; nvidia-smi --query-gpu=memory.used --format=csv,noheader;;
|
| 23 |
+
esac
|
code/finetune/rollouts2.py
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Scripted multi-step trajectories in the real browser, round 2: the skills the 16-task suite still fails on.
|
| 2 |
+
|
| 3 |
+
search : TYPE_TEXT query -> PRESS_ENTER (or CLICK a visible submit button) -> DONE on the results page
|
| 4 |
+
open : "Open the article/page about X": TYPE_TEXT -> PRESS_ENTER -> (CLICK the matching result if a results
|
| 5 |
+
list appears) -> DONE
|
| 6 |
+
next-page : "Go to page 2 / next page": SCROLL_DOWN until a next/2/older link is visible -> CLICK -> DONE
|
| 7 |
+
scroll : goal names an element only visible after scrolling -> SCROLL_DOWN -> CLICK -> DONE
|
| 8 |
+
select : choose an option of a <select> -> SELECT -> DONE
|
| 9 |
+
|
| 10 |
+
python finetune/rollouts2.py sites.txt out/rollout2_cases.jsonl [max_sites=400] [seed=7]
|
| 11 |
+
|
| 12 |
+
sites.txt: one URL per line (a "#" starts a comment). Suite URLs are skipped. Goals are templated (varied phrasing),
|
| 13 |
+
no LLM needed. Every case stores the observed page (page_obj) so build_items.py can rebuild the exact request.
|
| 14 |
+
Runs against the headless Chromium on BU_CDP_URL (default 127.0.0.1:9222) and needs the patched jev-ultrafast
|
| 15 |
+
(press_enter control, observe retry).
|
| 16 |
+
"""
|
| 17 |
+
import json, os, random, re, sys, time
|
| 18 |
+
sys.path.insert(0, "/home/ckl/projects/S/jev-ultrafast")
|
| 19 |
+
os.environ.setdefault("BU_CDP_URL", "http://127.0.0.1:9222")
|
| 20 |
+
from jev_ultrafast.browser import Browser, StalePage
|
| 21 |
+
|
| 22 |
+
SUITE_URLS = {"https://en.wikipedia.org/wiki/Main_Page", "https://news.ycombinator.com/", "https://github.com/tile-ai/tilelang", "https://www.python.org/",
|
| 23 |
+
"https://books.toscrape.com/", "https://the-internet.herokuapp.com/dropdown", "https://the-internet.herokuapp.com/checkboxes",
|
| 24 |
+
"https://quotes.toscrape.com/", "https://duckduckgo.com/", "https://search.marginalia.nu/", "https://arxiv.org/",
|
| 25 |
+
"https://www.google.com/travel/flights?hl=en"}
|
| 26 |
+
SEARCH_T = ["Search for '{q}'.", "Search for '{q}' and show the results.", "Look up '{q}' using the search box and show the results.",
|
| 27 |
+
"Find results for '{q}'.", "Use the site search to find '{q}'.", "Search this site for {q}.", "Run a search for \"{q}\".",
|
| 28 |
+
"Show me search results for {q}.", "Search {site} for '{q}' and show the results list."]
|
| 29 |
+
OPEN_T = ["Open the page about {q}.", "Open the article about {q}.", "Go to the entry for '{q}'.", "Find and open '{q}'.",
|
| 30 |
+
"Open '{q}' on this site.", "Search for {q} and open the matching page."]
|
| 31 |
+
NEXT_T = ["Go to page 2.", "Go to page 2 of the list.", "Show the next page of results.", "Open the next page.", "Go to the next page of the catalogue.",
|
| 32 |
+
"Show page 2.", "Move on to the second page.", "Open the second page of the listing."]
|
| 33 |
+
SCROLL_T = ["Open '{x}'.", "I want to see '{x}', take me there.", "Go to {x}.", "Find and click '{x}' on this page.",
|
| 34 |
+
"Open the '{x}' link further down the page.", "Navigate to '{x}'.", "Click '{x}'."]
|
| 35 |
+
INTENT_T = ["{o}.", "{o}, please.", "I want to {ol}.", "Change it to {o}.", "Show everything with {f} set to {o}.", "Use '{o}'.", "Switch to {o}."]
|
| 36 |
+
SELECT_T = ["Select '{o}' in the '{f}' dropdown.", "Choose {o} for {f}.", "Set '{f}' to '{o}'.", "Pick the option '{o}'.", "In the {f} dropdown, select {o}."]
|
| 37 |
+
QUERIES = ["python tutorial", "flash attention", "climate change", "rust async", "linear algebra", "tilelang", "modernbert", "black holes",
|
| 38 |
+
"sourdough bread", "gpu kernels", "machine learning", "world war ii", "electric cars", "photosynthesis", "quantum computing",
|
| 39 |
+
"jazz history", "docker compose", "typescript generics", "renewable energy", "albert einstein", "marie curie", "solar system",
|
| 40 |
+
"coffee", "yoga", "kubernetes", "chess openings", "vitamin d", "roman empire", "neural networks", "recycling"]
|
| 41 |
+
OPEN_Q = ["Albert Einstein", "Python programming language", "Marie Curie", "Photosynthesis", "Black hole", "Isaac Newton", "Quantum computing",
|
| 42 |
+
"Rust programming language", "Great Wall of China", "Ada Lovelace", "Solar System", "Machine learning", "Docker", "Jazz", "Coffee"]
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
def lab(a): return a["label"].split(" → ")[0].strip()
|
| 46 |
+
def site_of(url): return re.sub(r"^www\.", "", url.split("/")[2])
|
| 47 |
+
def case(page, goal, gold_op, gold_id, kind, label, hist, tag):
|
| 48 |
+
return {"page": -1, "url": page["url"], "title": page["title"], "goal": goal, "gold_op": gold_op, "gold_id": gold_id, "kind": kind, "label": label,
|
| 49 |
+
"history": hist, "source": "rollout", "skill": tag, "page_obj": {k: page[k] for k in ("url", "title", "text", "actions")}}
|
| 50 |
+
def hist_of(a, text=None, changed=True): return {"action": a["label"], "kind": a["kind"], "text": text, "page_changed": changed}
|
| 51 |
+
def find(page, pred): return next((a for a in page["actions"] if pred(a)), None)
|
| 52 |
+
def ctl(page, cid): return find(page, lambda a: a["id"] == cid)
|
| 53 |
+
def observe(b, tries=8):
|
| 54 |
+
for i in range(tries):
|
| 55 |
+
try: return b.observe(screenshot=False)
|
| 56 |
+
except StalePage:
|
| 57 |
+
if i == tries - 1: raise
|
| 58 |
+
time.sleep(0.5)
|
| 59 |
+
def act(b, a, page, text=None, wait=0.5):
|
| 60 |
+
b.act(a, page, text=text); time.sleep(wait); return observe(b)
|
| 61 |
+
def changed(p, q): return p["url"] != q["url"] or p["title"] != q["title"]
|
| 62 |
+
def search_field(page):
|
| 63 |
+
return find(page, lambda a: a["kind"] == "fill" and re.search(r"search|query|find|keyword|suche|rechercher|buscar|cerca|zoek|検索|搜索", a["label"], re.I)) \
|
| 64 |
+
or find(page, lambda a: a["kind"] == "fill" and a.get("role") in ("searchbox",))
|
| 65 |
+
def submit_button(page, q):
|
| 66 |
+
return find(page, lambda a: a["kind"] == "click" and a.get("role") == "button" and re.search(r"^(search|go|submit|find|suchen|rechercher|buscar)\b", lab(a), re.I))
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
def do_search(b, page, rng, out, site):
|
| 70 |
+
field = search_field(page)
|
| 71 |
+
if not field: return 0
|
| 72 |
+
q = rng.choice(QUERIES); goal = rng.choice(SEARCH_T).format(q=q, site=site)
|
| 73 |
+
out.write(json.dumps(case(page, goal, "TYPE_TEXT", field["id"], "fill", field["label"], [], "search"), ensure_ascii=False) + "\n"); n = 1
|
| 74 |
+
p2 = act(b, field, page, text=q)
|
| 75 |
+
pe, sub = ctl(p2, "press_enter"), submit_button(p2, q)
|
| 76 |
+
if not pe and not sub: return n
|
| 77 |
+
# after typing the goal is not done: submit. Enter is the default; a visible submit button is used 30% of the time
|
| 78 |
+
use_click = bool(sub) and (not pe or rng.random() < 0.3)
|
| 79 |
+
if use_click:
|
| 80 |
+
out.write(json.dumps(case(p2, goal, "CLICK", sub["id"], "click", sub["label"], [hist_of(field, q, False)], "search"), ensure_ascii=False) + "\n")
|
| 81 |
+
step = hist_of(sub); p3 = act(b, sub, p2, wait=1.0)
|
| 82 |
+
else:
|
| 83 |
+
out.write(json.dumps(case(p2, goal, "PRESS_ENTER", "press_enter", "key", pe["label"], [hist_of(field, q, False)], "search"), ensure_ascii=False) + "\n")
|
| 84 |
+
step = hist_of(pe); p3 = act(b, pe, p2, wait=1.0)
|
| 85 |
+
n += 1
|
| 86 |
+
if changed(p3, p2) or q.split()[0].lower() in p3["text"].lower()[:3000]:
|
| 87 |
+
out.write(json.dumps(case(p3, goal, "DONE", "DONE", "done", "", [hist_of(field, q, False), step], "search"), ensure_ascii=False) + "\n"); n += 1
|
| 88 |
+
return n
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
def do_open(b, page, rng, out, site):
|
| 92 |
+
field = search_field(page)
|
| 93 |
+
if not field: return 0
|
| 94 |
+
q = rng.choice(OPEN_Q); goal = rng.choice(OPEN_T).format(q=q)
|
| 95 |
+
out.write(json.dumps(case(page, goal, "TYPE_TEXT", field["id"], "fill", field["label"], [], "open"), ensure_ascii=False) + "\n"); n = 1
|
| 96 |
+
p2 = act(b, field, page, text=q)
|
| 97 |
+
pe = ctl(p2, "press_enter")
|
| 98 |
+
if not pe: return n
|
| 99 |
+
out.write(json.dumps(case(p2, goal, "PRESS_ENTER", "press_enter", "key", pe["label"], [hist_of(field, q, False)], "open"), ensure_ascii=False) + "\n"); n += 1
|
| 100 |
+
p3 = act(b, pe, p2, wait=1.2)
|
| 101 |
+
if not changed(p3, p2): return n
|
| 102 |
+
hist = [hist_of(field, q, False), hist_of(pe)]
|
| 103 |
+
words = [w.lower() for w in q.split() if len(w) > 2]
|
| 104 |
+
tl = p3["title"].lower()
|
| 105 |
+
title_hit = all(w in tl for w in words[:2]) and not re.search(r"search|results|suche|recherche", tl)
|
| 106 |
+
if title_hit: # landed on the page itself (Wikipedia-style direct hit)
|
| 107 |
+
out.write(json.dumps(case(p3, goal, "DONE", "DONE", "done", "", hist, "open"), ensure_ascii=False) + "\n"); return n + 1
|
| 108 |
+
# a results list: click the result whose label matches the query best
|
| 109 |
+
res = [a for a in p3["actions"] if a["kind"] == "click" and a.get("role") == "link" and sum(w in a["label"].lower() for w in words) >= max(1, len(words) - 1)]
|
| 110 |
+
if not res: return n
|
| 111 |
+
tgt = res[0]
|
| 112 |
+
out.write(json.dumps(case(p3, goal, "CLICK", tgt["id"], "click", tgt["label"], hist, "open"), ensure_ascii=False) + "\n"); n += 1
|
| 113 |
+
try:
|
| 114 |
+
p4 = act(b, tgt, p3, wait=1.2)
|
| 115 |
+
if changed(p4, p3):
|
| 116 |
+
out.write(json.dumps(case(p4, goal, "DONE", "DONE", "done", "", hist + [hist_of(tgt)], "open"), ensure_ascii=False) + "\n"); n += 1
|
| 117 |
+
except Exception: pass
|
| 118 |
+
return n
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
NEXT_RE = re.compile(r"^(next\b.*|[»›>→]+\s*next.*|2|page 2|go to page 2|older( posts| entries| \d+)?|older\s*[»›>→]|more|more results|show more|load more|see more|[›»]|next »|next page.*|nächste.*|suivant.*|siguiente.*|次へ|下一页)$", re.I)
|
| 122 |
+
def next_link(page):
|
| 123 |
+
return find(page, lambda a: a["kind"] == "click" and a.get("role") in ("link", "button") and NEXT_RE.match(lab(a)) is not None)
|
| 124 |
+
|
| 125 |
+
def do_next(b, page, rng, out, site):
|
| 126 |
+
if not page.get("scroll") or page["scroll"]["height"] < 1000: return 0
|
| 127 |
+
goal = rng.choice(NEXT_T); hist = []; p = page; n = 0; buf = []
|
| 128 |
+
for _ in range(int(os.environ.get("MAX_SCROLLS", "10"))):
|
| 129 |
+
nl = next_link(p)
|
| 130 |
+
if nl: break
|
| 131 |
+
sd = ctl(p, "scroll_down")
|
| 132 |
+
if not sd: return 0
|
| 133 |
+
buf.append(json.dumps(case(p, goal, "SCROLL_DOWN", "scroll_down", "scroll", "Scroll down", list(hist), "next"), ensure_ascii=False) + "\n")
|
| 134 |
+
p = act(b, sd, p, wait=0.4); hist.append(hist_of(sd, changed=False))
|
| 135 |
+
else:
|
| 136 |
+
return 0 # no next-page link on this page: the scroll steps would teach scrolling for nothing
|
| 137 |
+
out.writelines(buf); n = len(buf) # (a visible next link without scrolling still teaches the 'next' semantics)
|
| 138 |
+
out.write(json.dumps(case(p, goal, "CLICK", nl["id"], "click", nl["label"], list(hist), "next"), ensure_ascii=False) + "\n"); n += 1
|
| 139 |
+
try:
|
| 140 |
+
p2 = act(b, nl, p, wait=1.0)
|
| 141 |
+
if changed(p2, p):
|
| 142 |
+
out.write(json.dumps(case(p2, goal, "DONE", "DONE", "done", "", hist + [hist_of(nl)], "next"), ensure_ascii=False) + "\n"); n += 1
|
| 143 |
+
except Exception: pass
|
| 144 |
+
return n
|
| 145 |
+
|
| 146 |
+
|
| 147 |
+
def do_scroll(b, page, rng, out, site):
|
| 148 |
+
if not page.get("scroll") or page["scroll"]["height"] < 1300: return 0
|
| 149 |
+
before = {a["label"] for a in page["actions"] if a["kind"] == "click"}
|
| 150 |
+
sd = ctl(page, "scroll_down")
|
| 151 |
+
if not sd: return 0
|
| 152 |
+
p2 = act(b, sd, page, wait=0.4)
|
| 153 |
+
new = [a for a in p2["actions"] if a["kind"] == "click" and a["label"] not in before and 3 <= len(lab(a)) <= 60 and a.get("role") in ("link", "button")]
|
| 154 |
+
if not new: return 0
|
| 155 |
+
n = 0
|
| 156 |
+
for tgt in rng.sample(new, min(2, len(new))):
|
| 157 |
+
goal = rng.choice(SCROLL_T).format(x=lab(tgt))
|
| 158 |
+
out.write(json.dumps(case(page, goal, "SCROLL_DOWN", "scroll_down", "scroll", "Scroll down", [], "scroll"), ensure_ascii=False) + "\n")
|
| 159 |
+
out.write(json.dumps(case(p2, goal, "CLICK", tgt["id"], "click", tgt["label"], [hist_of(sd, changed=False)], "scroll"), ensure_ascii=False) + "\n"); n += 2
|
| 160 |
+
tgt = new[0]
|
| 161 |
+
try:
|
| 162 |
+
p3 = act(b, tgt, p2, wait=0.8)
|
| 163 |
+
if changed(p3, p2):
|
| 164 |
+
goal = rng.choice(SCROLL_T).format(x=lab(tgt))
|
| 165 |
+
out.write(json.dumps(case(p3, goal, "DONE", "DONE", "done", "", [hist_of(sd, changed=False), hist_of(tgt)], "scroll"), ensure_ascii=False) + "\n"); n += 1
|
| 166 |
+
except Exception: pass
|
| 167 |
+
return n
|
| 168 |
+
|
| 169 |
+
|
| 170 |
+
def do_select(b, page, rng, out, site):
|
| 171 |
+
sels = [a for a in page["actions"] if a["kind"] == "select" and a.get("value") and a["value"] != a.get("current_value")]
|
| 172 |
+
if not sels: return 0
|
| 173 |
+
by_field = {}
|
| 174 |
+
for a in sels: by_field.setdefault(a["node"], []).append(a)
|
| 175 |
+
node, opts = rng.choice(list(by_field.items()))
|
| 176 |
+
opt = rng.choice(opts); f = lab(opt); o = opt["label"].split(" → ")[-1].strip()
|
| 177 |
+
# half the goals state the intent in the option's own words ("Sort by price: low to high."), the way users phrase it
|
| 178 |
+
if rng.random() < 0.5 and 3 <= len(o) <= 60:
|
| 179 |
+
goal = rng.choice(INTENT_T).format(o=o, ol=o[0].lower() + o[1:], f=f)
|
| 180 |
+
else:
|
| 181 |
+
goal = rng.choice(SELECT_T).format(o=o, f=f)
|
| 182 |
+
out.write(json.dumps(case(page, goal, "SELECT", opt["id"], "select", opt["label"], [], "select"), ensure_ascii=False) + "\n")
|
| 183 |
+
try:
|
| 184 |
+
p2 = act(b, opt, page, wait=0.3)
|
| 185 |
+
out.write(json.dumps(case(p2, goal, "DONE", "DONE", "done", "", [hist_of(opt, changed=False)], "select"), ensure_ascii=False) + "\n"); return 2
|
| 186 |
+
except Exception: return 1
|
| 187 |
+
|
| 188 |
+
|
| 189 |
+
|
| 190 |
+
CITIES = ["Zurich", "London", "Paris", "Berlin", "Tokyo", "New York", "Madrid", "Rome", "Amsterdam", "Vienna", "Munich", "Singapore",
|
| 191 |
+
"Sydney", "Toronto", "Chicago", "Barcelona", "Lisbon", "Prague", "Dublin", "Seoul", "Bangkok", "Istanbul", "Oslo", "Helsinki"]
|
| 192 |
+
AUTO_T = ["Set the destination to {x}.", "Choose {x} as the departure city.", "Set where from to {x}.", "Set where to to {x}.",
|
| 193 |
+
"Pick {x} from the suggestions.", "Enter {x} and select it from the list.", "Search for {x} and choose the matching suggestion.",
|
| 194 |
+
"Select {x} as the location."]
|
| 195 |
+
|
| 196 |
+
def is_combo(a):
|
| 197 |
+
return a["kind"] == "fill" and (a.get("role") in ("combobox", "searchbox") or re.search(r"from|to\b|where|destination|origin|city|location|airport|search", a["label"], re.I))
|
| 198 |
+
|
| 199 |
+
def do_autocomplete(b, page, rng, out, site):
|
| 200 |
+
"""TYPE_TEXT a partial value into a combobox -> CLICK the suggestion that appeared -> DONE."""
|
| 201 |
+
field = find(page, is_combo)
|
| 202 |
+
if not field: return 0
|
| 203 |
+
travel = re.search(r"from|to\b|where|destination|origin|city|location|airport|hotel|stay", field["label"], re.I)
|
| 204 |
+
full = rng.choice(CITIES) if travel else rng.choice(QUERIES)
|
| 205 |
+
typed = full if rng.random() < 0.6 else full[:max(3, len(full) // 2)]
|
| 206 |
+
goal = (rng.choice(AUTO_T) if travel else rng.choice(["Search for {x} and choose the matching suggestion.",
|
| 207 |
+
"Type {x} and pick it from the suggestions.", "Find {x} using the search suggestions."])).format(x=full)
|
| 208 |
+
before = {a["label"] for a in page["actions"] if a["kind"] == "click"}
|
| 209 |
+
p2 = act(b, field, page, text=typed, wait=1.2)
|
| 210 |
+
key = full.split()[0].lower()[:5]
|
| 211 |
+
sugg = [a for a in p2["actions"] if a["kind"] == "click" and a["label"] not in before and key in a["label"].lower()
|
| 212 |
+
and a.get("role") in ("option", "listitem", "link", "button", "menuitem", "gridcell", "treeitem")]
|
| 213 |
+
if not sugg: return 0
|
| 214 |
+
tgt = sugg[0]
|
| 215 |
+
out.write(json.dumps(case(page, goal, "TYPE_TEXT", field["id"], "fill", field["label"], [], "autocomplete"), ensure_ascii=False) + "\n")
|
| 216 |
+
out.write(json.dumps(case(p2, goal, "CLICK", tgt["id"], "click", tgt["label"], [hist_of(field, typed, True)], "autocomplete"), ensure_ascii=False) + "\n")
|
| 217 |
+
n = 2
|
| 218 |
+
try:
|
| 219 |
+
p3 = act(b, tgt, p2, wait=1.0)
|
| 220 |
+
out.write(json.dumps(case(p3, goal, "DONE", "DONE", "done", "", [hist_of(field, typed, True), hist_of(tgt)], "autocomplete"), ensure_ascii=False) + "\n"); n += 1
|
| 221 |
+
except Exception: pass
|
| 222 |
+
return n
|
| 223 |
+
|
| 224 |
+
SKILLS = (("autocomplete", do_autocomplete), ("search", do_search), ("open", do_open), ("next", do_next), ("scroll", do_scroll), ("select", do_select))
|
| 225 |
+
if os.environ.get("SKILLS"): # SKILLS=next,search : run only these skills
|
| 226 |
+
SKILLS = tuple(x for x in SKILLS if x[0] in os.environ["SKILLS"].split(","))
|
| 227 |
+
|
| 228 |
+
def main():
|
| 229 |
+
sites = [l.strip() for l in open(sys.argv[1]) if l.strip() and not l.startswith("#")]
|
| 230 |
+
out_f = sys.argv[2]; mx = int(sys.argv[3]) if len(sys.argv) > 3 else 400; seed = int(sys.argv[4]) if len(sys.argv) > 4 else 7
|
| 231 |
+
rng = random.Random(seed); rng.shuffle(sites)
|
| 232 |
+
if len(sys.argv) > 5: # "i/n": this worker takes every n-th site starting at i (parallel workers)
|
| 233 |
+
i, n = map(int, sys.argv[5].split("/")); sites = sites[i::n]
|
| 234 |
+
counts = {k: 0 for k, _ in SKILLS}; fails = {}; done = 0; t0 = time.time()
|
| 235 |
+
with open(out_f, "w") as out:
|
| 236 |
+
for url in sites:
|
| 237 |
+
if done >= mx: break
|
| 238 |
+
if url in SUITE_URLS: continue
|
| 239 |
+
site = site_of(url)
|
| 240 |
+
for skill, fn in SKILLS:
|
| 241 |
+
try:
|
| 242 |
+
b = Browser(url)
|
| 243 |
+
try:
|
| 244 |
+
page = observe(b); n = fn(b, page, rng, out, site)
|
| 245 |
+
finally:
|
| 246 |
+
b.close()
|
| 247 |
+
counts[skill] += n
|
| 248 |
+
except Exception as e:
|
| 249 |
+
fails[type(e).__name__] = fails.get(type(e).__name__, 0) + 1
|
| 250 |
+
done += 1
|
| 251 |
+
if done % 20 == 0: print(f" {done} sites {time.time()-t0:5.0f}s {counts} fails={fails}", flush=True)
|
| 252 |
+
print("wrote", counts, "fails", fails, "->", out_f)
|
| 253 |
+
|
| 254 |
+
if __name__ == "__main__":
|
| 255 |
+
main()
|
code/finetune/run_suite_v12s.sh
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# After v12s training: 16-task suite x3 for v12s and v10s under the patched jev harness (PRESS_ENTER, observe retry, stall guard).
|
| 3 |
+
cd /home/ckl/projects/S/laya; O=finetune/out; I="bash finetune/infra.sh"
|
| 4 |
+
until grep -q "V12S_DONE" $O/v12s.log; do sleep 60; done
|
| 5 |
+
pkill -f 'rollouts2[.]py' 2>/dev/null
|
| 6 |
+
$I start_chrome >/dev/null; SGL_MEM=0.5 $I start_sglang Qwen/Qwen3-8B-AWQ >/dev/null
|
| 7 |
+
until curl -s -m 3 http://127.0.0.1:30000/health >/dev/null; do sleep 5; done
|
| 8 |
+
for ck in laya-browser-v12s laya-browser-v10s; do
|
| 9 |
+
echo "== suite $ck x3 (patched harness)"
|
| 10 |
+
$I start_s1 $PWD/$O/$ck 999 >/dev/null
|
| 11 |
+
(cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suite_h2_$ck.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task")
|
| 12 |
+
done
|
| 13 |
+
echo SUITE_V12S_DONE
|
code/finetune/run_v12s.sh
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# v12s: v10s recipe (mmBERT-base, format v3, head 768) + rollouts2 (search/open/next-page/scroll/select with PRESS_ENTER) + NNetNav-live.
|
| 3 |
+
# usage: bash finetune/run_v12s.sh [epochs=4] (stop sglang first: training needs the GPU)
|
| 4 |
+
cd /home/ckl/projects/S/laya && source env.sh
|
| 5 |
+
export LAYA_BASE=$(ls -d ~/.cache/huggingface/hub/models--convaiinnovations--laya/snapshots/*/multilingual | head -1)
|
| 6 |
+
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True CKPT=${CKPT:-0} COMPILE=0 LAYA_FMT=v3 LAYA_HEAD=768
|
| 7 |
+
P=.venv/bin/python; O=finetune/out; EP=${1:-4}
|
| 8 |
+
cat $O/rollout2_cases.*.jsonl > $O/rollout2_cases.jsonl 2>/dev/null
|
| 9 |
+
echo "== rollout2 cases: $(wc -l < $O/rollout2_cases.jsonl) nnetnav cases: $(wc -l < $O/nnetnav_cases.jsonl 2>/dev/null || echo 0)"
|
| 10 |
+
echo "== build v12s"
|
| 11 |
+
$P finetune/build_items.py $O/pages.jsonl $O/cases.jsonl $O/ $O/done_cases.jsonl $O/step2_cases.jsonl $O/m2w_cases.jsonl $O/dagger_cases.jsonl $O/rollout_cases.jsonl $O/rollout2_cases.jsonl $O/nnetnav_cases.jsonl 2>&1 | grep -v Warn | tail -5
|
| 12 |
+
echo "== train v12s ($EP epochs)"; $P finetune/train.py $O/train_items.pt $O/laya-browser-v12s $EP 2>&1 | grep --line-buffered -E "=== epoch|saved|Error|Traceback|loss"
|
| 13 |
+
echo "== calibrate"; $P finetune/calibrate.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/laya-browser-v12s 2>&1 | grep -vE "TileLang|Warn|warn|Fetch"
|
| 14 |
+
echo "== eval v12s"; $P finetune/eval.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/laya-browser-v12s 2>&1 | grep -vE "TileLang|Warn|warn|Fetch"
|
| 15 |
+
echo V12S_DONE
|
code/finetune/run_v13s.sh
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# v13s: continue from v12s for 1-2 epochs on v12s data + next-page/select rollouts, with target lists sampled to the
|
| 3 |
+
# server's chunk width (MAX_TARGETS=40) and final-round width (2-6, FINAL_P=0.2). Then suites A and B.
|
| 4 |
+
cd /home/ckl/projects/S/laya && source env.sh
|
| 5 |
+
export LAYA_BASE=$PWD/finetune/out/laya-browser-v12s
|
| 6 |
+
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True CKPT=${CKPT:-1} COMPILE=0 LAYA_FMT=v3 LAYA_HEAD=768 MAX_TARGETS=40 FINAL_P=0.2
|
| 7 |
+
P=.venv/bin/python; O=finetune/out; EP=${1:-1}; I="bash finetune/infra.sh"
|
| 8 |
+
pkill -f 'systemone_serve[r]' ; pkill -f 'sglang.launch_serve[r]' ; sleep 5
|
| 9 |
+
cat $O/rollout2_cases.*.jsonl > $O/rollout2_cases.jsonl
|
| 10 |
+
echo "== rollout2 cases: $(wc -l < $O/rollout2_cases.jsonl)"
|
| 11 |
+
echo "== build v13s"
|
| 12 |
+
$P finetune/build_items.py $O/pages.jsonl $O/cases.jsonl $O/ $O/done_cases.jsonl $O/step2_cases.jsonl $O/m2w_cases.jsonl $O/dagger_cases.jsonl $O/rollout_cases.jsonl $O/rollout2_cases.jsonl $O/nnetnav_cases.jsonl 2>&1 | grep -v Warn | tail -3
|
| 13 |
+
echo "== train v13s ($EP epochs from v12s)"; $P finetune/train.py $O/train_items.pt $O/laya-browser-v13s $EP 2>&1 | grep --line-buffered -E "=== epoch|saved|Error|Traceback"
|
| 14 |
+
echo "== calibrate"; $P finetune/calibrate.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/laya-browser-v13s 2>&1 | grep -vE "TileLang|Warn|warn|Fetch"
|
| 15 |
+
echo "== eval"; $P finetune/eval.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/laya-browser-v13s 2>&1 | grep -vE "TileLang|Warn|warn|Fetch|return Agent"
|
| 16 |
+
$I start_chrome >/dev/null; SGL_MEM=0.5 $I start_sglang Qwen/Qwen3-8B-AWQ >/dev/null
|
| 17 |
+
until curl -s -m 3 http://127.0.0.1:30000/health >/dev/null; do sleep 5; done
|
| 18 |
+
$I start_s1 $PWD/$O/laya-browser-v13s 40 >/dev/null
|
| 19 |
+
echo "== suite A x3 (v13s, chunk 40)"
|
| 20 |
+
(cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteA_v13s.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task")
|
| 21 |
+
echo "== suite B x3 (v13s, chunk 40)"
|
| 22 |
+
(cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteB_v13s.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite_b.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task|held-out")
|
| 23 |
+
echo V13S_DONE
|
code/finetune/run_v14s.sh
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# v14s: continue from v13s for 1-2 epochs on v12s data + next-page/select rollouts, with target lists sampled to the
|
| 3 |
+
# server's chunk width (MAX_TARGETS=40) and final-round width (2-6, FINAL_P=0.2). Then suites A and B.
|
| 4 |
+
cd /home/ckl/projects/S/laya && source env.sh
|
| 5 |
+
export LAYA_BASE=$PWD/finetune/out/laya-browser-v13s
|
| 6 |
+
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True CKPT=${CKPT:-1} COMPILE=0 LAYA_FMT=v3 LAYA_HEAD=768 MAX_TARGETS=40 FINAL_P=0.2
|
| 7 |
+
P=.venv/bin/python; O=finetune/out; EP=${1:-1}; I="bash finetune/infra.sh"
|
| 8 |
+
pkill -f 'systemone_serve[r]' ; pkill -f 'sglang.launch_serve[r]' ; sleep 5
|
| 9 |
+
cat $O/rollout2_cases.*.jsonl > $O/rollout2_cases.jsonl
|
| 10 |
+
echo "== rollout2 cases: $(wc -l < $O/rollout2_cases.jsonl)"
|
| 11 |
+
echo "== build v14s"
|
| 12 |
+
$P finetune/build_items.py $O/pages.jsonl $O/cases.jsonl $O/ $O/done_cases.jsonl $O/step2_cases.jsonl $O/m2w_cases.jsonl $O/dagger_cases.jsonl $O/rollout_cases.jsonl $O/rollout2_cases.jsonl $O/nnetnav_cases.jsonl 2>&1 | grep -v Warn | tail -3
|
| 13 |
+
echo "== train v14s ($EP epochs from v13s)"; $P finetune/train.py $O/train_items.pt $O/laya-browser-v14s $EP 2>&1 | grep --line-buffered -E "=== epoch|saved|Error|Traceback"
|
| 14 |
+
echo "== calibrate"; $P finetune/calibrate.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/laya-browser-v14s 2>&1 | grep -vE "TileLang|Warn|warn|Fetch"
|
| 15 |
+
echo "== eval"; $P finetune/eval.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/laya-browser-v14s 2>&1 | grep -vE "TileLang|Warn|warn|Fetch|return Agent"
|
| 16 |
+
$I start_chrome >/dev/null; SGL_MEM=0.5 $I start_sglang Qwen/Qwen3-8B-AWQ >/dev/null
|
| 17 |
+
until curl -s -m 3 http://127.0.0.1:30000/health >/dev/null; do sleep 5; done
|
| 18 |
+
$I start_s1 $PWD/$O/laya-browser-v14s 60 >/dev/null
|
| 19 |
+
echo "== suite A x3 (v14s, chunk 60)"
|
| 20 |
+
(cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteA_v14s.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task")
|
| 21 |
+
echo "== suite B x3 (v14s, chunk 60)"
|
| 22 |
+
(cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteB_v14s.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite_b.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task|held-out")
|
| 23 |
+
echo V14S_DONE
|
code/finetune/run_v15s.sh
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# v15s: CLEAN retrain from the mmBERT-base checkpoint (no DAgger data, no suite start pages) on
|
| 3 |
+
# crawl + DONE + step2 + Mind2Web + rollouts + rollouts2 + NNetNav + webgym (long-horizon forms/listings, sub-goal
|
| 4 |
+
# conditioned, verified sub-goal DONE) + Mind2Web sub-goal annotation.
|
| 5 |
+
# Then: suite A x3, suite B x3, webgym held-out (planner off / on), Google Flights x3 with the planner.
|
| 6 |
+
cd /home/ckl/projects/S/laya && source env.sh
|
| 7 |
+
export LAYA_BASE=$(ls -d ~/.cache/huggingface/hub/models--convaiinnovations--laya/snapshots/*/multilingual | head -1)
|
| 8 |
+
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True CKPT=${CKPT:-1} COMPILE=0 LAYA_FMT=v3 LAYA_HEAD=768 MAX_TARGETS=40 FINAL_P=0.2
|
| 9 |
+
P=.venv/bin/python; O=finetune/out; EP=${1:-3}; I="bash finetune/infra.sh"; CK=laya-browser-v15s
|
| 10 |
+
pkill -f 'systemone_serve[r]' ; pkill -f 'sglang.launch_serve[r]' ; sleep 5
|
| 11 |
+
cat $O/rollout2_cases.*.jsonl > $O/rollout2_cases.jsonl; cat $O/gym/*.jsonl > $O/gym_cases.jsonl
|
| 12 |
+
echo "== data: rollout2 $(wc -l < $O/rollout2_cases.jsonl) gym $(wc -l < $O/gym_cases.jsonl) m2w_sub $(wc -l < $O/m2w_sub_cases.jsonl)"
|
| 13 |
+
echo "== build $CK"
|
| 14 |
+
[ -n "$SKIP_BUILD" ] && [ -f $O/train_items.pt ] && echo " (SKIP_BUILD: reusing $O/train_items.pt)" || \
|
| 15 |
+
$P finetune/build_items.py $O/pages.jsonl $O/cases.jsonl $O/ $O/done_cases.jsonl $O/step2_cases.jsonl $O/m2w_cases.jsonl $O/rollout_cases.jsonl \
|
| 16 |
+
$O/rollout2_cases.jsonl $O/nnetnav_cases.jsonl $O/gym_cases.jsonl $O/m2w_sub_cases.jsonl 2>&1 | grep -v Warn | tail -4
|
| 17 |
+
echo "== train $CK ($EP epochs from base)"; $P finetune/train.py $O/train_items.pt $O/$CK $EP 2>&1 | grep --line-buffered -E "=== epoch|saved|Error|Traceback"
|
| 18 |
+
echo "== calibrate"; $P finetune/calibrate.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/$CK 2>&1 | grep -vE "TileLang|Warn|warn|Fetch"
|
| 19 |
+
echo "== eval"; $P finetune/eval.py $O/pages.jsonl $O/eval_cases.jsonl $PWD/$O/$CK 2>&1 | grep -vE "TileLang|Warn|warn|Fetch|return Agent"
|
| 20 |
+
$I start_chrome >/dev/null; SGL_MEM=0.5 $I start_sglang Qwen/Qwen3-8B-AWQ >/dev/null; bash finetune/webgym/serve.sh restart >/dev/null
|
| 21 |
+
until curl -s -m 3 http://127.0.0.1:30000/health >/dev/null; do sleep 5; done
|
| 22 |
+
$I start_s1 $PWD/$O/$CK 60 >/dev/null
|
| 23 |
+
J=../jev-ultrafast/.venv/bin/python
|
| 24 |
+
echo "== suite A x3"; (cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteA_v15s.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task")
|
| 25 |
+
echo "== suite B x3"; (cd ../jev-ultrafast && REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteB_v15s.json timeout 3600 .venv/bin/python ../laya/apps/browser_suite_b.py 2>&1 | grep -E "^(PASS|FAIL)|^==|per task|held-out")
|
| 26 |
+
echo "== webgym held-out, planner off"; (cd ../jev-ultrafast && GYM_OUT=$PWD/../laya/$O/gym_eval_v15s.json timeout 3600 .venv/bin/python ../laya/finetune/webgym/eval_gym.py 10 flight,hotel,shop 40 2>&1 | grep -E "^(PASS|FAIL|==)")
|
| 27 |
+
echo "== webgym held-out, planner on"; (cd ../jev-ultrafast && JEV_PLANNER=1 GYM_OUT=$PWD/../laya/$O/gym_eval_v15s_plan.json timeout 3600 .venv/bin/python ../laya/finetune/webgym/eval_gym.py 10 flight,hotel,shop 40 2>&1 | grep -E "^(PASS|FAIL|==)")
|
| 28 |
+
echo "== Google Flights x3, planner on"; (cd ../jev-ultrafast && JEV_PLANNER=1 REPEATS=3 SUITE_OUT=$PWD/../laya/$O/suiteA_flights_plan_v15s.json timeout 1800 .venv/bin/python ../laya/apps/browser_suite.py flights 2>&1 | grep -E "^(PASS|FAIL)|^==")
|
| 29 |
+
echo V15S_DONE
|
code/finetune/sites.txt
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Sites with a search box and/or long lists, for finetune/rollouts2.py. Suite URLs are skipped by the script.
|
| 2 |
+
# wikis / reference
|
| 3 |
+
https://en.wikipedia.org/wiki/Special:Random
|
| 4 |
+
https://en.wikipedia.org/wiki/Portal:Science
|
| 5 |
+
https://de.wikipedia.org/wiki/Wikipedia:Hauptseite
|
| 6 |
+
https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal
|
| 7 |
+
https://es.wikipedia.org/wiki/Wikipedia:Portada
|
| 8 |
+
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
|
| 9 |
+
https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5
|
| 10 |
+
https://simple.wikipedia.org/wiki/Main_Page
|
| 11 |
+
https://en.wiktionary.org/wiki/Wiktionary:Main_Page
|
| 12 |
+
https://www.wikidata.org/wiki/Wikidata:Main_Page
|
| 13 |
+
https://en.wikivoyage.org/wiki/Main_Page
|
| 14 |
+
https://commons.wikimedia.org/wiki/Main_Page
|
| 15 |
+
https://en.wikibooks.org/wiki/Main_Page
|
| 16 |
+
https://en.wikiquote.org/wiki/Main_Page
|
| 17 |
+
https://wiki.archlinux.org/
|
| 18 |
+
https://wiki.debian.org/
|
| 19 |
+
https://help.ubuntu.com/
|
| 20 |
+
https://www.wikihow.com/Main-Page
|
| 21 |
+
https://www.britannica.com/
|
| 22 |
+
https://www.merriam-webster.com/
|
| 23 |
+
https://dictionary.cambridge.org/
|
| 24 |
+
https://www.dictionary.com/
|
| 25 |
+
https://www.thefreedictionary.com/
|
| 26 |
+
https://www.etymonline.com/
|
| 27 |
+
https://en.wikisource.org/wiki/Main_Page
|
| 28 |
+
# open libraries / archives
|
| 29 |
+
https://archive.org/
|
| 30 |
+
https://openlibrary.org/
|
| 31 |
+
https://www.gutenberg.org/
|
| 32 |
+
https://www.gutenberg.org/ebooks/search/?query=science
|
| 33 |
+
https://scholar.archive.org/
|
| 34 |
+
https://www.loc.gov/
|
| 35 |
+
https://www.europeana.eu/en
|
| 36 |
+
https://digital.library.upenn.edu/books/
|
| 37 |
+
https://www.worldcat.org/
|
| 38 |
+
https://doaj.org/
|
| 39 |
+
https://www.biodiversitylibrary.org/
|
| 40 |
+
# papers / science
|
| 41 |
+
https://arxiv.org/list/cs.LG/recent
|
| 42 |
+
https://arxiv.org/abs/2205.14135
|
| 43 |
+
https://www.biorxiv.org/
|
| 44 |
+
https://www.medrxiv.org/
|
| 45 |
+
https://dblp.org/
|
| 46 |
+
https://www.semanticscholar.org/
|
| 47 |
+
https://openreview.net/
|
| 48 |
+
https://aclanthology.org/
|
| 49 |
+
https://journals.plos.org/plosone/
|
| 50 |
+
https://pubmed.ncbi.nlm.nih.gov/
|
| 51 |
+
https://www.ncbi.nlm.nih.gov/
|
| 52 |
+
https://paperswithcode.com/
|
| 53 |
+
https://zenodo.org/
|
| 54 |
+
https://figshare.com/
|
| 55 |
+
https://osf.io/
|
| 56 |
+
https://eric.ed.gov/
|
| 57 |
+
https://core.ac.uk/
|
| 58 |
+
https://www.jstor.org/
|
| 59 |
+
https://inspirehep.net/
|
| 60 |
+
https://ui.adsabs.harvard.edu/
|
| 61 |
+
https://mathworld.wolfram.com/
|
| 62 |
+
https://oeis.org/
|
| 63 |
+
https://www.ncbi.nlm.nih.gov/pmc/
|
| 64 |
+
# package registries / code
|
| 65 |
+
https://pypi.org/
|
| 66 |
+
https://pypi.org/project/requests/
|
| 67 |
+
https://crates.io/
|
| 68 |
+
https://crates.io/crates/serde
|
| 69 |
+
https://www.npmjs.com/
|
| 70 |
+
https://rubygems.org/
|
| 71 |
+
https://packagist.org/
|
| 72 |
+
https://hex.pm/
|
| 73 |
+
https://pub.dev/
|
| 74 |
+
https://hub.docker.com/
|
| 75 |
+
https://huggingface.co/models
|
| 76 |
+
https://huggingface.co/datasets
|
| 77 |
+
https://github.com/explore
|
| 78 |
+
https://github.com/search?q=tilelang&type=repositories
|
| 79 |
+
https://github.com/pytorch/pytorch
|
| 80 |
+
https://github.com/rust-lang/rust/issues
|
| 81 |
+
https://gitlab.com/explore
|
| 82 |
+
https://codeberg.org/explore/repos
|
| 83 |
+
https://sourceforge.net/
|
| 84 |
+
https://www.apache.org/
|
| 85 |
+
https://gitee.com/explore
|
| 86 |
+
https://mvnrepository.com/
|
| 87 |
+
https://search.maven.org/
|
| 88 |
+
https://cran.r-project.org/
|
| 89 |
+
https://www.cpan.org/
|
| 90 |
+
https://metacpan.org/
|
| 91 |
+
https://docs.rs/
|
| 92 |
+
https://godocs.io/
|
| 93 |
+
https://pkg.go.dev/
|
| 94 |
+
https://formulae.brew.sh/
|
| 95 |
+
https://repology.org/
|
| 96 |
+
https://packages.debian.org/
|
| 97 |
+
https://archlinux.org/packages/
|
| 98 |
+
https://launchpad.net/
|
| 99 |
+
# documentation
|
| 100 |
+
https://docs.python.org/3/
|
| 101 |
+
https://developer.mozilla.org/en-US/
|
| 102 |
+
https://doc.rust-lang.org/book/
|
| 103 |
+
https://doc.rust-lang.org/std/
|
| 104 |
+
https://go.dev/doc/
|
| 105 |
+
https://nodejs.org/en/docs
|
| 106 |
+
https://www.php.net/
|
| 107 |
+
https://www.ruby-lang.org/en/
|
| 108 |
+
https://docs.djangoproject.com/en/stable/
|
| 109 |
+
https://flask.palletsprojects.com/
|
| 110 |
+
https://numpy.org/doc/stable/
|
| 111 |
+
https://pandas.pydata.org/docs/
|
| 112 |
+
https://pytorch.org/docs/stable/index.html
|
| 113 |
+
https://www.tensorflow.org/api_docs
|
| 114 |
+
https://scikit-learn.org/stable/
|
| 115 |
+
https://docs.docker.com/
|
| 116 |
+
https://kubernetes.io/docs/home/
|
| 117 |
+
https://docs.readthedocs.io/en/stable/
|
| 118 |
+
https://readthedocs.org/
|
| 119 |
+
https://www.w3schools.com/
|
| 120 |
+
https://www.tutorialspoint.com/index.htm
|
| 121 |
+
https://www.geeksforgeeks.org/
|
| 122 |
+
https://cppreference.com/
|
| 123 |
+
https://en.cppreference.com/w/
|
| 124 |
+
https://learn.microsoft.com/en-us/docs/
|
| 125 |
+
https://docs.oracle.com/en/java/
|
| 126 |
+
https://www.postgresql.org/docs/
|
| 127 |
+
https://dev.mysql.com/doc/
|
| 128 |
+
https://redis.io/docs/
|
| 129 |
+
https://docs.gitlab.com/
|
| 130 |
+
https://git-scm.com/doc
|
| 131 |
+
https://www.gnu.org/manual/
|
| 132 |
+
https://www.kernel.org/doc/html/latest/
|
| 133 |
+
https://docs.ansible.com/
|
| 134 |
+
https://www.terraform.io/docs
|
| 135 |
+
https://wiki.python.org/moin/
|
| 136 |
+
https://devdocs.io/
|
| 137 |
+
https://www.freecodecamp.org/news/
|
| 138 |
+
https://stackoverflow.com/questions
|
| 139 |
+
https://askubuntu.com/
|
| 140 |
+
https://superuser.com/
|
| 141 |
+
https://unix.stackexchange.com/
|
| 142 |
+
https://math.stackexchange.com/
|
| 143 |
+
https://serverfault.com/
|
| 144 |
+
# news / media
|
| 145 |
+
https://www.bbc.com/
|
| 146 |
+
https://www.bbc.com/news
|
| 147 |
+
https://www.theguardian.com/international
|
| 148 |
+
https://apnews.com/
|
| 149 |
+
https://www.npr.org/
|
| 150 |
+
https://www.aljazeera.com/
|
| 151 |
+
https://www.dw.com/en/top-stories/s-9097
|
| 152 |
+
https://www.france24.com/en/
|
| 153 |
+
https://www.euronews.com/
|
| 154 |
+
https://www.cbc.ca/news
|
| 155 |
+
https://www.abc.net.au/news
|
| 156 |
+
https://www.nytimes.com/
|
| 157 |
+
https://www.washingtonpost.com/
|
| 158 |
+
https://www.economist.com/
|
| 159 |
+
https://www.wired.com/
|
| 160 |
+
https://arstechnica.com/
|
| 161 |
+
https://www.theverge.com/
|
| 162 |
+
https://techcrunch.com/
|
| 163 |
+
https://news.ycombinator.com/newest
|
| 164 |
+
https://news.ycombinator.com/ask
|
| 165 |
+
https://lobste.rs/
|
| 166 |
+
https://slashdot.org/
|
| 167 |
+
https://www.phoronix.com/
|
| 168 |
+
https://lwn.net/
|
| 169 |
+
https://www.zdnet.com/
|
| 170 |
+
https://www.engadget.com/
|
| 171 |
+
https://www.reuters.com/
|
| 172 |
+
https://www.scmp.com/
|
| 173 |
+
https://www.japantimes.co.jp/
|
| 174 |
+
https://www.thehindu.com/
|
| 175 |
+
https://timesofindia.indiatimes.com/
|
| 176 |
+
https://www.lemonde.fr/
|
| 177 |
+
https://www.spiegel.de/
|
| 178 |
+
https://elpais.com/
|
| 179 |
+
https://www.corriere.it/
|
| 180 |
+
# government / institutions
|
| 181 |
+
https://www.usa.gov/
|
| 182 |
+
https://www.gov.uk/
|
| 183 |
+
https://www.gov.uk/search/all
|
| 184 |
+
https://europa.eu/european-union/index_en
|
| 185 |
+
https://www.nasa.gov/
|
| 186 |
+
https://www.nih.gov/
|
| 187 |
+
https://www.cdc.gov/
|
| 188 |
+
https://www.who.int/
|
| 189 |
+
https://www.un.org/en/
|
| 190 |
+
https://data.gov/
|
| 191 |
+
https://www.census.gov/
|
| 192 |
+
https://www.noaa.gov/
|
| 193 |
+
https://www.epa.gov/
|
| 194 |
+
https://www.fda.gov/
|
| 195 |
+
https://www.canada.ca/en.html
|
| 196 |
+
https://www.australia.gov.au/
|
| 197 |
+
https://www.bundesregierung.de/breg-en
|
| 198 |
+
https://www.service-public.fr/
|
| 199 |
+
https://www.gov.cn/
|
| 200 |
+
https://www.esa.int/
|
| 201 |
+
https://www.cern.ch/
|
| 202 |
+
https://www.ipcc.ch/
|
| 203 |
+
https://www.imf.org/en/Home
|
| 204 |
+
https://www.worldbank.org/en/home
|
| 205 |
+
https://www.oecd.org/
|
| 206 |
+
# education
|
| 207 |
+
https://ocw.mit.edu/
|
| 208 |
+
https://www.khanacademy.org/
|
| 209 |
+
https://www.coursera.org/
|
| 210 |
+
https://www.edx.org/
|
| 211 |
+
https://www.mit.edu/
|
| 212 |
+
https://www.stanford.edu/
|
| 213 |
+
https://www.ox.ac.uk/
|
| 214 |
+
https://www.cam.ac.uk/
|
| 215 |
+
https://www.harvard.edu/
|
| 216 |
+
https://www.berkeley.edu/
|
| 217 |
+
https://www.tsinghua.edu.cn/
|
| 218 |
+
https://www.ethz.ch/en.html
|
| 219 |
+
https://www.utoronto.ca/
|
| 220 |
+
https://plato.stanford.edu/
|
| 221 |
+
https://www.openculture.com/
|
| 222 |
+
https://www.ted.com/talks
|
| 223 |
+
# demo / practice sites (crawler friendly)
|
| 224 |
+
https://books.toscrape.com/catalogue/page-2.html
|
| 225 |
+
https://books.toscrape.com/catalogue/category/books/mystery_3/index.html
|
| 226 |
+
https://quotes.toscrape.com/page/2/
|
| 227 |
+
https://quotes.toscrape.com/tag/humor/
|
| 228 |
+
https://the-internet.herokuapp.com/
|
| 229 |
+
https://the-internet.herokuapp.com/tables
|
| 230 |
+
https://the-internet.herokuapp.com/login
|
| 231 |
+
https://automationexercise.com/
|
| 232 |
+
https://automationexercise.com/products
|
| 233 |
+
https://www.saucedemo.com/
|
| 234 |
+
https://demoqa.com/
|
| 235 |
+
https://practice.expandtesting.com/
|
| 236 |
+
https://webscraper.io/test-sites/e-commerce/allinone
|
| 237 |
+
https://webscraper.io/test-sites/e-commerce/static
|
| 238 |
+
https://demo.opencart.com/
|
| 239 |
+
https://www.demoblaze.com/
|
| 240 |
+
https://magento.softwaretestingboard.com/
|
| 241 |
+
https://practicesoftwaretesting.com/
|
| 242 |
+
https://demo.nopcommerce.com/
|
| 243 |
+
https://www.globalsqa.com/angularJs-protractor/WebTable/
|
| 244 |
+
https://scrapeme.live/shop/
|
| 245 |
+
https://realpython.github.io/fake-jobs/
|
| 246 |
+
https://www.scrapethissite.com/pages/
|
| 247 |
+
https://parabank.parasoft.com/parabank/index.htm
|
| 248 |
+
https://opensource-demo.orangehrmlive.com/
|
| 249 |
+
# shops / catalogues / listings
|
| 250 |
+
https://www.ebay.com/
|
| 251 |
+
https://www.etsy.com/
|
| 252 |
+
https://www.aliexpress.com/
|
| 253 |
+
https://www.ikea.com/us/en/
|
| 254 |
+
https://www.bestbuy.com/
|
| 255 |
+
https://www.newegg.com/
|
| 256 |
+
https://www.walmart.com/
|
| 257 |
+
https://www.target.com/
|
| 258 |
+
https://www.homedepot.com/
|
| 259 |
+
https://www.wayfair.com/
|
| 260 |
+
https://www.zalando.de/
|
| 261 |
+
https://www.otto.de/
|
| 262 |
+
https://www.jd.com/
|
| 263 |
+
https://www.taobao.com/
|
| 264 |
+
https://www.rakuten.co.jp/
|
| 265 |
+
https://www.mercadolibre.com.ar/
|
| 266 |
+
https://www.thingiverse.com/
|
| 267 |
+
https://www.goodreads.com/
|
| 268 |
+
https://www.imdb.com/
|
| 269 |
+
https://www.rottentomatoes.com/
|
| 270 |
+
https://www.allrecipes.com/
|
| 271 |
+
https://www.bbcgoodfood.com/
|
| 272 |
+
https://www.epicurious.com/
|
| 273 |
+
https://www.foodnetwork.com/
|
| 274 |
+
https://www.yelp.com/
|
| 275 |
+
https://www.tripadvisor.com/
|
| 276 |
+
https://www.booking.com/
|
| 277 |
+
https://www.airbnb.com/
|
| 278 |
+
https://www.kayak.com/
|
| 279 |
+
https://www.skyscanner.net/
|
| 280 |
+
https://www.expedia.com/
|
| 281 |
+
https://www.craigslist.org/about/sites
|
| 282 |
+
https://www.autotrader.com/
|
| 283 |
+
https://www.zillow.com/
|
| 284 |
+
https://www.indeed.com/
|
| 285 |
+
https://www.linkedin.com/jobs/
|
| 286 |
+
https://www.glassdoor.com/
|
| 287 |
+
https://weworkremotely.com/
|
| 288 |
+
https://remoteok.com/
|
| 289 |
+
https://www.discogs.com/
|
| 290 |
+
https://bandcamp.com/
|
| 291 |
+
https://www.last.fm/
|
| 292 |
+
https://musicbrainz.org/
|
| 293 |
+
https://www.metacritic.com/
|
| 294 |
+
https://store.steampowered.com/
|
| 295 |
+
https://www.gog.com/
|
| 296 |
+
https://itch.io/
|
| 297 |
+
https://boardgamegeek.com/
|
| 298 |
+
https://www.chess.com/
|
| 299 |
+
https://lichess.org/
|
| 300 |
+
https://openweathermap.org/
|
| 301 |
+
https://www.timeanddate.com/
|
| 302 |
+
https://www.openstreetmap.org/
|
| 303 |
+
https://www.geonames.org/
|
| 304 |
+
https://www.flickr.com/
|
| 305 |
+
https://unsplash.com/
|
| 306 |
+
https://www.pexels.com/
|
| 307 |
+
https://pixabay.com/
|
| 308 |
+
https://fontawesome.com/
|
| 309 |
+
https://fonts.google.com/
|
| 310 |
+
https://www.reddit.com/
|
| 311 |
+
https://www.quora.com/
|
| 312 |
+
https://medium.com/
|
| 313 |
+
https://dev.to/
|
| 314 |
+
https://hashnode.com/
|
| 315 |
+
https://www.producthunt.com/
|
| 316 |
+
https://alternativeto.net/
|
| 317 |
+
https://www.g2.com/
|
| 318 |
+
https://www.capterra.com/
|
| 319 |
+
https://www.trustpilot.com/
|
| 320 |
+
https://www.kickstarter.com/
|
| 321 |
+
https://www.indiegogo.com/
|
| 322 |
+
https://www.patreon.com/
|
| 323 |
+
https://www.twitch.tv/
|
| 324 |
+
https://www.bilibili.com/
|
| 325 |
+
https://www.zhihu.com/
|
| 326 |
+
https://www.csdn.net/
|
| 327 |
+
https://www.douban.com/
|
| 328 |
+
https://www.jianshu.com/
|
| 329 |
+
https://www.baidu.com/
|
| 330 |
+
https://www.sogou.com/
|
| 331 |
+
https://www.so.com/
|
| 332 |
+
https://www.mojeek.com/
|
| 333 |
+
https://yandex.com/
|
| 334 |
+
https://www.qwant.com/
|
| 335 |
+
https://search.brave.com/
|
| 336 |
+
https://www.wolframalpha.com/
|
| 337 |
+
https://mathworld.wolfram.com/
|
| 338 |
+
https://www.khanacademy.org/math
|
| 339 |
+
https://www.desmos.com/
|
| 340 |
+
https://www.geogebra.org/
|
code/finetune/sites_autocomplete.txt
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
https://www.kayak.com/flights
|
| 2 |
+
https://www.skyscanner.net/
|
| 3 |
+
https://www.momondo.com/
|
| 4 |
+
https://www.kiwi.com/en/
|
| 5 |
+
https://www.expedia.com/Flights
|
| 6 |
+
https://www.trip.com/flights/
|
| 7 |
+
https://flights.ctrip.com/
|
| 8 |
+
https://www.qunar.com/
|
| 9 |
+
https://www.rome2rio.com/
|
| 10 |
+
https://www.booking.com/
|
| 11 |
+
https://www.airbnb.com/
|
| 12 |
+
https://www.hotels.com/
|
| 13 |
+
https://www.agoda.com/
|
| 14 |
+
https://www.trivago.com/
|
| 15 |
+
https://www.flightradar24.com/
|
| 16 |
+
https://www.lufthansa.com/
|
| 17 |
+
https://www.britishairways.com/
|
| 18 |
+
https://www.ryanair.com/
|
| 19 |
+
https://www.easyjet.com/
|
| 20 |
+
https://www.aa.com/
|
| 21 |
+
https://www.united.com/
|
| 22 |
+
https://www.delta.com/
|
| 23 |
+
https://www.airfrance.com/
|
| 24 |
+
https://www.klm.com/
|
| 25 |
+
https://www.emirates.com/
|
| 26 |
+
https://www.qatarairways.com/
|
| 27 |
+
https://www.sbb.ch/en
|
| 28 |
+
https://www.bahn.com/en
|
| 29 |
+
https://www.thetrainline.com/
|
| 30 |
+
https://www.omio.com/
|
| 31 |
+
https://www.flixbus.com/
|
| 32 |
+
https://www.openstreetmap.org/
|
| 33 |
+
https://www.accuweather.com/
|
| 34 |
+
https://weather.com/
|
| 35 |
+
https://www.timeanddate.com/weather/
|
| 36 |
+
https://www.wunderground.com/
|
| 37 |
+
https://de.wikipedia.org/wiki/Wikipedia:Hauptseite
|
| 38 |
+
https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal
|
| 39 |
+
https://es.wikipedia.org/wiki/Wikipedia:Portada
|
| 40 |
+
https://en.wiktionary.org/wiki/Wiktionary:Main_Page
|
| 41 |
+
https://www.wikidata.org/wiki/Wikidata:Main_Page
|
| 42 |
+
https://commons.wikimedia.org/wiki/Main_Page
|
| 43 |
+
https://developer.mozilla.org/en-US/
|
| 44 |
+
https://www.imdb.com/
|
| 45 |
+
https://www.goodreads.com/
|
| 46 |
+
https://www.yelp.com/
|
| 47 |
+
https://www.tripadvisor.com/
|
| 48 |
+
https://www.zillow.com/
|
| 49 |
+
https://www.indeed.com/
|
| 50 |
+
https://www.glassdoor.com/
|
| 51 |
+
https://www.ikea.com/us/en/
|
| 52 |
+
https://www.bestbuy.com/
|
| 53 |
+
https://www.etsy.com/
|
| 54 |
+
https://www.ebay.com/
|
| 55 |
+
https://www.amazon.com/
|
| 56 |
+
https://www.walmart.com/
|
| 57 |
+
https://www.target.com/
|
| 58 |
+
https://www.homedepot.com/
|
| 59 |
+
https://www.baidu.com/
|
| 60 |
+
https://www.bilibili.com/
|
| 61 |
+
https://www.zhihu.com/
|
| 62 |
+
https://www.douban.com/
|
| 63 |
+
https://www.jd.com/
|
| 64 |
+
https://www.taobao.com/
|
| 65 |
+
https://map.baidu.com/
|
| 66 |
+
https://www.amap.com/
|
| 67 |
+
https://www.12306.cn/index/
|
| 68 |
+
https://www.ly.com/
|
| 69 |
+
https://www.mafengwo.cn/
|
code/finetune/sites_paged.txt
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# paginated listings for SKILLS=next rollouts (suite start URLs are skipped by the script)
|
| 2 |
+
https://lobste.rs/
|
| 3 |
+
https://lobste.rs/recent
|
| 4 |
+
https://arxiv.org/list/cs.LG/recent
|
| 5 |
+
https://arxiv.org/list/cs.CL/recent
|
| 6 |
+
https://arxiv.org/list/cs.CV/recent
|
| 7 |
+
https://pypi.org/search/?q=http
|
| 8 |
+
https://pypi.org/search/?q=json
|
| 9 |
+
https://pypi.org/search/?q=cli
|
| 10 |
+
https://crates.io/search?q=serde
|
| 11 |
+
https://www.npmjs.com/search?q=react
|
| 12 |
+
https://github.com/search?q=attention&type=repositories
|
| 13 |
+
https://github.com/pytorch/pytorch/issues
|
| 14 |
+
https://github.com/python/cpython/pulls
|
| 15 |
+
https://stackoverflow.com/questions?tab=newest
|
| 16 |
+
https://stackoverflow.com/questions/tagged/python
|
| 17 |
+
https://askubuntu.com/questions
|
| 18 |
+
https://superuser.com/questions
|
| 19 |
+
https://unix.stackexchange.com/questions
|
| 20 |
+
https://math.stackexchange.com/questions
|
| 21 |
+
https://www.gutenberg.org/ebooks/search/?sort_order=downloads
|
| 22 |
+
https://www.gutenberg.org/ebooks/search/?query=history
|
| 23 |
+
https://openlibrary.org/search?q=science
|
| 24 |
+
https://en.wikipedia.org/wiki/Special:AllPages
|
| 25 |
+
https://en.wikipedia.org/w/index.php?search=physics&fulltext=1
|
| 26 |
+
https://en.wikipedia.org/wiki/Special:NewPages
|
| 27 |
+
https://webscraper.io/test-sites/e-commerce/static/computers/laptops
|
| 28 |
+
https://webscraper.io/test-sites/e-commerce/static/computers/tablets
|
| 29 |
+
https://webscraper.io/test-sites/e-commerce/static/phones/touch
|
| 30 |
+
https://www.scrapethissite.com/pages/forms/
|
| 31 |
+
https://scrapeme.live/shop/
|
| 32 |
+
https://scrapeme.live/shop/page/2/
|
| 33 |
+
https://automationexercise.com/products
|
| 34 |
+
https://practicesoftwaretesting.com/
|
| 35 |
+
https://dev.to/
|
| 36 |
+
https://hashnode.com/
|
| 37 |
+
https://lwn.net/Archives/
|
| 38 |
+
https://www.phoronix.com/
|
| 39 |
+
https://slashdot.org/
|
| 40 |
+
https://www.bbc.com/news/world
|
| 41 |
+
https://apnews.com/hub/technology
|
| 42 |
+
https://huggingface.co/models
|
| 43 |
+
https://huggingface.co/datasets
|
| 44 |
+
https://huggingface.co/spaces
|
| 45 |
+
https://paperswithcode.com/latest
|
| 46 |
+
https://dblp.org/search?q=attention
|
| 47 |
+
https://aclanthology.org/events/acl-2024/
|
| 48 |
+
https://openreview.net/group?id=ICLR.cc/2025/Conference
|
| 49 |
+
https://www.biorxiv.org/content/early/recent
|
| 50 |
+
https://archive.org/search?query=science
|
| 51 |
+
https://musicbrainz.org/search?query=beatles&type=artist
|
| 52 |
+
https://www.discogs.com/search/?q=jazz
|
| 53 |
+
https://boardgamegeek.com/browse/boardgame
|
| 54 |
+
https://itch.io/games
|
| 55 |
+
https://store.steampowered.com/search/
|
| 56 |
+
https://www.goodreads.com/list/show/1.Best_Books_Ever
|
| 57 |
+
https://www.imdb.com/chart/top/
|
code/finetune/sites_select.txt
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
https://about.gitlab.com/events/
|
| 2 |
+
https://accounts.google.com/v3/signin/identifier?continue=https://translate.google.com/history&followup=https://translate.google.com/history&passive=1209600&flowName=WebLiteSignIn&flowEntry=ServiceLogin&dsh=S235265407:1789917099781115
|
| 3 |
+
https://accounts.google.com/v3/signin/identifier?continue=https://translate.google.com/saved&followup=https://translate.google.com/saved&passive=1209600&flowName=WebLiteSignIn&flowEntry=ServiceLogin&dsh=S-686375364:1789917900173883
|
| 4 |
+
https://accounts.google.com/v3/signin/identifier?continue=https://translate.google.com/saved&followup=https://translate.google.com/saved&passive=1209600&flowName=WebLiteSignIn&flowEntry=ServiceLogin&dsh=S-801860207:1789917894266607
|
| 5 |
+
https://accounts.google.com/v3/signin/identifier?continue=https://translate.google.com/saved&followup=https://translate.google.com/saved&passive=1209600&flowName=WebLiteSignIn&flowEntry=ServiceLogin&dsh=S271895034:1789917813501863
|
| 6 |
+
https://archlinux.org/packages/
|
| 7 |
+
https://dmytro-shyshkin.kit.com/ai-workshop
|
| 8 |
+
https://docs.python.org/3/
|
| 9 |
+
https://docs.python.org/3/download.html
|
| 10 |
+
https://docs.python.org/3/library/
|
| 11 |
+
https://docs.python.org/3/library/faulthandler.html
|
| 12 |
+
https://docs.python.org/3/library/numbers.html
|
| 13 |
+
https://docs.python.org/3/library/xml.sax.handler.html
|
| 14 |
+
https://docs.python.org/3/py-modindex.html
|
| 15 |
+
https://docs.python.org/3/tutorial/
|
| 16 |
+
https://docs.python.org/3/tutorial/appetite.html
|
| 17 |
+
https://docs.python.org/3/tutorial/floatingpoint.html
|
| 18 |
+
https://formy-project.herokuapp.com/form
|
| 19 |
+
https://getbootstrap.com/docs/5.3/forms/select/
|
| 20 |
+
https://huggingface.co/docs/huggingface_hub/en/guides/cli
|
| 21 |
+
https://pkg.go.dev/image
|
| 22 |
+
https://rust-lang.org/
|
| 23 |
+
https://rust-lang.org/funding/
|
| 24 |
+
https://rust-lang.org/governance/
|
| 25 |
+
https://rust-lang.org/learn/
|
| 26 |
+
https://rust-lang.org/policies/
|
| 27 |
+
https://rust-lang.org/policies/code-of-conduct/
|
| 28 |
+
https://rust-lang.org/policies/licenses/
|
| 29 |
+
https://rust-lang.org/policies/security/
|
| 30 |
+
https://rust-lang.org/tools/
|
| 31 |
+
https://rust-lang.org/tools/install/
|
| 32 |
+
https://rust-lang.org/what/embedded/
|
| 33 |
+
https://www.calculator.net/auto-loan-calculator.html
|
| 34 |
+
https://www.calculator.net/calorie-calculator.html
|
| 35 |
+
https://www.ebay.com/
|
| 36 |
+
https://www.ebay.com/b/Coffee-Tea-Espresso-Makers/38250/bn_2710762
|
| 37 |
+
https://www.ebay.com/ebaylive/sellers/0stkntuiq8o
|
| 38 |
+
https://www.selenium.dev/selenium/web/web-form.html
|
code/finetune/sites_sort.txt
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
https://scrapeme.live/shop/
|
| 2 |
+
https://scrapeme.live/shop/page/3/
|
| 3 |
+
https://demo.opencart.com/index.php?route=product/category&path=20
|
| 4 |
+
https://demo.opencart.com/index.php?route=product/category&path=57
|
| 5 |
+
https://demo.nopcommerce.com/computers
|
| 6 |
+
https://demo.nopcommerce.com/notebooks
|
| 7 |
+
https://demo.nopcommerce.com/books
|
| 8 |
+
https://practicesoftwaretesting.com/
|
| 9 |
+
https://magento.softwaretestingboard.com/women/tops-women.html
|
| 10 |
+
https://magento.softwaretestingboard.com/men/bottoms-men.html
|
| 11 |
+
https://automationexercise.com/products
|
| 12 |
+
https://www.saucedemo.com/
|
| 13 |
+
https://webscraper.io/test-sites/e-commerce/allinone/computers/laptops
|
| 14 |
+
https://demoblaze.com/
|
| 15 |
+
https://www.demoblaze.com/
|
code/finetune/train.py
CHANGED
|
@@ -41,10 +41,27 @@ def main():
|
|
| 41 |
total = max(1, (len(items) // (MICRO * ACCUM)) * epochs)
|
| 42 |
sched = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=total, eta_min=1e-6)
|
| 43 |
t0 = time.time(); step = 0
|
| 44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
random.seed(42 + ep); random.shuffle(items)
|
| 46 |
sigma = S0 + (S1 - S0) * ep / max(1, epochs - 1); tot_loss, nb = 0.0, 0; opt.zero_grad(set_to_none=True)
|
| 47 |
-
for b in range(0, len(items), MICRO):
|
| 48 |
batch = collate(items[b:b + MICRO], tok.pad_token_id); batch = {k: v.to(dev) for k, v in batch.items()}
|
| 49 |
with torch.autocast("cuda", dtype=torch.bfloat16):
|
| 50 |
logits, act = model(batch["input_ids"], batch["attention_mask"], batch["marker_pos"], batch["marker_mask"], batch["qtype"])
|
|
@@ -58,8 +75,10 @@ def main():
|
|
| 58 |
loss = (loss_rl + loss_ce) / ACCUM + 0.0 * act.sum(); loss.backward(); nb += 1; tot_loss += loss.item() * ACCUM
|
| 59 |
if nb % ACCUM == 0 or b + MICRO >= len(items):
|
| 60 |
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0); opt.step(); sched.step(); opt.zero_grad(set_to_none=True); step += 1
|
|
|
|
| 61 |
if step % 20 == 0: print(f" ep {ep+1} step {step}/{total} loss {loss.item()*ACCUM:.3f} ce {loss_ce.item():.3f} reward {r.mean().item():.3f} {time.time()-t0:.0f}s", flush=True)
|
| 62 |
print(f"=== epoch {ep+1}/{epochs} avg loss {tot_loss/max(1,nb):.4f} {time.time()-t0:.0f}s", flush=True)
|
|
|
|
| 63 |
os.makedirs(out, exist_ok=True); model.eval()
|
| 64 |
if hasattr(model.encoder, "_orig_mod"):
|
| 65 |
model.encoder = model.encoder._orig_mod
|
|
@@ -68,6 +87,7 @@ def main():
|
|
| 68 |
cfg.update(fine_tuned=True, model_name="laya-browser", temperature=[1.0, 1.0, 1.0], temperature_by_options={},
|
| 69 |
laya_fmt=os.environ.get("LAYA_FMT", "v1"), head_max_len_train=cfg["head_max_len"])
|
| 70 |
json.dump(cfg, open(os.path.join(out, "rl_agent_config.json"), "w"), indent=2); print("saved", out)
|
|
|
|
| 71 |
|
| 72 |
if __name__ == "__main__":
|
| 73 |
main()
|
|
|
|
| 41 |
total = max(1, (len(items) // (MICRO * ACCUM)) * epochs)
|
| 42 |
sched = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=total, eta_min=1e-6)
|
| 43 |
t0 = time.time(); step = 0
|
| 44 |
+
# ---- resumable: <out>/resume.pt holds model/optimizer/scheduler + (epoch, micro-batch offset); written every
|
| 45 |
+
# SAVE_EVERY optimizer steps and at each epoch end. Re-running the same command continues from it.
|
| 46 |
+
ck_path = os.path.join(out, "resume.pt"); os.makedirs(out, exist_ok=True)
|
| 47 |
+
start_ep, start_b = 0, 0
|
| 48 |
+
if os.path.exists(ck_path):
|
| 49 |
+
ck = torch.load(ck_path, map_location=dev, weights_only=False)
|
| 50 |
+
tgt = model.encoder._orig_mod if hasattr(model.encoder, "_orig_mod") else None
|
| 51 |
+
model.load_state_dict({k.replace("encoder._orig_mod.", "encoder."): v for k, v in ck["model"].items()} if tgt is None else ck["model"], strict=False)
|
| 52 |
+
opt.load_state_dict(ck["opt"]); sched.load_state_dict(ck["sched"]); step = ck["step"]; start_ep, start_b = ck["epoch"], ck["b"]
|
| 53 |
+
print(f"resumed from {ck_path}: epoch {start_ep+1}, item {start_b}, step {step}", flush=True)
|
| 54 |
+
SAVE_EVERY = int(os.environ.get("SAVE_EVERY", "300"))
|
| 55 |
+
def save_resume(ep_, b_):
|
| 56 |
+
tmp = ck_path + ".tmp"
|
| 57 |
+
torch.save({"model": model.state_dict(), "opt": opt.state_dict(), "sched": sched.state_dict(), "step": step, "epoch": ep_, "b": b_}, tmp)
|
| 58 |
+
os.replace(tmp, ck_path)
|
| 59 |
+
for ep0 in range(start_ep): # replay the shuffles of finished epochs so the order matches the original run
|
| 60 |
+
random.seed(42 + ep0); random.shuffle(items)
|
| 61 |
+
for ep in range(start_ep, epochs):
|
| 62 |
random.seed(42 + ep); random.shuffle(items)
|
| 63 |
sigma = S0 + (S1 - S0) * ep / max(1, epochs - 1); tot_loss, nb = 0.0, 0; opt.zero_grad(set_to_none=True)
|
| 64 |
+
for b in range((start_b if ep == start_ep else 0), len(items), MICRO):
|
| 65 |
batch = collate(items[b:b + MICRO], tok.pad_token_id); batch = {k: v.to(dev) for k, v in batch.items()}
|
| 66 |
with torch.autocast("cuda", dtype=torch.bfloat16):
|
| 67 |
logits, act = model(batch["input_ids"], batch["attention_mask"], batch["marker_pos"], batch["marker_mask"], batch["qtype"])
|
|
|
|
| 75 |
loss = (loss_rl + loss_ce) / ACCUM + 0.0 * act.sum(); loss.backward(); nb += 1; tot_loss += loss.item() * ACCUM
|
| 76 |
if nb % ACCUM == 0 or b + MICRO >= len(items):
|
| 77 |
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0); opt.step(); sched.step(); opt.zero_grad(set_to_none=True); step += 1
|
| 78 |
+
if step % SAVE_EVERY == 0: save_resume(ep, b + MICRO)
|
| 79 |
if step % 20 == 0: print(f" ep {ep+1} step {step}/{total} loss {loss.item()*ACCUM:.3f} ce {loss_ce.item():.3f} reward {r.mean().item():.3f} {time.time()-t0:.0f}s", flush=True)
|
| 80 |
print(f"=== epoch {ep+1}/{epochs} avg loss {tot_loss/max(1,nb):.4f} {time.time()-t0:.0f}s", flush=True)
|
| 81 |
+
save_resume(ep + 1, 0)
|
| 82 |
os.makedirs(out, exist_ok=True); model.eval()
|
| 83 |
if hasattr(model.encoder, "_orig_mod"):
|
| 84 |
model.encoder = model.encoder._orig_mod
|
|
|
|
| 87 |
cfg.update(fine_tuned=True, model_name="laya-browser", temperature=[1.0, 1.0, 1.0], temperature_by_options={},
|
| 88 |
laya_fmt=os.environ.get("LAYA_FMT", "v1"), head_max_len_train=cfg["head_max_len"])
|
| 89 |
json.dump(cfg, open(os.path.join(out, "rl_agent_config.json"), "w"), indent=2); print("saved", out)
|
| 90 |
+
if os.path.exists(ck_path): os.remove(ck_path)
|
| 91 |
|
| 92 |
if __name__ == "__main__":
|
| 93 |
main()
|
code/finetune/webgym/app.py
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""webgym HTTP server: renders spec.py tasks as real pages for headless Chromium.
|
| 2 |
+
|
| 3 |
+
python finetune/webgym/app.py [port=8811]
|
| 4 |
+
|
| 5 |
+
/t/<kind>/<seed> the task's start page (flight / hotel search form, or shop listing)
|
| 6 |
+
/t/<kind>/<seed>/results?... results after submitting a form (hotel: filters + sort that reload with params)
|
| 7 |
+
/t/shop/<seed>?page=&sort=&brand=&q= listing; /t/shop/<seed>/p/<id> product page
|
| 8 |
+
"""
|
| 9 |
+
import html, json, os, sys, urllib.parse
|
| 10 |
+
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
|
| 11 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 12 |
+
import spec as S
|
| 13 |
+
|
| 14 |
+
WIDGETS = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "widgets.js")).read()
|
| 15 |
+
CSS = """body{font-family:system-ui,sans-serif;margin:0;background:#fafafa;color:#222}header{display:flex;gap:18px;padding:12px 24px;background:#fff;border-bottom:1px solid #ddd}
|
| 16 |
+
header a{color:#246;text-decoration:none}main{max-width:1000px;margin:0 auto;padding:20px}.hero{background:linear-gradient(#cde,#eef);border-radius:12px;margin-bottom:16px;display:flex;align-items:end;padding:16px;box-sizing:border-box}
|
| 17 |
+
form,.panel{background:#fff;border:1px solid #ddd;border-radius:12px;padding:16px;display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start}
|
| 18 |
+
.f{position:relative;min-width:200px}.list{position:absolute;z-index:20;background:#fff;border:1px solid #bbb;list-style:none;margin:0;padding:4px;min-width:240px}
|
| 19 |
+
.opt{padding:6px 8px;cursor:pointer}.opt:hover{background:#eef}.dlg{position:absolute;z-index:30;background:#fff;border:1px solid #999;border-radius:8px;padding:12px;box-shadow:0 4px 18px #0003;min-width:260px}
|
| 20 |
+
.cal .grid{display:grid;grid-template-columns:repeat(7,34px);gap:3px}.cal .hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
|
| 21 |
+
button{cursor:pointer}.seg button[aria-pressed=true]{background:#246;color:#fff}.cookie{position:fixed;bottom:0;left:0;right:0;background:#223;color:#fff;padding:18px 24px;z-index:50;display:flex;gap:16px;align-items:center}
|
| 22 |
+
.card{background:#fff;border:1px solid #ddd;border-radius:10px;padding:12px;margin:10px 0}.grid3{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
|
| 23 |
+
.pager{display:flex;gap:10px;margin:24px 0}footer{padding:30px;color:#777}.side{min-width:180px}"""
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def page(title, body, gym=None, cookie=False, decoys=()):
|
| 27 |
+
nav = "".join(f'<a href="#{html.escape(d.lower().replace(" ", "-"))}">{html.escape(d)}</a>' for d in decoys)
|
| 28 |
+
ck = ('<div class="cookie" id="cookie"><span>We use cookies to improve your experience.</span>'
|
| 29 |
+
'<button type="button" data-g="cookie-accept" onclick="document.getElementById(\'cookie\').remove()">Accept all</button>'
|
| 30 |
+
'<button type="button" data-g="cookie-reject" onclick="document.getElementById(\'cookie\').remove()">Reject all</button></div>') if cookie else ""
|
| 31 |
+
return (f"<!doctype html><html lang=en><head><meta charset=utf-8><title>{html.escape(title)}</title><style>{CSS}</style>"
|
| 32 |
+
f"<script>{WIDGETS}</script></head><body><header><a href='#home'><b>{html.escape(title.split(' ')[0])}</b></a>{nav}</header>"
|
| 33 |
+
f"<main>{body}</main><footer>© 2026 · <a href='#about'>About</a> · <a href='#privacy'>Privacy</a> · <a href='#contact'>Contact</a></footer>{ck}"
|
| 34 |
+
f"<script>window.__gym.meta={json.dumps(gym or {})};</script></body></html>")
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def form_page(sp):
|
| 38 |
+
hosts = "".join(f'<div class="f" id="host-{k}"></div>' for k in sp["order"])
|
| 39 |
+
hero = f'<div class="hero" style="height:{sp["hero"]}px"><h1>{"Find your next flight" if sp["kind"] == "flight" else "Find a place to stay"}</h1></div>' if sp["hero"] else ""
|
| 40 |
+
fields = [f for f in sp["fields"]]
|
| 41 |
+
js = f"""
|
| 42 |
+
const SP={json.dumps({"fields": fields, "kind": sp["kind"], "seed": sp["seed"]})};
|
| 43 |
+
for (const f of SP.fields) {{ const h=document.getElementById('host-'+f.key); ({{combo:__gym.combo,choice:__gym.choice,date:__gym.date,count:__gym.count}})[f.w](h,f); }}
|
| 44 |
+
const ret=SP.fields.find(f=>f.only_round);
|
| 45 |
+
if (ret) setInterval(()=>{{ const h=document.getElementById('host-'+ret.key); const show=__gym.state.trip==='round'; if (h.hidden===show) h.hidden=!show; }},100);
|
| 46 |
+
document.getElementById('go').addEventListener('click',e=>{{ e.preventDefault();
|
| 47 |
+
location.href=location.pathname+'/results?'+new URLSearchParams(Object.entries(__gym.state).filter(([k,v])=>v!==null&&v!==undefined).map(([k,v])=>[k,String(v)])); }});
|
| 48 |
+
"""
|
| 49 |
+
body = (f"{hero}<form onsubmit='return false'>{hosts}<button id='go' type='submit' data-g='submit'>{html.escape(sp['submit'])}</button></form>"
|
| 50 |
+
f"<div class='panel' style='margin-top:18px'><p>Popular: " + ", ".join(f"<a href='#pop-{c[0]}'>{c[1]}</a>" for c in S.CITIES[:5]) + "</p></div>"
|
| 51 |
+
f"<script>{js}</script>")
|
| 52 |
+
return page(("SkyFinder" if sp["kind"] == "flight" else "StayFinder") + " – search", body, gym={"kind": sp["kind"], "seed": sp["seed"]},
|
| 53 |
+
cookie=sp["cookie"], decoys=sp["decoys"])
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def results_page(sp, q):
|
| 57 |
+
city = {c[0]: c[1] for c in S.CITIES}
|
| 58 |
+
k = lambda x: (q.get(x) or "").replace("-ap", "")
|
| 59 |
+
if sp["kind"] == "flight":
|
| 60 |
+
head = f"{city.get(k('origin'), '?')} to {city.get(k('destination'), '?')}"
|
| 61 |
+
chips = [("One way" if q.get("trip") == "oneway" else "Round trip"), f"{q.get('adults', '1')} adult(s)", (q.get("cabin") or "economy").title(),
|
| 62 |
+
f"Departs {q.get('date', '?')}"] + ([f"Returns {q.get('ret')}"] if q.get("ret") else [])
|
| 63 |
+
cards = "".join(f"<div class='card'><b>{7 + i}:{15 * (i % 4):02d} – {9 + i}:{(15 * i + 40) % 60:02d}</b> · {['Nonstop', '1 stop'][i % 2]} · "
|
| 64 |
+
f"<a href='#flight-{i}'>Select ${120 + 37 * i}</a></div>" for i in range(5))
|
| 65 |
+
body = f"<h1>{head}</h1><p>{' · '.join(chips)}</p>{cards}<p><a href='{sp_url(sp)}'>Modify search</a></p>"
|
| 66 |
+
return page("SkyFinder – results", body, gym={"kind": "flight", "results": dict(q)}, decoys=sp["decoys"])
|
| 67 |
+
# hotel results: filters + sort reload the page with params
|
| 68 |
+
title = f"Stays in {city.get(k('dest'), '?')}"
|
| 69 |
+
filt = [f for f in ["Free cancellation", "Breakfast included", "Pool", "Pet friendly"]]
|
| 70 |
+
on = set((q.get("filter") or "").split("|")) - {""}
|
| 71 |
+
boxes = "".join(f"<label><input type=checkbox data-g='filter-{i}' {'checked' if f in on else ''} onchange=\"setF('{f}',this.checked)\"> {f}</label><br>"
|
| 72 |
+
for i, f in enumerate(filt))
|
| 73 |
+
sorts = ["Recommended", "Price: low to high", "Guest rating", "Distance to center"]
|
| 74 |
+
cur = q.get("sort") or "Recommended"
|
| 75 |
+
sel = "".join(f"<option {'selected' if s == cur else ''}>{s}</option>" for s in sorts)
|
| 76 |
+
cards = "".join(f"<div class='card'><a href='#hotel-{i}'>Hotel {['Aurora', 'Belvedere', 'Casa Flora', 'Duomo', 'Elba', 'Fjord'][i]}</a> · "
|
| 77 |
+
f"{8 + (i % 3) * 0.5}/10 · ${90 + 23 * i}/night</div>" for i in range(6))
|
| 78 |
+
js = """function go(p){const u=new URL(location.href);for(const[k,v]of Object.entries(p)){if(v)u.searchParams.set(k,v);else u.searchParams.delete(k)}location.href=u}
|
| 79 |
+
function setF(f,on){const u=new URL(location.href);const s=new Set((u.searchParams.get('filter')||'').split('|').filter(Boolean));on?s.add(f):s.delete(f);go({filter:[...s].join('|')})}"""
|
| 80 |
+
body = (f"<h1>{title}</h1><p>{q.get('cin', '?')} → {q.get('cout', '?')} · {q.get('guests', '2')} guests</p><div style='display:flex;gap:18px'>"
|
| 81 |
+
f"<div class='panel side'><b>Filters</b><br>{boxes}</div><div style='flex:1'><label for=sort>Sort by</label> <select id=sort data-g=sort "
|
| 82 |
+
f"onchange=\"go({{sort:this.value}})\">{sel}</select>{cards}</div></div><script>{js}</script>")
|
| 83 |
+
return page("StayFinder – results", body, gym={"kind": "hotel", "results": dict(q)}, decoys=sp["decoys"])
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
def sp_url(sp):
|
| 87 |
+
return f"/t/{sp['kind']}/{sp['seed']}"
|
| 88 |
+
|
| 89 |
+
|
| 90 |
+
def shop_page(sp, q):
|
| 91 |
+
items = sp["items"]; L = sp["labels"]
|
| 92 |
+
if q.get("q"):
|
| 93 |
+
items = [i for i in items if q["q"] in i["name"].lower()]
|
| 94 |
+
if q.get("brand"):
|
| 95 |
+
items = [i for i in items if i["brand"] == q["brand"]]
|
| 96 |
+
s = q.get("sort") or "Featured"
|
| 97 |
+
if s.startswith("Price: low"): items = sorted(items, key=lambda i: i["price"])
|
| 98 |
+
elif s.startswith("Price: high"): items = sorted(items, key=lambda i: -i["price"])
|
| 99 |
+
elif s == "Newest": items = sorted(items, key=lambda i: -i["id"])
|
| 100 |
+
elif s == "Top rated": items = sorted(items, key=lambda i: (i["id"] * 7) % 13)
|
| 101 |
+
n = int(q.get("page") or 1); per = sp["per_page"]; pages = max(1, -(-len(items) // per))
|
| 102 |
+
shown = items[(n - 1) * per: n * per]
|
| 103 |
+
base = sp_url(sp)
|
| 104 |
+
def link(**kw):
|
| 105 |
+
p = {k: v for k, v in {**{k: q.get(k) for k in ("q", "brand", "sort")}, **kw}.items() if v}
|
| 106 |
+
return base + ("?" + urllib.parse.urlencode(p) if p else "")
|
| 107 |
+
grid = "".join(f"<div class='card'><a href='{base}/p/{i['id']}'>{html.escape(i['name'])}</a><br>${i['price']:.2f}</div>" for i in shown)
|
| 108 |
+
sorts = ["Featured", "Price: low to high", "Price: high to low", "Newest", "Top rated"]
|
| 109 |
+
if sp["sort_impl"] == "select":
|
| 110 |
+
sort_ui = (f"<label for=sort>{L['sort']}</label> <select id=sort data-g=sort onchange=\"location.href=this.value\">" +
|
| 111 |
+
"".join(f"<option value='{link(sort=x if x != 'Featured' else None, page=None)}' {'selected' if x == s else ''}>{x}</option>" for x in sorts) + "</select>")
|
| 112 |
+
else:
|
| 113 |
+
sort_ui = (f"<button type=button data-g=sort-trigger aria-haspopup=listbox aria-label='{L['sort']}: {s}' onclick=\"const l=document.getElementById('sl');l.hidden=!l.hidden\">"
|
| 114 |
+
f"{L['sort']}: {s} ▾</button><div id=sl role=listbox class=list hidden>" +
|
| 115 |
+
"".join(f"<a role=option class=opt href='{link(sort=x if x != 'Featured' else None, page=None)}'>{x}</a>" for x in sorts) + "</div>")
|
| 116 |
+
brands = "".join(f"<label><input type=checkbox data-g='brand-{b}' {'checked' if q.get('brand') == b else ''} "
|
| 117 |
+
f"onchange=\"location.href=this.checked?'{link(brand=b, page=None)}':'{link(brand=None, page=None)}'\"> {b}</label><br>" for b in S.BRANDS)
|
| 118 |
+
btn = f"<button type=submit data-g=search-btn>{'Search' if sp['search_button'] else ''}</button>" if sp["search_button"] else ""
|
| 119 |
+
search = (f"<form action='{base}' method=get style='display:inline-flex;gap:6px'><input type=search name=q aria-label=\"{L['search']}\" "
|
| 120 |
+
f"placeholder=\"{L['search']}\" value=\"{html.escape(q.get('q') or '')}\" data-g=search>{btn}</form>")
|
| 121 |
+
pager = []
|
| 122 |
+
if sp["pager"] in ("numbers", "both"):
|
| 123 |
+
pager += [f"<a href='{link(page=p if p > 1 else None)}' {'aria-current=page' if p == n else ''}>{p}</a>" for p in range(1, pages + 1)]
|
| 124 |
+
if sp["pager"] in ("next", "both") and n < pages:
|
| 125 |
+
pager.append(f"<a href='{link(page=n + 1)}' data-g=next>{L['next']}</a>")
|
| 126 |
+
hero = f"<div class='hero' style='height:{sp['hero']}px'><h1>{sp['category']}</h1></div>" if sp["hero"] else ""
|
| 127 |
+
body = (f"{hero}<div class=panel>{search} {sort_ui}</div><div style='display:flex;gap:18px;margin-top:14px'><div class='panel side'><b>{L['brand']}</b><br>{brands}</div>"
|
| 128 |
+
f"<div style='flex:1'><p>Showing {len(shown)} of {len(items)} products · page {n} of {pages}</p><div class=grid3>{grid}</div>"
|
| 129 |
+
f"<nav class=pager aria-label=Pagination>{' '.join(pager)}</nav></div></div>")
|
| 130 |
+
state = {"page": n, "sort": q.get("sort"), "brand": q.get("brand"), "q": q.get("q")}
|
| 131 |
+
return page(f"{sp['category']} – ShopRight", body, gym={"kind": "shop", "listing": state}, cookie=sp["cookie"] and not q, decoys=["Deals", "Help", "Sign in", "Cart"])
|
| 132 |
+
|
| 133 |
+
|
| 134 |
+
def product_page(sp, pid):
|
| 135 |
+
it = sp["items"][pid]
|
| 136 |
+
body = f"<h1>{html.escape(it['name'])}</h1><p>${it['price']:.2f}</p><button data-g=cart>Add to cart</button> <a href='{sp_url(sp)}'>Back to all products</a>"
|
| 137 |
+
return page(f"{it['name']} – ShopRight", body, gym={"kind": "shop", "product": pid}, decoys=["Deals", "Help", "Sign in", "Cart"])
|
| 138 |
+
|
| 139 |
+
|
| 140 |
+
class H(BaseHTTPRequestHandler):
|
| 141 |
+
def log_message(self, *a): pass
|
| 142 |
+
def do_GET(self):
|
| 143 |
+
u = urllib.parse.urlparse(self.path); parts = [p for p in u.path.split("/") if p]
|
| 144 |
+
q = {k: v[0] for k, v in urllib.parse.parse_qs(u.query).items()}
|
| 145 |
+
try:
|
| 146 |
+
if len(parts) >= 3 and parts[0] == "t":
|
| 147 |
+
kind, seed = parts[1], int(parts[2]); sp = S.make(kind, seed)
|
| 148 |
+
if kind == "shop":
|
| 149 |
+
out = product_page(sp, int(parts[4])) if len(parts) >= 5 and parts[3] == "p" else shop_page(sp, q)
|
| 150 |
+
elif len(parts) >= 4 and parts[3] == "results":
|
| 151 |
+
out = results_page(sp, q)
|
| 152 |
+
else:
|
| 153 |
+
out = form_page(sp)
|
| 154 |
+
code = 200
|
| 155 |
+
elif parts == ["spec"]:
|
| 156 |
+
out = json.dumps(S.make(q["kind"], int(q["seed"]))); code = 200
|
| 157 |
+
else:
|
| 158 |
+
out, code = "not found", 404
|
| 159 |
+
except Exception as e:
|
| 160 |
+
out, code = f"error: {type(e).__name__}: {e}", 500
|
| 161 |
+
data = out.encode()
|
| 162 |
+
self.send_response(code); self.send_header("Content-Type", "application/json" if parts == ["spec"] else "text/html; charset=utf-8")
|
| 163 |
+
self.send_header("Content-Length", str(len(data))); self.end_headers(); self.wfile.write(data)
|
| 164 |
+
|
| 165 |
+
|
| 166 |
+
if __name__ == "__main__":
|
| 167 |
+
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8811
|
| 168 |
+
print(f"webgym on http://127.0.0.1:{port}/t/flight/1", flush=True)
|
| 169 |
+
ThreadingHTTPServer(("127.0.0.1", port), H).serve_forever()
|
code/finetune/webgym/eval_gym.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Run the real agent (jev loop + the laya systemone server) on HELD-OUT webgym seeds (seed % 10 == 0, never generated
|
| 2 |
+
for training) and judge success from the page's own state.
|
| 3 |
+
|
| 4 |
+
python finetune/webgym/eval_gym.py [n_per_kind=10] [kinds=flight,hotel,shop] [max_steps=40]
|
| 5 |
+
env: JEV_PLANNER=1 to plan sub-goals first; GYM_OUT=results.json
|
| 6 |
+
|
| 7 |
+
Success: flight/hotel = on the results page with every target value (+ hotel filter/sort), shop = the listing/product
|
| 8 |
+
state the task asks for. The agent's DONE is not trusted; a run that ends without reaching the state fails.
|
| 9 |
+
"""
|
| 10 |
+
import json, os, sys, time, urllib.parse
|
| 11 |
+
sys.path.insert(0, "/home/ckl/projects/S/jev-ultrafast")
|
| 12 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 13 |
+
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "apps"))
|
| 14 |
+
import browser_suite # noqa: F401 (sets the jev env: CDP, systemone URL, text model)
|
| 15 |
+
from jev_ultrafast import Agent
|
| 16 |
+
import spec as S
|
| 17 |
+
|
| 18 |
+
BASE = os.environ.get("GYM_URL", "http://127.0.0.1:8811")
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def success(sp, url, meta):
|
| 22 |
+
if sp["kind"] in ("flight", "hotel"):
|
| 23 |
+
res = (meta or {}).get("results")
|
| 24 |
+
if res is None:
|
| 25 |
+
return False
|
| 26 |
+
for k, v in sp["target"].items():
|
| 27 |
+
got = (res.get(k) or "")
|
| 28 |
+
if isinstance(v, str) and len(v) == 3 and v.isalpha():
|
| 29 |
+
if got.replace("-ap", "") != v: return False
|
| 30 |
+
elif str(got) != str(v):
|
| 31 |
+
return False
|
| 32 |
+
post = sp.get("post") or {}
|
| 33 |
+
if "filter" in post and post["filter"] not in (res.get("filter") or "").split("|"): return False
|
| 34 |
+
if "sort" in post and res.get("sort") != post["sort"]: return False
|
| 35 |
+
return True
|
| 36 |
+
post = sp["post"]
|
| 37 |
+
if "open" in post:
|
| 38 |
+
return (meta or {}).get("product") == post["open"]
|
| 39 |
+
lst = (meta or {}).get("listing") or {}
|
| 40 |
+
return all((lst.get(k) or (1 if k == "page" else None)) == v if k != "q" else (lst.get("q") or "").lower() == v for k, v in post.items())
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
def run(kind, seed, max_steps):
|
| 44 |
+
sp = S.make(kind, seed)
|
| 45 |
+
t0 = time.time(); steps = 0; status = "error"; meta = None; url = ""; plan = None
|
| 46 |
+
try:
|
| 47 |
+
with Agent(f"{BASE}/t/{kind}/{seed}", sp["goal"]) as agent:
|
| 48 |
+
plan = agent.state.get("plan")
|
| 49 |
+
for state in agent.run():
|
| 50 |
+
steps = len(state["history"]); status = state["status"]
|
| 51 |
+
if steps >= max_steps: break
|
| 52 |
+
time.sleep(0.8)
|
| 53 |
+
meta = json.loads(agent.browser.evaluate("JSON.stringify(window.__gym ? window.__gym.meta : null)") or "null")
|
| 54 |
+
url = agent.browser.evaluate("location.href")
|
| 55 |
+
except Exception as e:
|
| 56 |
+
status = f"error:{type(e).__name__}:{str(e)[:60]}"
|
| 57 |
+
ok = success(sp, url, meta)
|
| 58 |
+
return {"kind": kind, "seed": seed, "ok": ok, "steps": steps, "status": status, "wall": round(time.time() - t0, 1), "url": url,
|
| 59 |
+
"goal": sp["goal"], "plan": plan}
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
def main():
|
| 63 |
+
n = int(sys.argv[1]) if len(sys.argv) > 1 else 10
|
| 64 |
+
kinds = (sys.argv[2] if len(sys.argv) > 2 else "flight,hotel,shop").split(",")
|
| 65 |
+
max_steps = int(sys.argv[3]) if len(sys.argv) > 3 else 40
|
| 66 |
+
rows = []
|
| 67 |
+
for kind in kinds:
|
| 68 |
+
for i in range(n):
|
| 69 |
+
seed = 900000 + 10 * i # held out: never generated for training (and disjoint from training ranges)
|
| 70 |
+
r = run(kind, seed, max_steps); rows.append(r)
|
| 71 |
+
print(f"{'PASS' if r['ok'] else 'FAIL'} {kind:6s} seed={seed} steps={r['steps']:2d} {r['status'][:28]:28s} {r['wall']:5.1f}s {r['goal'][:70]}", flush=True)
|
| 72 |
+
for kind in kinds:
|
| 73 |
+
k = [r for r in rows if r["kind"] == kind]
|
| 74 |
+
print(f"== {kind}: {sum(r['ok'] for r in k)}/{len(k)} median steps {sorted(r['steps'] for r in k)[len(k)//2]}")
|
| 75 |
+
print(f"== total {sum(r['ok'] for r in rows)}/{len(rows)} ({100*sum(r['ok'] for r in rows)/max(1,len(rows)):.0f}%)")
|
| 76 |
+
json.dump(rows, open(os.environ.get("GYM_OUT", "/tmp/gym_eval.json"), "w"), indent=1)
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
if __name__ == "__main__":
|
| 80 |
+
main()
|
code/finetune/webgym/expert.py
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Scripted expert for webgym tasks, run in the real headless Chromium through jev's Browser, so every recorded case
|
| 2 |
+
has exactly the observation format the agent sees. Writes jev-format training cases:
|
| 3 |
+
|
| 4 |
+
* goal = the full task -> gold = the expert's next operation/target
|
| 5 |
+
* goal = the current sub-goal -> the same gold (sub-goal-conditioned policy)
|
| 6 |
+
* goal = a sub-goal just satisfied -> gold = DONE (sub-goal completion)
|
| 7 |
+
* on the final state, goal = full task -> DONE
|
| 8 |
+
|
| 9 |
+
python finetune/webgym/expert.py <out.jsonl> <n_episodes> [seed0=1] [kinds=flight,hotel,shop] [noise=0.1]
|
| 10 |
+
|
| 11 |
+
Held-out seeds (seed % 10 == 0) are skipped here; eval_gym.py runs the real agent on them.
|
| 12 |
+
"""
|
| 13 |
+
import json, os, random, re, sys, time
|
| 14 |
+
sys.path.insert(0, "/home/ckl/projects/S/jev-ultrafast")
|
| 15 |
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
| 16 |
+
os.environ.setdefault("BU_CDP_URL", "http://127.0.0.1:9222")
|
| 17 |
+
from jev_ultrafast.browser import Browser, StalePage
|
| 18 |
+
import spec as S
|
| 19 |
+
|
| 20 |
+
BASE = os.environ.get("GYM_URL", "http://127.0.0.1:8811")
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def observe(b, tries=10):
|
| 24 |
+
for i in range(tries):
|
| 25 |
+
try:
|
| 26 |
+
return b.observe(screenshot=False)
|
| 27 |
+
except StalePage:
|
| 28 |
+
time.sleep(0.3)
|
| 29 |
+
raise StalePage("never settled")
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def js(b, expr):
|
| 33 |
+
return b.evaluate(expr)
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def status(b):
|
| 37 |
+
s = js(b, "JSON.stringify({st: window.__gym && window.__gym.status ? window.__gym.status() : null, meta: window.__gym ? window.__gym.meta : null, url: location.href})")
|
| 38 |
+
return json.loads(s) if s else {}
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
def node_of(b, sel):
|
| 42 |
+
return js(b, f"window.__gym.node({json.dumps(sel)})")
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
def where(b, sel):
|
| 46 |
+
return js(b, f"window.__gym.where({json.dumps(sel)})")
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
class Stop(Exception):
|
| 50 |
+
pass
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
class Expert:
|
| 54 |
+
def __init__(self, sp, b, rng):
|
| 55 |
+
self.sp, self.b, self.rng = sp, b, rng
|
| 56 |
+
|
| 57 |
+
# ------------------------------------------------------------------ satisfaction per sub-goal
|
| 58 |
+
def satisfied(self, key, st, meta):
|
| 59 |
+
sp = self.sp
|
| 60 |
+
if sp["kind"] in ("flight", "hotel"):
|
| 61 |
+
res = (meta or {}).get("results")
|
| 62 |
+
if key == "submit":
|
| 63 |
+
return res is not None
|
| 64 |
+
if key in ("filter", "sort"):
|
| 65 |
+
if res is None: return False
|
| 66 |
+
want = sp["post"][key]
|
| 67 |
+
return want in (res.get("filter") or "").split("|") if key == "filter" else res.get("sort") == want
|
| 68 |
+
if res is not None: # past the form: the submitted search must carry the target value
|
| 69 |
+
t = sp["target"][key]
|
| 70 |
+
v = res.get(key)
|
| 71 |
+
if isinstance(t, str) and len(t) == 3 and t.isalpha():
|
| 72 |
+
return isinstance(v, str) and v.replace("-ap", "") == t
|
| 73 |
+
return str(v) == str(t)
|
| 74 |
+
v, t = st["state"].get(key), sp["target"][key]
|
| 75 |
+
if isinstance(t, str) and len(t) == 3 and t.isalpha(): # city key
|
| 76 |
+
return isinstance(v, str) and (v == t or v == t + "-ap" or (v.startswith("text:") and S_name(t).lower() in v.lower()))
|
| 77 |
+
return v == t or str(v) == str(t)
|
| 78 |
+
lst = (meta or {}).get("listing") or {}
|
| 79 |
+
post = sp["post"]
|
| 80 |
+
if key == "open":
|
| 81 |
+
return (meta or {}).get("product") == post["open"]
|
| 82 |
+
if (meta or {}).get("product") is not None:
|
| 83 |
+
return True
|
| 84 |
+
if key == "page": return lst.get("page") == post["page"]
|
| 85 |
+
if key == "sort": return lst.get("sort") == post["sort"]
|
| 86 |
+
if key == "brand": return lst.get("brand") == post["brand"]
|
| 87 |
+
if key == "q": return (lst.get("q") or "").lower() == post["q"]
|
| 88 |
+
return False
|
| 89 |
+
|
| 90 |
+
def wrong_results(self, meta):
|
| 91 |
+
"""Submitted with wrong or missing values: the form sub-goals are not all satisfied on the results page."""
|
| 92 |
+
res = (meta or {}).get("results")
|
| 93 |
+
if res is None or self.sp["kind"] not in ("flight", "hotel"):
|
| 94 |
+
return False
|
| 95 |
+
return any(not self.satisfied(k, {"state": {}}, meta) for k in self.sp["target"])
|
| 96 |
+
|
| 97 |
+
def current(self, st, meta):
|
| 98 |
+
for i, (key, text) in enumerate(self.sp["subgoals"]):
|
| 99 |
+
if key == "ret" and self.sp["target"].get("trip") != "round":
|
| 100 |
+
continue
|
| 101 |
+
if not self.satisfied(key, st, meta):
|
| 102 |
+
return i
|
| 103 |
+
return None
|
| 104 |
+
|
| 105 |
+
# ------------------------------------------------------------------ the next expert step for sub-goal key
|
| 106 |
+
def step_for(self, key, st, page):
|
| 107 |
+
sp, b, rng = self.sp, self.b, self.rng
|
| 108 |
+
open_ = set(st.get("open") or [])
|
| 109 |
+
if sp["kind"] in ("flight", "hotel"):
|
| 110 |
+
if key == "submit":
|
| 111 |
+
return ("CLICK", "[data-g=submit]", None)
|
| 112 |
+
if key == "filter":
|
| 113 |
+
i = ["Free cancellation", "Breakfast included", "Pool", "Pet friendly"].index(sp["post"]["filter"])
|
| 114 |
+
return ("CLICK", f"[data-g=filter-{i}]", None)
|
| 115 |
+
if key == "sort":
|
| 116 |
+
return ("SELECT", "[data-g=sort]", sp["post"]["sort"])
|
| 117 |
+
f = next(x for x in sp["fields"] if x["key"] == key)
|
| 118 |
+
t = sp["target"][key]
|
| 119 |
+
# close a popup that belongs to another field first (it may cover what we need)
|
| 120 |
+
for o in open_:
|
| 121 |
+
if o and not o.startswith(key) and o.endswith("-dialog"):
|
| 122 |
+
other = o[: -len("-dialog")]
|
| 123 |
+
for btn in (f"[data-g={other}-close]", f"[data-g={other}-done]"):
|
| 124 |
+
if js(b, f"!!document.querySelector({json.dumps(btn)})"):
|
| 125 |
+
return ("CLICK", btn, None)
|
| 126 |
+
if f["w"] == "combo":
|
| 127 |
+
dlg_open = (key + "-dialog") in open_
|
| 128 |
+
if f["trigger"] and not dlg_open:
|
| 129 |
+
return ("CLICK", f"[data-g={key}-trigger]", None)
|
| 130 |
+
name = S_name(t)
|
| 131 |
+
if f["suggest"]:
|
| 132 |
+
for k in ([t + "-ap", t] if rng.random() < 0.5 else [t, t + "-ap"]):
|
| 133 |
+
sel = f"[data-g={key}-opt-{k}]"
|
| 134 |
+
if where(b, sel) is not None:
|
| 135 |
+
first = js(b, f"(document.querySelector('#{key}-list [role=option]')||{{}}).getAttribute && document.querySelector('#{key}-list [role=option]').getAttribute('data-g')")
|
| 136 |
+
if first == sel[8:-1] and rng.random() < 0.25:
|
| 137 |
+
return ("PRESS_ENTER", "press_enter", None)
|
| 138 |
+
return ("CLICK", sel, None)
|
| 139 |
+
alias = next((c[4] for c in S.CITIES if c[0] == t and c[4]), "")
|
| 140 |
+
typed = rng.choice([name, name, name[: max(3, len(name) // 2 + 1)], alias or name])
|
| 141 |
+
return ("TYPE_TEXT", f"[data-g={key}-input]", typed)
|
| 142 |
+
return ("TYPE_TEXT", f"[data-g={key}-input]", name)
|
| 143 |
+
if f["w"] == "choice":
|
| 144 |
+
if f["impl"] == "select":
|
| 145 |
+
return ("SELECT", f"[data-g={key}-select]", t)
|
| 146 |
+
if f["impl"] == "dropdown":
|
| 147 |
+
if js(b, f"document.querySelector('[data-g={key}-trigger]').getAttribute('aria-expanded')") != "true":
|
| 148 |
+
return ("CLICK", f"[data-g={key}-trigger]", None)
|
| 149 |
+
return ("CLICK", f"[data-g={key}-{t}]", None)
|
| 150 |
+
if f["w"] == "date":
|
| 151 |
+
if f["impl"] == "typed":
|
| 152 |
+
y, m, d = t.split("-")
|
| 153 |
+
return ("TYPE_TEXT", f"[data-g={key}-input]", f"{m}/{d}/{y}")
|
| 154 |
+
if (key + "-dialog") not in open_:
|
| 155 |
+
return ("CLICK", f"[data-g={key}-trigger]", None)
|
| 156 |
+
day = f"[data-g={key}-day-{t}]"
|
| 157 |
+
if js(b, f"!!document.querySelector({json.dumps(day)})"):
|
| 158 |
+
if js(b, f"document.querySelector({json.dumps(day)}).getAttribute('aria-pressed')") != "true":
|
| 159 |
+
return ("CLICK", day, None)
|
| 160 |
+
return ("CLICK", f"[data-g={key}-done]", None)
|
| 161 |
+
shown = js(b, f"document.querySelector('[data-g={key}-dialog] strong').textContent")
|
| 162 |
+
mon, yr = shown.split()
|
| 163 |
+
cur = int(yr) * 12 + S.MONTHS.index(mon)
|
| 164 |
+
want = int(t[:4]) * 12 + int(t[5:7]) - 1
|
| 165 |
+
return ("CLICK", f"[data-g={key}-{'next' if want > cur else 'prev'}]", None)
|
| 166 |
+
if f["w"] == "count":
|
| 167 |
+
v = st["state"].get(key)
|
| 168 |
+
if f["impl"] == "select":
|
| 169 |
+
return ("SELECT", f"[data-g={key}-select]", str(t))
|
| 170 |
+
if f["impl"] == "popup" and (key + "-dialog") not in open_:
|
| 171 |
+
return ("CLICK", f"[data-g={key}-trigger]", None)
|
| 172 |
+
return ("CLICK", f"[data-g={key}-{'inc' if v < t else 'dec'}]", None)
|
| 173 |
+
# ------------------------------------------------ shop
|
| 174 |
+
post = sp["post"]
|
| 175 |
+
if key == "q":
|
| 176 |
+
val = js(b, "(document.querySelector('[data-g=search]')||{}).value")
|
| 177 |
+
if (val or "").strip().lower() != post["q"]:
|
| 178 |
+
return ("TYPE_TEXT", "[data-g=search]", post["q"])
|
| 179 |
+
if sp["search_button"] and rng.random() < 0.4:
|
| 180 |
+
return ("CLICK", "[data-g=search-btn]", None)
|
| 181 |
+
return ("PRESS_ENTER", "press_enter", None)
|
| 182 |
+
if key == "sort":
|
| 183 |
+
if sp["sort_impl"] == "select":
|
| 184 |
+
return ("SELECT", "[data-g=sort]", post["sort"])
|
| 185 |
+
if js(b, "document.getElementById('sl').hidden"):
|
| 186 |
+
return ("CLICK", "[data-g=sort-trigger]", None)
|
| 187 |
+
return ("CLICK_TEXT", "#sl [role=option]", post["sort"])
|
| 188 |
+
if key == "brand":
|
| 189 |
+
return ("CLICK", f"[data-g=brand-{post['brand']}]", None)
|
| 190 |
+
if key == "page":
|
| 191 |
+
n = post["page"]
|
| 192 |
+
if js(b, f"!!document.querySelector('[data-g=next]')") and (sp["pager"] == "next" or rng.random() < 0.5):
|
| 193 |
+
return ("CLICK", "[data-g=next]", None)
|
| 194 |
+
return ("CLICK_TEXT", "nav.pager a", str(n))
|
| 195 |
+
if key == "open":
|
| 196 |
+
return ("CLICK", f"a[href$='/p/{post['open']}']", None)
|
| 197 |
+
raise Stop(f"no step for {key}")
|
| 198 |
+
|
| 199 |
+
|
| 200 |
+
def S_name(key):
|
| 201 |
+
return next(c[1] for c in S.CITIES if c[0] == key.replace("-ap", ""))
|
| 202 |
+
|
| 203 |
+
|
| 204 |
+
def to_action(b, page, op, sel, val):
|
| 205 |
+
"""Map an expert step to the observed jev action (same node, same kind). None when it is not on screen."""
|
| 206 |
+
if op == "PRESS_ENTER":
|
| 207 |
+
return next((a for a in page["actions"] if a["id"] == "press_enter"), None)
|
| 208 |
+
if op == "CLICK_TEXT":
|
| 209 |
+
node = js(b, f"window.__gym.nodeText({json.dumps(sel)}, {json.dumps(val)})")
|
| 210 |
+
sel_for_where = None
|
| 211 |
+
else:
|
| 212 |
+
node = node_of(b, sel)
|
| 213 |
+
kind = {"CLICK": "click", "CLICK_TEXT": "click", "TYPE_TEXT": "fill", "SELECT": "select"}[op]
|
| 214 |
+
for a in page["actions"]:
|
| 215 |
+
if a.get("node") != node or a["kind"] != kind:
|
| 216 |
+
continue
|
| 217 |
+
if kind == "select" and not (a.get("value") == val or a["label"].split(" → ")[-1].strip() == val):
|
| 218 |
+
continue
|
| 219 |
+
if kind == "click" and a["label"].startswith("Open ") and op == "CLICK" and any(x.get("node") == node and x["kind"] == "fill" for x in page["actions"]):
|
| 220 |
+
continue # the "Open <field>" click of an editable field is not the intended click
|
| 221 |
+
return a
|
| 222 |
+
return None
|
| 223 |
+
|
| 224 |
+
|
| 225 |
+
def hist_entry(a, text, changed):
|
| 226 |
+
return {"action": a["label"], "kind": a["kind"], "text": text, "page_changed": changed}
|
| 227 |
+
|
| 228 |
+
|
| 229 |
+
def case(page, goal, gold_op, gold_id, a, hist, sp, tag):
|
| 230 |
+
return {"page": -1, "url": page["url"], "title": page["title"], "goal": goal, "gold_op": gold_op, "gold_id": gold_id,
|
| 231 |
+
"kind": a["kind"] if a else "done", "label": a["label"] if a else "", "history": list(hist)[-10:], "source": "webgym",
|
| 232 |
+
"skill": tag, "seed": sp["seed"], "gym_kind": sp["kind"], "page_obj": {k: page[k] for k in ("url", "title", "text", "actions")}}
|
| 233 |
+
|
| 234 |
+
|
| 235 |
+
def run_episode(kind, seed, out, rng, noise=0.1, max_steps=45):
|
| 236 |
+
sp = S.make(kind, seed)
|
| 237 |
+
b = Browser(f"{BASE}/t/{kind}/{seed}")
|
| 238 |
+
ex = Expert(sp, b, rng)
|
| 239 |
+
hist, n, prev_sub = [], 0, None
|
| 240 |
+
try:
|
| 241 |
+
page = observe(b)
|
| 242 |
+
for step in range(max_steps):
|
| 243 |
+
info = status(b); st = info.get("st") or {}; meta = info.get("meta")
|
| 244 |
+
if st and "open" not in st: st["open"] = []
|
| 245 |
+
if ex.wrong_results(meta):
|
| 246 |
+
# recovery: the search was submitted with wrong values -> back to the form
|
| 247 |
+
a = next((x for x in page["actions"] if x["label"] == "Modify search"), None)
|
| 248 |
+
if a is None:
|
| 249 |
+
raise Stop("wrong results and no way back")
|
| 250 |
+
out.write(json.dumps(case(page, sp["goal"], "CLICK", a["id"], a, hist, sp, "recover"), ensure_ascii=False) + "\n"); n += 1
|
| 251 |
+
before = page["fingerprint"]; b.act(a, page); time.sleep(0.3); page = observe(b)
|
| 252 |
+
hist.append(hist_entry(a, None, page["fingerprint"] != before)); prev_sub = None
|
| 253 |
+
continue
|
| 254 |
+
cur = ex.current(st, meta)
|
| 255 |
+
# sub-goal completion: the previous sub-goal is now satisfied -> DONE under that sub-goal
|
| 256 |
+
if prev_sub is not None and prev_sub != cur:
|
| 257 |
+
sg = sp["subgoals"][prev_sub][1]
|
| 258 |
+
out.write(json.dumps(case(page, sg, "DONE", "DONE", None, hist, sp, "subgoal_done"), ensure_ascii=False) + "\n"); n += 1
|
| 259 |
+
if cur is None:
|
| 260 |
+
out.write(json.dumps(case(page, sp["goal"], "DONE", "DONE", None, hist, sp, "task_done"), ensure_ascii=False) + "\n")
|
| 261 |
+
return n + 1, True
|
| 262 |
+
key = sp["subgoals"][cur][0]
|
| 263 |
+
op, sel, val = ex.step_for(key, st, page)
|
| 264 |
+
# cookie banner in the way of anything below it: accept it
|
| 265 |
+
a = to_action(b, page, op, sel, val)
|
| 266 |
+
if a is None and op != "PRESS_ENTER":
|
| 267 |
+
if js(b, "!!document.getElementById('cookie')"):
|
| 268 |
+
op, sel, val = "CLICK", "[data-g=cookie-accept]", None; a = to_action(b, page, op, sel, val)
|
| 269 |
+
elif op != "CLICK_TEXT" and where(b, sel) in (1, -1):
|
| 270 |
+
sid = "scroll_down" if where(b, sel) == 1 else "scroll_up"
|
| 271 |
+
a = next((x for x in page["actions"] if x["id"] == sid), None); op = sid.upper()
|
| 272 |
+
elif op == "CLICK_TEXT":
|
| 273 |
+
a = next((x for x in page["actions"] if x["id"] == "scroll_down"), None); op = "SCROLL_DOWN"
|
| 274 |
+
if a is None:
|
| 275 |
+
raise Stop(f"step {step}: {op} {sel} not actionable")
|
| 276 |
+
gold_op = op if op in ("SCROLL_DOWN", "SCROLL_UP", "PRESS_ENTER") else {"CLICK_TEXT": "CLICK"}.get(op, op)
|
| 277 |
+
text = val if op == "TYPE_TEXT" else None
|
| 278 |
+
out.write(json.dumps(case(page, sp["goal"], gold_op, a["id"], a, hist, sp, key), ensure_ascii=False) + "\n")
|
| 279 |
+
out.write(json.dumps(case(page, sp["subgoals"][cur][1], gold_op, a["id"], a, hist, sp, key + "@sub"), ensure_ascii=False) + "\n")
|
| 280 |
+
n += 2
|
| 281 |
+
before = page["fingerprint"]
|
| 282 |
+
b.act(a, page, text=text); time.sleep(0.15 if op != "CLICK" else 0.25)
|
| 283 |
+
page = observe(b)
|
| 284 |
+
hist.append(hist_entry(a, text, page["fingerprint"] != before))
|
| 285 |
+
prev_sub = cur
|
| 286 |
+
# DART-style noise: a harmless detour the expert then has to recover from (not recorded as a gold step)
|
| 287 |
+
if rng.random() < noise:
|
| 288 |
+
submit_node = node_of(b, "[data-g=submit]")
|
| 289 |
+
decoy = {"Deals", "Help", "Blog", "Careers", "Travel guides", "Gift cards", "Manage booking", "About", "Privacy", "Contact"}
|
| 290 |
+
cands = [x for x in page["actions"] if x["kind"] == "click" and x.get("node") != submit_node and
|
| 291 |
+
((x["label"].startswith("Open ")) or (x.get("role") == "link" and x["label"] in decoy))]
|
| 292 |
+
if cands:
|
| 293 |
+
z = rng.choice(cands)
|
| 294 |
+
try:
|
| 295 |
+
before = page["fingerprint"]; b.act(z, page); time.sleep(0.2); page = observe(b)
|
| 296 |
+
hist.append(hist_entry(z, None, page["fingerprint"] != before))
|
| 297 |
+
except Exception:
|
| 298 |
+
page = observe(b)
|
| 299 |
+
raise Stop("step budget")
|
| 300 |
+
finally:
|
| 301 |
+
b.close()
|
| 302 |
+
|
| 303 |
+
|
| 304 |
+
def main():
|
| 305 |
+
out_f, n_ep = sys.argv[1], int(sys.argv[2])
|
| 306 |
+
seed0 = int(sys.argv[3]) if len(sys.argv) > 3 else 1
|
| 307 |
+
kinds = (sys.argv[4] if len(sys.argv) > 4 else "flight,hotel,shop").split(",")
|
| 308 |
+
noise = float(sys.argv[5]) if len(sys.argv) > 5 else 0.1
|
| 309 |
+
rng = random.Random(seed0)
|
| 310 |
+
ok = fail = cases = 0; reasons = {}
|
| 311 |
+
t0 = time.time()
|
| 312 |
+
with open(out_f, "a") as out:
|
| 313 |
+
seed = seed0
|
| 314 |
+
while ok + fail < n_ep:
|
| 315 |
+
if seed % 10 == 0:
|
| 316 |
+
seed += 1; continue
|
| 317 |
+
kind = kinds[(ok + fail) % len(kinds)]
|
| 318 |
+
try:
|
| 319 |
+
c, done = run_episode(kind, seed, out, rng, noise)
|
| 320 |
+
cases += c; ok += 1
|
| 321 |
+
except Exception as e:
|
| 322 |
+
fail += 1; r = f"{type(e).__name__}: {str(e)[:60]}"; reasons[r] = reasons.get(r, 0) + 1
|
| 323 |
+
seed += 1
|
| 324 |
+
if (ok + fail) % 25 == 0:
|
| 325 |
+
print(f" {ok+fail} episodes ok={ok} fail={fail} cases={cases} {time.time()-t0:.0f}s", flush=True)
|
| 326 |
+
print(f"done: ok={ok} fail={fail} cases={cases} failures={sorted(reasons.items(), key=lambda kv: -kv[1])[:6]}")
|
| 327 |
+
|
| 328 |
+
|
| 329 |
+
if __name__ == "__main__":
|
| 330 |
+
main()
|
code/finetune/webgym/serve.sh
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
# serve.sh start|stop|restart -- webgym server on :8811, tracked by pid file (never pkill by pattern)
|
| 3 |
+
D=$(cd "$(dirname "$0")" && pwd); PIDF=${GYM_PIDFILE:-/tmp/webgym.pid}; LOG=${GYM_LOG:-/tmp/webgym.log}
|
| 4 |
+
stop() { [ -f $PIDF ] && kill $(cat $PIDF) 2>/dev/null; rm -f $PIDF; sleep 0.5; }
|
| 5 |
+
start() { nohup $D/../../.venv/bin/python $D/app.py 8811 > $LOG 2>&1 & echo $! > $PIDF; sleep 1.5; curl -s --noproxy '*' -o /dev/null -w "webgym %{http_code}\n" http://127.0.0.1:8811/t/flight/1; }
|
| 6 |
+
case "$1" in start) start;; stop) stop;; restart) stop; start;; esac
|
code/finetune/webgym/spec.py
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Task specs for webgym: every (kind, seed) deterministically yields labels, widget implementations, layout, target
|
| 2 |
+
values, the natural-language goal and planner-style sub-goals. Seeds with seed % 10 == 0 are held out for evaluation.
|
| 3 |
+
"""
|
| 4 |
+
import datetime as dt
|
| 5 |
+
import random
|
| 6 |
+
|
| 7 |
+
CITIES = [("zrh", "Zürich", "Switzerland", "ZRH", "Zurich"), ("lon", "London", "United Kingdom", "LHR", ""), ("par", "Paris", "France", "CDG", ""),
|
| 8 |
+
("ber", "Berlin", "Germany", "BER", ""), ("mad", "Madrid", "Spain", "MAD", ""), ("rom", "Rome", "Italy", "FCO", "Roma"),
|
| 9 |
+
("ams", "Amsterdam", "Netherlands", "AMS", ""), ("vie", "Vienna", "Austria", "VIE", "Wien"), ("muc", "Munich", "Germany", "MUC", "München"),
|
| 10 |
+
("lis", "Lisbon", "Portugal", "LIS", "Lisboa"), ("prg", "Prague", "Czechia", "PRG", "Praha"), ("dub", "Dublin", "Ireland", "DUB", ""),
|
| 11 |
+
("osl", "Oslo", "Norway", "OSL", ""), ("hel", "Helsinki", "Finland", "HEL", ""), ("bcn", "Barcelona", "Spain", "BCN", ""),
|
| 12 |
+
("nyc", "New York", "United States", "JFK", ""), ("chi", "Chicago", "United States", "ORD", ""), ("tor", "Toronto", "Canada", "YYZ", ""),
|
| 13 |
+
("tyo", "Tokyo", "Japan", "HND", ""), ("sel", "Seoul", "South Korea", "ICN", ""), ("sin", "Singapore", "Singapore", "SIN", ""),
|
| 14 |
+
("bkk", "Bangkok", "Thailand", "BKK", ""), ("syd", "Sydney", "Australia", "SYD", ""), ("ist", "Istanbul", "Türkiye", "IST", ""),
|
| 15 |
+
("mil", "Milan", "Italy", "MXP", "Milano"), ("man", "Manchester", "United Kingdom", "MAN", ""), ("mia", "Miami", "United States", "MIA", ""),
|
| 16 |
+
("ath", "Athens", "Greece", "ATH", ""), ("waw", "Warsaw", "Poland", "WAW", ""), ("cph", "Copenhagen", "Denmark", "CPH", "")]
|
| 17 |
+
TODAY = dt.date(2026, 9, 25)
|
| 18 |
+
MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def city_options(rng, airports):
|
| 22 |
+
out = []
|
| 23 |
+
for key, name, country, code, alias in CITIES:
|
| 24 |
+
out.append({"key": key, "label": f"{name}, {country}", "short": name, "alias": alias, "name": name})
|
| 25 |
+
if airports:
|
| 26 |
+
out.append({"key": key + "-ap", "label": f"{name} Airport ({code})", "short": f"{name} ({code})", "alias": code, "name": name})
|
| 27 |
+
return out
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def say_date(d, rng):
|
| 31 |
+
return rng.choice([f"{MONTHS[d.month-1]} {d.day}, {d.year}", f"{d.day} {MONTHS[d.month-1]} {d.year}", f"{MONTHS[d.month-1]} {d.day}"])
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def pick(rng, xs):
|
| 35 |
+
return rng.choice(xs)
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def impl(rng, choices, weights=None):
|
| 39 |
+
return rng.choices(choices, weights=weights)[0]
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
# ------------------------------------------------------------------------------------------------ flight
|
| 43 |
+
def flight(seed):
|
| 44 |
+
rng = random.Random(seed * 7919 + 1)
|
| 45 |
+
trigger = rng.random() < 0.4
|
| 46 |
+
airports = rng.random() < 0.5
|
| 47 |
+
o, d = rng.sample(CITIES, 2)
|
| 48 |
+
one_way = rng.random() < 0.65
|
| 49 |
+
dep = TODAY + dt.timedelta(days=rng.randint(2, 80))
|
| 50 |
+
ret = dep + dt.timedelta(days=rng.randint(2, 14))
|
| 51 |
+
adults = rng.choices([1, 2, 3, 4], weights=[5, 3, 1, 1])[0]
|
| 52 |
+
cabin = rng.choices(["economy", "premium", "business", "first"], weights=[5, 2, 2, 1])[0]
|
| 53 |
+
lab = dict(origin=pick(rng, ["Where from?", "From", "Origin", "Leaving from", "Departure airport", "Flying from"]),
|
| 54 |
+
destination=pick(rng, ["Where to?", "To", "Destination", "Going to", "Arrival airport", "Flying to"]),
|
| 55 |
+
trip=pick(rng, ["Trip type", "Ticket type", "Trip"]), date=pick(rng, ["Departure", "Depart", "Departure date", "Outbound"]),
|
| 56 |
+
ret=pick(rng, ["Return", "Return date", "Inbound"]), adults=pick(rng, ["Adults", "Passengers", "Travelers"]),
|
| 57 |
+
cabin=pick(rng, ["Cabin", "Class", "Seating class", "Travel class"]), submit=pick(rng, ["Search", "Search flights", "Find flights", "Explore", "Show flights"]))
|
| 58 |
+
ow_label = pick(rng, ["One way", "One-way"])
|
| 59 |
+
date_impl = impl(rng, ["picker", "typed"], [8, 1])
|
| 60 |
+
date_done = pick(rng, [None, "Done", "Apply"]) if date_impl == "picker" else None
|
| 61 |
+
fields = [
|
| 62 |
+
{"w": "choice", "key": "trip", "label": lab["trip"], "impl": impl(rng, ["radio", "segmented", "select", "dropdown"]), "default": "round",
|
| 63 |
+
"options": [{"key": "round", "label": pick(rng, ["Round trip", "Return"])}, {"key": "oneway", "label": ow_label}]},
|
| 64 |
+
{"w": "combo", "key": "origin", "label": lab["origin"], "trigger": trigger, "suggest": rng.random() < 0.9,
|
| 65 |
+
"options": city_options(rng, airports), "placeholder": pick(rng, ["", "City or airport", "Leaving from"])},
|
| 66 |
+
{"w": "combo", "key": "destination", "label": lab["destination"], "trigger": trigger, "suggest": True,
|
| 67 |
+
"options": city_options(rng, airports), "placeholder": pick(rng, ["", "City or airport", "Going to"])},
|
| 68 |
+
{"w": "date", "key": "date", "label": lab["date"], "impl": date_impl, "done": date_done, "start": [TODAY.year, TODAY.month - 1]},
|
| 69 |
+
{"w": "date", "key": "ret", "label": lab["ret"], "impl": date_impl, "done": date_done, "start": [TODAY.year, TODAY.month - 1], "only_round": True},
|
| 70 |
+
{"w": "count", "key": "adults", "label": lab["adults"], "impl": impl(rng, ["select", "stepper", "popup"]), "default": 1, "min": 1, "max": 9,
|
| 71 |
+
"one": "adult", "many": "adults"},
|
| 72 |
+
{"w": "choice", "key": "cabin", "label": lab["cabin"], "impl": impl(rng, ["radio", "select", "dropdown", "segmented"], [2, 4, 4, 1]), "default": "economy",
|
| 73 |
+
"options": [{"key": "economy", "label": "Economy"}, {"key": "premium", "label": "Premium economy"}, {"key": "business", "label": "Business"},
|
| 74 |
+
{"key": "first", "label": "First"}]},
|
| 75 |
+
]
|
| 76 |
+
target = {"trip": "oneway" if one_way else "round", "origin": o[0], "destination": d[0], "date": dep.isoformat(), "adults": adults, "cabin": cabin}
|
| 77 |
+
if not one_way:
|
| 78 |
+
target["ret"] = ret.isoformat()
|
| 79 |
+
# goal text: every constraint that differs from a default, plus some stated defaults
|
| 80 |
+
parts_trip = pick(rng, ["one-way flights", "a one-way flight", "one way flights"]) if one_way else pick(rng, ["round-trip flights", "a return flight", "round trip flights"])
|
| 81 |
+
who = {1: pick(rng, ["for one adult", "for 1 adult", ""]), 2: "for two adults", 3: "for 3 adults", 4: "for four adults"}[adults]
|
| 82 |
+
cab = {"economy": pick(rng, ["in economy", ""]), "premium": "in premium economy", "business": "in business class", "first": "in first class"}[cabin]
|
| 83 |
+
when = f"on {say_date(dep, rng)}" + ("" if one_way else f", returning {say_date(ret, rng)}")
|
| 84 |
+
o_name = o[4] if o[4] and rng.random() < 0.5 else o[1]
|
| 85 |
+
goal = " ".join(x for x in [pick(rng, ["Find", "Search for", "Look up", "Show me"]), parts_trip, f"from {o_name} to {d[1]}", when, who, cab] if x).strip() + "."
|
| 86 |
+
if rng.random() < 0.5:
|
| 87 |
+
goal += pick(rng, [" Stop when matching flight options are visible.", " Show the results.", " Stop at the results list."])
|
| 88 |
+
subgoals = [("trip", "Set the trip type to one-way" if one_way else "Set the trip type to round trip"),
|
| 89 |
+
("origin", f"Set where from (origin, departure) to {o[1]}"), ("destination", f"Set where to (destination, arrival) to {d[1]}"),
|
| 90 |
+
("date", f"Set the departure date to {MONTHS[dep.month-1]} {dep.day}, {dep.year}")]
|
| 91 |
+
if not one_way:
|
| 92 |
+
subgoals.append(("ret", f"Set the return date to {MONTHS[ret.month-1]} {ret.day}, {ret.year}"))
|
| 93 |
+
subgoals += [("adults", f"Set the number of adults to {adults}"), ("cabin", f"Set the cabin class to {dict(economy='economy', premium='premium economy', business='business', first='first')[cabin]}"),
|
| 94 |
+
("submit", "Search for flights and show the matching results")]
|
| 95 |
+
if not one_way and rng.random() < 0.0:
|
| 96 |
+
pass
|
| 97 |
+
return common(rng, "flight", seed, fields, target, goal, subgoals, lab["submit"],
|
| 98 |
+
results_title=f"{o[1]} to {d[1]}")
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
# ------------------------------------------------------------------------------------------------ hotel
|
| 102 |
+
def hotel(seed):
|
| 103 |
+
rng = random.Random(seed * 104729 + 3)
|
| 104 |
+
trigger = rng.random() < 0.3
|
| 105 |
+
c = rng.choice(CITIES)
|
| 106 |
+
cin = TODAY + dt.timedelta(days=rng.randint(2, 70)); nights = rng.randint(1, 7); cout = cin + dt.timedelta(days=nights)
|
| 107 |
+
guests = rng.choices([1, 2, 3, 4], weights=[2, 5, 1, 1])[0]
|
| 108 |
+
date_done = pick(rng, [None, "Done", "Apply"])
|
| 109 |
+
lab = dict(dest=pick(rng, ["Destination", "Where are you going?", "City", "Location", "Going to"]),
|
| 110 |
+
cin=pick(rng, ["Check-in", "Check in", "Arrival"]), cout=pick(rng, ["Check-out", "Check out", "Departure"]),
|
| 111 |
+
guests=pick(rng, ["Guests", "Adults", "Travelers"]), submit=pick(rng, ["Search", "Search hotels", "Find stays", "Show hotels"]))
|
| 112 |
+
fields = [
|
| 113 |
+
{"w": "combo", "key": "dest", "label": lab["dest"], "trigger": trigger, "suggest": True, "options": city_options(rng, False),
|
| 114 |
+
"placeholder": pick(rng, ["", "Where to?", "Search destinations"])},
|
| 115 |
+
{"w": "date", "key": "cin", "label": lab["cin"], "impl": "picker", "done": date_done, "start": [TODAY.year, TODAY.month - 1]},
|
| 116 |
+
{"w": "date", "key": "cout", "label": lab["cout"], "impl": "picker", "done": date_done, "start": [TODAY.year, TODAY.month - 1]},
|
| 117 |
+
{"w": "count", "key": "guests", "label": lab["guests"], "impl": impl(rng, ["select", "stepper", "popup"]), "default": 2, "min": 1, "max": 8,
|
| 118 |
+
"one": "guest", "many": "guests"},
|
| 119 |
+
]
|
| 120 |
+
target = {"dest": c[0], "cin": cin.isoformat(), "cout": cout.isoformat(), "guests": guests}
|
| 121 |
+
post = {}
|
| 122 |
+
if rng.random() < 0.5:
|
| 123 |
+
post["filter"] = rng.choice(["Free cancellation", "Breakfast included", "Pool", "Pet friendly"])
|
| 124 |
+
if rng.random() < 0.4:
|
| 125 |
+
post["sort"] = rng.choice(["Price: low to high", "Guest rating", "Distance to center"])
|
| 126 |
+
who = {1: "for one guest", 2: pick(rng, ["for two guests", "for 2 adults", ""]), 3: "for three guests", 4: "for 4 guests"}[guests]
|
| 127 |
+
goal = f"{pick(rng, ['Find a hotel', 'Search for hotels', 'Look for a place to stay', 'Find stays'])} in {c[1]} from {say_date(cin, rng)} to {say_date(cout, rng)} {who}".strip()
|
| 128 |
+
if post.get("filter"):
|
| 129 |
+
goal += f", {pick(rng, ['only showing', 'filtered to', 'with'])} {post['filter'].lower()}"
|
| 130 |
+
if post.get("sort"):
|
| 131 |
+
goal += f", sorted by {post['sort'].lower()}"
|
| 132 |
+
goal += "."
|
| 133 |
+
subgoals = [("dest", f"Set the destination (city, location) to {c[1]}"), ("cin", f"Set the check-in date to {MONTHS[cin.month-1]} {cin.day}, {cin.year}"),
|
| 134 |
+
("cout", f"Set the check-out date to {MONTHS[cout.month-1]} {cout.day}, {cout.year}"), ("guests", f"Set the number of guests to {guests}"),
|
| 135 |
+
("submit", "Search for hotels and show the results")]
|
| 136 |
+
if post.get("filter"):
|
| 137 |
+
subgoals.append(("filter", f"Turn on the '{post['filter']}' filter"))
|
| 138 |
+
if post.get("sort"):
|
| 139 |
+
subgoals.append(("sort", f"Sort the results by {post['sort'].lower()}"))
|
| 140 |
+
return common(rng, "hotel", seed, fields, target, goal, subgoals, lab["submit"], results_title=f"Stays in {c[1]}", post=post)
|
| 141 |
+
|
| 142 |
+
|
| 143 |
+
# ------------------------------------------------------------------------------------------------ shop listing
|
| 144 |
+
BRANDS = ["Acme", "Globex", "Initech", "Umbrella", "Hooli", "Stark", "Wayne", "Tyrell"]
|
| 145 |
+
PRODUCTS = ["Laptop", "Headphones", "Backpack", "Coffee maker", "Desk lamp", "Keyboard", "Monitor", "Water bottle", "Running shoes", "Camera",
|
| 146 |
+
"Blender", "Jacket", "Tent", "Watch", "Speaker", "Router"]
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
def shop(seed):
|
| 150 |
+
rng = random.Random(seed * 15485863 + 5)
|
| 151 |
+
cat = rng.choice(["Electronics", "Home", "Outdoor", "Fashion", "Kitchen"])
|
| 152 |
+
items = []
|
| 153 |
+
for i in range(48):
|
| 154 |
+
r = random.Random(seed * 1000 + i)
|
| 155 |
+
items.append({"id": i, "name": f"{r.choice(BRANDS)} {r.choice(PRODUCTS)} {r.choice(['Pro', 'Lite', 'Max', 'Mini', 'Plus', 'X', '2', 'S'])}",
|
| 156 |
+
"brand": None, "price": round(r.uniform(9, 900), 2)})
|
| 157 |
+
items[-1]["brand"] = items[-1]["name"].split()[0]
|
| 158 |
+
per_page = rng.choice([12, 16])
|
| 159 |
+
task = rng.choice(["page", "sort", "brand", "search", "search_sort", "brand_page", "open_on_page"])
|
| 160 |
+
post, goal, subgoals = {}, "", []
|
| 161 |
+
if task == "page":
|
| 162 |
+
n = rng.choice([2, 2, 3])
|
| 163 |
+
post["page"] = n
|
| 164 |
+
goal = pick(rng, [f"Go to page {n} of the products.", f"Show page {n}.", f"Open page {n} of the listing.", "Go to the next page of products." if n == 2 else f"Go to page {n}."])
|
| 165 |
+
subgoals = [("page", f"Go to page {n} of the product list")]
|
| 166 |
+
elif task == "sort":
|
| 167 |
+
s = rng.choice(["Price: low to high", "Price: high to low", "Newest", "Top rated"])
|
| 168 |
+
post["sort"] = s
|
| 169 |
+
goal = pick(rng, [f"Sort the products by {s.lower()}.", f"Show the products sorted by {s.lower()}.", f"{s}, please."])
|
| 170 |
+
subgoals = [("sort", f"Sort the products by {s.lower()}")]
|
| 171 |
+
elif task == "brand":
|
| 172 |
+
b = rng.choice(BRANDS); post["brand"] = b
|
| 173 |
+
goal = pick(rng, [f"Show only {b} products.", f"Filter the list to the brand {b}.", f"I only want to see {b} items."])
|
| 174 |
+
subgoals = [("brand", f"Turn on the brand filter for {b}")]
|
| 175 |
+
elif task == "search":
|
| 176 |
+
q = rng.choice(PRODUCTS); post["q"] = q.lower()
|
| 177 |
+
goal = pick(rng, [f"Search the shop for '{q.lower()}'.", f"Find {q.lower()}s.", f"Search for {q.lower()} and show the results."])
|
| 178 |
+
subgoals = [("q", f"Search for '{q.lower()}' and show the results")]
|
| 179 |
+
elif task == "search_sort":
|
| 180 |
+
q = rng.choice(PRODUCTS); s = rng.choice(["Price: low to high", "Price: high to low"]); post.update(q=q.lower(), sort=s)
|
| 181 |
+
goal = f"Search for {q.lower()} and sort the results by {s.lower()}."
|
| 182 |
+
subgoals = [("q", f"Search for '{q.lower()}' and show the results"), ("sort", f"Sort the results by {s.lower()}")]
|
| 183 |
+
elif task == "brand_page":
|
| 184 |
+
counts = {x: sum(i["brand"] == x for i in items) for x in BRANDS}
|
| 185 |
+
ok = [x for x in BRANDS if counts[x] > per_page] or [max(counts, key=counts.get)]
|
| 186 |
+
b = rng.choice(ok); post.update(brand=b, page=2)
|
| 187 |
+
if counts[b] <= per_page: # not enough items for a second page: make it a plain brand task
|
| 188 |
+
post.pop("page"); goal = f"Show only {b} products."; subgoals = [("brand", f"Turn on the brand filter for {b}")]
|
| 189 |
+
return shop_spec(rng, seed, cat, items, per_page, post, goal, subgoals)
|
| 190 |
+
goal = f"Show only {b} products and go to page 2."
|
| 191 |
+
subgoals = [("brand", f"Turn on the brand filter for {b}"), ("page", "Go to page 2 of the product list")]
|
| 192 |
+
else:
|
| 193 |
+
idx = rng.randint(per_page, min(47, 2 * per_page - 1)); post.update(page=2, open=idx)
|
| 194 |
+
goal = f"Open the product '{items[idx]['name']}' (it is on page 2)." if rng.random() < 0.5 else f"Go to page 2 and open '{items[idx]['name']}'."
|
| 195 |
+
subgoals = [("page", "Go to page 2 of the product list"), ("open", f"Open the product page of '{items[idx]['name']}'")]
|
| 196 |
+
return shop_spec(rng, seed, cat, items, per_page, post, goal, subgoals)
|
| 197 |
+
|
| 198 |
+
|
| 199 |
+
def shop_spec(rng, seed, cat, items, per_page, post, goal, subgoals):
|
| 200 |
+
return {"kind": "shop", "seed": seed, "category": cat, "items": items, "per_page": per_page, "post": post, "goal": goal, "subgoals": subgoals,
|
| 201 |
+
"search_button": rng.random() < 0.5, "sort_impl": impl(rng, ["select", "dropdown"]), "pager": pick(rng, ["numbers", "next", "both"]),
|
| 202 |
+
"hero": rng.choice([0, 0, 200, 450]), "cookie": rng.random() < 0.25, "held_out": seed % 10 == 0,
|
| 203 |
+
"labels": {"search": pick(rng, ["Search products", "Search", "What are you looking for?"]), "sort": pick(rng, ["Sort by", "Sort", "Order by"]),
|
| 204 |
+
"brand": pick(rng, ["Brand", "Brands", "Manufacturer"]), "next": pick(rng, ["Next", "Next ›", "Next page", "›"])}}
|
| 205 |
+
|
| 206 |
+
|
| 207 |
+
# ------------------------------------------------------------------------------------------------ shared
|
| 208 |
+
def common(rng, kind, seed, fields, target, goal, subgoals, submit, results_title, post=None):
|
| 209 |
+
rng.shuffle(order := [f["key"] for f in fields])
|
| 210 |
+
# keep a natural order most of the time (trip type first, then places, dates, counts, class), shuffled otherwise
|
| 211 |
+
natural = rng.random() < 0.7
|
| 212 |
+
return {"kind": kind, "seed": seed, "fields": fields, "target": target, "goal": goal, "subgoals": subgoals, "submit": submit,
|
| 213 |
+
"order": [f["key"] for f in fields] if natural else order, "results_title": results_title, "post": post or {},
|
| 214 |
+
"hero": rng.choice([0, 0, 0, 300, 650]), "cookie": rng.random() < 0.25, "held_out": seed % 10 == 0,
|
| 215 |
+
"decoys": rng.sample(["Deals", "Help", "Sign in", "Manage booking", "Explore", "Travel guides", "Gift cards", "Careers", "Blog"], 4)}
|
| 216 |
+
|
| 217 |
+
|
| 218 |
+
KINDS = {"flight": flight, "hotel": hotel, "shop": shop}
|
| 219 |
+
|
| 220 |
+
|
| 221 |
+
def make(kind, seed):
|
| 222 |
+
return KINDS[kind](seed)
|
code/finetune/webgym/widgets.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// webgym widget library: every widget keeps its committed value in window.__gym.state, exactly like a real site
|
| 2 |
+
// (typing into an autocomplete field does NOT commit a value until an option is chosen).
|
| 3 |
+
(function () {
|
| 4 |
+
const G = window.__gym = window.__gym || { state: {}, fields: {} };
|
| 5 |
+
const $ = (s, r = document) => r.querySelector(s);
|
| 6 |
+
const el = (tag, attrs = {}, ...kids) => {
|
| 7 |
+
const e = document.createElement(tag);
|
| 8 |
+
for (const [k, v] of Object.entries(attrs)) {
|
| 9 |
+
if (k === "text") e.textContent = v; else if (k.startsWith("on")) e.addEventListener(k.slice(2), v); else e.setAttribute(k, v);
|
| 10 |
+
}
|
| 11 |
+
for (const k of kids) e.append(k);
|
| 12 |
+
return e;
|
| 13 |
+
};
|
| 14 |
+
const norm = s => s.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
|
| 15 |
+
const close = d => { d.hidden = true; };
|
| 16 |
+
|
| 17 |
+
// ---------------------------------------------------------------- autocomplete (inline or behind a trigger button)
|
| 18 |
+
G.combo = function (host, f) {
|
| 19 |
+
const id = f.key;
|
| 20 |
+
const input = el("input", { id: id + "-input", "data-g": id + "-input", type: "text", autocomplete: "off", role: "combobox",
|
| 21 |
+
"aria-autocomplete": "list", "aria-expanded": "false", "aria-controls": id + "-list", placeholder: f.placeholder || "" });
|
| 22 |
+
const label = el("label", { for: id + "-input", text: f.label });
|
| 23 |
+
const list = el("ul", { id: id + "-list", role: "listbox", class: "list" }); list.hidden = true;
|
| 24 |
+
const commit = opt => {
|
| 25 |
+
G.state[id] = opt.key; input.value = opt.short; list.hidden = true; input.setAttribute("aria-expanded", "false");
|
| 26 |
+
if (trigger) { trigger.querySelector(".v").textContent = opt.short; close(dialog); }
|
| 27 |
+
};
|
| 28 |
+
const render = () => {
|
| 29 |
+
const q = norm(input.value.trim()); list.innerHTML = "";
|
| 30 |
+
if (!f.suggest) { G.state[id] = input.value.trim() ? "text:" + input.value.trim() : null; return; }
|
| 31 |
+
if (q.length < 2) { list.hidden = true; input.setAttribute("aria-expanded", "false"); return; }
|
| 32 |
+
const hits = f.options.filter(o => norm(o.label).includes(q) || norm(o.alias || "").includes(q)).slice(0, 6);
|
| 33 |
+
hits.forEach((o, i) => list.append(el("li", { role: "option", tabindex: "-1", "data-g": id + "-opt-" + o.key, class: "opt",
|
| 34 |
+
onclick: () => commit(o) }, o.label)));
|
| 35 |
+
list.hidden = !hits.length; input.setAttribute("aria-expanded", String(!!hits.length));
|
| 36 |
+
};
|
| 37 |
+
input.addEventListener("input", render);
|
| 38 |
+
input.addEventListener("blur", () => setTimeout(() => { list.hidden = true; input.setAttribute("aria-expanded", "false"); }, 250));
|
| 39 |
+
input.addEventListener("focus", () => { if (input.value.trim().length >= 2 && f.suggest) render(); });
|
| 40 |
+
input.addEventListener("keydown", e => {
|
| 41 |
+
if (e.key === "Enter") { e.preventDefault(); const first = list.querySelector("[role=option]"); if (first && !list.hidden) first.click(); }
|
| 42 |
+
});
|
| 43 |
+
let trigger = null, dialog = null;
|
| 44 |
+
if (f.trigger) { // Google-style: a button shows the value; clicking it opens a dialog with the real input
|
| 45 |
+
trigger = el("button", { type: "button", "data-g": id + "-trigger", "aria-haspopup": "dialog", class: "trig" },
|
| 46 |
+
el("span", { class: "k", text: f.label + " " }), el("span", { class: "v", text: f.empty || "" }));
|
| 47 |
+
dialog = el("div", { role: "dialog", "aria-label": f.label, class: "dlg", "data-g": id + "-dialog" }, label, input, list,
|
| 48 |
+
el("button", { type: "button", "data-g": id + "-close", onclick: () => close(dialog), text: "Close" }));
|
| 49 |
+
dialog.hidden = true;
|
| 50 |
+
trigger.addEventListener("click", () => { dialog.hidden = false; input.value = ""; input.focus(); });
|
| 51 |
+
host.append(trigger, dialog);
|
| 52 |
+
} else host.append(label, input, list);
|
| 53 |
+
G.fields[id] = { kind: "combo", trigger: !!f.trigger, suggest: !!f.suggest };
|
| 54 |
+
G.state[id] = null;
|
| 55 |
+
};
|
| 56 |
+
|
| 57 |
+
// ---------------------------------------------------------------- one-of: radio group, segmented buttons, native select, custom dropdown
|
| 58 |
+
G.choice = function (host, f) {
|
| 59 |
+
const id = f.key; G.state[id] = f.default; G.fields[id] = { kind: "choice", impl: f.impl };
|
| 60 |
+
const legend = f.label;
|
| 61 |
+
if (f.impl === "radio") {
|
| 62 |
+
const fs = el("fieldset", {}, el("legend", { text: legend }));
|
| 63 |
+
f.options.forEach(o => {
|
| 64 |
+
const r = el("input", { type: "radio", name: id, id: id + "-" + o.key, value: o.key, "data-g": id + "-" + o.key });
|
| 65 |
+
if (o.key === f.default) r.checked = true;
|
| 66 |
+
r.addEventListener("change", () => { G.state[id] = o.key; });
|
| 67 |
+
fs.append(el("span", { class: "ro" }, r, el("label", { for: id + "-" + o.key, text: o.label })));
|
| 68 |
+
});
|
| 69 |
+
host.append(fs);
|
| 70 |
+
} else if (f.impl === "segmented") {
|
| 71 |
+
const g = el("div", { role: "group", "aria-label": legend, class: "seg" });
|
| 72 |
+
f.options.forEach(o => {
|
| 73 |
+
const b = el("button", { type: "button", "data-g": id + "-" + o.key, "aria-pressed": String(o.key === f.default), text: o.label });
|
| 74 |
+
b.addEventListener("click", () => { G.state[id] = o.key; g.querySelectorAll("button").forEach(x => x.setAttribute("aria-pressed", String(x === b))); });
|
| 75 |
+
g.append(b);
|
| 76 |
+
});
|
| 77 |
+
host.append(el("span", { class: "k", text: legend + ": " }), g);
|
| 78 |
+
} else if (f.impl === "select") {
|
| 79 |
+
const s = el("select", { id: id + "-select", "data-g": id + "-select" });
|
| 80 |
+
f.options.forEach(o => { const op = el("option", { value: o.key, text: o.label }); if (o.key === f.default) op.selected = true; s.append(op); });
|
| 81 |
+
s.addEventListener("change", () => { G.state[id] = s.value; });
|
| 82 |
+
host.append(el("label", { for: id + "-select", text: legend }), s);
|
| 83 |
+
} else { // custom dropdown: button showing the value -> listbox of options
|
| 84 |
+
const cur = () => f.options.find(o => o.key === G.state[id]).label;
|
| 85 |
+
const b = el("button", { type: "button", "data-g": id + "-trigger", "aria-haspopup": "listbox", "aria-expanded": "false",
|
| 86 |
+
"aria-label": legend + ": " + cur(), text: cur() + " ▾" });
|
| 87 |
+
const lb = el("div", { role: "listbox", "aria-label": legend, class: "list" }); lb.hidden = true;
|
| 88 |
+
f.options.forEach(o => lb.append(el("div", { role: "option", "data-g": id + "-" + o.key, tabindex: "-1", class: "opt",
|
| 89 |
+
onclick: () => { G.state[id] = o.key; b.textContent = o.label + " ▾"; b.setAttribute("aria-label", legend + ": " + o.label);
|
| 90 |
+
lb.hidden = true; b.setAttribute("aria-expanded", "false"); } }, o.label)));
|
| 91 |
+
b.addEventListener("click", () => { lb.hidden = !lb.hidden; b.setAttribute("aria-expanded", String(!lb.hidden)); });
|
| 92 |
+
host.append(el("span", { class: "k", text: legend + " " }), b, lb);
|
| 93 |
+
}
|
| 94 |
+
};
|
| 95 |
+
|
| 96 |
+
// ---------------------------------------------------------------- date picker (month grid) or a typed date field
|
| 97 |
+
const MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
| 98 |
+
const DAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
|
| 99 |
+
G.fmt = d => `${DAYS[d.getDay()]}, ${MONTHS[d.getMonth()]} ${d.getDate()}, ${d.getFullYear()}`;
|
| 100 |
+
G.date = function (host, f) {
|
| 101 |
+
const id = f.key; G.state[id] = null; G.fields[id] = { kind: "date", impl: f.impl, done: !!f.done };
|
| 102 |
+
if (f.impl === "typed") {
|
| 103 |
+
const i = el("input", { id: id + "-input", "data-g": id + "-input", type: "text", placeholder: "MM/DD/YYYY" });
|
| 104 |
+
i.addEventListener("input", () => {
|
| 105 |
+
const m = i.value.trim().match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) || i.value.trim().match(/^(\d{4})-(\d{2})-(\d{2})$/);
|
| 106 |
+
if (!m) { G.state[id] = null; return; }
|
| 107 |
+
const d = i.value.includes("/") ? new Date(+m[3], +m[1] - 1, +m[2]) : new Date(+m[1], +m[2] - 1, +m[3]);
|
| 108 |
+
G.state[id] = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
|
| 109 |
+
});
|
| 110 |
+
host.append(el("label", { for: id + "-input", text: f.label }), i);
|
| 111 |
+
return;
|
| 112 |
+
}
|
| 113 |
+
let view = new Date(f.start[0], f.start[1], 1), picked = null;
|
| 114 |
+
const shown = el("span", { class: "v", text: f.empty || "" });
|
| 115 |
+
const trig = el("button", { type: "button", "data-g": id + "-trigger", "aria-haspopup": "dialog", class: "trig" },
|
| 116 |
+
el("span", { class: "k", text: f.label + " " }), shown);
|
| 117 |
+
const dlg = el("div", { role: "dialog", "aria-label": f.label + " calendar", class: "dlg cal", "data-g": id + "-dialog" }); dlg.hidden = true;
|
| 118 |
+
const title = el("strong", {});
|
| 119 |
+
const grid = el("div", { role: "grid", class: "grid" });
|
| 120 |
+
const draw = () => {
|
| 121 |
+
title.textContent = MONTHS[view.getMonth()] + " " + view.getFullYear(); grid.innerHTML = "";
|
| 122 |
+
const n = new Date(view.getFullYear(), view.getMonth() + 1, 0).getDate();
|
| 123 |
+
for (let day = 1; day <= n; day++) {
|
| 124 |
+
const d = new Date(view.getFullYear(), view.getMonth(), day), iso = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(day).padStart(2, "0")}`;
|
| 125 |
+
const b = el("button", { type: "button", "data-g": id + "-day-" + iso, "aria-label": G.fmt(d), "aria-pressed": String(picked === iso), text: String(day) });
|
| 126 |
+
b.addEventListener("click", () => {
|
| 127 |
+
picked = iso; shown.textContent = G.fmt(d).slice(0, -6); draw();
|
| 128 |
+
if (!f.done) { G.state[id] = iso; dlg.hidden = true; }
|
| 129 |
+
});
|
| 130 |
+
grid.append(b);
|
| 131 |
+
}
|
| 132 |
+
};
|
| 133 |
+
const nav = (k, lab) => el("button", { type: "button", "data-g": id + "-" + k, "aria-label": lab, text: k === "prev" ? "‹" : "›",
|
| 134 |
+
onclick: () => { view = new Date(view.getFullYear(), view.getMonth() + (k === "prev" ? -1 : 1), 1); draw(); } });
|
| 135 |
+
dlg.append(el("div", { class: "hdr" }, nav("prev", "Previous month"), title, nav("next", "Next month")), grid,
|
| 136 |
+
el("button", { type: "button", "data-g": id + "-close", "aria-label": "Close calendar", text: "\u2715", onclick: () => { dlg.hidden = true; } }));
|
| 137 |
+
if (f.done) dlg.append(el("button", { type: "button", "data-g": id + "-done", text: f.done,
|
| 138 |
+
onclick: () => { if (picked) G.state[id] = picked; dlg.hidden = true; } }));
|
| 139 |
+
trig.addEventListener("click", () => { dlg.hidden = false; draw(); });
|
| 140 |
+
host.append(trig, dlg);
|
| 141 |
+
};
|
| 142 |
+
|
| 143 |
+
// ---------------------------------------------------------------- counts: native select, stepper, or a popup with steppers
|
| 144 |
+
G.count = function (host, f) {
|
| 145 |
+
const id = f.key; G.state[id] = f.default; G.fields[id] = { kind: "count", impl: f.impl };
|
| 146 |
+
const noun = n => n + " " + (n === 1 ? f.one : f.many);
|
| 147 |
+
if (f.impl === "select") {
|
| 148 |
+
const s = el("select", { id: id + "-select", "data-g": id + "-select" });
|
| 149 |
+
for (let n = f.min; n <= f.max; n++) { const o = el("option", { value: String(n), text: noun(n) }); if (n === f.default) o.selected = true; s.append(o); }
|
| 150 |
+
s.addEventListener("change", () => { G.state[id] = +s.value; });
|
| 151 |
+
host.append(el("label", { for: id + "-select", text: f.label }), s);
|
| 152 |
+
return;
|
| 153 |
+
}
|
| 154 |
+
const val = el("span", { class: "v", "aria-live": "polite", text: String(f.default) });
|
| 155 |
+
const step = d => { G.state[id] = Math.max(f.min, Math.min(f.max, G.state[id] + d)); val.textContent = String(G.state[id]);
|
| 156 |
+
if (sum) sum.textContent = noun(G.state[id]); };
|
| 157 |
+
const box = el("div", { class: "step" }, el("span", { class: "k", text: f.label + " " }),
|
| 158 |
+
el("button", { type: "button", "data-g": id + "-dec", "aria-label": "Decrease " + f.many, text: "−", onclick: () => step(-1) }), val,
|
| 159 |
+
el("button", { type: "button", "data-g": id + "-inc", "aria-label": "Increase " + f.many, text: "+", onclick: () => step(1) }));
|
| 160 |
+
let sum = null;
|
| 161 |
+
if (f.impl === "popup") {
|
| 162 |
+
sum = el("span", { class: "v", text: noun(f.default) });
|
| 163 |
+
const dlg = el("div", { role: "dialog", "aria-label": f.label, class: "dlg", "data-g": id + "-dialog" }, box,
|
| 164 |
+
el("button", { type: "button", "data-g": id + "-done", text: "Done", onclick: () => { dlg.hidden = true; } }));
|
| 165 |
+
dlg.hidden = true;
|
| 166 |
+
const trig = el("button", { type: "button", "data-g": id + "-trigger", "aria-haspopup": "dialog", class: "trig" }, sum);
|
| 167 |
+
trig.addEventListener("click", () => { dlg.hidden = false; });
|
| 168 |
+
host.append(trig, dlg);
|
| 169 |
+
} else host.append(box);
|
| 170 |
+
};
|
| 171 |
+
|
| 172 |
+
// ---------------------------------------------------------------- plumbing for the expert
|
| 173 |
+
G.status = () => {
|
| 174 |
+
const open = [...document.querySelectorAll("[role=dialog],[role=listbox]")].filter(d => !d.hidden && d.offsetParent !== null)
|
| 175 |
+
.map(d => d.getAttribute("data-g") || d.id || d.getAttribute("aria-label"));
|
| 176 |
+
return { state: G.state, fields: G.fields, open, url: location.href };
|
| 177 |
+
};
|
| 178 |
+
G.node = sel => { const e = document.querySelector(sel); const c = window.__jevFast; return e && c ? (c.ids.get(e) || null) : null; };
|
| 179 |
+
G.nodeText = (sel, text) => {
|
| 180 |
+
const c = window.__jevFast; if (!c) return null;
|
| 181 |
+
const e = [...document.querySelectorAll(sel)].find(x => x.textContent.trim() === text);
|
| 182 |
+
return e ? (c.ids.get(e) || null) : null;
|
| 183 |
+
};
|
| 184 |
+
G.where = sel => { // -1 above the viewport, 0 inside, 1 below, null missing/hidden
|
| 185 |
+
const e = document.querySelector(sel); if (!e || !e.checkVisibility()) return null; const r = e.getBoundingClientRect();
|
| 186 |
+
const cy = r.y + r.height / 2; // jev offers an element only when its center is inside the viewport
|
| 187 |
+
return cy < 0 ? -1 : cy >= innerHeight ? 1 : 0;
|
| 188 |
+
};
|
| 189 |
+
G.attr = (sel, a) => { const e = document.querySelector(sel); return e ? e.getAttribute(a) : null; };
|
| 190 |
+
G.visible = sel => {
|
| 191 |
+
const e = document.querySelector(sel); if (!e) return false; const r = e.getBoundingClientRect();
|
| 192 |
+
return r.width > 0 && r.bottom > 0 && r.top < innerHeight && e.checkVisibility();
|
| 193 |
+
};
|
| 194 |
+
})();
|
code/jev-ultrafast.patch
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
code/kernels/fast.py
CHANGED
|
@@ -190,8 +190,25 @@ class FastLaya:
|
|
| 190 |
p = torch.softmax(logits, -1)
|
| 191 |
k = marker_mask.sum(-1).clamp(min=2).float()
|
| 192 |
ent = -(p * torch.log(p.clamp_min(1e-9))).sum(-1) / torch.log(k)
|
| 193 |
-
|
|
|
|
| 194 |
feats = torch.stack([top2[:, 0], top2[:, 0] - top2[:, 1], ent, k / 255.0], -1)
|
| 195 |
pooled = h[:, 0].float()
|
| 196 |
act_logits = m.act_head(torch.cat([pooled, feats], -1))
|
| 197 |
return logits, act_logits
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
p = torch.softmax(logits, -1)
|
| 191 |
k = marker_mask.sum(-1).clamp(min=2).float()
|
| 192 |
ent = -(p * torch.log(p.clamp_min(1e-9))).sum(-1) / torch.log(k)
|
| 193 |
+
# a choice with a single option (e.g. only WAIT left after exclusions): pad the second slot, as upstream does
|
| 194 |
+
top2 = p.topk(2, -1).values if p.shape[-1] >= 2 else torch.stack([p[:, 0], torch.zeros_like(p[:, 0])], dim=-1)
|
| 195 |
feats = torch.stack([top2[:, 0], top2[:, 0] - top2[:, 1], ent, k / 255.0], -1)
|
| 196 |
pooled = h[:, 0].float()
|
| 197 |
act_logits = m.act_head(torch.cat([pooled, feats], -1))
|
| 198 |
return logits, act_logits
|
| 199 |
+
|
| 200 |
+
|
| 201 |
+
def accelerate(agent, use_graphs=True, verbose=False):
|
| 202 |
+
"""Patch a laya Agent in place so agent.predict() uses the TileLang fast path. Returns the FastLaya."""
|
| 203 |
+
fast = FastLaya(agent.model, max_len=agent.cfg.get("max_len", 1024), use_graphs=use_graphs, verbose=verbose)
|
| 204 |
+
if not hasattr(agent, "_orig_forward"):
|
| 205 |
+
agent._orig_forward = agent.model.forward
|
| 206 |
+
agent.model.forward = fast.forward
|
| 207 |
+
agent.fast = fast
|
| 208 |
+
return fast
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
def restore(agent):
|
| 212 |
+
if hasattr(agent, "_orig_forward"):
|
| 213 |
+
agent.model.forward = agent._orig_forward
|
| 214 |
+
del agent._orig_forward
|
results/round3/gym_eval_v14s.json
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"kind": "flight",
|
| 4 |
+
"seed": 900000,
|
| 5 |
+
"ok": false,
|
| 6 |
+
"steps": 1,
|
| 7 |
+
"status": "done",
|
| 8 |
+
"wall": 1.5,
|
| 9 |
+
"url": "http://127.0.0.1:8811/t/flight/900000#pop-ber",
|
| 10 |
+
"goal": "Show me a return flight from Oslo to Berlin on October 18, returning 23 October 2026 for 3 adults in premium economy. Stop when matching flight options are visible.",
|
| 11 |
+
"plan": [
|
| 12 |
+
"Show me a return flight from Oslo to Berlin on October 18, returning 23 October 2026 for 3 adults in premium economy. Stop when matching flight options are visible."
|
| 13 |
+
]
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"kind": "flight",
|
| 17 |
+
"seed": 900010,
|
| 18 |
+
"ok": false,
|
| 19 |
+
"steps": 2,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 1.3,
|
| 22 |
+
"url": "http://127.0.0.1:8811/t/flight/900010",
|
| 23 |
+
"goal": "Look up round-trip flights from Tokyo to Amsterdam on October 13, returning 20 October 2026 for two adults in first class.",
|
| 24 |
+
"plan": [
|
| 25 |
+
"Look up round-trip flights from Tokyo to Amsterdam on October 13, returning 20 October 2026 for two adults in first class."
|
| 26 |
+
]
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"kind": "flight",
|
| 30 |
+
"seed": 900020,
|
| 31 |
+
"ok": false,
|
| 32 |
+
"steps": 1,
|
| 33 |
+
"status": "done",
|
| 34 |
+
"wall": 1.1,
|
| 35 |
+
"url": "http://127.0.0.1:8811/t/flight/900020",
|
| 36 |
+
"goal": "Search for one-way flights from Roma to Seoul on 15 October 2026 for two adults. Stop when matching flight options are visible.",
|
| 37 |
+
"plan": [
|
| 38 |
+
"Search for one-way flights from Roma to Seoul on 15 October 2026 for two adults. Stop when matching flight options are visible."
|
| 39 |
+
]
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"kind": "flight",
|
| 43 |
+
"seed": 900030,
|
| 44 |
+
"ok": false,
|
| 45 |
+
"steps": 40,
|
| 46 |
+
"status": "ready",
|
| 47 |
+
"wall": 6.2,
|
| 48 |
+
"url": "http://127.0.0.1:8811/t/flight/900030",
|
| 49 |
+
"goal": "Show me a one-way flight from Helsinki to Munich on 26 October 2026 for four adults in business class.",
|
| 50 |
+
"plan": [
|
| 51 |
+
"Show me a one-way flight from Helsinki to Munich on 26 October 2026 for four adults in business class."
|
| 52 |
+
]
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"kind": "flight",
|
| 56 |
+
"seed": 900040,
|
| 57 |
+
"ok": false,
|
| 58 |
+
"steps": 4,
|
| 59 |
+
"status": "done",
|
| 60 |
+
"wall": 1.6,
|
| 61 |
+
"url": "http://127.0.0.1:8811/t/flight/900040/results?trip=round&adults=1&cabin=economy#flight-3",
|
| 62 |
+
"goal": "Show me one way flights from Manchester to Bangkok on November 21 for 3 adults in business class.",
|
| 63 |
+
"plan": [
|
| 64 |
+
"Show me one way flights from Manchester to Bangkok on November 21 for 3 adults in business class."
|
| 65 |
+
]
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"kind": "flight",
|
| 69 |
+
"seed": 900050,
|
| 70 |
+
"ok": false,
|
| 71 |
+
"steps": 7,
|
| 72 |
+
"status": "blocked",
|
| 73 |
+
"wall": 1.9,
|
| 74 |
+
"url": "http://127.0.0.1:8811/t/flight/900050",
|
| 75 |
+
"goal": "Show me a one-way flight from Amsterdam to Barcelona on November 8, 2026 for 1 adult in economy.",
|
| 76 |
+
"plan": [
|
| 77 |
+
"Show me a one-way flight from Amsterdam to Barcelona on November 8, 2026 for 1 adult in economy."
|
| 78 |
+
]
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"kind": "flight",
|
| 82 |
+
"seed": 900060,
|
| 83 |
+
"ok": false,
|
| 84 |
+
"steps": 21,
|
| 85 |
+
"status": "blocked",
|
| 86 |
+
"wall": 3.2,
|
| 87 |
+
"url": "http://127.0.0.1:8811/t/flight/900060",
|
| 88 |
+
"goal": "Find one-way flights from Seoul to Copenhagen on 10 October 2026 for two adults in business class.",
|
| 89 |
+
"plan": [
|
| 90 |
+
"Find one-way flights from Seoul to Copenhagen on 10 October 2026 for two adults in business class."
|
| 91 |
+
]
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"kind": "flight",
|
| 95 |
+
"seed": 900070,
|
| 96 |
+
"ok": false,
|
| 97 |
+
"steps": 40,
|
| 98 |
+
"status": "ready",
|
| 99 |
+
"wall": 10.3,
|
| 100 |
+
"url": "http://127.0.0.1:8811/t/flight/900070",
|
| 101 |
+
"goal": "Look up a return flight from Barcelona to New York on November 13, returning November 27 for 1 adult. Stop when matching flight options are visible.",
|
| 102 |
+
"plan": [
|
| 103 |
+
"Look up a return flight from Barcelona to New York on November 13, returning November 27 for 1 adult. Stop when matching flight options are visible."
|
| 104 |
+
]
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"kind": "hotel",
|
| 108 |
+
"seed": 900000,
|
| 109 |
+
"ok": false,
|
| 110 |
+
"steps": 2,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 1.1,
|
| 113 |
+
"url": "http://127.0.0.1:8811/t/hotel/900000/results?guests=2&sort=Price%3A+low+to+high",
|
| 114 |
+
"goal": "Find a hotel in Toronto from 31 October 2026 to November 2, sorted by price: low to high.",
|
| 115 |
+
"plan": [
|
| 116 |
+
"Find a hotel in Toronto from 31 October 2026 to November 2, sorted by price: low to high."
|
| 117 |
+
]
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"kind": "hotel",
|
| 121 |
+
"seed": 900010,
|
| 122 |
+
"ok": false,
|
| 123 |
+
"steps": 1,
|
| 124 |
+
"status": "done",
|
| 125 |
+
"wall": 1.1,
|
| 126 |
+
"url": "http://127.0.0.1:8811/t/hotel/900010/results?guests=2",
|
| 127 |
+
"goal": "Search for hotels in Chicago from 30 October 2026 to November 1 for three guests, sorted by price: low to high.",
|
| 128 |
+
"plan": [
|
| 129 |
+
"Search for hotels in Chicago from 30 October 2026 to November 1 for three guests, sorted by price: low to high."
|
| 130 |
+
]
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"kind": "hotel",
|
| 134 |
+
"seed": 900020,
|
| 135 |
+
"ok": false,
|
| 136 |
+
"steps": 40,
|
| 137 |
+
"status": "ready",
|
| 138 |
+
"wall": 5.3,
|
| 139 |
+
"url": "http://127.0.0.1:8811/t/hotel/900020/results?guests=2#home",
|
| 140 |
+
"goal": "Find a hotel in Oslo from 30 October 2026 to November 3, 2026 for one guest, only showing pet friendly.",
|
| 141 |
+
"plan": [
|
| 142 |
+
"Find a hotel in Oslo from 30 October 2026 to November 3, 2026 for one guest, only showing pet friendly."
|
| 143 |
+
]
|
| 144 |
+
},
|
| 145 |
+
{
|
| 146 |
+
"kind": "hotel",
|
| 147 |
+
"seed": 900030,
|
| 148 |
+
"ok": false,
|
| 149 |
+
"steps": 4,
|
| 150 |
+
"status": "done",
|
| 151 |
+
"wall": 1.6,
|
| 152 |
+
"url": "http://127.0.0.1:8811/t/hotel/900030",
|
| 153 |
+
"goal": "Find stays in Toronto from November 16, 2026 to November 21, 2026, filtered to pet friendly.",
|
| 154 |
+
"plan": [
|
| 155 |
+
"Find stays in Toronto from November 16, 2026 to November 21, 2026, filtered to pet friendly."
|
| 156 |
+
]
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"kind": "hotel",
|
| 160 |
+
"seed": 900040,
|
| 161 |
+
"ok": false,
|
| 162 |
+
"steps": 2,
|
| 163 |
+
"status": "done",
|
| 164 |
+
"wall": 1.4,
|
| 165 |
+
"url": "http://127.0.0.1:8811/t/hotel/900040",
|
| 166 |
+
"goal": "Search for hotels in Tokyo from 14 November 2026 to 15 November 2026, with pet friendly.",
|
| 167 |
+
"plan": [
|
| 168 |
+
"Search for hotels in Tokyo from 14 November 2026 to 15 November 2026, with pet friendly."
|
| 169 |
+
]
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"kind": "hotel",
|
| 173 |
+
"seed": 900050,
|
| 174 |
+
"ok": false,
|
| 175 |
+
"steps": 40,
|
| 176 |
+
"status": "ready",
|
| 177 |
+
"wall": 4.5,
|
| 178 |
+
"url": "http://127.0.0.1:8811/t/hotel/900050/results?guests=2&sort=Guest+rating#home",
|
| 179 |
+
"goal": "Find stays in Copenhagen from December 4 to December 7, 2026 for one guest, sorted by guest rating.",
|
| 180 |
+
"plan": [
|
| 181 |
+
"Find stays in Copenhagen from December 4 to December 7, 2026 for one guest, sorted by guest rating."
|
| 182 |
+
]
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"kind": "hotel",
|
| 186 |
+
"seed": 900060,
|
| 187 |
+
"ok": false,
|
| 188 |
+
"steps": 2,
|
| 189 |
+
"status": "done",
|
| 190 |
+
"wall": 1.3,
|
| 191 |
+
"url": "http://127.0.0.1:8811/t/hotel/900060",
|
| 192 |
+
"goal": "Find stays in Rome from November 3, 2026 to 10 November 2026 for 4 guests.",
|
| 193 |
+
"plan": [
|
| 194 |
+
"Find stays in Rome from November 3, 2026 to 10 November 2026 for 4 guests."
|
| 195 |
+
]
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"kind": "hotel",
|
| 199 |
+
"seed": 900070,
|
| 200 |
+
"ok": false,
|
| 201 |
+
"steps": 40,
|
| 202 |
+
"status": "ready",
|
| 203 |
+
"wall": 4.5,
|
| 204 |
+
"url": "http://127.0.0.1:8811/t/hotel/900070/results?guests=4&filter=Free+cancellation#home",
|
| 205 |
+
"goal": "Find a hotel in Chicago from 27 September 2026 to October 4, only showing free cancellation.",
|
| 206 |
+
"plan": [
|
| 207 |
+
"Find a hotel in Chicago from 27 September 2026 to October 4, only showing free cancellation."
|
| 208 |
+
]
|
| 209 |
+
},
|
| 210 |
+
{
|
| 211 |
+
"kind": "shop",
|
| 212 |
+
"seed": 900000,
|
| 213 |
+
"ok": false,
|
| 214 |
+
"steps": 2,
|
| 215 |
+
"status": "done",
|
| 216 |
+
"wall": 1.2,
|
| 217 |
+
"url": "http://127.0.0.1:8811/t/shop/900000/p/4",
|
| 218 |
+
"goal": "Go to page 2 and open 'Hooli Water bottle X'.",
|
| 219 |
+
"plan": [
|
| 220 |
+
"Go to page 2 and open 'Hooli Water bottle X'."
|
| 221 |
+
]
|
| 222 |
+
},
|
| 223 |
+
{
|
| 224 |
+
"kind": "shop",
|
| 225 |
+
"seed": 900010,
|
| 226 |
+
"ok": true,
|
| 227 |
+
"steps": 1,
|
| 228 |
+
"status": "done",
|
| 229 |
+
"wall": 1.1,
|
| 230 |
+
"url": "http://127.0.0.1:8811/t/shop/900010?sort=Price%3A+low+to+high",
|
| 231 |
+
"goal": "Sort the products by price: low to high.",
|
| 232 |
+
"plan": [
|
| 233 |
+
"Sort the products by price: low to high."
|
| 234 |
+
]
|
| 235 |
+
},
|
| 236 |
+
{
|
| 237 |
+
"kind": "shop",
|
| 238 |
+
"seed": 900020,
|
| 239 |
+
"ok": false,
|
| 240 |
+
"steps": 8,
|
| 241 |
+
"status": "blocked",
|
| 242 |
+
"wall": 1.9,
|
| 243 |
+
"url": "http://127.0.0.1:8811/t/shop/900020/p/8#home",
|
| 244 |
+
"goal": "Show page 3.",
|
| 245 |
+
"plan": [
|
| 246 |
+
"Show page 3."
|
| 247 |
+
]
|
| 248 |
+
},
|
| 249 |
+
{
|
| 250 |
+
"kind": "shop",
|
| 251 |
+
"seed": 900030,
|
| 252 |
+
"ok": false,
|
| 253 |
+
"steps": 0,
|
| 254 |
+
"status": "done",
|
| 255 |
+
"wall": 1.0,
|
| 256 |
+
"url": "http://127.0.0.1:8811/t/shop/900030",
|
| 257 |
+
"goal": "Find water bottles.",
|
| 258 |
+
"plan": [
|
| 259 |
+
"Find water bottles."
|
| 260 |
+
]
|
| 261 |
+
},
|
| 262 |
+
{
|
| 263 |
+
"kind": "shop",
|
| 264 |
+
"seed": 900040,
|
| 265 |
+
"ok": false,
|
| 266 |
+
"steps": 1,
|
| 267 |
+
"status": "done",
|
| 268 |
+
"wall": 1.2,
|
| 269 |
+
"url": "http://127.0.0.1:8811/t/shop/900040/p/2",
|
| 270 |
+
"goal": "Show only Hooli products.",
|
| 271 |
+
"plan": [
|
| 272 |
+
"Show only Hooli products."
|
| 273 |
+
]
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"kind": "shop",
|
| 277 |
+
"seed": 900050,
|
| 278 |
+
"ok": true,
|
| 279 |
+
"steps": 2,
|
| 280 |
+
"status": "done",
|
| 281 |
+
"wall": 1.1,
|
| 282 |
+
"url": "http://127.0.0.1:8811/t/shop/900050?brand=Acme&sort=Price%3A+low+to+high",
|
| 283 |
+
"goal": "Filter the list to the brand Acme.",
|
| 284 |
+
"plan": [
|
| 285 |
+
"Filter the list to the brand Acme."
|
| 286 |
+
]
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"kind": "shop",
|
| 290 |
+
"seed": 900060,
|
| 291 |
+
"ok": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 1.4,
|
| 295 |
+
"url": "http://127.0.0.1:8811/t/shop/900060?q=backpack",
|
| 296 |
+
"goal": "Search the shop for 'backpack'.",
|
| 297 |
+
"plan": [
|
| 298 |
+
"Search the shop for 'backpack'."
|
| 299 |
+
]
|
| 300 |
+
},
|
| 301 |
+
{
|
| 302 |
+
"kind": "shop",
|
| 303 |
+
"seed": 900070,
|
| 304 |
+
"ok": true,
|
| 305 |
+
"steps": 1,
|
| 306 |
+
"status": "done",
|
| 307 |
+
"wall": 1.1,
|
| 308 |
+
"url": "http://127.0.0.1:8811/t/shop/900070?brand=Umbrella",
|
| 309 |
+
"goal": "I only want to see Umbrella items.",
|
| 310 |
+
"plan": [
|
| 311 |
+
"I only want to see Umbrella items."
|
| 312 |
+
]
|
| 313 |
+
}
|
| 314 |
+
]
|
results/round3/gym_eval_v14s.log
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FAIL flight seed=900000 steps= 1 done 1.5s Show me a return flight from Oslo to Berlin on October 18, returning 2
|
| 2 |
+
FAIL flight seed=900010 steps= 2 done 1.3s Look up round-trip flights from Tokyo to Amsterdam on October 13, retu
|
| 3 |
+
FAIL flight seed=900020 steps= 1 done 1.1s Search for one-way flights from Roma to Seoul on 15 October 2026 for t
|
| 4 |
+
FAIL flight seed=900030 steps=40 ready 6.2s Show me a one-way flight from Helsinki to Munich on 26 October 2026 fo
|
| 5 |
+
FAIL flight seed=900040 steps= 4 done 1.6s Show me one way flights from Manchester to Bangkok on November 21 for
|
| 6 |
+
FAIL flight seed=900050 steps= 7 blocked 1.9s Show me a one-way flight from Amsterdam to Barcelona on November 8, 20
|
| 7 |
+
FAIL flight seed=900060 steps=21 blocked 3.2s Find one-way flights from Seoul to Copenhagen on 10 October 2026 for t
|
| 8 |
+
FAIL flight seed=900070 steps=40 ready 10.3s Look up a return flight from Barcelona to New York on November 13, ret
|
| 9 |
+
FAIL hotel seed=900000 steps= 2 done 1.1s Find a hotel in Toronto from 31 October 2026 to November 2, sorted by
|
| 10 |
+
FAIL hotel seed=900010 steps= 1 done 1.1s Search for hotels in Chicago from 30 October 2026 to November 1 for th
|
| 11 |
+
FAIL hotel seed=900020 steps=40 ready 5.3s Find a hotel in Oslo from 30 October 2026 to November 3, 2026 for one
|
| 12 |
+
FAIL hotel seed=900030 steps= 4 done 1.6s Find stays in Toronto from November 16, 2026 to November 21, 2026, fil
|
| 13 |
+
FAIL hotel seed=900040 steps= 2 done 1.4s Search for hotels in Tokyo from 14 November 2026 to 15 November 2026,
|
| 14 |
+
FAIL hotel seed=900050 steps=40 ready 4.5s Find stays in Copenhagen from December 4 to December 7, 2026 for one g
|
| 15 |
+
FAIL hotel seed=900060 steps= 2 done 1.3s Find stays in Rome from November 3, 2026 to 10 November 2026 for 4 gue
|
| 16 |
+
FAIL hotel seed=900070 steps=40 ready 4.5s Find a hotel in Chicago from 27 September 2026 to October 4, only show
|
| 17 |
+
FAIL shop seed=900000 steps= 2 done 1.2s Go to page 2 and open 'Hooli Water bottle X'.
|
| 18 |
+
PASS shop seed=900010 steps= 1 done 1.1s Sort the products by price: low to high.
|
| 19 |
+
FAIL shop seed=900020 steps= 8 blocked 1.9s Show page 3.
|
| 20 |
+
FAIL shop seed=900030 steps= 0 done 1.0s Find water bottles.
|
| 21 |
+
FAIL shop seed=900040 steps= 1 done 1.2s Show only Hooli products.
|
| 22 |
+
PASS shop seed=900050 steps= 2 done 1.1s Filter the list to the brand Acme.
|
| 23 |
+
PASS shop seed=900060 steps= 2 done 1.4s Search the shop for 'backpack'.
|
| 24 |
+
PASS shop seed=900070 steps= 1 done 1.1s I only want to see Umbrella items.
|
| 25 |
+
== flight: 0/8 median steps 7
|
| 26 |
+
== hotel: 0/8 median steps 4
|
| 27 |
+
== shop: 4/8 median steps 2
|
| 28 |
+
== total 4/24 (17%)
|
results/round3/gym_eval_v14s_plan.json
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"kind": "flight",
|
| 4 |
+
"seed": 900000,
|
| 5 |
+
"ok": false,
|
| 6 |
+
"steps": 40,
|
| 7 |
+
"status": "ready",
|
| 8 |
+
"wall": 6.5,
|
| 9 |
+
"url": "http://127.0.0.1:8811/t/flight/900000",
|
| 10 |
+
"goal": "Show me a return flight from Oslo to Berlin on October 18, returning 23 October 2026 for 3 adults in premium economy. Stop when matching flight options are visible.",
|
| 11 |
+
"plan": [
|
| 12 |
+
"Set origin (departure) to Oslo",
|
| 13 |
+
"Set destination (arrival) to Berlin",
|
| 14 |
+
"Set departure date to October 18, 2026",
|
| 15 |
+
"Set return date to October 23, 2026",
|
| 16 |
+
"Set number of passengers to 3",
|
| 17 |
+
"Set class to premium economy",
|
| 18 |
+
"Set trip type to return flight",
|
| 19 |
+
"Stop when matching flight options are visible"
|
| 20 |
+
]
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"kind": "flight",
|
| 24 |
+
"seed": 900010,
|
| 25 |
+
"ok": false,
|
| 26 |
+
"steps": 2,
|
| 27 |
+
"status": "blocked",
|
| 28 |
+
"wall": 2.6,
|
| 29 |
+
"url": "http://127.0.0.1:8811/t/flight/900010",
|
| 30 |
+
"goal": "Look up round-trip flights from Tokyo to Amsterdam on October 13, returning 20 October 2026 for two adults in first class.",
|
| 31 |
+
"plan": [
|
| 32 |
+
"Set where from (origin, departure) to Tokyo",
|
| 33 |
+
"Set where to (destination, arrival) to Amsterdam",
|
| 34 |
+
"Set the departure date to October 13, 2026",
|
| 35 |
+
"Set the return date to October 20, 2026",
|
| 36 |
+
"Set the number of passengers to 2",
|
| 37 |
+
"Set the class to first class",
|
| 38 |
+
"Set trip type to round-trip",
|
| 39 |
+
"Submit the search and view the results"
|
| 40 |
+
]
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"kind": "flight",
|
| 44 |
+
"seed": 900020,
|
| 45 |
+
"ok": false,
|
| 46 |
+
"steps": 40,
|
| 47 |
+
"status": "ready",
|
| 48 |
+
"wall": 6.3,
|
| 49 |
+
"url": "http://127.0.0.1:8811/t/flight/900020",
|
| 50 |
+
"goal": "Search for one-way flights from Roma to Seoul on 15 October 2026 for two adults. Stop when matching flight options are visible.",
|
| 51 |
+
"plan": [
|
| 52 |
+
"Set where from (origin, departure) to Roma",
|
| 53 |
+
"Set where to (destination, arrival) to Seoul",
|
| 54 |
+
"Set the departure date to October 15, 2026",
|
| 55 |
+
"Set the number of passengers to 2",
|
| 56 |
+
"Set passenger type to adult",
|
| 57 |
+
"Set trip type to one-way",
|
| 58 |
+
"Submit the search and stop when matching flight options are visible"
|
| 59 |
+
]
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
"kind": "flight",
|
| 63 |
+
"seed": 900030,
|
| 64 |
+
"ok": false,
|
| 65 |
+
"steps": 40,
|
| 66 |
+
"status": "ready",
|
| 67 |
+
"wall": 6.8,
|
| 68 |
+
"url": "http://127.0.0.1:8811/t/flight/900030",
|
| 69 |
+
"goal": "Show me a one-way flight from Helsinki to Munich on 26 October 2026 for four adults in business class.",
|
| 70 |
+
"plan": [
|
| 71 |
+
"Set where from (origin, departure) to Helsinki",
|
| 72 |
+
"Set where to (destination, arrival) to Munich",
|
| 73 |
+
"Set the departure date to October 26, 2026",
|
| 74 |
+
"Set the number of passengers to 4",
|
| 75 |
+
"Set the class to business",
|
| 76 |
+
"Set trip type to one-way",
|
| 77 |
+
"Submit the search and view the results"
|
| 78 |
+
]
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"kind": "flight",
|
| 82 |
+
"seed": 900040,
|
| 83 |
+
"ok": false,
|
| 84 |
+
"steps": 40,
|
| 85 |
+
"status": "ready",
|
| 86 |
+
"wall": 7.6,
|
| 87 |
+
"url": "http://127.0.0.1:8811/t/flight/900040/results?trip=round&adults=1&cabin=first#flight-1",
|
| 88 |
+
"goal": "Show me one way flights from Manchester to Bangkok on November 21 for 3 adults in business class.",
|
| 89 |
+
"plan": [
|
| 90 |
+
"Set where from (origin, departure) to Manchester",
|
| 91 |
+
"Set where to (destination, arrival) to Bangkok",
|
| 92 |
+
"Set the departure date to November 21",
|
| 93 |
+
"Set the number of passengers to 3",
|
| 94 |
+
"Set the class to business",
|
| 95 |
+
"Set trip type to one-way",
|
| 96 |
+
"Submit the search and view the results"
|
| 97 |
+
]
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"kind": "flight",
|
| 101 |
+
"seed": 900050,
|
| 102 |
+
"ok": false,
|
| 103 |
+
"steps": 40,
|
| 104 |
+
"status": "ready",
|
| 105 |
+
"wall": 6.2,
|
| 106 |
+
"url": "http://127.0.0.1:8811/t/flight/900050",
|
| 107 |
+
"goal": "Show me a one-way flight from Amsterdam to Barcelona on November 8, 2026 for 1 adult in economy.",
|
| 108 |
+
"plan": [
|
| 109 |
+
"Set the origin (from) to Amsterdam",
|
| 110 |
+
"Set the destination (to) to Barcelona",
|
| 111 |
+
"Set the departure date to November 8, 2026",
|
| 112 |
+
"Set the number of passengers to 1",
|
| 113 |
+
"Set the class to economy",
|
| 114 |
+
"Set the trip type to one-way",
|
| 115 |
+
"Submit the search and view the results"
|
| 116 |
+
]
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"kind": "flight",
|
| 120 |
+
"seed": 900060,
|
| 121 |
+
"ok": false,
|
| 122 |
+
"steps": 2,
|
| 123 |
+
"status": "blocked",
|
| 124 |
+
"wall": 2.4,
|
| 125 |
+
"url": "http://127.0.0.1:8811/t/flight/900060",
|
| 126 |
+
"goal": "Find one-way flights from Seoul to Copenhagen on 10 October 2026 for two adults in business class.",
|
| 127 |
+
"plan": [
|
| 128 |
+
"Set origin (from) to Seoul",
|
| 129 |
+
"Set destination (to) to Copenhagen",
|
| 130 |
+
"Set departure date to October 10, 2026",
|
| 131 |
+
"Set number of passengers to 2",
|
| 132 |
+
"Set class to Business",
|
| 133 |
+
"Set trip type to One-way",
|
| 134 |
+
"Submit the search and view the results"
|
| 135 |
+
]
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"kind": "flight",
|
| 139 |
+
"seed": 900070,
|
| 140 |
+
"ok": false,
|
| 141 |
+
"steps": 5,
|
| 142 |
+
"status": "blocked",
|
| 143 |
+
"wall": 2.7,
|
| 144 |
+
"url": "http://127.0.0.1:8811/t/flight/900070",
|
| 145 |
+
"goal": "Look up a return flight from Barcelona to New York on November 13, returning November 27 for 1 adult. Stop when matching flight options are visible.",
|
| 146 |
+
"plan": [
|
| 147 |
+
"Set where from (origin, departure) to Barcelona",
|
| 148 |
+
"Set where to (destination, arrival) to New York",
|
| 149 |
+
"Set the departure date to November 13, 2026",
|
| 150 |
+
"Set the return date to November 27, 2026",
|
| 151 |
+
"Set the number of passengers to 1",
|
| 152 |
+
"Set the trip type to return",
|
| 153 |
+
"Submit the search and stop when matching flight options are visible"
|
| 154 |
+
]
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"kind": "hotel",
|
| 158 |
+
"seed": 900000,
|
| 159 |
+
"ok": false,
|
| 160 |
+
"steps": 1,
|
| 161 |
+
"status": "blocked",
|
| 162 |
+
"wall": 1.6,
|
| 163 |
+
"url": "http://127.0.0.1:8811/t/hotel/900000",
|
| 164 |
+
"goal": "Find a hotel in Toronto from 31 October 2026 to November 2, sorted by price: low to high.",
|
| 165 |
+
"plan": [
|
| 166 |
+
"Set the arrival date to October 31, 2026",
|
| 167 |
+
"Set the departure date to November 2, 2026",
|
| 168 |
+
"Sort hotels by price: low to high"
|
| 169 |
+
]
|
| 170 |
+
},
|
| 171 |
+
{
|
| 172 |
+
"kind": "hotel",
|
| 173 |
+
"seed": 900010,
|
| 174 |
+
"ok": false,
|
| 175 |
+
"steps": 40,
|
| 176 |
+
"status": "ready",
|
| 177 |
+
"wall": 5.5,
|
| 178 |
+
"url": "http://127.0.0.1:8811/t/hotel/900010",
|
| 179 |
+
"goal": "Search for hotels in Chicago from 30 October 2026 to November 1 for three guests, sorted by price: low to high.",
|
| 180 |
+
"plan": [
|
| 181 |
+
"Set the origin (departure) to Chicago",
|
| 182 |
+
"Set the departure date to October 30, 2026",
|
| 183 |
+
"Set the return date to November 1, 2026",
|
| 184 |
+
"Set the number of guests to 3",
|
| 185 |
+
"Sort the results by price: low to high"
|
| 186 |
+
]
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"kind": "hotel",
|
| 190 |
+
"seed": 900020,
|
| 191 |
+
"ok": false,
|
| 192 |
+
"steps": 4,
|
| 193 |
+
"status": "blocked",
|
| 194 |
+
"wall": 3.4,
|
| 195 |
+
"url": "http://127.0.0.1:8811/t/hotel/900020",
|
| 196 |
+
"goal": "Find a hotel in Oslo from 30 October 2026 to November 3, 2026 for one guest, only showing pet friendly.",
|
| 197 |
+
"plan": [
|
| 198 |
+
"Set the arrival date to October 30, 2026",
|
| 199 |
+
"Set the departure date to November 3, 2026",
|
| 200 |
+
"Set the number of guests to 1",
|
| 201 |
+
"Set the pet friendly filter to enabled",
|
| 202 |
+
"Submit the search and view the results"
|
| 203 |
+
]
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"kind": "hotel",
|
| 207 |
+
"seed": 900030,
|
| 208 |
+
"ok": false,
|
| 209 |
+
"steps": 40,
|
| 210 |
+
"status": "ready",
|
| 211 |
+
"wall": 5.8,
|
| 212 |
+
"url": "http://127.0.0.1:8811/t/hotel/900030",
|
| 213 |
+
"goal": "Find stays in Toronto from November 16, 2026 to November 21, 2026, filtered to pet friendly.",
|
| 214 |
+
"plan": [
|
| 215 |
+
"Set the arrival date to November 16, 2026",
|
| 216 |
+
"Set the departure date to November 21, 2026",
|
| 217 |
+
"Set the destination (city) to Toronto",
|
| 218 |
+
"Set the filter to pet friendly"
|
| 219 |
+
]
|
| 220 |
+
},
|
| 221 |
+
{
|
| 222 |
+
"kind": "hotel",
|
| 223 |
+
"seed": 900040,
|
| 224 |
+
"ok": false,
|
| 225 |
+
"steps": 40,
|
| 226 |
+
"status": "ready",
|
| 227 |
+
"wall": 6.6,
|
| 228 |
+
"url": "http://127.0.0.1:8811/t/hotel/900040",
|
| 229 |
+
"goal": "Search for hotels in Tokyo from 14 November 2026 to 15 November 2026, with pet friendly.",
|
| 230 |
+
"plan": [
|
| 231 |
+
"Set the departure date to November 14, 2026",
|
| 232 |
+
"Set the return date to November 15, 2026",
|
| 233 |
+
"Set the destination (city) to Tokyo",
|
| 234 |
+
"Set the pet friendly filter to enabled",
|
| 235 |
+
"Submit the search and view the results"
|
| 236 |
+
]
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"kind": "hotel",
|
| 240 |
+
"seed": 900050,
|
| 241 |
+
"ok": false,
|
| 242 |
+
"steps": 40,
|
| 243 |
+
"status": "ready",
|
| 244 |
+
"wall": 6.4,
|
| 245 |
+
"url": "http://127.0.0.1:8811/t/hotel/900050",
|
| 246 |
+
"goal": "Find stays in Copenhagen from December 4 to December 7, 2026 for one guest, sorted by guest rating.",
|
| 247 |
+
"plan": [
|
| 248 |
+
"Set the origin (from) to Copenhagen",
|
| 249 |
+
"Set the departure date to December 4, 2026",
|
| 250 |
+
"Set the return date to December 7, 2026",
|
| 251 |
+
"Set the number of guests to 1",
|
| 252 |
+
"Sort by guest rating"
|
| 253 |
+
]
|
| 254 |
+
},
|
| 255 |
+
{
|
| 256 |
+
"kind": "hotel",
|
| 257 |
+
"seed": 900060,
|
| 258 |
+
"ok": false,
|
| 259 |
+
"steps": 40,
|
| 260 |
+
"status": "ready",
|
| 261 |
+
"wall": 6.0,
|
| 262 |
+
"url": "http://127.0.0.1:8811/t/hotel/900060",
|
| 263 |
+
"goal": "Find stays in Rome from November 3, 2026 to 10 November 2026 for 4 guests.",
|
| 264 |
+
"plan": [
|
| 265 |
+
"Set the arrival date to November 3, 2026",
|
| 266 |
+
"Set the departure date to November 10, 2026",
|
| 267 |
+
"Set the number of guests to 4",
|
| 268 |
+
"Search for stays in Rome"
|
| 269 |
+
]
|
| 270 |
+
},
|
| 271 |
+
{
|
| 272 |
+
"kind": "hotel",
|
| 273 |
+
"seed": 900070,
|
| 274 |
+
"ok": false,
|
| 275 |
+
"steps": 40,
|
| 276 |
+
"status": "ready",
|
| 277 |
+
"wall": 5.5,
|
| 278 |
+
"url": "http://127.0.0.1:8811/t/hotel/900070",
|
| 279 |
+
"goal": "Find a hotel in Chicago from 27 September 2026 to October 4, only showing free cancellation.",
|
| 280 |
+
"plan": [
|
| 281 |
+
"Set the arrival date to September 27, 2026",
|
| 282 |
+
"Set the departure date to October 4, 2026",
|
| 283 |
+
"Set the filter to only show free cancellation hotels"
|
| 284 |
+
]
|
| 285 |
+
},
|
| 286 |
+
{
|
| 287 |
+
"kind": "shop",
|
| 288 |
+
"seed": 900000,
|
| 289 |
+
"ok": false,
|
| 290 |
+
"steps": 5,
|
| 291 |
+
"status": "blocked",
|
| 292 |
+
"wall": 2.5,
|
| 293 |
+
"url": "http://127.0.0.1:8811/t/shop/900000/p/4#home",
|
| 294 |
+
"goal": "Go to page 2 and open 'Hooli Water bottle X'.",
|
| 295 |
+
"plan": [
|
| 296 |
+
"Go to page 2",
|
| 297 |
+
"Open 'Hooli Water bottle X'"
|
| 298 |
+
]
|
| 299 |
+
},
|
| 300 |
+
{
|
| 301 |
+
"kind": "shop",
|
| 302 |
+
"seed": 900010,
|
| 303 |
+
"ok": true,
|
| 304 |
+
"steps": 1,
|
| 305 |
+
"status": "done",
|
| 306 |
+
"wall": 1.3,
|
| 307 |
+
"url": "http://127.0.0.1:8811/t/shop/900010?sort=Price%3A+low+to+high",
|
| 308 |
+
"goal": "Sort the products by price: low to high.",
|
| 309 |
+
"plan": [
|
| 310 |
+
"Sort products by price from low to high"
|
| 311 |
+
]
|
| 312 |
+
},
|
| 313 |
+
{
|
| 314 |
+
"kind": "shop",
|
| 315 |
+
"seed": 900020,
|
| 316 |
+
"ok": false,
|
| 317 |
+
"steps": 8,
|
| 318 |
+
"status": "blocked",
|
| 319 |
+
"wall": 1.9,
|
| 320 |
+
"url": "http://127.0.0.1:8811/t/shop/900020/p/8#home",
|
| 321 |
+
"goal": "Show page 3.",
|
| 322 |
+
"plan": [
|
| 323 |
+
"Go to page 3"
|
| 324 |
+
]
|
| 325 |
+
},
|
| 326 |
+
{
|
| 327 |
+
"kind": "shop",
|
| 328 |
+
"seed": 900030,
|
| 329 |
+
"ok": false,
|
| 330 |
+
"steps": 0,
|
| 331 |
+
"status": "done",
|
| 332 |
+
"wall": 1.3,
|
| 333 |
+
"url": "http://127.0.0.1:8811/t/shop/900030",
|
| 334 |
+
"goal": "Find water bottles.",
|
| 335 |
+
"plan": [
|
| 336 |
+
"Find water bottles"
|
| 337 |
+
]
|
| 338 |
+
},
|
| 339 |
+
{
|
| 340 |
+
"kind": "shop",
|
| 341 |
+
"seed": 900040,
|
| 342 |
+
"ok": false,
|
| 343 |
+
"steps": 1,
|
| 344 |
+
"status": "done",
|
| 345 |
+
"wall": 1.4,
|
| 346 |
+
"url": "http://127.0.0.1:8811/t/shop/900040/p/2",
|
| 347 |
+
"goal": "Show only Hooli products.",
|
| 348 |
+
"plan": [
|
| 349 |
+
"Filter products to show only Hooli products"
|
| 350 |
+
]
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"kind": "shop",
|
| 354 |
+
"seed": 900050,
|
| 355 |
+
"ok": true,
|
| 356 |
+
"steps": 1,
|
| 357 |
+
"status": "done",
|
| 358 |
+
"wall": 1.5,
|
| 359 |
+
"url": "http://127.0.0.1:8811/t/shop/900050?brand=Acme",
|
| 360 |
+
"goal": "Filter the list to the brand Acme.",
|
| 361 |
+
"plan": [
|
| 362 |
+
"Filter the list to show only items from the brand Acme"
|
| 363 |
+
]
|
| 364 |
+
},
|
| 365 |
+
{
|
| 366 |
+
"kind": "shop",
|
| 367 |
+
"seed": 900060,
|
| 368 |
+
"ok": true,
|
| 369 |
+
"steps": 2,
|
| 370 |
+
"status": "done",
|
| 371 |
+
"wall": 1.9,
|
| 372 |
+
"url": "http://127.0.0.1:8811/t/shop/900060?q=backpack",
|
| 373 |
+
"goal": "Search the shop for 'backpack'.",
|
| 374 |
+
"plan": [
|
| 375 |
+
"Search the shop for 'backpack'"
|
| 376 |
+
]
|
| 377 |
+
},
|
| 378 |
+
{
|
| 379 |
+
"kind": "shop",
|
| 380 |
+
"seed": 900070,
|
| 381 |
+
"ok": true,
|
| 382 |
+
"steps": 2,
|
| 383 |
+
"status": "done",
|
| 384 |
+
"wall": 1.5,
|
| 385 |
+
"url": "http://127.0.0.1:8811/t/shop/900070?brand=Umbrella&sort=Price%3A+low+to+high",
|
| 386 |
+
"goal": "I only want to see Umbrella items.",
|
| 387 |
+
"plan": [
|
| 388 |
+
"Set the item type to Umbrella"
|
| 389 |
+
]
|
| 390 |
+
}
|
| 391 |
+
]
|
results/round3/gym_eval_v14s_plan.log
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FAIL flight seed=900000 steps=40 ready 6.5s Show me a return flight from Oslo to Berlin on October 18, returning 2
|
| 2 |
+
FAIL flight seed=900010 steps= 2 blocked 2.6s Look up round-trip flights from Tokyo to Amsterdam on October 13, retu
|
| 3 |
+
FAIL flight seed=900020 steps=40 ready 6.3s Search for one-way flights from Roma to Seoul on 15 October 2026 for t
|
| 4 |
+
FAIL flight seed=900030 steps=40 ready 6.8s Show me a one-way flight from Helsinki to Munich on 26 October 2026 fo
|
| 5 |
+
FAIL flight seed=900040 steps=40 ready 7.6s Show me one way flights from Manchester to Bangkok on November 21 for
|
| 6 |
+
FAIL flight seed=900050 steps=40 ready 6.2s Show me a one-way flight from Amsterdam to Barcelona on November 8, 20
|
| 7 |
+
FAIL flight seed=900060 steps= 2 blocked 2.4s Find one-way flights from Seoul to Copenhagen on 10 October 2026 for t
|
| 8 |
+
FAIL flight seed=900070 steps= 5 blocked 2.7s Look up a return flight from Barcelona to New York on November 13, ret
|
| 9 |
+
FAIL hotel seed=900000 steps= 1 blocked 1.6s Find a hotel in Toronto from 31 October 2026 to November 2, sorted by
|
| 10 |
+
FAIL hotel seed=900010 steps=40 ready 5.5s Search for hotels in Chicago from 30 October 2026 to November 1 for th
|
| 11 |
+
FAIL hotel seed=900020 steps= 4 blocked 3.4s Find a hotel in Oslo from 30 October 2026 to November 3, 2026 for one
|
| 12 |
+
FAIL hotel seed=900030 steps=40 ready 5.8s Find stays in Toronto from November 16, 2026 to November 21, 2026, fil
|
| 13 |
+
FAIL hotel seed=900040 steps=40 ready 6.6s Search for hotels in Tokyo from 14 November 2026 to 15 November 2026,
|
| 14 |
+
FAIL hotel seed=900050 steps=40 ready 6.4s Find stays in Copenhagen from December 4 to December 7, 2026 for one g
|
| 15 |
+
FAIL hotel seed=900060 steps=40 ready 6.0s Find stays in Rome from November 3, 2026 to 10 November 2026 for 4 gue
|
| 16 |
+
FAIL hotel seed=900070 steps=40 ready 5.5s Find a hotel in Chicago from 27 September 2026 to October 4, only show
|
| 17 |
+
FAIL shop seed=900000 steps= 5 blocked 2.5s Go to page 2 and open 'Hooli Water bottle X'.
|
| 18 |
+
PASS shop seed=900010 steps= 1 done 1.3s Sort the products by price: low to high.
|
| 19 |
+
FAIL shop seed=900020 steps= 8 blocked 1.9s Show page 3.
|
| 20 |
+
FAIL shop seed=900030 steps= 0 done 1.3s Find water bottles.
|
| 21 |
+
FAIL shop seed=900040 steps= 1 done 1.4s Show only Hooli products.
|
| 22 |
+
PASS shop seed=900050 steps= 1 done 1.5s Filter the list to the brand Acme.
|
| 23 |
+
PASS shop seed=900060 steps= 2 done 1.9s Search the shop for 'backpack'.
|
| 24 |
+
PASS shop seed=900070 steps= 2 done 1.5s I only want to see Umbrella items.
|
| 25 |
+
== flight: 0/8 median steps 40
|
| 26 |
+
== hotel: 0/8 median steps 40
|
| 27 |
+
== shop: 4/8 median steps 2
|
| 28 |
+
== total 4/24 (17%)
|
results/round3/suiteA_v13s.json
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "wiki-einstein",
|
| 4 |
+
"pass": false,
|
| 5 |
+
"steps": 3,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 5.852099657058716
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "wiki-einstein",
|
| 11 |
+
"pass": false,
|
| 12 |
+
"steps": 3,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 3.777109146118164
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "wiki-einstein",
|
| 18 |
+
"pass": false,
|
| 19 |
+
"steps": 3,
|
| 20 |
+
"status": "blocked",
|
| 21 |
+
"wall": 3.5345683097839355
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "wiki-search",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 2,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 4.188246726989746
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "wiki-search",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 2,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 4.308509111404419
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "wiki-search",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 2,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 4.4918646812438965
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "hn-new",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 4.145602226257324
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "hn-new",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 2.6322431564331055
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "hn-new",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.6054000854492188
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "hn-login-page",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 2.7457010746002197
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "hn-login-page",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 2.4926605224609375
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "hn-login-page",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 2.5525999069213867
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "gh-issues",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 7.7928466796875
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "gh-issues",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 3.424391984939575
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "gh-issues",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 3.2397661209106445
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "py-downloads",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 4.143227577209473
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "py-downloads",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 2.3897807598114014
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "py-downloads",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 2.97131085395813
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "books-travel",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 2.0191097259521484
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "books-travel",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 1.9415113925933838
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "books-travel",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 1.9320547580718994
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "books-open-book",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 2.2813827991485596
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "books-open-book",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 1.896589994430542
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "books-open-book",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 1.8832671642303467
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "internet-dropdown",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 1,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 3.4084954261779785
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "internet-dropdown",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 1,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 2.18304181098938
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "internet-dropdown",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 1,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 2.2253031730651855
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "internet-checkbox",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 1,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 2.534019947052002
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "internet-checkbox",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 1,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.08272123336792
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "internet-checkbox",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 1,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.201373815536499
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "books-page2",
|
| 214 |
+
"pass": false,
|
| 215 |
+
"steps": 1,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 1.7590856552124023
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "books-page2",
|
| 221 |
+
"pass": false,
|
| 222 |
+
"steps": 1,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 1.9029622077941895
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "books-page2",
|
| 228 |
+
"pass": false,
|
| 229 |
+
"steps": 1,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 1.9843285083770752
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "quotes-tag-love",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 1,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 3.8725624084472656
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "quotes-tag-love",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 1,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.835207939147949
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "quotes-tag-love",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 1,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 2.7795658111572266
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "hn-past",
|
| 256 |
+
"pass": true,
|
| 257 |
+
"steps": 1,
|
| 258 |
+
"status": "done",
|
| 259 |
+
"wall": 3.0871634483337402
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "hn-past",
|
| 263 |
+
"pass": true,
|
| 264 |
+
"steps": 1,
|
| 265 |
+
"status": "done",
|
| 266 |
+
"wall": 4.41726279258728
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "hn-past",
|
| 270 |
+
"pass": true,
|
| 271 |
+
"steps": 1,
|
| 272 |
+
"status": "done",
|
| 273 |
+
"wall": 2.973738670349121
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "web-search",
|
| 277 |
+
"pass": true,
|
| 278 |
+
"steps": 2,
|
| 279 |
+
"status": "done",
|
| 280 |
+
"wall": 5.196753025054932
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "web-search",
|
| 284 |
+
"pass": true,
|
| 285 |
+
"steps": 2,
|
| 286 |
+
"status": "done",
|
| 287 |
+
"wall": 3.8438737392425537
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "web-search",
|
| 291 |
+
"pass": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 3.0845510959625244
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "arxiv-search",
|
| 298 |
+
"pass": false,
|
| 299 |
+
"steps": 2,
|
| 300 |
+
"status": "error:ValueError",
|
| 301 |
+
"wall": 14.285512685775757
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "arxiv-search",
|
| 305 |
+
"pass": false,
|
| 306 |
+
"steps": 2,
|
| 307 |
+
"status": "error:ValueError",
|
| 308 |
+
"wall": 12.945858716964722
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "arxiv-search",
|
| 312 |
+
"pass": false,
|
| 313 |
+
"steps": 2,
|
| 314 |
+
"status": "error:ValueError",
|
| 315 |
+
"wall": 13.426517963409424
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "flights",
|
| 319 |
+
"pass": false,
|
| 320 |
+
"steps": 19,
|
| 321 |
+
"status": "blocked",
|
| 322 |
+
"wall": 7.32370924949646
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "flights",
|
| 326 |
+
"pass": false,
|
| 327 |
+
"steps": 20,
|
| 328 |
+
"status": "ready",
|
| 329 |
+
"wall": 5.2465996742248535
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "flights",
|
| 333 |
+
"pass": false,
|
| 334 |
+
"steps": 20,
|
| 335 |
+
"status": "ready",
|
| 336 |
+
"wall": 5.680525064468384
|
| 337 |
+
}
|
| 338 |
+
]
|
results/round3/suiteA_v14s.json
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "wiki-einstein",
|
| 4 |
+
"pass": false,
|
| 5 |
+
"steps": 2,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 7.153369426727295
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "wiki-einstein",
|
| 11 |
+
"pass": true,
|
| 12 |
+
"steps": 2,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 4.913437843322754
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "wiki-einstein",
|
| 18 |
+
"pass": false,
|
| 19 |
+
"steps": 2,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 5.909303903579712
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "wiki-search",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 2,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 5.399548768997192
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "wiki-search",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 2,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 5.0288166999816895
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "wiki-search",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 2,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 4.731976270675659
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "hn-new",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 3.587008476257324
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "hn-new",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 2.5481419563293457
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "hn-new",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.49631929397583
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "hn-login-page",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 2.745541572570801
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "hn-login-page",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 2.5028481483459473
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "hn-login-page",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 2.3588883876800537
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "gh-issues",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 6.790970325469971
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "gh-issues",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 3.614898681640625
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "gh-issues",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 3.7601253986358643
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "py-downloads",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 5.211635589599609
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "py-downloads",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 3.601041793823242
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "py-downloads",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 2.5883960723876953
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "books-travel",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 2.084430694580078
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "books-travel",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 1.985591173171997
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "books-travel",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 1.959421157836914
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "books-open-book",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 2.1794636249542236
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "books-open-book",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 1.842677116394043
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "books-open-book",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 1.9249365329742432
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "internet-dropdown",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 1,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 3.38923716545105
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "internet-dropdown",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 1,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 2.0766379833221436
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "internet-dropdown",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 1,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 2.203416347503662
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "internet-checkbox",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 1,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 2.5841612815856934
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "internet-checkbox",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 1,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.088857412338257
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "internet-checkbox",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 1,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.1360607147216797
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "books-page2",
|
| 214 |
+
"pass": false,
|
| 215 |
+
"steps": 1,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 1.98116135597229
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "books-page2",
|
| 221 |
+
"pass": false,
|
| 222 |
+
"steps": 1,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 1.9536120891571045
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "books-page2",
|
| 228 |
+
"pass": false,
|
| 229 |
+
"steps": 1,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 1.9566633701324463
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "quotes-tag-love",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 1,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 3.7906875610351562
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "quotes-tag-love",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 1,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.9570891857147217
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "quotes-tag-love",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 1,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 2.9571480751037598
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "hn-past",
|
| 256 |
+
"pass": true,
|
| 257 |
+
"steps": 1,
|
| 258 |
+
"status": "done",
|
| 259 |
+
"wall": 3.0445728302001953
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "hn-past",
|
| 263 |
+
"pass": true,
|
| 264 |
+
"steps": 1,
|
| 265 |
+
"status": "done",
|
| 266 |
+
"wall": 2.6037495136260986
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "hn-past",
|
| 270 |
+
"pass": true,
|
| 271 |
+
"steps": 1,
|
| 272 |
+
"status": "done",
|
| 273 |
+
"wall": 2.5883827209472656
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "web-search",
|
| 277 |
+
"pass": true,
|
| 278 |
+
"steps": 2,
|
| 279 |
+
"status": "done",
|
| 280 |
+
"wall": 6.664576530456543
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "web-search",
|
| 284 |
+
"pass": true,
|
| 285 |
+
"steps": 2,
|
| 286 |
+
"status": "done",
|
| 287 |
+
"wall": 4.646151781082153
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "web-search",
|
| 291 |
+
"pass": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 5.23597264289856
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "arxiv-search",
|
| 298 |
+
"pass": false,
|
| 299 |
+
"steps": 4,
|
| 300 |
+
"status": "done",
|
| 301 |
+
"wall": 6.1844401359558105
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "arxiv-search",
|
| 305 |
+
"pass": true,
|
| 306 |
+
"steps": 8,
|
| 307 |
+
"status": "done",
|
| 308 |
+
"wall": 3.808042526245117
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "arxiv-search",
|
| 312 |
+
"pass": true,
|
| 313 |
+
"steps": 14,
|
| 314 |
+
"status": "done",
|
| 315 |
+
"wall": 10.105110168457031
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "flights",
|
| 319 |
+
"pass": false,
|
| 320 |
+
"steps": 20,
|
| 321 |
+
"status": "ready",
|
| 322 |
+
"wall": 7.139219760894775
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "flights",
|
| 326 |
+
"pass": false,
|
| 327 |
+
"steps": 20,
|
| 328 |
+
"status": "ready",
|
| 329 |
+
"wall": 5.5144500732421875
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "flights",
|
| 333 |
+
"pass": false,
|
| 334 |
+
"steps": 20,
|
| 335 |
+
"status": "ready",
|
| 336 |
+
"wall": 5.720807313919067
|
| 337 |
+
}
|
| 338 |
+
]
|
results/round3/suiteB_v12s_c40.json
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "sqlite-download",
|
| 4 |
+
"pass": true,
|
| 5 |
+
"steps": 1,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 5.6703267097473145
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "sqlite-download",
|
| 11 |
+
"pass": true,
|
| 12 |
+
"steps": 1,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 1.8731908798217773
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "haskell-downloads",
|
| 18 |
+
"pass": true,
|
| 19 |
+
"steps": 1,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 3.509976387023926
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "haskell-downloads",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 1,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 2.0649473667144775
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "zig-download",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 1,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 3.1759567260742188
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "zig-download",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 1,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 2.014357089996338
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "openbsd-faq",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 2.8925137519836426
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "openbsd-faq",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 1.8947360515594482
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "nginx-download",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 3.0906717777252197
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "nginx-download",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 2.008801221847534
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "xkcd-archive",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 5.957569599151611
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "xkcd-archive",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 4.6660614013671875
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "elixir-install",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 2.626530647277832
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "elixir-install",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 1.8818230628967285
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "prometheus-download",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 6.250592947006226
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "prometheus-download",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 3.139995574951172
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "ocaml-install",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 5.652239084243774
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "ocaml-install",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 3.2106099128723145
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "rosetta-quicksort",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 2,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 4.763736963272095
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "rosetta-quicksort",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 2,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 2.696882724761963
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "arch-man-grep",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 2,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 4.270788192749023
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "arch-man-grep",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 2,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 2.530022621154785
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "debian-man-tar",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 2,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 2.517338991165161
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "debian-man-tar",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 2,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 2.0429556369781494
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "rfc-http-semantics",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 2,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 4.772353887557983
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "rfc-http-semantics",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 2,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 3.16965389251709
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "nixos-ripgrep",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 2,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 5.179338216781616
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "nixos-ripgrep",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 2,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 3.827910900115967
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "ocaml-pkg-yojson",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 2,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 3.698476791381836
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "ocaml-pkg-yojson",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 2,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.673051357269287
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "shop-search-jacket",
|
| 214 |
+
"pass": true,
|
| 215 |
+
"steps": 2,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 4.619678258895874
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "shop-search-jacket",
|
| 221 |
+
"pass": true,
|
| 222 |
+
"steps": 2,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 2.966660261154175
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "shop-page2",
|
| 228 |
+
"pass": true,
|
| 229 |
+
"steps": 2,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 3.731016159057617
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "shop-page2",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 2,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 4.623927116394043
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "shop-sort-price",
|
| 242 |
+
"pass": false,
|
| 243 |
+
"steps": 1,
|
| 244 |
+
"status": "error:ValueError",
|
| 245 |
+
"wall": 2.9405176639556885
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "shop-sort-price",
|
| 249 |
+
"pass": false,
|
| 250 |
+
"steps": 3,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 4.098207473754883
|
| 253 |
+
}
|
| 254 |
+
]
|
results/round3/suiteB_v13s.json
ADDED
|
@@ -0,0 +1,380 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "sqlite-download",
|
| 4 |
+
"pass": true,
|
| 5 |
+
"steps": 1,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 5.695581436157227
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "sqlite-download",
|
| 11 |
+
"pass": true,
|
| 12 |
+
"steps": 1,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 1.869412899017334
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "sqlite-download",
|
| 18 |
+
"pass": true,
|
| 19 |
+
"steps": 1,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 1.8962252140045166
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "haskell-downloads",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 1,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 3.8517751693725586
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "haskell-downloads",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 1,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 2.8190269470214844
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "haskell-downloads",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 1,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 2.199798345565796
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "zig-download",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 2.331904411315918
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "zig-download",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 1.9637272357940674
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "zig-download",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.1597702503204346
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "openbsd-faq",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 2.0122523307800293
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "openbsd-faq",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 1.7669165134429932
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "openbsd-faq",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 1.949770212173462
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "nginx-download",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 2.1853749752044678
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "nginx-download",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 1.7542953491210938
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "nginx-download",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 1.918290138244629
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "xkcd-archive",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 8.402779340744019
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "xkcd-archive",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 4.298560857772827
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "xkcd-archive",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 4.158369779586792
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "elixir-install",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 3.858856201171875
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "elixir-install",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 2.169969320297241
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "elixir-install",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 1.9936721324920654
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "prometheus-download",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 5.214618682861328
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "prometheus-download",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 3.1169214248657227
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "prometheus-download",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 3.1795413494110107
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "ocaml-install",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 1,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 4.403536081314087
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "ocaml-install",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 1,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 3.2332334518432617
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "ocaml-install",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 1,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 3.269718885421753
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "rosetta-quicksort",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 2,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 4.526256084442139
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "rosetta-quicksort",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 2,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.611555576324463
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "rosetta-quicksort",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 2,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.591611862182617
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "arch-man-grep",
|
| 214 |
+
"pass": true,
|
| 215 |
+
"steps": 2,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 4.365265130996704
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "arch-man-grep",
|
| 221 |
+
"pass": true,
|
| 222 |
+
"steps": 2,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 2.4871649742126465
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "arch-man-grep",
|
| 228 |
+
"pass": true,
|
| 229 |
+
"steps": 2,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 2.5202934741973877
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "debian-man-tar",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 3,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 6.339969158172607
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "debian-man-tar",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 3,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.552432060241699
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "debian-man-tar",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 3,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 2.5456464290618896
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "rfc-http-semantics",
|
| 256 |
+
"pass": true,
|
| 257 |
+
"steps": 2,
|
| 258 |
+
"status": "done",
|
| 259 |
+
"wall": 15.8356351852417
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "rfc-http-semantics",
|
| 263 |
+
"pass": true,
|
| 264 |
+
"steps": 2,
|
| 265 |
+
"status": "done",
|
| 266 |
+
"wall": 2.7176716327667236
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "rfc-http-semantics",
|
| 270 |
+
"pass": true,
|
| 271 |
+
"steps": 2,
|
| 272 |
+
"status": "done",
|
| 273 |
+
"wall": 2.710045099258423
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "nixos-ripgrep",
|
| 277 |
+
"pass": true,
|
| 278 |
+
"steps": 2,
|
| 279 |
+
"status": "done",
|
| 280 |
+
"wall": 4.8107569217681885
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "nixos-ripgrep",
|
| 284 |
+
"pass": true,
|
| 285 |
+
"steps": 2,
|
| 286 |
+
"status": "done",
|
| 287 |
+
"wall": 2.727369546890259
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "nixos-ripgrep",
|
| 291 |
+
"pass": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 3.1598076820373535
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "ocaml-pkg-yojson",
|
| 298 |
+
"pass": true,
|
| 299 |
+
"steps": 2,
|
| 300 |
+
"status": "done",
|
| 301 |
+
"wall": 3.899163007736206
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "ocaml-pkg-yojson",
|
| 305 |
+
"pass": true,
|
| 306 |
+
"steps": 2,
|
| 307 |
+
"status": "done",
|
| 308 |
+
"wall": 2.642282485961914
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "ocaml-pkg-yojson",
|
| 312 |
+
"pass": true,
|
| 313 |
+
"steps": 2,
|
| 314 |
+
"status": "done",
|
| 315 |
+
"wall": 2.9193930625915527
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "shop-search-jacket",
|
| 319 |
+
"pass": true,
|
| 320 |
+
"steps": 2,
|
| 321 |
+
"status": "done",
|
| 322 |
+
"wall": 4.8924782276153564
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "shop-search-jacket",
|
| 326 |
+
"pass": true,
|
| 327 |
+
"steps": 2,
|
| 328 |
+
"status": "done",
|
| 329 |
+
"wall": 2.8857860565185547
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "shop-search-jacket",
|
| 333 |
+
"pass": true,
|
| 334 |
+
"steps": 2,
|
| 335 |
+
"status": "done",
|
| 336 |
+
"wall": 2.837737798690796
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"name": "shop-page2",
|
| 340 |
+
"pass": true,
|
| 341 |
+
"steps": 2,
|
| 342 |
+
"status": "done",
|
| 343 |
+
"wall": 3.3639087677001953
|
| 344 |
+
},
|
| 345 |
+
{
|
| 346 |
+
"name": "shop-page2",
|
| 347 |
+
"pass": true,
|
| 348 |
+
"steps": 2,
|
| 349 |
+
"status": "done",
|
| 350 |
+
"wall": 4.182849407196045
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"name": "shop-page2",
|
| 354 |
+
"pass": false,
|
| 355 |
+
"steps": 3,
|
| 356 |
+
"status": "blocked",
|
| 357 |
+
"wall": 2.9457852840423584
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"name": "shop-sort-price",
|
| 361 |
+
"pass": false,
|
| 362 |
+
"steps": 2,
|
| 363 |
+
"status": "done",
|
| 364 |
+
"wall": 6.215277910232544
|
| 365 |
+
},
|
| 366 |
+
{
|
| 367 |
+
"name": "shop-sort-price",
|
| 368 |
+
"pass": false,
|
| 369 |
+
"steps": 2,
|
| 370 |
+
"status": "done",
|
| 371 |
+
"wall": 3.446885585784912
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"name": "shop-sort-price",
|
| 375 |
+
"pass": false,
|
| 376 |
+
"steps": 2,
|
| 377 |
+
"status": "done",
|
| 378 |
+
"wall": 3.414456844329834
|
| 379 |
+
}
|
| 380 |
+
]
|
results/round3/suiteB_v14s.json
ADDED
|
@@ -0,0 +1,380 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "sqlite-download",
|
| 4 |
+
"pass": true,
|
| 5 |
+
"steps": 1,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 6.361268043518066
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "sqlite-download",
|
| 11 |
+
"pass": true,
|
| 12 |
+
"steps": 1,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 1.9992897510528564
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "sqlite-download",
|
| 18 |
+
"pass": true,
|
| 19 |
+
"steps": 1,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 1.970348596572876
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "haskell-downloads",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 1,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 3.513546943664551
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "haskell-downloads",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 1,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 2.0639684200286865
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "haskell-downloads",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 1,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 2.178180694580078
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "zig-download",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 5.86093807220459
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "zig-download",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 1.9833033084869385
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "zig-download",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.164769172668457
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "openbsd-faq",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 1.9758775234222412
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "openbsd-faq",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 1.984276533126831
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "openbsd-faq",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 1.9708170890808105
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "nginx-download",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 2.156858444213867
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "nginx-download",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 1.7520651817321777
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "nginx-download",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 1.9046032428741455
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "xkcd-archive",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 7.542937278747559
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "xkcd-archive",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 4.576859474182129
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "xkcd-archive",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 4.049166440963745
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "elixir-install",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 4.433667898178101
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "elixir-install",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 2.2110342979431152
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "elixir-install",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 2.0132791996002197
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "prometheus-download",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 9.333859920501709
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "prometheus-download",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 3.161487340927124
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "prometheus-download",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 3.020197629928589
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "ocaml-install",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 2,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 4.945269823074341
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "ocaml-install",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 2,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 4.126190185546875
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "ocaml-install",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 2,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 4.143099784851074
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "rosetta-quicksort",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 2,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 3.9808945655822754
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "rosetta-quicksort",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 2,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.70145320892334
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "rosetta-quicksort",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 2,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.6665432453155518
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "arch-man-grep",
|
| 214 |
+
"pass": true,
|
| 215 |
+
"steps": 2,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 4.003252267837524
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "arch-man-grep",
|
| 221 |
+
"pass": true,
|
| 222 |
+
"steps": 2,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 2.5729293823242188
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "arch-man-grep",
|
| 228 |
+
"pass": true,
|
| 229 |
+
"steps": 2,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 2.561814308166504
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "debian-man-tar",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 2,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 5.128390312194824
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "debian-man-tar",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 2,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.061967134475708
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "debian-man-tar",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 2,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 1.9078538417816162
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "rfc-http-semantics",
|
| 256 |
+
"pass": true,
|
| 257 |
+
"steps": 2,
|
| 258 |
+
"status": "done",
|
| 259 |
+
"wall": 5.725454807281494
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "rfc-http-semantics",
|
| 263 |
+
"pass": true,
|
| 264 |
+
"steps": 2,
|
| 265 |
+
"status": "done",
|
| 266 |
+
"wall": 3.664327383041382
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "rfc-http-semantics",
|
| 270 |
+
"pass": true,
|
| 271 |
+
"steps": 2,
|
| 272 |
+
"status": "done",
|
| 273 |
+
"wall": 3.0745277404785156
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "nixos-ripgrep",
|
| 277 |
+
"pass": true,
|
| 278 |
+
"steps": 2,
|
| 279 |
+
"status": "done",
|
| 280 |
+
"wall": 3.9704113006591797
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "nixos-ripgrep",
|
| 284 |
+
"pass": true,
|
| 285 |
+
"steps": 2,
|
| 286 |
+
"status": "done",
|
| 287 |
+
"wall": 2.753455638885498
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "nixos-ripgrep",
|
| 291 |
+
"pass": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 2.771595001220703
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "ocaml-pkg-yojson",
|
| 298 |
+
"pass": true,
|
| 299 |
+
"steps": 2,
|
| 300 |
+
"status": "done",
|
| 301 |
+
"wall": 3.7241852283477783
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "ocaml-pkg-yojson",
|
| 305 |
+
"pass": true,
|
| 306 |
+
"steps": 2,
|
| 307 |
+
"status": "done",
|
| 308 |
+
"wall": 2.646784782409668
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "ocaml-pkg-yojson",
|
| 312 |
+
"pass": true,
|
| 313 |
+
"steps": 2,
|
| 314 |
+
"status": "done",
|
| 315 |
+
"wall": 2.8170480728149414
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "shop-search-jacket",
|
| 319 |
+
"pass": true,
|
| 320 |
+
"steps": 2,
|
| 321 |
+
"status": "done",
|
| 322 |
+
"wall": 5.183164119720459
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "shop-search-jacket",
|
| 326 |
+
"pass": true,
|
| 327 |
+
"steps": 2,
|
| 328 |
+
"status": "done",
|
| 329 |
+
"wall": 2.852771520614624
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "shop-search-jacket",
|
| 333 |
+
"pass": true,
|
| 334 |
+
"steps": 2,
|
| 335 |
+
"status": "done",
|
| 336 |
+
"wall": 2.919358253479004
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"name": "shop-page2",
|
| 340 |
+
"pass": true,
|
| 341 |
+
"steps": 1,
|
| 342 |
+
"status": "done",
|
| 343 |
+
"wall": 3.1722159385681152
|
| 344 |
+
},
|
| 345 |
+
{
|
| 346 |
+
"name": "shop-page2",
|
| 347 |
+
"pass": true,
|
| 348 |
+
"steps": 1,
|
| 349 |
+
"status": "done",
|
| 350 |
+
"wall": 3.6293818950653076
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"name": "shop-page2",
|
| 354 |
+
"pass": true,
|
| 355 |
+
"steps": 1,
|
| 356 |
+
"status": "done",
|
| 357 |
+
"wall": 3.4879581928253174
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"name": "shop-sort-price",
|
| 361 |
+
"pass": true,
|
| 362 |
+
"steps": 1,
|
| 363 |
+
"status": "done",
|
| 364 |
+
"wall": 3.8961870670318604
|
| 365 |
+
},
|
| 366 |
+
{
|
| 367 |
+
"name": "shop-sort-price",
|
| 368 |
+
"pass": true,
|
| 369 |
+
"steps": 1,
|
| 370 |
+
"status": "done",
|
| 371 |
+
"wall": 3.308035135269165
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"name": "shop-sort-price",
|
| 375 |
+
"pass": true,
|
| 376 |
+
"steps": 1,
|
| 377 |
+
"status": "done",
|
| 378 |
+
"wall": 3.4196367263793945
|
| 379 |
+
}
|
| 380 |
+
]
|
results/round3/suite_h2_laya-browser-v10s.json
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "wiki-einstein",
|
| 4 |
+
"pass": false,
|
| 5 |
+
"steps": 2,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 3.83627986907959
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "wiki-einstein",
|
| 11 |
+
"pass": false,
|
| 12 |
+
"steps": 2,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 3.2153303623199463
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "wiki-einstein",
|
| 18 |
+
"pass": false,
|
| 19 |
+
"steps": 2,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 2.7771353721618652
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "wiki-search",
|
| 25 |
+
"pass": false,
|
| 26 |
+
"steps": 20,
|
| 27 |
+
"status": "ready",
|
| 28 |
+
"wall": 7.70431661605835
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "wiki-search",
|
| 32 |
+
"pass": false,
|
| 33 |
+
"steps": 11,
|
| 34 |
+
"status": "blocked",
|
| 35 |
+
"wall": 6.307146072387695
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "wiki-search",
|
| 39 |
+
"pass": false,
|
| 40 |
+
"steps": 20,
|
| 41 |
+
"status": "ready",
|
| 42 |
+
"wall": 7.217585802078247
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "hn-new",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 3.1100358963012695
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "hn-new",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 2.744152069091797
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "hn-new",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.5624217987060547
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "hn-login-page",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 2.7742652893066406
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "hn-login-page",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 2.3693900108337402
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "hn-login-page",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 2.5206425189971924
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "gh-issues",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 4.734229564666748
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "gh-issues",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 3.3147778511047363
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "gh-issues",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 3.5175280570983887
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "py-downloads",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 2.399106502532959
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "py-downloads",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 2.375485897064209
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "py-downloads",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 2.5823707580566406
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "books-travel",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 1.9549450874328613
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "books-travel",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 2.0089175701141357
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "books-travel",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 1.9885730743408203
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "books-open-book",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 2.223175287246704
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "books-open-book",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 1.734677791595459
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "books-open-book",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 1.9055156707763672
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "internet-dropdown",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 1,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 2.755065679550171
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "internet-dropdown",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 1,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 2.0737600326538086
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "internet-dropdown",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 1,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 2.218611240386963
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "internet-checkbox",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 1,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 2.42691707611084
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "internet-checkbox",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 1,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.051815986633301
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "internet-checkbox",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 1,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.1564059257507324
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "books-page2",
|
| 214 |
+
"pass": false,
|
| 215 |
+
"steps": 1,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 1.9430482387542725
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "books-page2",
|
| 221 |
+
"pass": false,
|
| 222 |
+
"steps": 1,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 1.9770045280456543
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "books-page2",
|
| 228 |
+
"pass": false,
|
| 229 |
+
"steps": 1,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 1.9294829368591309
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "quotes-tag-love",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 1,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 3.630563974380493
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "quotes-tag-love",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 1,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.9477081298828125
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "quotes-tag-love",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 1,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 2.8947083950042725
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "hn-past",
|
| 256 |
+
"pass": true,
|
| 257 |
+
"steps": 1,
|
| 258 |
+
"status": "done",
|
| 259 |
+
"wall": 3.8496310710906982
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "hn-past",
|
| 263 |
+
"pass": true,
|
| 264 |
+
"steps": 1,
|
| 265 |
+
"status": "done",
|
| 266 |
+
"wall": 3.1609859466552734
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "hn-past",
|
| 270 |
+
"pass": true,
|
| 271 |
+
"steps": 1,
|
| 272 |
+
"status": "done",
|
| 273 |
+
"wall": 2.4889137744903564
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "web-search",
|
| 277 |
+
"pass": false,
|
| 278 |
+
"steps": 8,
|
| 279 |
+
"status": "error:ValueError",
|
| 280 |
+
"wall": 15.667231559753418
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "web-search",
|
| 284 |
+
"pass": false,
|
| 285 |
+
"steps": 9,
|
| 286 |
+
"status": "error:ValueError",
|
| 287 |
+
"wall": 13.118170261383057
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "web-search",
|
| 291 |
+
"pass": false,
|
| 292 |
+
"steps": 6,
|
| 293 |
+
"status": "error:ValueError",
|
| 294 |
+
"wall": 14.582857608795166
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "arxiv-search",
|
| 298 |
+
"pass": false,
|
| 299 |
+
"steps": 2,
|
| 300 |
+
"status": "error:ValueError",
|
| 301 |
+
"wall": 9.322384357452393
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "arxiv-search",
|
| 305 |
+
"pass": false,
|
| 306 |
+
"steps": 2,
|
| 307 |
+
"status": "error:ValueError",
|
| 308 |
+
"wall": 10.208577632904053
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "arxiv-search",
|
| 312 |
+
"pass": false,
|
| 313 |
+
"steps": 2,
|
| 314 |
+
"status": "error:ValueError",
|
| 315 |
+
"wall": 10.149547815322876
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "flights",
|
| 319 |
+
"pass": false,
|
| 320 |
+
"steps": 14,
|
| 321 |
+
"status": "error:ValueError",
|
| 322 |
+
"wall": 9.853911638259888
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "flights",
|
| 326 |
+
"pass": false,
|
| 327 |
+
"steps": 14,
|
| 328 |
+
"status": "error:ValueError",
|
| 329 |
+
"wall": 9.251529693603516
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "flights",
|
| 333 |
+
"pass": false,
|
| 334 |
+
"steps": 20,
|
| 335 |
+
"status": "ready",
|
| 336 |
+
"wall": 6.629589080810547
|
| 337 |
+
}
|
| 338 |
+
]
|
results/round3/suite_h2_laya-browser-v12s.json
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "wiki-einstein",
|
| 4 |
+
"pass": true,
|
| 5 |
+
"steps": 3,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 6.088091135025024
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "wiki-einstein",
|
| 11 |
+
"pass": true,
|
| 12 |
+
"steps": 3,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 4.1120641231536865
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "wiki-einstein",
|
| 18 |
+
"pass": true,
|
| 19 |
+
"steps": 3,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 4.785888195037842
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "wiki-search",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 2,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 4.805815935134888
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "wiki-search",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 2,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 4.1727588176727295
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "wiki-search",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 2,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 3.9865856170654297
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "hn-new",
|
| 46 |
+
"pass": false,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 3.6679415702819824
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "hn-new",
|
| 53 |
+
"pass": false,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 2.4920201301574707
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "hn-new",
|
| 60 |
+
"pass": false,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.4279229640960693
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "hn-login-page",
|
| 67 |
+
"pass": false,
|
| 68 |
+
"steps": 3,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 4.908161878585815
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "hn-login-page",
|
| 74 |
+
"pass": false,
|
| 75 |
+
"steps": 3,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 3.3291561603546143
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "hn-login-page",
|
| 81 |
+
"pass": false,
|
| 82 |
+
"steps": 3,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 3.2981934547424316
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "gh-issues",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 7.582534551620483
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "gh-issues",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 3.5515997409820557
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "gh-issues",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 3.4299209117889404
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "py-downloads",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 4.59052300453186
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "py-downloads",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 2.7227585315704346
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "py-downloads",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 2.298168897628784
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "books-travel",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 3.351111650466919
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "books-travel",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 1.9312889575958252
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "books-travel",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 2.046699285507202
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "books-open-book",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 2.01000714302063
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "books-open-book",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 1.8002934455871582
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "books-open-book",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 1.8848111629486084
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "internet-dropdown",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 1,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 4.636353254318237
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "internet-dropdown",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 1,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 2.068424701690674
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "internet-dropdown",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 1,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 2.11932373046875
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "internet-checkbox",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 1,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 2.576756000518799
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "internet-checkbox",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 1,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.0067596435546875
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "internet-checkbox",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 1,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.1043567657470703
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "books-page2",
|
| 214 |
+
"pass": false,
|
| 215 |
+
"steps": 1,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 1.9515693187713623
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "books-page2",
|
| 221 |
+
"pass": false,
|
| 222 |
+
"steps": 1,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 2.0128142833709717
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "books-page2",
|
| 228 |
+
"pass": false,
|
| 229 |
+
"steps": 1,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 1.850271224975586
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "quotes-tag-love",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 1,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 3.917008399963379
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "quotes-tag-love",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 1,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.8107078075408936
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "quotes-tag-love",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 1,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 2.968144655227661
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "hn-past",
|
| 256 |
+
"pass": false,
|
| 257 |
+
"steps": 7,
|
| 258 |
+
"status": "blocked",
|
| 259 |
+
"wall": 4.717610836029053
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "hn-past",
|
| 263 |
+
"pass": false,
|
| 264 |
+
"steps": 7,
|
| 265 |
+
"status": "blocked",
|
| 266 |
+
"wall": 3.822110176086426
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "hn-past",
|
| 270 |
+
"pass": false,
|
| 271 |
+
"steps": 7,
|
| 272 |
+
"status": "blocked",
|
| 273 |
+
"wall": 3.8178353309631348
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "web-search",
|
| 277 |
+
"pass": false,
|
| 278 |
+
"steps": 14,
|
| 279 |
+
"status": "done",
|
| 280 |
+
"wall": 16.275484323501587
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "web-search",
|
| 284 |
+
"pass": true,
|
| 285 |
+
"steps": 2,
|
| 286 |
+
"status": "done",
|
| 287 |
+
"wall": 4.697402477264404
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "web-search",
|
| 291 |
+
"pass": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 4.85608983039856
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "arxiv-search",
|
| 298 |
+
"pass": true,
|
| 299 |
+
"steps": 3,
|
| 300 |
+
"status": "done",
|
| 301 |
+
"wall": 5.771880865097046
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "arxiv-search",
|
| 305 |
+
"pass": true,
|
| 306 |
+
"steps": 3,
|
| 307 |
+
"status": "done",
|
| 308 |
+
"wall": 4.881175994873047
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "arxiv-search",
|
| 312 |
+
"pass": true,
|
| 313 |
+
"steps": 3,
|
| 314 |
+
"status": "done",
|
| 315 |
+
"wall": 3.4859631061553955
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "flights",
|
| 319 |
+
"pass": false,
|
| 320 |
+
"steps": 20,
|
| 321 |
+
"status": "ready",
|
| 322 |
+
"wall": 9.096100568771362
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "flights",
|
| 326 |
+
"pass": false,
|
| 327 |
+
"steps": 14,
|
| 328 |
+
"status": "blocked",
|
| 329 |
+
"wall": 5.75098180770874
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "flights",
|
| 333 |
+
"pass": false,
|
| 334 |
+
"steps": 15,
|
| 335 |
+
"status": "blocked",
|
| 336 |
+
"wall": 6.6374828815460205
|
| 337 |
+
}
|
| 338 |
+
]
|
results/round3/suite_h2c40_laya-browser-v12s.json
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "wiki-einstein",
|
| 4 |
+
"pass": false,
|
| 5 |
+
"steps": 1,
|
| 6 |
+
"status": "done",
|
| 7 |
+
"wall": 3.807706832885742
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"name": "wiki-einstein",
|
| 11 |
+
"pass": false,
|
| 12 |
+
"steps": 1,
|
| 13 |
+
"status": "done",
|
| 14 |
+
"wall": 2.3761672973632812
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"name": "wiki-einstein",
|
| 18 |
+
"pass": false,
|
| 19 |
+
"steps": 1,
|
| 20 |
+
"status": "done",
|
| 21 |
+
"wall": 2.567605495452881
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"name": "wiki-search",
|
| 25 |
+
"pass": true,
|
| 26 |
+
"steps": 2,
|
| 27 |
+
"status": "done",
|
| 28 |
+
"wall": 4.4094016551971436
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"name": "wiki-search",
|
| 32 |
+
"pass": true,
|
| 33 |
+
"steps": 2,
|
| 34 |
+
"status": "done",
|
| 35 |
+
"wall": 4.763357162475586
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "wiki-search",
|
| 39 |
+
"pass": true,
|
| 40 |
+
"steps": 2,
|
| 41 |
+
"status": "done",
|
| 42 |
+
"wall": 4.382323265075684
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"name": "hn-new",
|
| 46 |
+
"pass": true,
|
| 47 |
+
"steps": 1,
|
| 48 |
+
"status": "done",
|
| 49 |
+
"wall": 2.7456138134002686
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "hn-new",
|
| 53 |
+
"pass": true,
|
| 54 |
+
"steps": 1,
|
| 55 |
+
"status": "done",
|
| 56 |
+
"wall": 2.794174909591675
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"name": "hn-new",
|
| 60 |
+
"pass": true,
|
| 61 |
+
"steps": 1,
|
| 62 |
+
"status": "done",
|
| 63 |
+
"wall": 2.594071626663208
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"name": "hn-login-page",
|
| 67 |
+
"pass": true,
|
| 68 |
+
"steps": 1,
|
| 69 |
+
"status": "done",
|
| 70 |
+
"wall": 2.8987975120544434
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"name": "hn-login-page",
|
| 74 |
+
"pass": true,
|
| 75 |
+
"steps": 1,
|
| 76 |
+
"status": "done",
|
| 77 |
+
"wall": 2.7102601528167725
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "hn-login-page",
|
| 81 |
+
"pass": true,
|
| 82 |
+
"steps": 1,
|
| 83 |
+
"status": "done",
|
| 84 |
+
"wall": 2.4696624279022217
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "gh-issues",
|
| 88 |
+
"pass": true,
|
| 89 |
+
"steps": 1,
|
| 90 |
+
"status": "done",
|
| 91 |
+
"wall": 5.98798680305481
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "gh-issues",
|
| 95 |
+
"pass": true,
|
| 96 |
+
"steps": 1,
|
| 97 |
+
"status": "done",
|
| 98 |
+
"wall": 3.4403786659240723
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"name": "gh-issues",
|
| 102 |
+
"pass": true,
|
| 103 |
+
"steps": 1,
|
| 104 |
+
"status": "done",
|
| 105 |
+
"wall": 3.37373423576355
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"name": "py-downloads",
|
| 109 |
+
"pass": true,
|
| 110 |
+
"steps": 1,
|
| 111 |
+
"status": "done",
|
| 112 |
+
"wall": 2.724518299102783
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"name": "py-downloads",
|
| 116 |
+
"pass": true,
|
| 117 |
+
"steps": 1,
|
| 118 |
+
"status": "done",
|
| 119 |
+
"wall": 2.5852811336517334
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"name": "py-downloads",
|
| 123 |
+
"pass": true,
|
| 124 |
+
"steps": 1,
|
| 125 |
+
"status": "done",
|
| 126 |
+
"wall": 2.565865993499756
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"name": "books-travel",
|
| 130 |
+
"pass": true,
|
| 131 |
+
"steps": 1,
|
| 132 |
+
"status": "done",
|
| 133 |
+
"wall": 2.0555620193481445
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"name": "books-travel",
|
| 137 |
+
"pass": true,
|
| 138 |
+
"steps": 1,
|
| 139 |
+
"status": "done",
|
| 140 |
+
"wall": 2.0139927864074707
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"name": "books-travel",
|
| 144 |
+
"pass": true,
|
| 145 |
+
"steps": 1,
|
| 146 |
+
"status": "done",
|
| 147 |
+
"wall": 1.9735207557678223
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"name": "books-open-book",
|
| 151 |
+
"pass": true,
|
| 152 |
+
"steps": 1,
|
| 153 |
+
"status": "done",
|
| 154 |
+
"wall": 2.1686925888061523
|
| 155 |
+
},
|
| 156 |
+
{
|
| 157 |
+
"name": "books-open-book",
|
| 158 |
+
"pass": true,
|
| 159 |
+
"steps": 1,
|
| 160 |
+
"status": "done",
|
| 161 |
+
"wall": 1.7811036109924316
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"name": "books-open-book",
|
| 165 |
+
"pass": true,
|
| 166 |
+
"steps": 1,
|
| 167 |
+
"status": "done",
|
| 168 |
+
"wall": 1.8474400043487549
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"name": "internet-dropdown",
|
| 172 |
+
"pass": true,
|
| 173 |
+
"steps": 1,
|
| 174 |
+
"status": "done",
|
| 175 |
+
"wall": 2.797389507293701
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"name": "internet-dropdown",
|
| 179 |
+
"pass": true,
|
| 180 |
+
"steps": 1,
|
| 181 |
+
"status": "done",
|
| 182 |
+
"wall": 2.0917704105377197
|
| 183 |
+
},
|
| 184 |
+
{
|
| 185 |
+
"name": "internet-dropdown",
|
| 186 |
+
"pass": true,
|
| 187 |
+
"steps": 1,
|
| 188 |
+
"status": "done",
|
| 189 |
+
"wall": 2.2623064517974854
|
| 190 |
+
},
|
| 191 |
+
{
|
| 192 |
+
"name": "internet-checkbox",
|
| 193 |
+
"pass": true,
|
| 194 |
+
"steps": 1,
|
| 195 |
+
"status": "done",
|
| 196 |
+
"wall": 2.3313634395599365
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"name": "internet-checkbox",
|
| 200 |
+
"pass": true,
|
| 201 |
+
"steps": 1,
|
| 202 |
+
"status": "done",
|
| 203 |
+
"wall": 2.104766368865967
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"name": "internet-checkbox",
|
| 207 |
+
"pass": true,
|
| 208 |
+
"steps": 1,
|
| 209 |
+
"status": "done",
|
| 210 |
+
"wall": 2.1607117652893066
|
| 211 |
+
},
|
| 212 |
+
{
|
| 213 |
+
"name": "books-page2",
|
| 214 |
+
"pass": false,
|
| 215 |
+
"steps": 1,
|
| 216 |
+
"status": "done",
|
| 217 |
+
"wall": 1.7619709968566895
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"name": "books-page2",
|
| 221 |
+
"pass": false,
|
| 222 |
+
"steps": 1,
|
| 223 |
+
"status": "done",
|
| 224 |
+
"wall": 1.8645665645599365
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"name": "books-page2",
|
| 228 |
+
"pass": false,
|
| 229 |
+
"steps": 1,
|
| 230 |
+
"status": "done",
|
| 231 |
+
"wall": 1.977370023727417
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"name": "quotes-tag-love",
|
| 235 |
+
"pass": true,
|
| 236 |
+
"steps": 1,
|
| 237 |
+
"status": "done",
|
| 238 |
+
"wall": 3.4522359371185303
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"name": "quotes-tag-love",
|
| 242 |
+
"pass": true,
|
| 243 |
+
"steps": 1,
|
| 244 |
+
"status": "done",
|
| 245 |
+
"wall": 2.9943950176239014
|
| 246 |
+
},
|
| 247 |
+
{
|
| 248 |
+
"name": "quotes-tag-love",
|
| 249 |
+
"pass": true,
|
| 250 |
+
"steps": 1,
|
| 251 |
+
"status": "done",
|
| 252 |
+
"wall": 2.8459112644195557
|
| 253 |
+
},
|
| 254 |
+
{
|
| 255 |
+
"name": "hn-past",
|
| 256 |
+
"pass": true,
|
| 257 |
+
"steps": 1,
|
| 258 |
+
"status": "done",
|
| 259 |
+
"wall": 2.764420747756958
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"name": "hn-past",
|
| 263 |
+
"pass": true,
|
| 264 |
+
"steps": 1,
|
| 265 |
+
"status": "done",
|
| 266 |
+
"wall": 2.925821304321289
|
| 267 |
+
},
|
| 268 |
+
{
|
| 269 |
+
"name": "hn-past",
|
| 270 |
+
"pass": true,
|
| 271 |
+
"steps": 1,
|
| 272 |
+
"status": "done",
|
| 273 |
+
"wall": 2.6401472091674805
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"name": "web-search",
|
| 277 |
+
"pass": true,
|
| 278 |
+
"steps": 2,
|
| 279 |
+
"status": "done",
|
| 280 |
+
"wall": 7.507221460342407
|
| 281 |
+
},
|
| 282 |
+
{
|
| 283 |
+
"name": "web-search",
|
| 284 |
+
"pass": true,
|
| 285 |
+
"steps": 2,
|
| 286 |
+
"status": "done",
|
| 287 |
+
"wall": 3.8072285652160645
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"name": "web-search",
|
| 291 |
+
"pass": true,
|
| 292 |
+
"steps": 2,
|
| 293 |
+
"status": "done",
|
| 294 |
+
"wall": 4.1349287033081055
|
| 295 |
+
},
|
| 296 |
+
{
|
| 297 |
+
"name": "arxiv-search",
|
| 298 |
+
"pass": false,
|
| 299 |
+
"steps": 1,
|
| 300 |
+
"status": "error:ValueError",
|
| 301 |
+
"wall": 1.9037411212921143
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"name": "arxiv-search",
|
| 305 |
+
"pass": false,
|
| 306 |
+
"steps": 1,
|
| 307 |
+
"status": "error:ValueError",
|
| 308 |
+
"wall": 0.8892548084259033
|
| 309 |
+
},
|
| 310 |
+
{
|
| 311 |
+
"name": "arxiv-search",
|
| 312 |
+
"pass": false,
|
| 313 |
+
"steps": 1,
|
| 314 |
+
"status": "error:ValueError",
|
| 315 |
+
"wall": 0.9213480949401855
|
| 316 |
+
},
|
| 317 |
+
{
|
| 318 |
+
"name": "flights",
|
| 319 |
+
"pass": false,
|
| 320 |
+
"steps": 20,
|
| 321 |
+
"status": "ready",
|
| 322 |
+
"wall": 8.24284815788269
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"name": "flights",
|
| 326 |
+
"pass": false,
|
| 327 |
+
"steps": 20,
|
| 328 |
+
"status": "ready",
|
| 329 |
+
"wall": 6.250298261642456
|
| 330 |
+
},
|
| 331 |
+
{
|
| 332 |
+
"name": "flights",
|
| 333 |
+
"pass": false,
|
| 334 |
+
"steps": 20,
|
| 335 |
+
"status": "blocked",
|
| 336 |
+
"wall": 6.608509063720703
|
| 337 |
+
}
|
| 338 |
+
]
|
results/round3/suite_v12s.log
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
== suite laya-browser-v12s x3 (patched harness)
|
| 2 |
+
PASS wiki-einstein steps= 3 status=done 6.1s https://en.wikipedia.org/wiki/Albert_Einstein
|
| 3 |
+
PASS wiki-einstein steps= 3 status=done 4.1s https://en.wikipedia.org/wiki/Albert_Einstein
|
| 4 |
+
PASS wiki-einstein steps= 3 status=done 4.8s https://en.wikipedia.org/wiki/Albert_Einstein
|
| 5 |
+
PASS wiki-search steps= 2 status=done 4.8s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 6 |
+
PASS wiki-search steps= 2 status=done 4.2s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 7 |
+
PASS wiki-search steps= 2 status=done 4.0s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 8 |
+
FAIL hn-new steps= 1 status=done 3.7s https://news.ycombinator.com/front
|
| 9 |
+
FAIL hn-new steps= 1 status=done 2.5s https://news.ycombinator.com/front
|
| 10 |
+
FAIL hn-new steps= 1 status=done 2.4s https://news.ycombinator.com/front
|
| 11 |
+
FAIL hn-login-page steps= 3 status=done 4.9s https://news.ycombinator.com/submit
|
| 12 |
+
FAIL hn-login-page steps= 3 status=done 3.3s https://news.ycombinator.com/submit
|
| 13 |
+
FAIL hn-login-page steps= 3 status=done 3.3s https://news.ycombinator.com/submit
|
| 14 |
+
PASS gh-issues steps= 1 status=done 7.6s https://github.com/tile-ai/tilelang/issues
|
| 15 |
+
PASS gh-issues steps= 1 status=done 3.6s https://github.com/tile-ai/tilelang/issues
|
| 16 |
+
PASS gh-issues steps= 1 status=done 3.4s https://github.com/tile-ai/tilelang/issues
|
| 17 |
+
PASS py-downloads steps= 1 status=done 4.6s https://www.python.org/downloads/
|
| 18 |
+
PASS py-downloads steps= 1 status=done 2.7s https://www.python.org/downloads/
|
| 19 |
+
PASS py-downloads steps= 1 status=done 2.3s https://www.python.org/downloads/
|
| 20 |
+
PASS books-travel steps= 1 status=done 3.4s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 21 |
+
PASS books-travel steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 22 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 23 |
+
PASS books-open-book steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 24 |
+
PASS books-open-book steps= 1 status=done 1.8s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 25 |
+
PASS books-open-book steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 26 |
+
PASS internet-dropdown steps= 1 status=done 4.6s https://the-internet.herokuapp.com/dropdown
|
| 27 |
+
PASS internet-dropdown steps= 1 status=done 2.1s https://the-internet.herokuapp.com/dropdown
|
| 28 |
+
PASS internet-dropdown steps= 1 status=done 2.1s https://the-internet.herokuapp.com/dropdown
|
| 29 |
+
PASS internet-checkbox steps= 1 status=done 2.6s https://the-internet.herokuapp.com/checkboxes
|
| 30 |
+
PASS internet-checkbox steps= 1 status=done 2.0s https://the-internet.herokuapp.com/checkboxes
|
| 31 |
+
PASS internet-checkbox steps= 1 status=done 2.1s https://the-internet.herokuapp.com/checkboxes
|
| 32 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 33 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 34 |
+
FAIL books-page2 steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 35 |
+
PASS quotes-tag-love steps= 1 status=done 3.9s https://quotes.toscrape.com/tag/love/
|
| 36 |
+
PASS quotes-tag-love steps= 1 status=done 2.8s https://quotes.toscrape.com/tag/love/
|
| 37 |
+
PASS quotes-tag-love steps= 1 status=done 3.0s https://quotes.toscrape.com/tag/love/
|
| 38 |
+
FAIL hn-past steps= 7 status=blocked 4.7s https://news.ycombinator.com/login?goto=news
|
| 39 |
+
FAIL hn-past steps= 7 status=blocked 3.8s https://news.ycombinator.com/login?goto=news
|
| 40 |
+
FAIL hn-past steps= 7 status=blocked 3.8s https://news.ycombinator.com/login?goto=news
|
| 41 |
+
FAIL web-search steps=14 status=done 16.3s https://marginalia-search.com/
|
| 42 |
+
PASS web-search steps= 2 status=done 4.7s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 43 |
+
PASS web-search steps= 2 status=done 4.9s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 44 |
+
PASS arxiv-search steps= 3 status=done 5.8s https://arxiv.org/search/?query=flash+attention&searchtype=all&source=
|
| 45 |
+
PASS arxiv-search steps= 3 status=done 4.9s https://arxiv.org/search/?query=flash+attention&searchtype=all&source=
|
| 46 |
+
PASS arxiv-search steps= 3 status=done 3.5s https://arxiv.org/search/?query=flash+attention&searchtype=all&source=
|
| 47 |
+
FAIL flights steps=20 status=ready 9.1s https://www.google.com/travel/flights/search?tfs=CBwQAhooEgoyMDI2LTEwL
|
| 48 |
+
FAIL flights steps=14 status=blocked 5.8s https://www.google.com/travel/flights?hl=en
|
| 49 |
+
FAIL flights steps=15 status=blocked 6.6s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 50 |
+
== 32/48 passed (67%, 3 run(s) per task) | median wall 3.6s
|
| 51 |
+
per task: wiki-einstein=3/3 wiki-search=3/3 hn-new=0/3 hn-login-page=0/3 gh-issues=3/3 py-downloads=3/3 books-travel=3/3 books-open-book=3/3 internet-dropdown=3/3 internet-checkbox=3/3 books-page2=0/3 quotes-tag-love=3/3 hn-past=0/3 web-search=2/3 arxiv-search=3/3 flights=0/3
|
| 52 |
+
== suite laya-browser-v10s x3 (patched harness)
|
| 53 |
+
FAIL wiki-einstein steps= 2 status=done 3.8s https://en.wikipedia.org/wiki/Main_Page
|
| 54 |
+
FAIL wiki-einstein steps= 2 status=done 3.2s https://en.wikipedia.org/wiki/Main_Page
|
| 55 |
+
FAIL wiki-einstein steps= 2 status=done 2.8s https://en.wikipedia.org/wiki/Main_Page
|
| 56 |
+
FAIL wiki-search steps=20 status=ready 7.7s https://en.wikipedia.org/w/index.php?search=&title=Special%3ASearch&pr
|
| 57 |
+
FAIL wiki-search steps=11 status=blocked 6.3s https://en.wikipedia.org/w/index.php?search=&title=Special%3ASearch
|
| 58 |
+
FAIL wiki-search steps=20 status=ready 7.2s https://en.wikipedia.org/w/index.php?search=&title=Special%3ASearch
|
| 59 |
+
PASS hn-new steps= 1 status=done 3.1s https://news.ycombinator.com/newest
|
| 60 |
+
PASS hn-new steps= 1 status=done 2.7s https://news.ycombinator.com/newest
|
| 61 |
+
PASS hn-new steps= 1 status=done 2.6s https://news.ycombinator.com/newest
|
| 62 |
+
PASS hn-login-page steps= 1 status=done 2.8s https://news.ycombinator.com/login?goto=news
|
| 63 |
+
PASS hn-login-page steps= 1 status=done 2.4s https://news.ycombinator.com/login?goto=news
|
| 64 |
+
PASS hn-login-page steps= 1 status=done 2.5s https://news.ycombinator.com/login?goto=news
|
| 65 |
+
PASS gh-issues steps= 1 status=done 4.7s https://github.com/tile-ai/tilelang/issues
|
| 66 |
+
PASS gh-issues steps= 1 status=done 3.3s https://github.com/tile-ai/tilelang/issues
|
| 67 |
+
PASS gh-issues steps= 1 status=done 3.5s https://github.com/tile-ai/tilelang/issues
|
| 68 |
+
PASS py-downloads steps= 1 status=done 2.4s https://www.python.org/downloads/
|
| 69 |
+
PASS py-downloads steps= 1 status=done 2.4s https://www.python.org/downloads/
|
| 70 |
+
PASS py-downloads steps= 1 status=done 2.6s https://www.python.org/downloads/
|
| 71 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 72 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 73 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 74 |
+
PASS books-open-book steps= 1 status=done 2.2s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 75 |
+
PASS books-open-book steps= 1 status=done 1.7s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 76 |
+
PASS books-open-book steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 77 |
+
PASS internet-dropdown steps= 1 status=done 2.8s https://the-internet.herokuapp.com/dropdown
|
| 78 |
+
PASS internet-dropdown steps= 1 status=done 2.1s https://the-internet.herokuapp.com/dropdown
|
| 79 |
+
PASS internet-dropdown steps= 1 status=done 2.2s https://the-internet.herokuapp.com/dropdown
|
| 80 |
+
PASS internet-checkbox steps= 1 status=done 2.4s https://the-internet.herokuapp.com/checkboxes
|
| 81 |
+
PASS internet-checkbox steps= 1 status=done 2.1s https://the-internet.herokuapp.com/checkboxes
|
| 82 |
+
PASS internet-checkbox steps= 1 status=done 2.2s https://the-internet.herokuapp.com/checkboxes
|
| 83 |
+
FAIL books-page2 steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 84 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 85 |
+
FAIL books-page2 steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 86 |
+
PASS quotes-tag-love steps= 1 status=done 3.6s https://quotes.toscrape.com/tag/love/
|
| 87 |
+
PASS quotes-tag-love steps= 1 status=done 2.9s https://quotes.toscrape.com/tag/love/
|
| 88 |
+
PASS quotes-tag-love steps= 1 status=done 2.9s https://quotes.toscrape.com/tag/love/
|
| 89 |
+
PASS hn-past steps= 1 status=done 3.8s https://news.ycombinator.com/front
|
| 90 |
+
PASS hn-past steps= 1 status=done 3.2s https://news.ycombinator.com/front
|
| 91 |
+
PASS hn-past steps= 1 status=done 2.5s https://news.ycombinator.com/front
|
| 92 |
+
FAIL web-search steps= 8 status=error:ValueError 15.7s https://github.com/MarginaliaSearch/MarginaliaSearch/issues?q=is%3Aiss
|
| 93 |
+
FAIL web-search steps= 9 status=error:ValueError 13.1s https://github.com/MarginaliaSearch/MarginaliaSearch/issues?q=is%3Aiss
|
| 94 |
+
FAIL web-search steps= 6 status=error:ValueError 14.6s https://github.com/MarginaliaSearch/MarginaliaSearch/issues?q=is%3Aiss
|
| 95 |
+
FAIL arxiv-search steps= 2 status=error:ValueError 9.3s https://arxiv.org/
|
| 96 |
+
FAIL arxiv-search steps= 2 status=error:ValueError 10.2s https://arxiv.org/
|
| 97 |
+
FAIL arxiv-search steps= 2 status=error:ValueError 10.1s https://arxiv.org/
|
| 98 |
+
FAIL flights steps=14 status=error:ValueError 9.9s https://www.google.com/travel/flights?tfs=CBwQARocagwIAxIIL20vMDg5NjZy
|
| 99 |
+
FAIL flights steps=14 status=error:ValueError 9.3s https://www.google.com/travel/flights?tfs=CBwQARocagwIAxIIL20vMDg5NjZy
|
| 100 |
+
FAIL flights steps=20 status=ready 6.6s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 101 |
+
== 30/48 passed (62%, 3 run(s) per task) | median wall 2.8s
|
| 102 |
+
per task: wiki-einstein=0/3 wiki-search=0/3 hn-new=3/3 hn-login-page=3/3 gh-issues=3/3 py-downloads=3/3 books-travel=3/3 books-open-book=3/3 internet-dropdown=3/3 internet-checkbox=3/3 books-page2=0/3 quotes-tag-love=3/3 hn-past=3/3 web-search=0/3 arxiv-search=0/3 flights=0/3
|
| 103 |
+
SUITE_V12S_DONE
|
results/round3/suite_v12s_c40.log
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FAIL wiki-einstein steps= 1 status=done 3.8s https://en.wikipedia.org/wiki/Main_Page#/media/File:SMRT_C151_set_065-
|
| 2 |
+
FAIL wiki-einstein steps= 1 status=done 2.4s https://en.wikipedia.org/wiki/Main_Page#/media/File:SMRT_C151_set_065-
|
| 3 |
+
FAIL wiki-einstein steps= 1 status=done 2.6s https://en.wikipedia.org/wiki/Main_Page#/media/File:SMRT_C151_set_065-
|
| 4 |
+
PASS wiki-search steps= 2 status=done 4.4s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 5 |
+
PASS wiki-search steps= 2 status=done 4.8s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 6 |
+
PASS wiki-search steps= 2 status=done 4.4s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 7 |
+
PASS hn-new steps= 1 status=done 2.7s https://news.ycombinator.com/newest
|
| 8 |
+
PASS hn-new steps= 1 status=done 2.8s https://news.ycombinator.com/newest
|
| 9 |
+
PASS hn-new steps= 1 status=done 2.6s https://news.ycombinator.com/newest
|
| 10 |
+
PASS hn-login-page steps= 1 status=done 2.9s https://news.ycombinator.com/login?goto=news
|
| 11 |
+
PASS hn-login-page steps= 1 status=done 2.7s https://news.ycombinator.com/login?goto=news
|
| 12 |
+
PASS hn-login-page steps= 1 status=done 2.5s https://news.ycombinator.com/login?goto=news
|
| 13 |
+
PASS gh-issues steps= 1 status=done 6.0s https://github.com/tile-ai/tilelang/issues
|
| 14 |
+
PASS gh-issues steps= 1 status=done 3.4s https://github.com/tile-ai/tilelang/issues
|
| 15 |
+
PASS gh-issues steps= 1 status=done 3.4s https://github.com/tile-ai/tilelang/issues
|
| 16 |
+
PASS py-downloads steps= 1 status=done 2.7s https://www.python.org/downloads/
|
| 17 |
+
PASS py-downloads steps= 1 status=done 2.6s https://www.python.org/downloads/
|
| 18 |
+
PASS py-downloads steps= 1 status=done 2.6s https://www.python.org/downloads/
|
| 19 |
+
PASS books-travel steps= 1 status=done 2.1s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 20 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 21 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 22 |
+
PASS books-open-book steps= 1 status=done 2.2s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 23 |
+
PASS books-open-book steps= 1 status=done 1.8s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 24 |
+
PASS books-open-book steps= 1 status=done 1.8s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 25 |
+
PASS internet-dropdown steps= 1 status=done 2.8s https://the-internet.herokuapp.com/dropdown
|
| 26 |
+
PASS internet-dropdown steps= 1 status=done 2.1s https://the-internet.herokuapp.com/dropdown
|
| 27 |
+
PASS internet-dropdown steps= 1 status=done 2.3s https://the-internet.herokuapp.com/dropdown
|
| 28 |
+
PASS internet-checkbox steps= 1 status=done 2.3s https://the-internet.herokuapp.com/checkboxes
|
| 29 |
+
PASS internet-checkbox steps= 1 status=done 2.1s https://the-internet.herokuapp.com/checkboxes
|
| 30 |
+
PASS internet-checkbox steps= 1 status=done 2.2s https://the-internet.herokuapp.com/checkboxes
|
| 31 |
+
FAIL books-page2 steps= 1 status=done 1.8s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 32 |
+
FAIL books-page2 steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 33 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 34 |
+
PASS quotes-tag-love steps= 1 status=done 3.5s https://quotes.toscrape.com/tag/love/
|
| 35 |
+
PASS quotes-tag-love steps= 1 status=done 3.0s https://quotes.toscrape.com/tag/love/
|
| 36 |
+
PASS quotes-tag-love steps= 1 status=done 2.8s https://quotes.toscrape.com/tag/love/
|
| 37 |
+
PASS hn-past steps= 1 status=done 2.8s https://news.ycombinator.com/front
|
| 38 |
+
PASS hn-past steps= 1 status=done 2.9s https://news.ycombinator.com/front
|
| 39 |
+
PASS hn-past steps= 1 status=done 2.6s https://news.ycombinator.com/front
|
| 40 |
+
PASS web-search steps= 2 status=done 7.5s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 41 |
+
PASS web-search steps= 2 status=done 3.8s https://marginalia-search.com/search?query=tilelang+github&sst=SE-655d
|
| 42 |
+
PASS web-search steps= 2 status=done 4.1s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 43 |
+
FAIL arxiv-search steps= 1 status=error:ValueError 1.9s https://arxiv.org/login
|
| 44 |
+
FAIL arxiv-search steps= 1 status=error:ValueError 0.9s https://arxiv.org/login
|
| 45 |
+
FAIL arxiv-search steps= 1 status=error:ValueError 0.9s https://arxiv.org/login
|
| 46 |
+
FAIL flights steps=20 status=ready 8.2s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 47 |
+
FAIL flights steps=20 status=ready 6.3s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIBBIIL20vMDJqNzEa
|
| 48 |
+
FAIL flights steps=20 status=blocked 6.6s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 49 |
+
== 36/48 passed (75%, 3 run(s) per task) | median wall 2.7s
|
| 50 |
+
per task: wiki-einstein=0/3 wiki-search=3/3 hn-new=3/3 hn-login-page=3/3 gh-issues=3/3 py-downloads=3/3 books-travel=3/3 books-open-book=3/3 internet-dropdown=3/3 internet-checkbox=3/3 books-page2=0/3 quotes-tag-love=3/3 hn-past=3/3 web-search=3/3 arxiv-search=0/3 flights=0/3
|
results/round3/train_domains.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
["14945.blackbaudhosting.com", "aa", "aa.com", "abc.net.au", "about.gitlab.com", "about.google", "accessmedicalrehab.com", "account.apple.com", "account.bbc.com", "account.wolfram.com", "accounts.google.com", "aclanthology.org", "admissions.duke.edu", "ads.google.com", "agoda", "agoda.com", "ai.google", "airbnb", "airbnb.com", "aliexpress.com", "aljazeera.com", "alliedartsguild.org", "allrecipes.com", "alternativeto.net", "amazon", "amazon.com", "amctheatres", "amctheatres.com", "amtrak", "amtrak.com", "aoschat.apple.com", "apache.org", "api.bfl.ml", "api.endpoints.huggingface.cloud", "apnews.com", "apple", "apple.com", "apps.apple.com", "archive.org", "archlinux.org", "arrowheadpride.com", "arstechnica.com", "arxiv.org", "askubuntu.com", "aur.archlinux.org", "australia.gov.au", "auth.allrecipes.com", "auth.wikimedia.org", "automationexercise.com", "autotrader.com", "baidu.com", "bandcamp.com", "bbc.co.uk", "bbc.com", "bbcgoodfood.com", "berkeley.edu", "bestbuy.com", "bgr.com", "bilibili.com", "bing.com", "biodiversitylibrary.org", "biorxiv.org", "bits.debian.org", "blanchardgold.com", "blog.coursera.org", "blog.google", "blog.packagist.com", "blog.rust-lang.org", "bluezones.com", "boardgamegeek", "boardgamegeek.com", "bookdepository", "bookdepository.com", "booking", "booking.com", "books.toscrape.com", "britannica.com", "bsky.app", "budget", "budget.com", "budgetbytes.com", "builtinla.com", "bulatov.org", "bundesregierung.de", "business.apple.com", "cabelas", "cabelas.com", "calculator.net", "cam.ac.uk", "canada.ca", "capterra.com", "cargurus", "cargurus.com", "carmax", "carmax.com", "carnival", "carnival.com", "catalog.data.gov", "cbc.ca", "cbssports.com", "cdc.gov", "census.gov", "cern.ch", "checkcoverage.apple.com", "chess.com", "chi2023.acm.org", "chooser-beta.creativecommons.org", "circlecare4kids.com", "cli.github.com", "climate.com", "codeberg.org", "codeql.github.com", "colab.research.google.com", "commons.wikimedia.org", "companiesmarketcap.com", "compass.cornwall.gov.uk", "conservatorysf.com", "contactretail.apple.com", "cookingclassy.com", "copilot.github.trust.page", "core.ac.uk", "cornell.edu", "corriere.it", "coursera.org", "cpan.org", "cppreference.com", "craigslist.org", "cran.r-project.org", "crates.io", "creativecommons.org", "csdn.net", "cvent.com", "cvs", "cvs.com", "d1.supercook.com", "data.gov", "datarepository.wolframcloud.com", "dblp.org", "dblp.uni-trier.de", "de.wikipedia.org", "debian.org", "deepl.com", "delta", "delta.com", "demo.nopcommerce.com", "demo.opencart.com", "demoblaze.com", "demoqa.com", "desmos.com", "dev.mysql.com", "dev.to", "devdocs.io", "developer.apple.com", "developer.hashicorp.com", "developer.mozilla.org", "developer.nvidia.com", "dictionary.cambridge.org", "dictionary.com", "dictionaryblog.cambridge.org", "digital.library.upenn.edu", "dis.acm.org", "discogs", "discogs.com", "discuss.huggingface.co", "discussions.apple.com", "dmytro-shyshkin.kit.com", "doaj.org", "doc.rust-lang.org", "docker.com", "docs.ansible.com", "docs.bfl.ml", "docs.djangoproject.com", "docs.docker.com", "docs.github.com", "docs.gitlab.com", "docs.graphene-python.org", "docs.oracle.com", "docs.python.org", "docs.pytorch.org", "docs.readthedocs.com", "docs.readthedocs.io", "docs.rs", "donate.wikimedia.org", "douban.com", "duckduckgo.com", "duke.edu", "duolingo.com", "dw.com", "earthobservatory.nasa.gov", "ebay", "ebay.com", "ecommerce.apple.com", "economist.com", "edx.org", "elcampesinopgh.com", "elpais.com", "en.cppreference.com", "en.wikibooks.org", "en.wikipedia.org", "en.wikiquote.org", "en.wikisource.org", "en.wikivoyage.org", "en.wiktionary.org", "endpoints.huggingface.co", "engadget.com", "enterprise", "enterprise.com", "enterprise.github.com", "epa.gov", "epicurious.com", "eric.ed.gov", "es.wikipedia.org", "esa.int", "espn", "espn.com", "ethz.ch", "etsy.com", "etymonline.com", "euronews.com", "europa.eu", "european-union.europa.eu", "europeana.eu", "eventbrite", "eventbrite.com", "eventupplanner.com", "expedia", "expedia.com", "exploretock", "exploretock.com", "fda.gov", "figshare.com", "finance.yahoo.com", "flask.palletsprojects.com", "flexera.com", "flickr.com", "flightaware", "flightaware.com", "flights.booking.com", "flyus.com", "fontawesome.com", "fonts.google.com", "foodnetwork.com", "fool.com", "formulae.brew.sh", "formy-project.herokuapp.com", "forums.parasoft.com", "foundation.wikimedia.org", "foxsports", "foxsports.com", "fr.wikipedia.org", "france24.com", "freecodecamp.org", "g2.com", "gamestop", "gamestop.com", "gayoarabicacoffee.or.id", "geeksforgeeks.org", "geogebra.org", "geonames.org", "getbootstrap.com", "getsupport.apple.com", "git-scm.com", "git.kernel.org", "gitee.com", "github.blog", "github.com", "githubstatus.com", "gitlab.archlinux.org", "gitlab.com", "glamour.com", "glassdoor.com", "globalsqa.com", "gnu.org", "go.dev", "godocs.io", "gog.com", "goodreads.com", "google.com", "gov.cn", "gov.uk", "graphql.org", "guggenheim.org", "gutenberg.org", "harvard.edu", "hashnode.com", "healthline.com", "help.github.com", "help.ubuntu.com", "hex.pm", "home.cern", "homedepot.com", "https%3a%2f%2fdictionary.cambridge.org%2fdictionary%2fenglish%2fstatuette&text=", "https%3a%2f%2fwww.google.com%2fmaps%2fpreview%2fplace%3fauthuser%3d0%26hl%3den%26gl%3dus%26pb%3d%211m24%211s0x47e671c8ff6946b9%3a0x1194a918177c2ac8%213m12%211m3%211d39369.73246780893%212d2.3643297605770677%213d48.864906460992195%212m3%211f0%212f0%213f0%213m2%211i440%212i720%214f13.1%214m2%213d48.8535799%214d2.3426408%2115m6%211m5%211s0x47e671c8ff6946b9%3a0x1194a918177c2ac8%214s%2fg%2f11l75rskx1%215schijuuzp_8hx5kcrycp8fxiplbe%216s4571445599278015326%217s100590512120706543623%216srestaurants%2bnear%2bparis%2112m4%212m3%211i360%212i120%214i8%2113m48%212m2%211i203%212i100%213m2%212i4%215b1%216m6%211m2%211i86%212i86%211m2%211i408%212i240%217m33%211m3%211e1%212b0%213e3%211m3%211e2%212b1%213e2%211m3%211e2%212b0%213e3%211m3%211e8%212b0%213e3%211m3%211e10%212b0%213e3%211m3%211e10%212b1%213e2%211m3%211e10%212b0%213e4%211m3%211e9%212b1%213e2%212b1%219b0%2114m2%211sthpuz8yuhune0pepiyxe6q0%217e81%2115m107%211m34%214e2%2113m9%212b1%213b1%214b1%216i1%218b1%219b1%2114b1%2120b1%2125b1%2118m22%213b1%214b1%215b1%216b1%219b1%2112b1%2113b1%2114b1%2117b1%2120b1%2121b1%2122b1%2125b1%2127m1%211b0%2128b0%2130b1%2132b0%2133m1%211b1%2134b0%2136e1%2110m1%218e3%2111m1%213e1%2114m1%213b1%2117b1%2120m2%211e3%211e6%2124b1%2125b1%2126b1%2129b1%2130m1%212b1%2136b1%2139m3%212m2%212i1%213i1%2143b1%2152b1%2154m1%211b1%2155b1%2156m1%211b1%2165m5%213m4%211m3%211m2%211i224%212i298%2171b1%2172m19%211m5%211b1%212b1%213b1%215b1%217b1%214b1%218m10%211m6%214m1%211e1%214m1%211e3%214m1%211e4%213sother_user_reviews%216m1%211e1%219b1%2189b1%2198m3%211b1%212b1%213b1%21103b1%21113b1%21114m3%211b1%212m1%211b1%21117b1%21122m1%211b1%21125b0%21126b1%21127b1%2121m0%2122m2%211e81%218e4%2129m0%2130m6%213b1%216m1%212b1%217m1%212b1%219b1%2134m2%217b1%2110b1%2137i715%2138schzszxn0yxvyyw50cybuzwfyifbhcmlzwhgifnjlc3rhdxjhbnrzig5lyxigcgfyaxosarfpbmrpyw5fcmvzdgf1cmfudoabaa%2139spatang%2140b0%2141b1%26q%3dpatang&ihs=5", "https%3a%2f%2fwww.google.com%2fmaps%2fpreview%2fplace%3fauthuser%3d0%26hl%3den%26gl%3dus%26pb%3d%211m24%211s0x808fa4afd47b8fa3%3a0x8d48a6ae94d4207b%213m12%211m3%211d47502.581597019554%212d-122.16297270467842%213d37.46452844837867%212m3%211f0%212f0%213f0%213m2%211i440%212i720%214f13.1%214m2%213d37.452656%214d-122.18331719999999%2115m6%211m5%211s0x808fa4afd47b8fa3%3a0x8d48a6ae94d4207b%214s%2fg%2f1tfv5c5m%215schijo4971k-kj4areydulk6msi0%216s16632359157944504516%217s106796813392715891691%216swheelchair-accessible%2brestaurants%2bnear%2bme%2112m4%212m3%211i360%212i120%214i8%2113m48%212m2%211i203%212i100%213m2%212i4%215b1%216m6%211m2%211i86%212i86%211m2%211i408%212i240%217m33%211m3%211e1%212b0%213e3%211m3%211e2%212b1%213e2%211m3%211e2%212b0%213e3%211m3%211e8%212b0%213e3%211m3%211e10%212b0%213e3%211m3%211e10%212b1%213e2%211m3%211e10%212b0%213e4%211m3%211e9%212b1%213e2%212b1%219b0%2114m2%211szojxz--ab8hd0pep7qs5ua%217e81%2115m107%211m34%214e2%2113m9%212b1%213b1%214b1%216i1%218b1%219b1%2114b1%2120b1%2125b1%2118m22%213b1%214b1%215b1%216b1%219b1%2112b1%2113b1%2114b1%2117b1%2120b1%2121b1%2122b1%2125b1%2127m1%211b0%2128b0%2130b1%2132b0%2133m1%211b1%2134b0%2136e1%2110m1%218e3%2111m1%213e1%2114m1%213b1%2117b1%2120m2%211e3%211e6%2124b1%2125b1%2126b1%2129b1%2130m1%212b1%2136b1%2139m3%212m2%212i1%213i1%2143b1%2152b1%2154m1%211b1%2155b1%2156m1%211b1%2165m5%213m4%211m3%211m2%211i224%212i298%2171b1%2172m19%211m5%211b1%212b1%213b1%215b1%217b1%214b1%218m10%211m6%214m1%211e1%214m1%211e3%214m1%211e4%213sother_user_reviews%216m1%211e1%219b1%2189b1%2198m3%211b1%212b1%213b1%21103b1%21113b1%21114m3%211b1%212m1%211b1%21117b1%21122m1%211b1%21125b0%21126b1%21127b1%2121m0%2122m2%211e81%218e4%2129m0%2130m6%213b1%216m1%212b1%217m1%212b1%219b1%2134m2%217b1%2110b1%2137i715%2138scilxagvlbgnoywlylwfjy2vzc2libgugcmvzdgf1cmfudhmgbmvhcibtzsjduj4vz2vvl3r5cguvzxn0ywjsaxnobwvudf9wb2kvagfzx3dozwvsy2hhaxjfywnjzxnzawjszv9lbnryyw5jzzabavoriil3agvlbgnoywlyigfjy2vzc2libgugcmvzdgf1cmfudhmgbmvhcibtzzibewzyzw5jaf9yzxn0yxvyyw504aea%2139sleft%2bbank%2140b0%2141b1%26q%3dleft%2bbank&ihs=9", "https%3a%2f%2fwww.google.com%2fmaps%2fpreview%2fplace%3fauthuser%3d0%26hl%3den%26gl%3dus%26pb%3d%211m24%211s0x808fbb39c04bc749%3a0xc5d634786e3aba09%213m12%211m3%211d11878.61345184126%212d-122.1621916%213d37.4458386%212m3%211f0%212f0%213f0%213m2%211i440%212i720%214f13.1%214m2%213d37.445838599999995%214d-122.1621916%2115m6%211m5%211s0x808fbb39c04bc749%3a0xc5d634786e3aba09%214s%2fg%2f11b6jh7xz6%215schijscdlwdm7j4arcbo6bng01su%216s15460965790847260555%217s108538787170261119825%216spalo%2balto%2brestaurants%2112m4%212m3%211i360%212i120%214i8%2113m48%212m2%211i203%212i100%213m2%212i4%215b1%216m6%211m2%211i86%212i86%211m2%211i408%212i240%217m33%211m3%211e1%212b0%213e3%211m3%211e2%212b1%213e2%211m3%211e2%212b0%213e3%211m3%211e8%212b0%213e3%211m3%211e10%212b0%213e3%211m3%211e10%212b1%213e2%211m3%211e10%212b0%213e4%211m3%211e9%212b1%213e2%212b1%219b0%2114m2%211s1zzuz4jzn8m80pepr9c4-qy%217e81%2115m107%211m34%214e2%2113m9%212b1%213b1%214b1%216i1%218b1%219b1%2114b1%2120b1%2125b1%2118m22%213b1%214b1%215b1%216b1%219b1%2112b1%2113b1%2114b1%2117b1%2120b1%2121b1%2122b1%2125b1%2127m1%211b0%2128b0%2130b1%2132b0%2133m1%211b1%2134b0%2136e1%2110m1%218e3%2111m1%213e1%2114m1%213b1%2117b1%2120m2%211e3%211e6%2124b1%2125b1%2126b1%2129b1%2130m1%212b1%2136b1%2139m3%212m2%212i1%213i1%2143b1%2152b1%2154m1%211b1%2155b1%2156m1%211b1%2165m5%213m4%211m3%211m2%211i224%212i298%2171b1%2172m19%211m5%211b1%212b1%213b1%215b1%217b1%214b1%218m10%211m6%214m1%211e1%214m1%211e3%214m1%211e4%213sother_user_reviews%216m1%211e1%219b1%2189b1%2198m3%211b1%212b1%213b1%21103b1%21113b1%21114m3%211b1%212m1%211b1%21117b1%21122m1%211b1%21125b0%21126b1%21127b1%2121m0%2122m2%211e81%218e4%2129m0%2130m6%213b1%216m1%212b1%217m1%212b1%219b1%2134m2%217b1%2110b1%2137i715%2138schvqywxviefsdg8gcmvzdgf1cmfudhnafyivcgfsbybhbhrvihjlc3rhdxjhbnrzkgekcmvzdgf1cmfudoabaa%2139slocal%2bunion%2b271%2141b1%26q%3dlocal%2bunion%2b271&ihs=7", "https%3a%2f%2fwww.google.com%2fsearch%3ftbm%3dmap%26authuser%3d0%26hl%3den%26gl%3dus%26pb%3d%214m12%211m3%211d11329.387714118226%212d-73.99018908577365%213d40.78027538426176%212m3%211f0%212f0%213f0%213m2%211i1280%212i720%214f13.1%217i20%2110b1%2112m22%211m3%2118b1%2130b1%2134e1%212m3%215m1%216e2%2120e3%2110b1%2112b1%2113b1%2116b1%2117m1%213e1%2120m3%215e2%216b1%2114b1%2146m1%211b0%2194b1%2196b1%2119m4%212m3%211i360%212i120%214i8%2120m48%212m2%211i203%212i100%213m2%212i4%215b1%216m6%211m2%211i86%212i86%211m2%211i408%212i240%217m33%211m3%211e1%212b0%213e3%211m3%211e2%212b1%213e2%211m3%211e2%212b0%213e3%211m3%211e8%212b0%213e3%211m3%211e10%212b0%213e3%211m3%211e10%212b1%213e2%211m3%211e10%212b0%213e4%211m3%211e9%212b1%213e2%212b1%219b0%2122m6%211semjvz77uou6z0pepqkdjsqs%3a244%212s1i%3a0%2ct%3a11887%2cp%3aemjvz77uou6z0pepqkdjsqs%3a244%217e81%2112e3%2117semjvz77uou6z0pepqkdjsqs%3a327%2118e15%2124m105%211m32%2113m9%212b1%213b1%214b1%216i1%218b1%219b1%2114b1%2120b1%2125b1%2118m21%213b1%214b1%215b1%216b1%219b1%2112b1%2113b1%2114b1%2117b1%2120b1%2121b1%2122b1%2125b1%2127m1%211b0%2128b0%2132b0%2133m1%211b1%2134b0%2136e1%2110m1%218e3%2111m1%213e1%2114m1%213b1%2117b1%2120m2%211e3%211e6%2124b1%2125b1%2126b1%2129b1%2130m1%212b1%2136b1%2139m3%212m2%212i1%213i1%2143b1%2152b1%2154m1%211b1%2155b1%2156m1%211b1%2165m5%213m4%211m3%211m2%211i224%212i298%2171b1%2172m19%211m5%211b1%212b1%213b1%215b1%217b1%214b1%218m10%211m6%214m1%211e1%214m1%211e3%214m1%211e4%213sother_user_reviews%216m1%211e1%219b1%2189b1%2198m3%211b1%212b1%213b1%21103b1%21113b1%21114m3%211b1%212m1%211b1%21117b1%21122m1%211b1%21125b0%21126b1%21127b1%2126m4%212m3%211i80%212i92%214i8%2127m5%212smanhattan%2c%2bnew%2byork%2c%2bny%213s0x89c2588f046ee661%3a0xa0b3281fcecc08c%214m2%213d40.7685167%214d-73.98219379999999%2130m28%211m6%211m2%211i0%212i0%212m2%211i530%212i720%211m6%211m2%211i1230%212i0%212m2%211i1280%212i720%211m6%211m2%211i0%212i0%212m2%211i1280%212i20%211m6%211m2%211i0%212i700%212m2%211i1280%212i720%2134m18%212b1%213b1%214b1%216b1%218m6%211b1%213b1%214b1%215b1%216b1%217b1%219b1%2112b1%2114b1%2120b1%2123b1%2125b1%2126b1%2137m1%211e81%2142b1%2147m0%2149m9%213b1%216m2%211b1%212b1%217m2%211e3%212b1%218b1%219b1%2150m4%212e2%213m2%211b1%213b1%2167m2%217b1%2110b1%2169i715%26q%3dwheelchair%2baccessible%2brestaurants%2bnear%2bnew%2byork%2bcity%26oq%3dwheelchair%2baccessible%2brestaurants%2bnear%2bnew%2byork%2bcity%26gs_l%3dmaps.12...0.0.6.8288.0.0.....0.0..0.....0......maps..0.0.0.0.%26ech%3d6%26psi%3demjvz77uou6z0pepqkdjsqs.1735377425420.1&ihs=13", "https%3a%2f%2fwww.google.com%2fsearch%3ftbm%3dmap%26authuser%3d0%26hl%3den%26gl%3dus%26pb%3d%214m12%211m3%211d23759.89356993355%212d-122.1820416%213d37.437439999999995%212m3%211f0%212f0%213f0%213m2%211i1280%212i720%214f13.1%217i20%2110b1%2112m22%211m3%2118b1%2130b1%2134e1%212m3%215m1%216e2%2120e3%2110b1%2112b1%2113b1%2116b1%2117m1%213e1%2120m3%215e2%216b1%2114b1%2146m1%211b0%2194b1%2196b1%2119m4%212m3%211i360%212i120%214i8%2120m48%212m2%211i203%212i100%213m2%212i4%215b1%216m6%211m2%211i86%212i86%211m2%211i408%212i240%217m33%211m3%211e1%212b0%213e3%211m3%211e2%212b1%213e2%211m3%211e2%212b0%213e3%211m3%211e8%212b0%213e3%211m3%211e10%212b0%213e3%211m3%211e10%212b1%213e2%211m3%211e10%212b0%213e4%211m3%211e9%212b1%213e2%212b1%219b0%2122m6%211snaduz_n7npfd0pep2cwb8aq%3a2%212s1i%3a0%2ct%3a11886%2cp%3anaduz_n7npfd0pep2cwb8aq%3a2%217e81%2112e5%2117snaduz_n7npfd0pep2cwb8aq%3a33%2118e15%2124m105%211m32%2113m9%212b1%213b1%214b1%216i1%218b1%219b1%2114b1%2120b1%2125b1%2118m21%213b1%214b1%215b1%216b1%219b1%2112b1%2113b1%2114b1%2117b1%2120b1%2121b1%2122b1%2125b1%2127m1%211b0%2128b0%2132b0%2133m1%211b1%2134b0%2136e1%2110m1%218e3%2111m1%213e1%2114m1%213b1%2117b1%2120m2%211e3%211e6%2124b1%2125b1%2126b1%2129b1%2130m1%212b1%2136b1%2139m3%212m2%212i1%213i1%2143b1%2152b1%2154m1%211b1%2155b1%2156m1%211b1%2165m5%213m4%211m3%211m2%211i224%212i298%2171b1%2172m19%211m5%211b1%212b1%213b1%215b1%217b1%214b1%218m10%211m6%214m1%211e1%214m1%211e3%214m1%211e4%213sother_user_reviews%216m1%211e1%219b1%2189b1%2198m3%211b1%212b1%213b1%21103b1%21113b1%21114m3%211b1%212m1%211b1%21117b1%21122m1%211b1%21125b0%21126b1%21127b1%2126m4%212m3%211i80%212i92%214i8%2130m28%211m6%211m2%211i0%212i0%212m2%211i530%212i720%211m6%211m2%211i1230%212i0%212m2%211i1280%212i720%211m6%211m2%211i0%212i0%212m2%211i1280%212i20%211m6%211m2%211i0%212i700%212m2%211i1280%212i720%2134m18%212b1%213b1%214b1%216b1%218m6%211b1%213b1%214b1%215b1%216b1%217b1%219b1%2112b1%2114b1%2120b1%2123b1%2125b1%2126b1%2137m1%211e81%2142b1%2147m0%2149m9%213b1%216m2%211b1%212b1%217m2%211e3%212b1%218b1%219b1%2150m4%212e2%213m2%211b1%213b1%2167m2%217b1%2110b1%2169i715%26q%3drestaurants%2bnear%2bstanford%26oq%3drestaurants%2bnear%2bstanford%26gs_l%3dmaps.3..38i72k1l2j38i377i430i444k1j38i72k1l2.4825.4825.1.5846.1.1.....61.61.1.1.....0....1..maps..0.1.67.0.%26ech%3d1%26psi%3dnaduz_n7npfd0pep2cwb8aq.1735264157340.1&ihs=7", "hub.docker.com", "hud.pytorch.org", "huggingface.co", "idmsa.apple.com", "ign", "ign.com", "ikea", "ikea.com", "imdb", "imdb.com", "imf.org", "indeed.com", "indiegogo.com", "info.arxiv.org", "info.dev.arxiv.org", "inspector.pypi.io", "inspirehep.net", "instacart", "instacart.com", "instructables.com", "ipcc.ch", "ironhorsehome.com", "itch.io", "ithaka.org", "ja.wikipedia.org", "jagranjosh.com", "japantimes.co.jp", "jd.com", "jetblue", "jetblue.com", "jianshu.com", "jmlr.org", "jobs.lever.co", "journals.plos.org", "jstor.org", "kaggle.com", "kayak", "kayak.com", "kbb", "kbb.com", "kernel.org", "khanacademy.org", "kickstarter.com", "kidshealth.org", "kimkim.com", "koa", "koa.com", "kohls", "kohls.com", "kubernetes.io", "last.fm", "last.fm.com", "launchpad.net", "layaface.com", "layarestaurant.com", "learn.microsoft.com", "lemonde.fr", "leviathansecurity.com", "lichess.org", "linkedin.com", "llama.com", "llm-grounded-diffusion.github.io", "lobste.rs", "loc.gov", "lonelyplanet.com", "lumenprize.com", "lwn.net", "magento.softwaretestingboard.com", "managore.itch.io", "marriott", "marriott.com", "math.stackexchange.com", "mathworld.wolfram.com", "mayoclinic.org", "mbta", "mbta.com", "medium.com", "medrxiv.org", "menards", "menards.com", "mercadolibre.com.ar", "merriam-webster.com", "metacpan.org", "metacritic.com", "metrics.lecoq.io", "micronews.debian.org", "midsomersetcameraclub.org.uk", "missionjuno.swri.edu", "mit.edu", "modelscope.cn", "mojeek.com", "monroeville.elcampesinopgh.com", "mtu.edu", "musicbrainz.org", "mvnrepository.com", "my.gov.au", "name.design", "nasa.gov", "nationwidechildrens.org", "nature.com", "ncbi.nlm.nih.gov", "ness.com", "new.mta.info", "new.mta.info.com", "newegg", "newegg.com", "news.bbc.co.uk", "news.google.com", "news.ycombinator.com", "nfl", "nfl.com", "nhl.com", "nih.gov", "ninehours.co.jp", "noaa.gov", "nodejs.org", "notion.com", "npmjs.com", "npr.org", "nps.gov", "nps.gov.com", "numpy.org", "nvd.nist.gov", "nyc", "nyc.com", "nytimes.com", "octoverse.github.com", "ocw.mit.edu", "oecd.org", "oeis.org", "openculture.com", "openlibrary.org", "openreview.net", "opensource-demo.orangehrmlive.com", "openstreetmap.org", "openweathermap.org", "orcid.org", "order.pacificcatch.com", "osf.io", "osmfoundation.org", "otter.ai", "otto.de", "ox.ac.uk", "packages.debian.org", "packagist.org", "pandas.pydata.org", "paperswithcode.com", "parabank.parasoft.com", "parking", "parking.com", "patanghotel.com", "patreon.com", "pbs.org", "pbskids.org", "peps.python.org", "pexels.com", "pharmacy.amazon.com", "phoronix.com", "php.net", "pixabay.com", "pkg.go.dev", "plato.stanford.edu", "platogbr.com", "play.google.com", "play.rust-lang.org", "pmc.ncbi.nlm.nih.gov", "postgresql.org", "practice.expandtesting.com", "practicesoftwaretesting.com", "practicetestautomation.com", "prevention.com", "producthunt.com", "profile.theguardian.com", "projects.apache.org", "proxy.golang.org", "pub.dev", "publicpolicy.google", "pubmed.ncbi.nlm.nih.gov", "pypi.org", "python.org", "pytorch.org", "qatarairways", "qatarairways.com", "quora.com", "quotes.toscrape.com", "qwant.com", "rakuten.co.jp", "react.dev", "readthedocs.org", "realpython.github.io", "realty101.com", "rec.stanford.edu", "redbox", "redbox.com", "reddit.com", "redditinc.com", "redis.io", "reference.wolfram.com", "rei", "rei.com", "remoteok.com", "rentalcars", "rentalcars.com", "repology.org", "research.google", "reservation.patanghotel.com", "reservations.limprimeriehotel.com", "resources.github.com", "resy", "resy.com", "reuters.com", "rottentomatoes", "rottentomatoes.com", "ruby-lang.org", "rubycentral.org", "rubygems.org", "rust-lang.org", "ryanair", "ryanair.com", "safety.google", "saucedemo.com", "sbert.net", "scholar.archive.org", "scholar.google.com", "science.nasa.gov", "scikit-learn.org", "scmp.com", "scrapeme.live", "scrapethissite.com", "search.brave.com", "search.epa.gov", "search.maven.org", "search.usa.gov", "searchengineland.com", "seatgeek", "seatgeek.com", "secure8.store.apple.com", "secure9.store.apple.com", "security.archlinux.org", "securitylab.github.com", "selenium.dev", "semanticscholar.org", "serverfault.com", "service-public.fr", "service-public.gouv.fr", "sfmta.com", "simple.wikipedia.org", "sixflags", "sixflags.com", "skyscanner.net", "slashdot.org", "snlab.bme.cornell.edu", "so.com", "so.gitee.com", "sogou.com", "soundcloud", "soundcloud.com", "sourceforge.net", "southampton.ac.uk", "space.com", "spiegel.de", "sports.yahoo", "sports.yahoo.com", "spothero", "spothero.com", "stablediffusionapi.com", "stackexchange.com", "stackoverflow.blog", "stackoverflow.co", "stackoverflow.com", "stanford.edu", "store.google.com", "store.steampowered", "store.steampowered.com", "supercook.com", "superuser.com", "support.apple.com", "support.google.com", "t-mobile.com", "t10.org", "tailwindcss.com", "taobao.com", "target", "target.com", "techaro.lol", "techcrunch.com", "ted.com", "tensorflow.org", "terraform.io", "tesla", "tesla.com", "the-internet.herokuapp.com", "thebluezonesstore.com", "theclimateweb.com", "thefreedictionary.com", "theguardian.com", "thehindu.com", "themelt.com", "thesaurus.com", "thetrainline", "thetrainline.com", "theverge.com", "theweekendwoodworker.com", "thingiverse.com", "ticket.toureiffel.paris", "ticketcenter", "ticketcenter.com", "timeanddate.com", "timesofindia.indiatimes.com", "toureiffel.paris", "translate.google.com", "travelzoo", "travelzoo.com", "trends.google.com", "trends.google.fr", "tripadvisor.com", "trust.weather.com", "trustpilot.com", "tsinghua.edu.cn", "tutorialspoint.com", "tvguide", "tvguide.com", "twitch.tv", "ubuntu.com", "ui.adsabs.harvard.edu", "ultimate-guitar", "ultimate-guitar.com", "un.org", "underarmour", "underarmour.com", "uniqlo", "uniqlo.com", "united", "united.com", "unix.stackexchange.com", "unsplash.com", "us.megabus", "us.megabus.com", "usa.gov", "utoronto.ca", "viator", "viator.com", "vogue.com", "vuejs.org", "w3schools.com", "walmart.com", "washingtonpost.com", "wayfair.com", "weather.com", "web.dev", "webscraper.io", "wedgewoodweddings.com", "weworkremotely.com", "who.int", "wiki.archlinux.org", "wiki.debian.org", "wiki.osgeo.org", "wiki.python.org", "wikidata.org", "wikihow.com", "wikimedia.org", "wikipedia.org", "wiktionary.org", "wired.com", "wolfram.com", "wolframalpha.com", "worldbank.org", "worldcat.org", "wri.org", "xe.com", "yandex.com", "yellowpages", "yellowpages.com", "yelp", "yelp.com", "youtube.com", "zalando.de", "zdnet.com", "zenodo.org", "zh.airbnb.com", "zh.thefreedictionary.com", "zh.wikipedia.org", "zh.wiktionary.org", "zhihu.com", "zillow.com"]
|
results/round3/v12s.log
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
== rollout2 cases: 818 nnetnav cases: 8917
|
| 2 |
+
== build v12s
|
| 3 |
+
operation label counts: {'TYPE_TEXT': 10107, 'CLICK': 15208, 'SELECT': 1380, 'DONE': 10364, 'SCROLL_DOWN': 3338, 'PRESS_ENTER': 1620, 'SCROLL_UP': 137}
|
| 4 |
+
train items 61191 (op 42154, target 19037), eval cases 5314, skipped 0, seq len mean 786 max 1024
|
| 5 |
+
== train v12s (3 epochs)
|
| 6 |
+
ep 1 step 20/5736 loss 1.867 ce 1.661 reward -1.357 26s
|
| 7 |
+
ep 1 step 40/5736 loss 0.806 ce 1.988 reward -1.635 48s
|
| 8 |
+
ep 1 step 60/5736 loss 2.244 ce 2.367 reward -2.104 73s
|
| 9 |
+
ep 1 step 80/5736 loss 1.748 ce 1.633 reward -1.354 100s
|
| 10 |
+
ep 1 step 100/5736 loss 0.450 ce 0.805 reward -0.451 123s
|
| 11 |
+
ep 1 step 120/5736 loss 1.838 ce 1.455 reward -1.094 150s
|
| 12 |
+
ep 1 step 140/5736 loss 1.511 ce 0.991 reward -0.550 176s
|
| 13 |
+
ep 1 step 160/5736 loss 0.068 ce 0.081 reward 0.647 202s
|
| 14 |
+
ep 1 step 180/5736 loss 1.662 ce 1.634 reward -1.109 229s
|
| 15 |
+
ep 1 step 200/5736 loss 0.155 ce 0.486 reward 0.035 262s
|
| 16 |
+
ep 1 step 220/5736 loss 0.922 ce 0.934 reward -0.485 292s
|
| 17 |
+
ep 1 step 240/5736 loss -0.582 ce 1.647 reward -1.240 315s
|
| 18 |
+
ep 1 step 260/5736 loss 0.030 ce 0.086 reward 0.649 338s
|
| 19 |
+
ep 1 step 280/5736 loss 1.079 ce 0.886 reward -0.323 362s
|
| 20 |
+
ep 1 step 300/5736 loss 1.009 ce 1.515 reward -1.017 385s
|
| 21 |
+
ep 1 step 320/5736 loss 0.501 ce 1.460 reward -0.954 407s
|
| 22 |
+
ep 1 step 340/5736 loss 0.948 ce 1.097 reward -0.542 437s
|
| 23 |
+
ep 1 step 360/5736 loss 2.070 ce 0.914 reward -0.374 462s
|
| 24 |
+
ep 1 step 380/5736 loss 1.567 ce 1.001 reward -0.514 491s
|
| 25 |
+
ep 1 step 400/5736 loss 0.226 ce 0.115 reward 0.625 517s
|
| 26 |
+
ep 1 step 420/5736 loss 1.699 ce 1.414 reward -1.130 541s
|
| 27 |
+
ep 1 step 440/5736 loss 0.594 ce 0.051 reward 0.688 566s
|
| 28 |
+
ep 1 step 460/5736 loss -0.469 ce 0.178 reward 0.498 591s
|
| 29 |
+
ep 1 step 480/5736 loss 1.374 ce 0.395 reward 0.257 614s
|
| 30 |
+
ep 1 step 500/5736 loss 2.047 ce 0.957 reward -0.341 636s
|
| 31 |
+
ep 1 step 520/5736 loss 1.322 ce 1.881 reward -1.510 658s
|
| 32 |
+
ep 1 step 540/5736 loss 1.677 ce 1.290 reward -0.781 681s
|
| 33 |
+
ep 1 step 560/5736 loss 0.978 ce 0.955 reward -0.334 703s
|
| 34 |
+
ep 1 step 580/5736 loss 0.759 ce 1.147 reward -0.779 726s
|
| 35 |
+
ep 1 step 600/5736 loss 0.153 ce 0.252 reward 0.430 751s
|
| 36 |
+
ep 1 step 620/5736 loss 1.371 ce 0.907 reward -0.309 775s
|
| 37 |
+
ep 1 step 640/5736 loss 1.415 ce 1.854 reward -1.247 800s
|
| 38 |
+
ep 1 step 660/5736 loss 1.116 ce 0.642 reward -0.033 825s
|
| 39 |
+
ep 1 step 680/5736 loss 2.978 ce 1.458 reward -0.996 850s
|
| 40 |
+
ep 1 step 700/5736 loss 1.113 ce 1.102 reward -0.652 874s
|
| 41 |
+
ep 1 step 720/5736 loss 2.186 ce 1.739 reward -1.365 896s
|
| 42 |
+
ep 1 step 740/5736 loss 0.807 ce 0.314 reward 0.352 918s
|
| 43 |
+
ep 1 step 760/5736 loss -0.023 ce 0.189 reward 0.520 941s
|
| 44 |
+
ep 1 step 780/5736 loss 0.104 ce 0.405 reward 0.284 963s
|
| 45 |
+
ep 1 step 800/5736 loss 0.616 ce 0.335 reward 0.351 985s
|
| 46 |
+
ep 1 step 820/5736 loss -1.048 ce 1.086 reward -0.633 1008s
|
| 47 |
+
ep 1 step 840/5736 loss 1.684 ce 0.770 reward -0.112 1031s
|
| 48 |
+
ep 1 step 860/5736 loss 1.732 ce 1.397 reward -1.155 1055s
|
| 49 |
+
ep 1 step 880/5736 loss 3.040 ce 3.139 reward -2.820 1080s
|
| 50 |
+
ep 1 step 900/5736 loss 2.128 ce 2.322 reward -2.160 1105s
|
| 51 |
+
ep 1 step 920/5736 loss -0.518 ce 0.000 reward 0.750 1129s
|
| 52 |
+
ep 1 step 940/5736 loss 1.805 ce 2.345 reward -2.121 1154s
|
| 53 |
+
ep 1 step 960/5736 loss -0.430 ce 0.000 reward 0.750 1177s
|
| 54 |
+
ep 1 step 980/5736 loss 2.253 ce 1.044 reward -0.507 1199s
|
| 55 |
+
ep 1 step 1000/5736 loss 0.894 ce 0.654 reward -0.094 1222s
|
| 56 |
+
ep 1 step 1020/5736 loss 1.455 ce 1.017 reward -0.609 1244s
|
| 57 |
+
ep 1 step 1040/5736 loss 0.287 ce 0.555 reward 0.075 1266s
|
| 58 |
+
ep 1 step 1060/5736 loss -0.340 ce 0.005 reward 0.740 1288s
|
| 59 |
+
ep 1 step 1080/5736 loss 0.915 ce 0.219 reward 0.550 1310s
|
| 60 |
+
ep 1 step 1100/5736 loss 0.092 ce 0.278 reward 0.335 1334s
|
| 61 |
+
ep 1 step 1120/5736 loss 2.255 ce 1.808 reward -1.507 1359s
|
| 62 |
+
ep 1 step 1140/5736 loss 1.179 ce 0.495 reward 0.200 1384s
|
| 63 |
+
ep 1 step 1160/5736 loss 0.012 ce 0.004 reward 0.747 1408s
|
| 64 |
+
ep 1 step 1180/5736 loss 0.123 ce 0.754 reward -0.255 1433s
|
| 65 |
+
ep 1 step 1200/5736 loss 0.198 ce 0.326 reward 0.309 1458s
|
| 66 |
+
ep 1 step 1220/5736 loss 0.509 ce 0.000 reward 0.750 1482s
|
| 67 |
+
ep 1 step 1240/5736 loss 0.322 ce 0.074 reward 0.670 1504s
|
| 68 |
+
ep 1 step 1260/5736 loss 1.003 ce 1.388 reward -0.980 1526s
|
| 69 |
+
ep 1 step 1280/5736 loss 0.873 ce 4.870 reward -1.776 1548s
|
| 70 |
+
ep 1 step 1300/5736 loss 0.422 ce 0.007 reward 0.743 1570s
|
| 71 |
+
ep 1 step 1320/5736 loss 0.311 ce 0.001 reward 0.748 1593s
|
| 72 |
+
ep 1 step 1340/5736 loss 5.178 ce 4.459 reward -3.079 1615s
|
| 73 |
+
ep 1 step 1360/5736 loss -0.279 ce 0.000 reward 0.750 1639s
|
| 74 |
+
ep 1 step 1380/5736 loss -0.840 ce 1.816 reward -1.648 1665s
|
| 75 |
+
ep 1 step 1400/5736 loss 2.030 ce 1.714 reward -1.225 1689s
|
| 76 |
+
ep 1 step 1420/5736 loss 1.433 ce 1.163 reward -0.708 1714s
|
| 77 |
+
ep 1 step 1440/5736 loss 0.244 ce 0.753 reward -0.194 1738s
|
| 78 |
+
ep 1 step 1460/5736 loss 2.513 ce 0.902 reward -0.237 1763s
|
| 79 |
+
ep 1 step 1480/5736 loss 1.593 ce 1.058 reward -0.578 1786s
|
| 80 |
+
ep 1 step 1500/5736 loss 0.870 ce 0.267 reward 0.457 1808s
|
| 81 |
+
ep 1 step 1520/5736 loss -0.183 ce 0.027 reward 0.714 1831s
|
| 82 |
+
ep 1 step 1540/5736 loss 1.141 ce 0.604 reward -0.165 1853s
|
| 83 |
+
ep 1 step 1560/5736 loss 1.778 ce 2.143 reward -1.779 1875s
|
| 84 |
+
ep 1 step 1580/5736 loss -1.432 ce 0.043 reward 0.695 1897s
|
| 85 |
+
ep 1 step 1600/5736 loss 1.285 ce 0.893 reward -0.555 1919s
|
| 86 |
+
ep 1 step 1620/5736 loss -0.448 ce 0.026 reward 0.725 1944s
|
| 87 |
+
ep 1 step 1640/5736 loss 1.916 ce 0.766 reward -0.141 1968s
|
| 88 |
+
ep 1 step 1660/5736 loss 0.366 ce 0.288 reward 0.416 1993s
|
| 89 |
+
ep 1 step 1680/5736 loss 0.359 ce 0.506 reward -0.044 2018s
|
| 90 |
+
ep 1 step 1700/5736 loss 1.577 ce 1.610 reward -1.254 2043s
|
| 91 |
+
ep 1 step 1720/5736 loss 0.310 ce 0.000 reward 0.750 2067s
|
| 92 |
+
ep 1 step 1740/5736 loss -0.173 ce 0.082 reward 0.674 2090s
|
| 93 |
+
ep 1 step 1760/5736 loss 2.839 ce 2.416 reward -1.750 2112s
|
| 94 |
+
ep 1 step 1780/5736 loss 0.334 ce 0.251 reward 0.427 2135s
|
| 95 |
+
ep 1 step 1800/5736 loss 6.210 ce 6.935 reward -4.351 2157s
|
| 96 |
+
ep 1 step 1820/5736 loss 1.940 ce 1.649 reward -1.230 2179s
|
| 97 |
+
ep 1 step 1840/5736 loss -0.000 ce -0.000 reward 0.750 2201s
|
| 98 |
+
ep 1 step 1860/5736 loss 0.137 ce 0.154 reward 0.588 2223s
|
| 99 |
+
ep 1 step 1880/5736 loss 3.022 ce 3.763 reward -3.697 2249s
|
| 100 |
+
ep 1 step 1900/5736 loss -0.994 ce 0.000 reward 0.750 2273s
|
| 101 |
+
=== epoch 1/3 avg loss 0.9655 2288s
|
| 102 |
+
ep 2 step 1920/5736 loss -0.334 ce 0.004 reward 0.745 2297s
|
| 103 |
+
ep 2 step 1940/5736 loss 2.466 ce 2.807 reward -2.458 2322s
|
| 104 |
+
ep 2 step 1960/5736 loss -0.088 ce 0.014 reward 0.733 2347s
|
| 105 |
+
ep 2 step 1980/5736 loss 0.001 ce 0.000 reward 0.750 2371s
|
| 106 |
+
ep 2 step 2000/5736 loss -1.152 ce 0.257 reward 0.430 2393s
|
| 107 |
+
ep 2 step 2020/5736 loss 1.120 ce 1.008 reward -0.512 2416s
|
| 108 |
+
ep 2 step 2040/5736 loss 0.434 ce 0.852 reward -0.291 2438s
|
| 109 |
+
ep 2 step 2060/5736 loss 0.258 ce 0.137 reward 0.572 2460s
|
| 110 |
+
ep 2 step 2080/5736 loss -0.961 ce 1.669 reward -1.219 2482s
|
| 111 |
+
ep 2 step 2100/5736 loss 0.203 ce 0.268 reward 0.453 2505s
|
| 112 |
+
ep 2 step 2120/5736 loss -2.449 ce 0.003 reward 0.747 2528s
|
| 113 |
+
ep 2 step 2140/5736 loss -1.220 ce 0.003 reward 0.748 2552s
|
| 114 |
+
ep 2 step 2160/5736 loss 1.053 ce 0.486 reward 0.137 2577s
|
| 115 |
+
ep 2 step 2180/5736 loss -0.319 ce 0.342 reward 0.400 2602s
|
| 116 |
+
ep 2 step 2200/5736 loss -0.000 ce -0.000 reward 0.750 2627s
|
| 117 |
+
ep 2 step 2220/5736 loss -0.226 ce 0.424 reward 0.254 2651s
|
| 118 |
+
ep 2 step 2240/5736 loss 4.043 ce 4.104 reward -1.740 2675s
|
| 119 |
+
ep 2 step 2260/5736 loss 1.498 ce 1.368 reward -0.860 2698s
|
| 120 |
+
ep 2 step 2280/5736 loss -0.211 ce 0.000 reward 0.750 2720s
|
| 121 |
+
ep 2 step 2300/5736 loss -0.000 ce -0.000 reward 0.750 2742s
|
| 122 |
+
ep 2 step 2320/5736 loss 0.910 ce 1.463 reward -0.898 2764s
|
| 123 |
+
ep 2 step 2340/5736 loss 2.722 ce 2.704 reward -2.044 2786s
|
| 124 |
+
ep 2 step 2360/5736 loss 4.900 ce 4.703 reward -1.953 2808s
|
| 125 |
+
ep 2 step 2380/5736 loss -0.120 ce 0.008 reward 0.741 2832s
|
| 126 |
+
ep 2 step 2400/5736 loss 4.746 ce 4.734 reward -1.740 2857s
|
| 127 |
+
ep 2 step 2420/5736 loss 0.733 ce 0.408 reward 0.220 2881s
|
| 128 |
+
ep 2 step 2440/5736 loss 2.885 ce 3.230 reward -2.934 2906s
|
| 129 |
+
ep 2 step 2460/5736 loss -0.172 ce 0.000 reward 0.750 2930s
|
| 130 |
+
ep 2 step 2480/5736 loss -0.000 ce -0.000 reward 0.750 2955s
|
| 131 |
+
ep 2 step 2500/5736 loss -1.332 ce 0.024 reward 0.727 2979s
|
| 132 |
+
ep 2 step 2520/5736 loss 0.470 ce 1.203 reward -0.676 3002s
|
| 133 |
+
ep 2 step 2540/5736 loss -0.000 ce -0.000 reward 0.750 3024s
|
| 134 |
+
ep 2 step 2560/5736 loss 5.343 ce 5.343 reward -1.740 3046s
|
| 135 |
+
ep 2 step 2580/5736 loss 2.787 ce 1.669 reward -1.162 3068s
|
| 136 |
+
ep 2 step 2600/5736 loss -2.983 ce 0.709 reward -0.160 3091s
|
| 137 |
+
ep 2 step 2620/5736 loss 0.900 ce 0.000 reward 0.750 3113s
|
| 138 |
+
ep 2 step 2640/5736 loss 0.301 ce 0.370 reward 0.234 3136s
|
| 139 |
+
ep 2 step 2660/5736 loss 0.777 ce 1.571 reward -1.142 3162s
|
| 140 |
+
ep 2 step 2680/5736 loss 0.597 ce 0.584 reward -0.027 3187s
|
| 141 |
+
ep 2 step 2700/5736 loss 0.287 ce 0.329 reward 0.222 3212s
|
| 142 |
+
ep 2 step 2720/5736 loss 1.478 ce 0.387 reward 0.282 3237s
|
| 143 |
+
ep 2 step 2740/5736 loss 0.738 ce 0.507 reward 0.012 3261s
|
| 144 |
+
ep 2 step 2760/5736 loss 3.690 ce 4.616 reward -2.242 3284s
|
| 145 |
+
ep 2 step 2780/5736 loss -0.260 ce 0.193 reward 0.537 3306s
|
| 146 |
+
ep 2 step 2800/5736 loss 4.752 ce 4.766 reward -1.740 3329s
|
| 147 |
+
ep 2 step 2820/5736 loss 0.753 ce 0.179 reward 0.517 3351s
|
| 148 |
+
ep 2 step 2840/5736 loss 0.397 ce 0.280 reward 0.355 3373s
|
| 149 |
+
ep 2 step 2860/5736 loss 4.371 ce 4.577 reward -4.193 3396s
|
| 150 |
+
ep 2 step 2880/5736 loss 3.433 ce 3.418 reward -1.740 3418s
|
| 151 |
+
ep 2 step 2900/5736 loss -0.165 ce 0.302 reward 0.355 3442s
|
| 152 |
+
ep 2 step 2920/5736 loss -1.110 ce 0.000 reward 0.750 3467s
|
| 153 |
+
ep 2 step 2940/5736 loss 0.899 ce 2.142 reward -1.766 3491s
|
| 154 |
+
ep 2 step 2960/5736 loss -0.160 ce 0.002 reward 0.748 3516s
|
| 155 |
+
ep 2 step 2980/5736 loss 0.397 ce 0.076 reward 0.679 3540s
|
| 156 |
+
ep 2 step 3000/5736 loss 8.716 ce 9.129 reward -6.550 3565s
|
| 157 |
+
ep 2 step 3020/5736 loss 0.517 ce 0.504 reward 0.093 3587s
|
| 158 |
+
ep 2 step 3040/5736 loss 0.571 ce 1.267 reward -0.669 3609s
|
| 159 |
+
ep 2 step 3060/5736 loss 10.010 ce 9.623 reward -6.253 3631s
|
| 160 |
+
ep 2 step 3080/5736 loss 0.209 ce 0.092 reward 0.650 3652s
|
| 161 |
+
ep 2 step 3100/5736 loss 1.857 ce 1.848 reward -1.399 3674s
|
| 162 |
+
ep 2 step 3120/5736 loss 2.592 ce 1.673 reward -1.339 3695s
|
| 163 |
+
ep 2 step 3140/5736 loss 0.931 ce 1.065 reward -0.577 3717s
|
| 164 |
+
ep 2 step 3160/5736 loss -0.050 ce 0.524 reward 0.185 3741s
|
| 165 |
+
ep 2 step 3180/5736 loss 1.458 ce 0.869 reward -0.260 3766s
|
| 166 |
+
ep 2 step 3200/5736 loss -0.652 ce 0.678 reward -0.112 3790s
|
| 167 |
+
ep 2 step 3220/5736 loss 1.152 ce 0.740 reward -0.147 3813s
|
| 168 |
+
ep 2 step 3240/5736 loss -0.866 ce 1.132 reward -0.573 3837s
|
| 169 |
+
ep 2 step 3260/5736 loss 0.069 ce 0.347 reward 0.276 3861s
|
| 170 |
+
ep 2 step 3280/5736 loss 3.832 ce 3.105 reward -2.694 3884s
|
| 171 |
+
ep 2 step 3300/5736 loss -1.609 ce 0.866 reward -0.277 3906s
|
| 172 |
+
ep 2 step 3320/5736 loss -1.190 ce 0.540 reward 0.017 3927s
|
| 173 |
+
ep 2 step 3340/5736 loss 0.095 ce 0.000 reward 0.750 3949s
|
| 174 |
+
ep 2 step 3360/5736 loss 0.018 ce 0.000 reward 0.750 3971s
|
| 175 |
+
ep 2 step 3380/5736 loss -0.164 ce 0.000 reward 0.750 3992s
|
| 176 |
+
ep 2 step 3400/5736 loss 3.871 ce 3.871 reward -1.740 4014s
|
| 177 |
+
ep 2 step 3420/5736 loss 1.919 ce 1.431 reward -0.920 4037s
|
| 178 |
+
ep 2 step 3440/5736 loss -0.110 ce 0.000 reward 0.750 4061s
|
| 179 |
+
ep 2 step 3460/5736 loss 2.759 ce 3.016 reward -1.740 4085s
|
| 180 |
+
ep 2 step 3480/5736 loss 1.899 ce 0.326 reward 0.379 4109s
|
| 181 |
+
ep 2 step 3500/5736 loss 0.121 ce 0.015 reward 0.736 4133s
|
| 182 |
+
ep 2 step 3520/5736 loss 1.250 ce 1.704 reward -1.355 4157s
|
| 183 |
+
ep 2 step 3540/5736 loss -0.545 ce 0.141 reward 0.629 4180s
|
| 184 |
+
ep 2 step 3560/5736 loss 1.155 ce 0.648 reward -0.077 4202s
|
| 185 |
+
ep 2 step 3580/5736 loss 0.130 ce 0.000 reward 0.750 4223s
|
| 186 |
+
ep 2 step 3600/5736 loss 13.606 ce 13.596 reward -6.720 4245s
|
| 187 |
+
ep 2 step 3620/5736 loss 2.642 ce 1.323 reward -0.879 4266s
|
| 188 |
+
ep 2 step 3640/5736 loss 2.688 ce 2.795 reward -1.740 4288s
|
| 189 |
+
ep 2 step 3660/5736 loss 0.000 ce 0.000 reward 0.750 4309s
|
| 190 |
+
ep 2 step 3680/5736 loss 0.543 ce 0.526 reward 0.137 4332s
|
| 191 |
+
ep 2 step 3700/5736 loss 0.859 ce 0.061 reward 0.697 4356s
|
| 192 |
+
ep 2 step 3720/5736 loss 0.372 ce 0.000 reward 0.750 4380s
|
| 193 |
+
ep 2 step 3740/5736 loss 0.582 ce 0.795 reward -0.266 4403s
|
| 194 |
+
ep 2 step 3760/5736 loss -0.116 ce 0.000 reward 0.750 4427s
|
| 195 |
+
ep 2 step 3780/5736 loss 3.356 ce 3.557 reward -1.740 4451s
|
| 196 |
+
ep 2 step 3800/5736 loss 2.293 ce 1.484 reward -0.860 4475s
|
| 197 |
+
ep 2 step 3820/5736 loss -0.101 ce 0.000 reward 0.750 4496s
|
| 198 |
+
=== epoch 2/3 avg loss 1.1094 4502s
|
| 199 |
+
ep 3 step 3840/5736 loss -0.065 ce 0.102 reward 0.632 4517s
|
| 200 |
+
ep 3 step 3860/5736 loss -0.032 ce 0.000 reward 0.750 4539s
|
| 201 |
+
ep 3 step 3880/5736 loss 5.263 ce 4.626 reward -1.795 4560s
|
| 202 |
+
ep 3 step 3900/5736 loss -0.141 ce 0.752 reward -0.168 4582s
|
| 203 |
+
ep 3 step 3920/5736 loss -0.000 ce -0.000 reward 0.750 4604s
|
| 204 |
+
ep 3 step 3940/5736 loss 4.600 ce 4.187 reward -2.491 4625s
|
| 205 |
+
ep 3 step 3960/5736 loss 9.254 ce 9.254 reward -4.230 4649s
|
| 206 |
+
ep 3 step 3980/5736 loss 0.000 ce 0.000 reward 0.750 4673s
|
| 207 |
+
ep 3 step 4000/5736 loss 1.703 ce 2.893 reward -2.497 4697s
|
| 208 |
+
ep 3 step 4020/5736 loss -0.000 ce -0.000 reward 0.750 4721s
|
| 209 |
+
ep 3 step 4040/5736 loss 3.809 ce 3.816 reward -1.740 4745s
|
| 210 |
+
ep 3 step 4060/5736 loss -0.239 ce 0.000 reward 0.750 4769s
|
| 211 |
+
ep 3 step 4080/5736 loss 2.466 ce 1.558 reward -1.119 4792s
|
| 212 |
+
ep 3 step 4100/5736 loss 2.049 ce 1.311 reward -0.801 4813s
|
| 213 |
+
ep 3 step 4120/5736 loss 0.000 ce 0.000 reward 0.750 4835s
|
| 214 |
+
ep 3 step 4140/5736 loss 0.000 ce 0.000 reward 0.750 4857s
|
| 215 |
+
ep 3 step 4160/5736 loss -0.029 ce 0.000 reward 0.750 4878s
|
| 216 |
+
ep 3 step 4180/5736 loss 3.194 ce 2.636 reward -2.267 4900s
|
| 217 |
+
ep 3 step 4200/5736 loss -0.904 ce 0.138 reward 0.607 4922s
|
| 218 |
+
ep 3 step 4220/5736 loss 10.090 ce 9.401 reward -4.727 4946s
|
| 219 |
+
ep 3 step 4240/5736 loss 4.646 ce 4.656 reward -1.740 4970s
|
| 220 |
+
ep 3 step 4260/5736 loss 0.157 ce 0.000 reward 0.750 4994s
|
| 221 |
+
ep 3 step 4280/5736 loss 0.922 ce 0.055 reward 0.696 5018s
|
| 222 |
+
ep 3 step 4300/5736 loss -0.000 ce -0.000 reward 0.750 5042s
|
| 223 |
+
ep 3 step 4320/5736 loss 0.922 ce 0.000 reward 0.750 5066s
|
| 224 |
+
ep 3 step 4340/5736 loss 0.076 ce 0.000 reward 0.750 5088s
|
| 225 |
+
ep 3 step 4360/5736 loss -0.000 ce -0.000 reward 0.750 5110s
|
| 226 |
+
ep 3 step 4380/5736 loss 1.704 ce 1.207 reward -0.685 5131s
|
| 227 |
+
ep 3 step 4400/5736 loss 4.283 ce 4.309 reward -1.740 5153s
|
| 228 |
+
ep 3 step 4420/5736 loss -0.121 ce 2.678 reward -2.319 5175s
|
| 229 |
+
ep 3 step 4440/5736 loss 1.292 ce 0.812 reward -0.235 5197s
|
| 230 |
+
ep 3 step 4460/5736 loss 0.000 ce 0.000 reward 0.750 5218s
|
| 231 |
+
ep 3 step 4480/5736 loss -0.058 ce 0.170 reward 0.512 5242s
|
| 232 |
+
ep 3 step 4500/5736 loss -0.010 ce 0.000 reward 0.750 5265s
|
| 233 |
+
ep 3 step 4520/5736 loss 0.579 ce 0.225 reward 0.471 5289s
|
| 234 |
+
ep 3 step 4540/5736 loss 0.051 ce 0.135 reward 0.576 5313s
|
| 235 |
+
ep 3 step 4560/5736 loss -0.379 ce 1.452 reward -0.917 5337s
|
| 236 |
+
ep 3 step 4580/5736 loss -0.011 ce 0.000 reward 0.750 5361s
|
| 237 |
+
ep 3 step 4600/5736 loss 1.084 ce 0.575 reward 0.081 5384s
|
| 238 |
+
ep 3 step 4620/5736 loss 2.207 ce 1.260 reward -0.702 5406s
|
| 239 |
+
ep 3 step 4640/5736 loss 0.395 ce 0.169 reward 0.529 5427s
|
| 240 |
+
ep 3 step 4660/5736 loss -0.267 ce 0.305 reward 0.364 5449s
|
| 241 |
+
ep 3 step 4680/5736 loss -0.000 ce -0.000 reward 0.750 5471s
|
| 242 |
+
ep 3 step 4700/5736 loss -0.872 ce 0.273 reward 0.471 5492s
|
| 243 |
+
ep 3 step 4720/5736 loss 0.732 ce 1.012 reward -0.467 5514s
|
| 244 |
+
ep 3 step 4740/5736 loss -0.000 ce -0.000 reward 0.750 5537s
|
| 245 |
+
ep 3 step 4760/5736 loss 0.043 ce 0.000 reward 0.750 5561s
|
| 246 |
+
ep 3 step 4780/5736 loss -0.008 ce 0.000 reward 0.750 5584s
|
| 247 |
+
ep 3 step 4800/5736 loss -0.015 ce 0.000 reward 0.750 5609s
|
| 248 |
+
ep 3 step 4820/5736 loss 7.047 ce 6.954 reward -4.230 5632s
|
| 249 |
+
ep 3 step 4840/5736 loss 0.021 ce 0.024 reward 0.723 5657s
|
| 250 |
+
ep 3 step 4860/5736 loss 2.918 ce 2.794 reward -2.469 5680s
|
| 251 |
+
ep 3 step 4880/5736 loss -0.000 ce -0.000 reward 0.750 5702s
|
| 252 |
+
ep 3 step 4900/5736 loss -0.010 ce 0.000 reward 0.750 5724s
|
| 253 |
+
ep 3 step 4920/5736 loss 0.033 ce 0.000 reward 0.750 5745s
|
| 254 |
+
ep 3 step 4940/5736 loss 4.543 ce 3.750 reward -1.740 5767s
|
| 255 |
+
ep 3 step 4960/5736 loss -0.032 ce 0.000 reward 0.750 5789s
|
| 256 |
+
ep 3 step 4980/5736 loss 1.302 ce 1.697 reward -1.307 5810s
|
| 257 |
+
ep 3 step 5000/5736 loss -0.000 ce -0.000 reward 0.750 5833s
|
| 258 |
+
ep 3 step 5020/5736 loss 7.283 ce 6.728 reward -4.230 5857s
|
| 259 |
+
ep 3 step 5040/5736 loss 0.000 ce 0.000 reward 0.750 5881s
|
| 260 |
+
ep 3 step 5060/5736 loss 2.784 ce 3.168 reward -1.740 5905s
|
| 261 |
+
ep 3 step 5080/5736 loss 0.077 ce 0.000 reward 0.750 5929s
|
| 262 |
+
ep 3 step 5100/5736 loss 4.980 ce 6.121 reward -3.107 5953s
|
| 263 |
+
ep 3 step 5120/5736 loss -0.000 ce -0.000 reward 0.750 5977s
|
| 264 |
+
ep 3 step 5140/5736 loss 2.089 ce 1.122 reward -0.550 5999s
|
| 265 |
+
ep 3 step 5160/5736 loss 1.105 ce 1.833 reward -1.380 6020s
|
| 266 |
+
ep 3 step 5180/5736 loss 0.000 ce 0.000 reward 0.750 6042s
|
| 267 |
+
ep 3 step 5200/5736 loss -0.055 ce -0.000 reward 0.750 6063s
|
| 268 |
+
ep 3 step 5220/5736 loss -0.000 ce -0.000 reward 0.750 6085s
|
| 269 |
+
ep 3 step 5240/5736 loss -0.090 ce 0.000 reward 0.750 6106s
|
| 270 |
+
ep 3 step 5260/5736 loss -0.000 ce -0.000 reward 0.750 6128s
|
| 271 |
+
ep 3 step 5280/5736 loss 3.014 ce 1.651 reward -1.102 6152s
|
| 272 |
+
ep 3 step 5300/5736 loss 0.000 ce 0.000 reward 0.750 6176s
|
| 273 |
+
ep 3 step 5320/5736 loss -0.332 ce 0.000 reward 0.750 6200s
|
| 274 |
+
ep 3 step 5340/5736 loss 4.471 ce 4.873 reward -1.857 6224s
|
| 275 |
+
ep 3 step 5360/5736 loss 0.047 ce 0.059 reward 0.691 6248s
|
| 276 |
+
ep 3 step 5380/5736 loss 4.046 ce 4.062 reward -1.740 6272s
|
| 277 |
+
ep 3 step 5400/5736 loss -0.000 ce -0.000 reward 0.750 6294s
|
| 278 |
+
ep 3 step 5420/5736 loss 0.000 ce 0.000 reward 0.750 6315s
|
| 279 |
+
ep 3 step 5440/5736 loss -0.000 ce -0.000 reward 0.750 6337s
|
| 280 |
+
ep 3 step 5460/5736 loss 9.175 ce 8.045 reward -4.230 6359s
|
| 281 |
+
ep 3 step 5480/5736 loss 3.850 ce 3.783 reward -1.740 6381s
|
| 282 |
+
ep 3 step 5500/5736 loss 0.803 ce 0.670 reward -0.024 6402s
|
| 283 |
+
ep 3 step 5520/5736 loss 0.000 ce 0.000 reward 0.750 6424s
|
| 284 |
+
ep 3 step 5540/5736 loss 0.488 ce 0.544 reward 0.064 6448s
|
| 285 |
+
ep 3 step 5560/5736 loss -1.941 ce 0.158 reward 0.581 6472s
|
| 286 |
+
ep 3 step 5580/5736 loss 0.006 ce 0.000 reward 0.750 6496s
|
| 287 |
+
ep 3 step 5600/5736 loss 3.625 ce 3.855 reward -2.341 6521s
|
| 288 |
+
ep 3 step 5620/5736 loss 5.359 ce 5.359 reward -1.740 6545s
|
| 289 |
+
ep 3 step 5640/5736 loss 0.021 ce 0.000 reward 0.750 6569s
|
| 290 |
+
ep 3 step 5660/5736 loss 3.300 ce 3.121 reward -1.740 6592s
|
| 291 |
+
ep 3 step 5680/5736 loss 2.049 ce 1.110 reward -0.529 6613s
|
| 292 |
+
ep 3 step 5700/5736 loss 0.056 ce 0.000 reward 0.750 6635s
|
| 293 |
+
ep 3 step 5720/5736 loss -0.148 ce 0.000 reward 0.750 6657s
|
| 294 |
+
=== epoch 3/3 avg loss 1.0639 6676s
|
| 295 |
+
saved finetune/out/laya-browser-v12s
|
| 296 |
+
== calibrate
|
| 297 |
+
n=4957 acc=0.634 T=1: nll 3.288 mean conf 0.850 | T=5.23: nll 1.397 mean conf 0.640
|
| 298 |
+
wrote temperature 5.227105378439709 -> /home/ckl/projects/S/laya/finetune/out/laya-browser-v12s/rl_agent_config.json
|
| 299 |
+
== eval v12s
|
| 300 |
+
return Agent(model_id_or_path, device=device, token=token, subfolder=subfolder, fast=fast, compile=compile,
|
| 301 |
+
/home/ckl/projects/S/laya/finetune/out/laya-browser-v12s/: cases 5314 operation acc 0.727 target top-1 0.572 (n=4602, mean normalized rank 0.300) 19 ms/case
|
| 302 |
+
live CLICK n=1050 op acc 0.96 target top-1 0.84
|
| 303 |
+
live DONE n= 125 op acc 0.90
|
| 304 |
+
live SELECT n= 32 op acc 0.91 target top-1 0.84
|
| 305 |
+
live TYPE_TEXT n= 117 op acc 0.79 target top-1 0.92
|
| 306 |
+
mind2web CLICK n=1084 op acc 0.90 target top-1 0.49
|
| 307 |
+
mind2web SELECT n= 126 op acc 0.57 target top-1 0.35
|
| 308 |
+
mind2web TYPE_TEXT n= 200 op acc 0.73 target top-1 0.83
|
| 309 |
+
nnetnav CLICK n=1386 op acc 0.69 target top-1 0.25
|
| 310 |
+
nnetnav DONE n= 313 op acc 0.36
|
| 311 |
+
nnetnav SCROLL_DOWN n= 224 op acc 0.06 target top-1 0.00
|
| 312 |
+
nnetnav SCROLL_UP n= 50 op acc 0.00 target top-1 0.00
|
| 313 |
+
nnetnav TYPE_TEXT n= 607 op acc 0.57 target top-1 0.88
|
| 314 |
+
V12S_DONE
|
results/round3/v13s.log
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
== rollout2 cases: 2057
|
| 2 |
+
== build v13s
|
| 3 |
+
operation label counts: {'TYPE_TEXT': 11052, 'CLICK': 16000, 'SELECT': 3090, 'DONE': 14636, 'SCROLL_DOWN': 4844, 'PRESS_ENTER': 2496, 'SCROLL_UP': 137}
|
| 4 |
+
train items 72969 (op 52255, target 20714), eval cases 5314, skipped 0, seq len mean 764 max 1024
|
| 5 |
+
== train v13s (1 epochs from v12s)
|
| 6 |
+
=== epoch 1/1 avg loss 1.0192 2620s
|
| 7 |
+
saved finetune/out/laya-browser-v13s
|
| 8 |
+
== calibrate
|
| 9 |
+
n=4957 acc=0.624 T=1: nll 3.180 mean conf 0.853 | T=4.93: nll 1.415 mean conf 0.633
|
| 10 |
+
wrote temperature 4.9277497256270095 -> /home/ckl/projects/S/laya/finetune/out/laya-browser-v13s/rl_agent_config.json
|
| 11 |
+
== eval
|
| 12 |
+
/home/ckl/projects/S/laya/finetune/out/laya-browser-v13s/: cases 5314 operation acc 0.712 target top-1 0.572 (n=4602, mean normalized rank 0.299) 20 ms/case
|
| 13 |
+
live CLICK n=1050 op acc 0.95 target top-1 0.83
|
| 14 |
+
live DONE n= 125 op acc 0.90
|
| 15 |
+
live SELECT n= 32 op acc 0.94 target top-1 0.81
|
| 16 |
+
live TYPE_TEXT n= 117 op acc 0.85 target top-1 0.97
|
| 17 |
+
mind2web CLICK n=1084 op acc 0.87 target top-1 0.49
|
| 18 |
+
mind2web SELECT n= 126 op acc 0.58 target top-1 0.33
|
| 19 |
+
mind2web TYPE_TEXT n= 200 op acc 0.76 target top-1 0.84
|
| 20 |
+
nnetnav CLICK n=1386 op acc 0.67 target top-1 0.25
|
| 21 |
+
nnetnav DONE n= 313 op acc 0.35
|
| 22 |
+
nnetnav SCROLL_DOWN n= 224 op acc 0.13 target top-1 0.00
|
| 23 |
+
nnetnav SCROLL_UP n= 50 op acc 0.00 target top-1 0.00
|
| 24 |
+
nnetnav TYPE_TEXT n= 607 op acc 0.50 target top-1 0.88
|
| 25 |
+
== suite A x3 (v13s, chunk 40)
|
| 26 |
+
FAIL wiki-einstein steps= 3 status=done 5.9s https://en.wikipedia.org/wiki/Main_Page
|
| 27 |
+
FAIL wiki-einstein steps= 3 status=done 3.8s https://en.wikipedia.org/wiki/Main_Page
|
| 28 |
+
FAIL wiki-einstein steps= 3 status=blocked 3.5s https://en.wikipedia.org/wiki/Main_Page
|
| 29 |
+
PASS wiki-search steps= 2 status=done 4.2s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 30 |
+
PASS wiki-search steps= 2 status=done 4.3s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 31 |
+
PASS wiki-search steps= 2 status=done 4.5s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 32 |
+
PASS hn-new steps= 1 status=done 4.1s https://news.ycombinator.com/newest
|
| 33 |
+
PASS hn-new steps= 1 status=done 2.6s https://news.ycombinator.com/newest
|
| 34 |
+
PASS hn-new steps= 1 status=done 2.6s https://news.ycombinator.com/newest
|
| 35 |
+
PASS hn-login-page steps= 1 status=done 2.7s https://news.ycombinator.com/login?goto=news
|
| 36 |
+
PASS hn-login-page steps= 1 status=done 2.5s https://news.ycombinator.com/login?goto=news
|
| 37 |
+
PASS hn-login-page steps= 1 status=done 2.6s https://news.ycombinator.com/login?goto=news
|
| 38 |
+
PASS gh-issues steps= 1 status=done 7.8s https://github.com/tile-ai/tilelang/issues
|
| 39 |
+
PASS gh-issues steps= 1 status=done 3.4s https://github.com/tile-ai/tilelang/issues
|
| 40 |
+
PASS gh-issues steps= 1 status=done 3.2s https://github.com/tile-ai/tilelang/issues
|
| 41 |
+
PASS py-downloads steps= 1 status=done 4.1s https://www.python.org/downloads/
|
| 42 |
+
PASS py-downloads steps= 1 status=done 2.4s https://www.python.org/downloads/
|
| 43 |
+
PASS py-downloads steps= 1 status=done 3.0s https://www.python.org/downloads/
|
| 44 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 45 |
+
PASS books-travel steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 46 |
+
PASS books-travel steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 47 |
+
PASS books-open-book steps= 1 status=done 2.3s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 48 |
+
PASS books-open-book steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 49 |
+
PASS books-open-book steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 50 |
+
PASS internet-dropdown steps= 1 status=done 3.4s https://the-internet.herokuapp.com/dropdown
|
| 51 |
+
PASS internet-dropdown steps= 1 status=done 2.2s https://the-internet.herokuapp.com/dropdown
|
| 52 |
+
PASS internet-dropdown steps= 1 status=done 2.2s https://the-internet.herokuapp.com/dropdown
|
| 53 |
+
PASS internet-checkbox steps= 1 status=done 2.5s https://the-internet.herokuapp.com/checkboxes
|
| 54 |
+
PASS internet-checkbox steps= 1 status=done 2.1s https://the-internet.herokuapp.com/checkboxes
|
| 55 |
+
PASS internet-checkbox steps= 1 status=done 2.2s https://the-internet.herokuapp.com/checkboxes
|
| 56 |
+
FAIL books-page2 steps= 1 status=done 1.8s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 57 |
+
FAIL books-page2 steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 58 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 59 |
+
PASS quotes-tag-love steps= 1 status=done 3.9s https://quotes.toscrape.com/tag/love/
|
| 60 |
+
PASS quotes-tag-love steps= 1 status=done 2.8s https://quotes.toscrape.com/tag/love/
|
| 61 |
+
PASS quotes-tag-love steps= 1 status=done 2.8s https://quotes.toscrape.com/tag/love/
|
| 62 |
+
PASS hn-past steps= 1 status=done 3.1s https://news.ycombinator.com/front
|
| 63 |
+
PASS hn-past steps= 1 status=done 4.4s https://news.ycombinator.com/front
|
| 64 |
+
PASS hn-past steps= 1 status=done 3.0s https://news.ycombinator.com/front
|
| 65 |
+
PASS web-search steps= 2 status=done 5.2s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 66 |
+
PASS web-search steps= 2 status=done 3.8s https://marginalia-search.com/search?query=tilelang+github&sst=SE-472b
|
| 67 |
+
PASS web-search steps= 2 status=done 3.1s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 68 |
+
FAIL arxiv-search steps= 2 status=error:ValueError 14.3s https://arxiv.org/
|
| 69 |
+
FAIL arxiv-search steps= 2 status=error:ValueError 12.9s https://arxiv.org/
|
| 70 |
+
FAIL arxiv-search steps= 2 status=error:ValueError 13.4s https://arxiv.org/
|
| 71 |
+
FAIL flights steps=19 status=blocked 7.3s https://www.google.com/travel/flights?tfs=CBwQARoOagwIAxIIL20vMDRqcGwa
|
| 72 |
+
FAIL flights steps=20 status=ready 5.2s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIBBIIL20vMDJqNzEa
|
| 73 |
+
FAIL flights steps=20 status=ready 5.7s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIBBIIL20vMDJqNzEa
|
| 74 |
+
== 36/48 passed (75%, 3 run(s) per task) | median wall 3.1s
|
| 75 |
+
per task: wiki-einstein=0/3 wiki-search=3/3 hn-new=3/3 hn-login-page=3/3 gh-issues=3/3 py-downloads=3/3 books-travel=3/3 books-open-book=3/3 internet-dropdown=3/3 internet-checkbox=3/3 books-page2=0/3 quotes-tag-love=3/3 hn-past=3/3 web-search=3/3 arxiv-search=0/3 flights=0/3
|
| 76 |
+
== suite B x3 (v13s, chunk 40)
|
| 77 |
+
held-out check: OK, no suite-B domain appears in training data
|
| 78 |
+
PASS sqlite-download steps= 1 status=done 5.7s https://www.sqlite.org/download.html
|
| 79 |
+
PASS sqlite-download steps= 1 status=done 1.9s https://www.sqlite.org/download.html
|
| 80 |
+
PASS sqlite-download steps= 1 status=done 1.9s https://www.sqlite.org/download.html
|
| 81 |
+
PASS haskell-downloads steps= 1 status=done 3.9s https://www.haskell.org/downloads/
|
| 82 |
+
PASS haskell-downloads steps= 1 status=done 2.8s https://www.haskell.org/downloads/
|
| 83 |
+
PASS haskell-downloads steps= 1 status=done 2.2s https://www.haskell.org/downloads/
|
| 84 |
+
PASS zig-download steps= 1 status=done 2.3s https://ziglang.org/download/
|
| 85 |
+
PASS zig-download steps= 1 status=done 2.0s https://ziglang.org/download/
|
| 86 |
+
PASS zig-download steps= 1 status=done 2.2s https://ziglang.org/download/
|
| 87 |
+
PASS openbsd-faq steps= 1 status=done 2.0s https://www.openbsd.org/faq/index.html
|
| 88 |
+
PASS openbsd-faq steps= 1 status=done 1.8s https://www.openbsd.org/faq/index.html
|
| 89 |
+
PASS openbsd-faq steps= 1 status=done 1.9s https://www.openbsd.org/faq/index.html
|
| 90 |
+
PASS nginx-download steps= 1 status=done 2.2s https://nginx.org/en/download.html
|
| 91 |
+
PASS nginx-download steps= 1 status=done 1.8s https://nginx.org/en/download.html
|
| 92 |
+
PASS nginx-download steps= 1 status=done 1.9s https://nginx.org/en/download.html
|
| 93 |
+
PASS xkcd-archive steps= 1 status=done 8.4s https://xkcd.com/archive/
|
| 94 |
+
PASS xkcd-archive steps= 1 status=done 4.3s https://xkcd.com/archive/
|
| 95 |
+
PASS xkcd-archive steps= 1 status=done 4.2s https://xkcd.com/archive/
|
| 96 |
+
PASS elixir-install steps= 1 status=done 3.9s https://elixir-lang.org/install/
|
| 97 |
+
PASS elixir-install steps= 1 status=done 2.2s https://elixir-lang.org/install/
|
| 98 |
+
PASS elixir-install steps= 1 status=done 2.0s https://elixir-lang.org/install/
|
| 99 |
+
PASS prometheus-download steps= 1 status=done 5.2s https://prometheus.io/download/
|
| 100 |
+
PASS prometheus-download steps= 1 status=done 3.1s https://prometheus.io/download/
|
| 101 |
+
PASS prometheus-download steps= 1 status=done 3.2s https://prometheus.io/download/
|
| 102 |
+
PASS ocaml-install steps= 1 status=done 4.4s https://ocaml.org/install#linux_mac_bsd
|
| 103 |
+
PASS ocaml-install steps= 1 status=done 3.2s https://ocaml.org/install#linux_mac_bsd
|
| 104 |
+
PASS ocaml-install steps= 1 status=done 3.3s https://ocaml.org/install#linux_mac_bsd
|
| 105 |
+
PASS rosetta-quicksort steps= 2 status=done 4.5s https://rosettacode.org/wiki/Quicksort
|
| 106 |
+
PASS rosetta-quicksort steps= 2 status=done 2.6s https://rosettacode.org/wiki/Sorting_algorithms/Quicksort
|
| 107 |
+
PASS rosetta-quicksort steps= 2 status=done 2.6s https://rosettacode.org/wiki/Sorting_algorithms/Quicksort
|
| 108 |
+
PASS arch-man-grep steps= 2 status=done 4.4s https://man.archlinux.org/man/grep.1
|
| 109 |
+
PASS arch-man-grep steps= 2 status=done 2.5s https://man.archlinux.org/man/grep.1
|
| 110 |
+
PASS arch-man-grep steps= 2 status=done 2.5s https://man.archlinux.org/man/grep.1
|
| 111 |
+
PASS debian-man-tar steps= 3 status=done 6.3s https://manpages.debian.org/trixie/tar/tar.1.en.html
|
| 112 |
+
PASS debian-man-tar steps= 3 status=done 2.6s https://manpages.debian.org/trixie/tar/tar.1.en.html
|
| 113 |
+
PASS debian-man-tar steps= 3 status=done 2.5s https://manpages.debian.org/trixie/tar/tar.1.en.html
|
| 114 |
+
PASS rfc-http-semantics steps= 2 status=done 15.8s https://www.rfc-editor.org/search/?q=HTTP+semantics
|
| 115 |
+
PASS rfc-http-semantics steps= 2 status=done 2.7s https://www.rfc-editor.org/search/?q=HTTP+semantics
|
| 116 |
+
PASS rfc-http-semantics steps= 2 status=done 2.7s https://www.rfc-editor.org/search/?q=HTTP+semantics
|
| 117 |
+
PASS nixos-ripgrep steps= 2 status=done 4.8s https://search.nixos.org/packages?channel=26.05&query=ripgrep
|
| 118 |
+
PASS nixos-ripgrep steps= 2 status=done 2.7s https://search.nixos.org/packages?channel=26.05&query=ripgrep
|
| 119 |
+
PASS nixos-ripgrep steps= 2 status=done 3.2s https://search.nixos.org/packages?channel=26.05&query=ripgrep
|
| 120 |
+
PASS ocaml-pkg-yojson steps= 2 status=done 3.9s https://ocaml.org/packages/search?q=yojson
|
| 121 |
+
PASS ocaml-pkg-yojson steps= 2 status=done 2.6s https://ocaml.org/packages/search?q=yojson
|
| 122 |
+
PASS ocaml-pkg-yojson steps= 2 status=done 2.9s https://ocaml.org/packages/search?q=yojson
|
| 123 |
+
PASS shop-search-jacket steps= 2 status=done 4.9s https://www.scrapingcourse.com/ecommerce/?s=jacket&post_type=product
|
| 124 |
+
PASS shop-search-jacket steps= 2 status=done 2.9s https://www.scrapingcourse.com/ecommerce/?s=jacket&post_type=product
|
| 125 |
+
PASS shop-search-jacket steps= 2 status=done 2.8s https://www.scrapingcourse.com/ecommerce/?s=jacket&post_type=product
|
| 126 |
+
PASS shop-page2 steps= 2 status=done 3.4s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 127 |
+
PASS shop-page2 steps= 2 status=done 4.2s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 128 |
+
FAIL shop-page2 steps= 3 status=blocked 2.9s https://www.scrapingcourse.com/ecommerce/
|
| 129 |
+
FAIL shop-sort-price steps= 2 status=done 6.2s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 130 |
+
FAIL shop-sort-price steps= 2 status=done 3.4s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 131 |
+
FAIL shop-sort-price steps= 2 status=done 3.4s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 132 |
+
== 50/54 passed (93%, 3 run(s) per task) | median wall 2.9s
|
| 133 |
+
per task: sqlite-download=3/3 haskell-downloads=3/3 zig-download=3/3 openbsd-faq=3/3 nginx-download=3/3 xkcd-archive=3/3 elixir-install=3/3 prometheus-download=3/3 ocaml-install=3/3 rosetta-quicksort=3/3 arch-man-grep=3/3 debian-man-tar=3/3 rfc-http-semantics=3/3 nixos-ripgrep=3/3 ocaml-pkg-yojson=3/3 shop-search-jacket=3/3 shop-page2=2/3 shop-sort-price=0/3
|
| 134 |
+
V13S_DONE
|
results/round3/v14s.log
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
== rollout2 cases: 2343
|
| 2 |
+
== build v14s
|
| 3 |
+
operation label counts: {'TYPE_TEXT': 11106, 'CLICK': 16255, 'SELECT': 3198, 'DONE': 15560, 'SCROLL_DOWN': 5480, 'PRESS_ENTER': 2496, 'SCROLL_UP': 137}
|
| 4 |
+
train items 75255 (op 54232, target 21023), eval cases 5314, skipped 0, seq len mean 765 max 1024
|
| 5 |
+
== train v14s (1 epochs from v13s)
|
| 6 |
+
=== epoch 1/1 avg loss 0.9916 2721s
|
| 7 |
+
saved finetune/out/laya-browser-v14s
|
| 8 |
+
== calibrate
|
| 9 |
+
n=4957 acc=0.636 T=1: nll 3.337 mean conf 0.868 | T=5.03: nll 1.398 mean conf 0.647
|
| 10 |
+
wrote temperature 5.025579877567767 -> /home/ckl/projects/S/laya/finetune/out/laya-browser-v14s/rl_agent_config.json
|
| 11 |
+
== eval
|
| 12 |
+
/home/ckl/projects/S/laya/finetune/out/laya-browser-v14s/: cases 5314 operation acc 0.724 target top-1 0.575 (n=4602, mean normalized rank 0.298) 19 ms/case
|
| 13 |
+
live CLICK n=1050 op acc 0.96 target top-1 0.85
|
| 14 |
+
live DONE n= 125 op acc 0.87
|
| 15 |
+
live SELECT n= 32 op acc 0.88 target top-1 0.84
|
| 16 |
+
live TYPE_TEXT n= 117 op acc 0.84 target top-1 0.96
|
| 17 |
+
mind2web CLICK n=1084 op acc 0.89 target top-1 0.48
|
| 18 |
+
mind2web SELECT n= 126 op acc 0.52 target top-1 0.33
|
| 19 |
+
mind2web TYPE_TEXT n= 200 op acc 0.76 target top-1 0.84
|
| 20 |
+
nnetnav CLICK n=1386 op acc 0.71 target top-1 0.25
|
| 21 |
+
nnetnav DONE n= 313 op acc 0.31
|
| 22 |
+
nnetnav SCROLL_DOWN n= 224 op acc 0.08 target top-1 0.00
|
| 23 |
+
nnetnav SCROLL_UP n= 50 op acc 0.00 target top-1 0.00
|
| 24 |
+
nnetnav TYPE_TEXT n= 607 op acc 0.55 target top-1 0.88
|
| 25 |
+
== suite A x3 (v14s, chunk 60)
|
| 26 |
+
FAIL wiki-einstein steps= 2 status=done 7.2s https://en.wikipedia.org/wiki/Wikipedia
|
| 27 |
+
PASS wiki-einstein steps= 2 status=done 4.9s https://en.wikipedia.org/wiki/Albert_Einstein
|
| 28 |
+
FAIL wiki-einstein steps= 2 status=done 5.9s https://en.wikipedia.org/wiki/Wikipedia
|
| 29 |
+
PASS wiki-search steps= 2 status=done 5.4s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 30 |
+
PASS wiki-search steps= 2 status=done 5.0s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 31 |
+
PASS wiki-search steps= 2 status=done 4.7s https://en.wikipedia.org/wiki/Python_(programming_language)
|
| 32 |
+
PASS hn-new steps= 1 status=done 3.6s https://news.ycombinator.com/newest
|
| 33 |
+
PASS hn-new steps= 1 status=done 2.5s https://news.ycombinator.com/newest
|
| 34 |
+
PASS hn-new steps= 1 status=done 2.5s https://news.ycombinator.com/newest
|
| 35 |
+
PASS hn-login-page steps= 1 status=done 2.7s https://news.ycombinator.com/login?goto=news
|
| 36 |
+
PASS hn-login-page steps= 1 status=done 2.5s https://news.ycombinator.com/login?goto=news
|
| 37 |
+
PASS hn-login-page steps= 1 status=done 2.4s https://news.ycombinator.com/login?goto=news
|
| 38 |
+
PASS gh-issues steps= 1 status=done 6.8s https://github.com/tile-ai/tilelang/issues
|
| 39 |
+
PASS gh-issues steps= 1 status=done 3.6s https://github.com/tile-ai/tilelang/issues
|
| 40 |
+
PASS gh-issues steps= 1 status=done 3.8s https://github.com/tile-ai/tilelang/issues
|
| 41 |
+
PASS py-downloads steps= 1 status=done 5.2s https://www.python.org/downloads/
|
| 42 |
+
PASS py-downloads steps= 1 status=done 3.6s https://www.python.org/downloads/
|
| 43 |
+
PASS py-downloads steps= 1 status=done 2.6s https://www.python.org/downloads/
|
| 44 |
+
PASS books-travel steps= 1 status=done 2.1s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 45 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 46 |
+
PASS books-travel steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/category/books/travel_2/index.htm
|
| 47 |
+
PASS books-open-book steps= 1 status=done 2.2s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 48 |
+
PASS books-open-book steps= 1 status=done 1.8s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 49 |
+
PASS books-open-book steps= 1 status=done 1.9s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 50 |
+
PASS internet-dropdown steps= 1 status=done 3.4s https://the-internet.herokuapp.com/dropdown
|
| 51 |
+
PASS internet-dropdown steps= 1 status=done 2.1s https://the-internet.herokuapp.com/dropdown
|
| 52 |
+
PASS internet-dropdown steps= 1 status=done 2.2s https://the-internet.herokuapp.com/dropdown
|
| 53 |
+
PASS internet-checkbox steps= 1 status=done 2.6s https://the-internet.herokuapp.com/checkboxes
|
| 54 |
+
PASS internet-checkbox steps= 1 status=done 2.1s https://the-internet.herokuapp.com/checkboxes
|
| 55 |
+
PASS internet-checkbox steps= 1 status=done 2.1s https://the-internet.herokuapp.com/checkboxes
|
| 56 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 57 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 58 |
+
FAIL books-page2 steps= 1 status=done 2.0s https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.h
|
| 59 |
+
PASS quotes-tag-love steps= 1 status=done 3.8s https://quotes.toscrape.com/tag/love/
|
| 60 |
+
PASS quotes-tag-love steps= 1 status=done 3.0s https://quotes.toscrape.com/tag/love/
|
| 61 |
+
PASS quotes-tag-love steps= 1 status=done 3.0s https://quotes.toscrape.com/tag/love/
|
| 62 |
+
PASS hn-past steps= 1 status=done 3.0s https://news.ycombinator.com/front
|
| 63 |
+
PASS hn-past steps= 1 status=done 2.6s https://news.ycombinator.com/front
|
| 64 |
+
PASS hn-past steps= 1 status=done 2.6s https://news.ycombinator.com/front
|
| 65 |
+
PASS web-search steps= 2 status=done 6.7s https://marginalia-search.com/search?query=tilelang+github&sst=SE-1e14
|
| 66 |
+
PASS web-search steps= 2 status=done 4.6s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 67 |
+
PASS web-search steps= 2 status=done 5.2s https://marginalia-search.com/search?query=tilelang+github&profile=cor
|
| 68 |
+
FAIL arxiv-search steps= 4 status=done 6.2s https://arxiv.org/search/
|
| 69 |
+
PASS arxiv-search steps= 8 status=done 3.8s https://arxiv.org/search/?query=flash+attention&searchtype=all&source=
|
| 70 |
+
PASS arxiv-search steps=14 status=done 10.1s https://arxiv.org/search/?query=flash+attention&searchtype=all&abstrac
|
| 71 |
+
FAIL flights steps=20 status=ready 7.1s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 72 |
+
FAIL flights steps=20 status=ready 5.5s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 73 |
+
FAIL flights steps=20 status=ready 5.7s https://www.google.com/travel/flights?tfs=CBwQARoOcgwIAxIIL20vMDRqcGwa
|
| 74 |
+
== 39/48 passed (81%, 3 run(s) per task) | median wall 3.0s
|
| 75 |
+
per task: wiki-einstein=1/3 wiki-search=3/3 hn-new=3/3 hn-login-page=3/3 gh-issues=3/3 py-downloads=3/3 books-travel=3/3 books-open-book=3/3 internet-dropdown=3/3 internet-checkbox=3/3 books-page2=0/3 quotes-tag-love=3/3 hn-past=3/3 web-search=3/3 arxiv-search=2/3 flights=0/3
|
| 76 |
+
== suite B x3 (v14s, chunk 60)
|
| 77 |
+
held-out check: OK, no suite-B domain appears in training data
|
| 78 |
+
PASS sqlite-download steps= 1 status=done 6.4s https://www.sqlite.org/download.html
|
| 79 |
+
PASS sqlite-download steps= 1 status=done 2.0s https://www.sqlite.org/download.html
|
| 80 |
+
PASS sqlite-download steps= 1 status=done 2.0s https://www.sqlite.org/download.html
|
| 81 |
+
PASS haskell-downloads steps= 1 status=done 3.5s https://www.haskell.org/downloads/
|
| 82 |
+
PASS haskell-downloads steps= 1 status=done 2.1s https://www.haskell.org/downloads/
|
| 83 |
+
PASS haskell-downloads steps= 1 status=done 2.2s https://www.haskell.org/downloads/
|
| 84 |
+
PASS zig-download steps= 1 status=done 5.9s https://ziglang.org/download/
|
| 85 |
+
PASS zig-download steps= 1 status=done 2.0s https://ziglang.org/download/
|
| 86 |
+
PASS zig-download steps= 1 status=done 2.2s https://ziglang.org/download/
|
| 87 |
+
PASS openbsd-faq steps= 1 status=done 2.0s https://www.openbsd.org/faq/index.html
|
| 88 |
+
PASS openbsd-faq steps= 1 status=done 2.0s https://www.openbsd.org/faq/index.html
|
| 89 |
+
PASS openbsd-faq steps= 1 status=done 2.0s https://www.openbsd.org/faq/index.html
|
| 90 |
+
PASS nginx-download steps= 1 status=done 2.2s https://nginx.org/en/download.html
|
| 91 |
+
PASS nginx-download steps= 1 status=done 1.8s https://nginx.org/en/download.html
|
| 92 |
+
PASS nginx-download steps= 1 status=done 1.9s https://nginx.org/en/download.html
|
| 93 |
+
PASS xkcd-archive steps= 1 status=done 7.5s https://xkcd.com/archive/
|
| 94 |
+
PASS xkcd-archive steps= 1 status=done 4.6s https://xkcd.com/archive/
|
| 95 |
+
PASS xkcd-archive steps= 1 status=done 4.0s https://xkcd.com/archive/
|
| 96 |
+
PASS elixir-install steps= 1 status=done 4.4s https://elixir-lang.org/install/
|
| 97 |
+
PASS elixir-install steps= 1 status=done 2.2s https://elixir-lang.org/install/
|
| 98 |
+
PASS elixir-install steps= 1 status=done 2.0s https://elixir-lang.org/install/
|
| 99 |
+
PASS prometheus-download steps= 1 status=done 9.3s https://prometheus.io/download/
|
| 100 |
+
PASS prometheus-download steps= 1 status=done 3.2s https://prometheus.io/download/
|
| 101 |
+
PASS prometheus-download steps= 1 status=done 3.0s https://prometheus.io/download/
|
| 102 |
+
PASS ocaml-install steps= 2 status=done 4.9s https://ocaml.org/docs/installing-ocaml
|
| 103 |
+
PASS ocaml-install steps= 2 status=done 4.1s https://ocaml.org/docs/installing-ocaml
|
| 104 |
+
PASS ocaml-install steps= 2 status=done 4.1s https://ocaml.org/docs/installing-ocaml
|
| 105 |
+
PASS rosetta-quicksort steps= 2 status=done 4.0s https://rosettacode.org/wiki/Quicksort
|
| 106 |
+
PASS rosetta-quicksort steps= 2 status=done 2.7s https://rosettacode.org/wiki/Quicksort
|
| 107 |
+
PASS rosetta-quicksort steps= 2 status=done 2.7s https://rosettacode.org/wiki/Sorting_algorithms/Quicksort
|
| 108 |
+
PASS arch-man-grep steps= 2 status=done 4.0s https://man.archlinux.org/man/grep.1
|
| 109 |
+
PASS arch-man-grep steps= 2 status=done 2.6s https://man.archlinux.org/man/grep.1
|
| 110 |
+
PASS arch-man-grep steps= 2 status=done 2.6s https://man.archlinux.org/man/grep.1
|
| 111 |
+
PASS debian-man-tar steps= 2 status=done 5.1s https://manpages.debian.org/trixie/tar/tar.1.en.html
|
| 112 |
+
PASS debian-man-tar steps= 2 status=done 2.1s https://manpages.debian.org/trixie/tar/tar.1.en.html
|
| 113 |
+
PASS debian-man-tar steps= 2 status=done 1.9s https://manpages.debian.org/trixie/tar/tar.1.en.html
|
| 114 |
+
PASS rfc-http-semantics steps= 2 status=done 5.7s https://www.rfc-editor.org/search/?q=HTTP+semantics
|
| 115 |
+
PASS rfc-http-semantics steps= 2 status=done 3.7s https://www.rfc-editor.org/search/?q=HTTP+semantics
|
| 116 |
+
PASS rfc-http-semantics steps= 2 status=done 3.1s https://www.rfc-editor.org/search/?q=HTTP+semantics
|
| 117 |
+
PASS nixos-ripgrep steps= 2 status=done 4.0s https://search.nixos.org/packages?channel=26.05&query=ripgrep
|
| 118 |
+
PASS nixos-ripgrep steps= 2 status=done 2.8s https://search.nixos.org/packages?channel=26.05&query=ripgrep
|
| 119 |
+
PASS nixos-ripgrep steps= 2 status=done 2.8s https://search.nixos.org/packages?channel=26.05&query=ripgrep
|
| 120 |
+
PASS ocaml-pkg-yojson steps= 2 status=done 3.7s https://ocaml.org/packages/search?q=yojson
|
| 121 |
+
PASS ocaml-pkg-yojson steps= 2 status=done 2.6s https://ocaml.org/packages/search?q=yojson
|
| 122 |
+
PASS ocaml-pkg-yojson steps= 2 status=done 2.8s https://ocaml.org/packages/search?q=yojson
|
| 123 |
+
PASS shop-search-jacket steps= 2 status=done 5.2s https://www.scrapingcourse.com/ecommerce/?s=jacket&post_type=product
|
| 124 |
+
PASS shop-search-jacket steps= 2 status=done 2.9s https://www.scrapingcourse.com/ecommerce/?s=jacket&post_type=product
|
| 125 |
+
PASS shop-search-jacket steps= 2 status=done 2.9s https://www.scrapingcourse.com/ecommerce/?s=jacket&post_type=product
|
| 126 |
+
PASS shop-page2 steps= 1 status=done 3.2s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 127 |
+
PASS shop-page2 steps= 1 status=done 3.6s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 128 |
+
PASS shop-page2 steps= 1 status=done 3.5s https://www.scrapingcourse.com/ecommerce/page/2/
|
| 129 |
+
PASS shop-sort-price steps= 1 status=done 3.9s https://www.scrapingcourse.com/ecommerce/?orderby=price
|
| 130 |
+
PASS shop-sort-price steps= 1 status=done 3.3s https://www.scrapingcourse.com/ecommerce/?orderby=price
|
| 131 |
+
PASS shop-sort-price steps= 1 status=done 3.4s https://www.scrapingcourse.com/ecommerce/?orderby=price
|
| 132 |
+
== 54/54 passed (100%, 3 run(s) per task) | median wall 3.1s
|
| 133 |
+
per task: sqlite-download=3/3 haskell-downloads=3/3 zig-download=3/3 openbsd-faq=3/3 nginx-download=3/3 xkcd-archive=3/3 elixir-install=3/3 prometheus-download=3/3 ocaml-install=3/3 rosetta-quicksort=3/3 arch-man-grep=3/3 debian-man-tar=3/3 rfc-http-semantics=3/3 nixos-ripgrep=3/3 ocaml-pkg-yojson=3/3 shop-search-jacket=3/3 shop-page2=3/3 shop-sort-price=3/3
|
| 134 |
+
V14S_DONE
|
v14s/encoder/config.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"architectures": [
|
| 3 |
+
"ModernBertForMaskedLM"
|
| 4 |
+
],
|
| 5 |
+
"attention_bias": false,
|
| 6 |
+
"attention_dropout": 0.0,
|
| 7 |
+
"bos_token_id": 2,
|
| 8 |
+
"classifier_activation": "gelu",
|
| 9 |
+
"classifier_bias": false,
|
| 10 |
+
"classifier_dropout": 0.0,
|
| 11 |
+
"classifier_pooling": "mean",
|
| 12 |
+
"cls_token_id": 1,
|
| 13 |
+
"decoder_bias": true,
|
| 14 |
+
"deterministic_flash_attn": false,
|
| 15 |
+
"dtype": "float32",
|
| 16 |
+
"embedding_dropout": 0.0,
|
| 17 |
+
"eos_token_id": 1,
|
| 18 |
+
"global_attn_every_n_layers": 3,
|
| 19 |
+
"gradient_checkpointing": false,
|
| 20 |
+
"hidden_activation": "gelu",
|
| 21 |
+
"hidden_size": 768,
|
| 22 |
+
"initializer_cutoff_factor": 2.0,
|
| 23 |
+
"initializer_range": 0.02,
|
| 24 |
+
"intermediate_size": 1152,
|
| 25 |
+
"layer_norm_eps": 1e-05,
|
| 26 |
+
"layer_types": [
|
| 27 |
+
"full_attention",
|
| 28 |
+
"sliding_attention",
|
| 29 |
+
"sliding_attention",
|
| 30 |
+
"full_attention",
|
| 31 |
+
"sliding_attention",
|
| 32 |
+
"sliding_attention",
|
| 33 |
+
"full_attention",
|
| 34 |
+
"sliding_attention",
|
| 35 |
+
"sliding_attention",
|
| 36 |
+
"full_attention",
|
| 37 |
+
"sliding_attention",
|
| 38 |
+
"sliding_attention",
|
| 39 |
+
"full_attention",
|
| 40 |
+
"sliding_attention",
|
| 41 |
+
"sliding_attention",
|
| 42 |
+
"full_attention",
|
| 43 |
+
"sliding_attention",
|
| 44 |
+
"sliding_attention",
|
| 45 |
+
"full_attention",
|
| 46 |
+
"sliding_attention",
|
| 47 |
+
"sliding_attention",
|
| 48 |
+
"full_attention"
|
| 49 |
+
],
|
| 50 |
+
"local_attention": 128,
|
| 51 |
+
"mask_token_id": 4,
|
| 52 |
+
"max_position_embeddings": 8192,
|
| 53 |
+
"mlp_bias": false,
|
| 54 |
+
"mlp_dropout": 0.0,
|
| 55 |
+
"model_type": "modernbert",
|
| 56 |
+
"norm_bias": false,
|
| 57 |
+
"norm_eps": 1e-05,
|
| 58 |
+
"num_attention_heads": 12,
|
| 59 |
+
"num_hidden_layers": 22,
|
| 60 |
+
"pad_token_id": 0,
|
| 61 |
+
"position_embedding_type": "sans_pos",
|
| 62 |
+
"repad_logits_with_grad": false,
|
| 63 |
+
"rope_parameters": {
|
| 64 |
+
"full_attention": {
|
| 65 |
+
"rope_theta": 160000,
|
| 66 |
+
"rope_type": "default"
|
| 67 |
+
},
|
| 68 |
+
"sliding_attention": {
|
| 69 |
+
"rope_theta": 160000,
|
| 70 |
+
"rope_type": "default"
|
| 71 |
+
}
|
| 72 |
+
},
|
| 73 |
+
"sep_token_id": 1,
|
| 74 |
+
"sparse_pred_ignore_index": -100,
|
| 75 |
+
"sparse_prediction": false,
|
| 76 |
+
"tie_word_embeddings": true,
|
| 77 |
+
"transformers_version": "5.17.0",
|
| 78 |
+
"vocab_size": 256000
|
| 79 |
+
}
|
v14s/model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c4e8b144c47e7fa97b128b4447e29cb0540c156fa50b5958200bb15b6a9c1801
|
| 3 |
+
size 643835524
|