Zhongyang Li Claude Opus 4.7 commited on
Commit
a9141e8
·
1 Parent(s): 18d2106

ui: remove walkthrough section per user request

Browse files

The 'A real Mind2Web2 research run' accordion (UI block, WALKTHROUGH_HTML
constant, and all .walkthrough CSS) has been removed. No behavior change to
the demo itself.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

Files changed (1) hide show
  1. app.py +0 -465
app.py CHANGED
@@ -1122,241 +1122,6 @@ gradio-app > div {
1122
  line-height: 1.45;
1123
  }
1124
 
1125
- /* ────────────────────────────────────────────────────────────────────────
1126
- Walkthrough: a curated trace from one real Mind2Web 2 task. Shown inside
1127
- a collapsed Accordion below the main demo so the default view is
1128
- unchanged; expanded view illustrates the 5 stages of a research run:
1129
- Question → think+tool×N → context-management → think+tool×N → answer.
1130
- ──────────────────────────────────────────────────────────────────────── */
1131
- .walkthrough { font-size: 0.9rem; color: var(--q-text); position: relative; }
1132
- .walkthrough .wt-intro { color: var(--q-muted); margin: 0 0 14px; line-height: 1.55; }
1133
-
1134
- /* Sticky "live state" bar at top of the walkthrough — updates as the user
1135
- scrolls past each step, simulating the agent's progress like a replay. */
1136
- .walkthrough .wt-progress {
1137
- position: sticky;
1138
- top: 0;
1139
- z-index: 5;
1140
- display: flex;
1141
- flex-wrap: wrap;
1142
- align-items: center;
1143
- gap: 14px;
1144
- padding: 10px 14px;
1145
- margin: 0 0 12px;
1146
- background: var(--q-paper);
1147
- border: 1px solid var(--q-line-strong);
1148
- border-radius: 12px;
1149
- box-shadow: 0 2px 10px rgba(15,23,42,0.05);
1150
- backdrop-filter: saturate(180%) blur(6px);
1151
- -webkit-backdrop-filter: saturate(180%) blur(6px);
1152
- }
1153
- .walkthrough .wt-progress-phase {
1154
- font-size: 0.74rem;
1155
- font-weight: 800;
1156
- letter-spacing: 0.1em;
1157
- text-transform: uppercase;
1158
- color: var(--q-accent);
1159
- padding: 3px 10px;
1160
- background: var(--q-accent-soft);
1161
- border-radius: 999px;
1162
- transition: background 300ms ease, color 300ms ease;
1163
- }
1164
- .walkthrough .wt-progress-meters {
1165
- display: flex;
1166
- align-items: center;
1167
- gap: 14px;
1168
- font-size: 0.76rem;
1169
- color: var(--q-muted);
1170
- flex: 1 1 auto;
1171
- flex-wrap: wrap;
1172
- }
1173
- .walkthrough .wt-progress-meters strong {
1174
- color: var(--q-text);
1175
- font-weight: 700;
1176
- font-variant-numeric: tabular-nums;
1177
- transition: color 200ms ease;
1178
- }
1179
- .walkthrough .wt-tokens-bar {
1180
- position: relative;
1181
- display: inline-block;
1182
- vertical-align: middle;
1183
- width: 90px;
1184
- height: 6px;
1185
- background: var(--q-surface-alt);
1186
- border-radius: 999px;
1187
- overflow: hidden;
1188
- margin-left: 6px;
1189
- }
1190
- .walkthrough .wt-tokens-fill {
1191
- position: absolute;
1192
- inset: 0 auto 0 0;
1193
- width: 0%;
1194
- background: linear-gradient(90deg, #3B82F6 0%, var(--q-accent) 70%, #DC2626 100%);
1195
- transition: width 700ms cubic-bezier(.4,0,.2,1);
1196
- }
1197
- .walkthrough .wt-tokens-fill.dropped {
1198
- /* Visual flash when the condenser drops the token count */
1199
- background: linear-gradient(90deg, #0B9E8A 0%, #0B9E8A 100%);
1200
- }
1201
-
1202
- /* Each step card transitions opacity / lift as it becomes active. */
1203
- .walkthrough .wt-block {
1204
- opacity: 0.45;
1205
- transform: translateY(4px);
1206
- transition: opacity 400ms ease, transform 400ms ease, box-shadow 400ms ease, border-color 300ms ease;
1207
- }
1208
- .walkthrough .wt-block.wt-active {
1209
- opacity: 1;
1210
- transform: translateY(0);
1211
- box-shadow: 0 4px 18px rgba(190,91,43,0.10);
1212
- border-color: var(--q-accent-line, var(--q-accent));
1213
- }
1214
- .walkthrough .wt-block.wt-past { opacity: 0.55; }
1215
- .walkthrough .wt-block.wt-condenser.wt-active {
1216
- /* extra emphasis when condenser step is the active one */
1217
- box-shadow: 0 6px 22px rgba(190,91,43,0.18);
1218
- }
1219
- @media (prefers-reduced-motion: reduce) {
1220
- .walkthrough .wt-block, .walkthrough .wt-tokens-fill, .walkthrough .wt-progress-phase, .walkthrough .wt-progress-meters strong {
1221
- transition: none !important;
1222
- }
1223
- }
1224
- .walkthrough .wt-block {
1225
- background: var(--q-paper);
1226
- border: 1px solid var(--q-line);
1227
- border-radius: 12px;
1228
- padding: 14px 16px;
1229
- margin: 0 0 10px;
1230
- }
1231
- .walkthrough .wt-phase-tag {
1232
- font-size: 0.72rem;
1233
- font-weight: 800;
1234
- letter-spacing: 0.12em;
1235
- text-transform: uppercase;
1236
- color: var(--q-accent);
1237
- margin: 0 0 10px;
1238
- display: flex;
1239
- align-items: baseline;
1240
- gap: 10px;
1241
- flex-wrap: wrap;
1242
- }
1243
- .walkthrough .wt-rounds {
1244
- font-size: 0.68rem;
1245
- font-weight: 600;
1246
- letter-spacing: 0.04em;
1247
- text-transform: none;
1248
- color: var(--q-muted);
1249
- }
1250
- .walkthrough .wt-question blockquote {
1251
- margin: 0;
1252
- font-family: "Source Serif 4", "Source Serif Pro", ui-serif, Georgia, serif;
1253
- font-size: 0.92rem;
1254
- line-height: 1.55;
1255
- color: var(--q-text);
1256
- border-left: 3px solid var(--q-accent-line, var(--q-accent));
1257
- padding: 2px 0 2px 12px;
1258
- }
1259
- .walkthrough .wt-stats {
1260
- font-size: 0.82rem;
1261
- color: var(--q-muted);
1262
- line-height: 1.55;
1263
- margin: 4px 0;
1264
- }
1265
- .walkthrough .wt-stats code { padding: 1px 5px; background: var(--q-surface-alt); border-radius: 4px; font-size: 0.8em; }
1266
- .walkthrough .wt-turn {
1267
- background: var(--q-surface-alt);
1268
- border-radius: 8px;
1269
- padding: 10px 12px;
1270
- margin: 10px 0 0;
1271
- }
1272
- .walkthrough .wt-turn-label {
1273
- display: inline-block;
1274
- font-size: 0.66rem;
1275
- font-weight: 800;
1276
- letter-spacing: 0.1em;
1277
- text-transform: uppercase;
1278
- color: var(--q-muted);
1279
- margin-bottom: 8px;
1280
- }
1281
- .walkthrough .wt-step { margin: 6px 0; display: flex; gap: 10px; align-items: flex-start; flex-wrap: wrap; }
1282
- .walkthrough .wt-step-tag {
1283
- font-size: 0.72rem;
1284
- font-weight: 700;
1285
- color: var(--q-accent);
1286
- flex: 0 0 76px;
1287
- padding-top: 2px;
1288
- }
1289
- .walkthrough .wt-step-body { flex: 1 1 0; min-width: 0; font-size: 0.85rem; line-height: 1.55; }
1290
- .walkthrough .wt-step pre {
1291
- margin: 0;
1292
- padding: 8px 10px;
1293
- background: #0D1117;
1294
- color: #E6EDF3;
1295
- border-radius: 6px;
1296
- font-size: 0.76rem;
1297
- line-height: 1.5;
1298
- overflow-x: auto;
1299
- white-space: pre;
1300
- }
1301
- .walkthrough .wt-ellipsis {
1302
- color: var(--q-muted);
1303
- font-style: italic;
1304
- font-size: 0.8rem;
1305
- padding: 8px 4px 0 8px;
1306
- border-left: 2px dotted var(--q-line-strong);
1307
- margin-left: 8px;
1308
- }
1309
- .walkthrough .wt-condenser {
1310
- border-color: var(--q-accent-line, var(--q-accent));
1311
- background: var(--q-accent-soft);
1312
- }
1313
- .walkthrough .wt-condenser details { margin: 8px 0 0; }
1314
- .walkthrough .wt-condenser summary {
1315
- cursor: pointer;
1316
- color: var(--q-accent);
1317
- font-size: 0.78rem;
1318
- font-weight: 600;
1319
- user-select: none;
1320
- }
1321
- .walkthrough .wt-condenser details pre {
1322
- margin: 8px 0 0;
1323
- padding: 10px;
1324
- background: #0D1117;
1325
- color: #E6EDF3;
1326
- border-radius: 6px;
1327
- font-size: 0.75rem;
1328
- line-height: 1.5;
1329
- overflow-x: auto;
1330
- }
1331
- .walkthrough .wt-effect {
1332
- margin-top: 10px;
1333
- padding-top: 10px;
1334
- border-top: 1px dashed var(--q-line-strong);
1335
- font-size: 0.82rem;
1336
- color: var(--q-text);
1337
- }
1338
- .walkthrough .wt-table-wrap { overflow-x: auto; margin-top: 10px; }
1339
- .walkthrough .wt-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; }
1340
- .walkthrough .wt-table th, .walkthrough .wt-table td {
1341
- padding: 8px 10px;
1342
- border-bottom: 1px solid var(--q-line);
1343
- text-align: left;
1344
- vertical-align: top;
1345
- }
1346
- .walkthrough .wt-table th {
1347
- background: var(--q-surface-alt);
1348
- font-weight: 700;
1349
- font-size: 0.7rem;
1350
- text-transform: uppercase;
1351
- letter-spacing: 0.06em;
1352
- color: var(--q-muted);
1353
- }
1354
- .walkthrough .wt-table code { padding: 1px 5px; background: var(--q-surface-alt); border-radius: 4px; font-size: 0.78rem; }
1355
- .walkthrough .wt-table a { color: var(--q-accent); text-decoration: none; }
1356
- .walkthrough .wt-table a:hover { text-decoration: underline; }
1357
- @media (max-width: 600px) {
1358
- .walkthrough .wt-step-tag { flex-basis: 100%; }
1359
- }
1360
  .memory-help {
1361
  color: var(--q-muted);
1362
  font-size: 12.5px;
@@ -2684,227 +2449,6 @@ EXAMPLES = [
2684
  ]
2685
 
2686
 
2687
- # Curated walkthrough of one real Mind2Web 2 task that QUEST-35B ran end-to-end.
2688
- # All numbers, sample turns, the condenser trigger and the trusted-facts table
2689
- # are taken verbatim from inference/.../task_idx_95/iter1 (trajectories.jsonl +
2690
- # condenser_call_1_*.json). Edited only for length.
2691
- WALKTHROUGH_HTML = """
2692
- <div class="walkthrough">
2693
- <p class="wt-intro">
2694
- The trace below is from a single Mind2Web 2 task that QUEST-35B solved end-to-end.
2695
- Scroll through to <strong>watch the agent replay itself</strong> — the sticky bar
2696
- above tracks the live round count, context token usage, and trusted-fact tally
2697
- as each step enters view.
2698
- </p>
2699
-
2700
- <!-- Sticky "live state" replay bar — JS below updates it as each .wt-block scrolls into view. -->
2701
- <div class="wt-progress" aria-live="polite">
2702
- <span class="wt-progress-phase" data-wt-phase>Question</span>
2703
- <span class="wt-progress-meters">
2704
- <span>round&nbsp;<strong data-wt-round>0</strong>/87</span>
2705
- <span>
2706
- <strong data-wt-tokens>0</strong>&nbsp;tokens
2707
- <span class="wt-tokens-bar"><span class="wt-tokens-fill" data-wt-tokens-fill></span></span>
2708
- </span>
2709
- <span><strong data-wt-trusted>0</strong>&nbsp;trusted&nbsp;facts</span>
2710
- </span>
2711
- </div>
2712
-
2713
- <!-- Question -->
2714
- <div class="wt-block wt-question"
2715
- data-wt-phase="Question" data-wt-round="0" data-wt-tokens="0" data-wt-trusted="0">
2716
- <div class="wt-phase-tag">Question</div>
2717
- <blockquote>
2718
- I am interested in Retrieval-Augmented Generation (RAG) and would like to explore
2719
- popular and easy-to-use repositories on GitHub. Please identify the 10 most-starred
2720
- repositories listed under the GitHub topic <em>"retrieval-augmented-generation"</em>.
2721
- For each repository, please provide its name, a direct link to its GitHub page, and
2722
- indicate whether its README explicitly states that it can be installed using a single
2723
- <code>pip install &lt;package-name&gt;</code> command (without additional steps). If it
2724
- does, please also provide a link to its PyPI page; if not, explicitly note that this
2725
- installation method isn't mentioned.
2726
- </blockquote>
2727
- </div>
2728
-
2729
- <!-- Phase 1 -->
2730
- <div class="wt-block"
2731
- data-wt-phase="Phase 1 · Exploration" data-wt-round="62" data-wt-tokens="80824" data-wt-trusted="0">
2732
- <div class="wt-phase-tag">Phase 1 · Exploration <span class="wt-rounds">rounds 1 → 62</span></div>
2733
- <div class="wt-stats">
2734
- 🧠 think + 🔧 tool × <strong>62 turns</strong> &nbsp;·&nbsp;
2735
- 22 visits + 2 searches &nbsp;·&nbsp;
2736
- context grew to <strong>80,824 tokens</strong> / 122 messages
2737
- </div>
2738
-
2739
- <div class="wt-turn">
2740
- <div class="wt-turn-label">Sample · round 1</div>
2741
- <div class="wt-step">
2742
- <span class="wt-step-tag">🧠 Think</span>
2743
- <div class="wt-step-body">
2744
- "We need to produce a list of the 10 most-starred repositories under GitHub topic
2745
- 'retrieval-augmented-generation' &hellip; standard web search may not know about
2746
- topics; let's try several queries and see what sticks."
2747
- </div>
2748
- </div>
2749
- <div class="wt-step">
2750
- <span class="wt-step-tag">🔧 Tool</span>
2751
- <pre>search([
2752
- "retrieval-augmented-generation github topic",
2753
- "GitHub topic 'retrieval-augmented-generation' popular repos",
2754
- "retrieval augmented generation github repositories star count",
2755
- "retrieval-augmented-generation python library"
2756
- ])</pre>
2757
- </div>
2758
- <div class="wt-step">
2759
- <span class="wt-step-tag">📥 Result</span>
2760
- <div class="wt-step-body">
2761
- 10 hits including the topic page itself
2762
- <code>github.com/topics/retrieval-augmented-generation</code> — the agent now
2763
- has a starting URL to visit and crawl.
2764
- </div>
2765
- </div>
2766
- </div>
2767
-
2768
- <div class="wt-ellipsis">⋮ 61 more think → tool turns: visit the topic page, then each candidate repo, fetch READMEs, check PyPI metadata one repo at a time.</div>
2769
- </div>
2770
-
2771
- <!-- Context Management -->
2772
- <div class="wt-block wt-condenser"
2773
- data-wt-phase="🗜️ Context Mgmt" data-wt-round="62" data-wt-tokens="2400" data-wt-trusted="11" data-wt-tokens-drop="1">
2774
- <div class="wt-phase-tag">🗜️ Context Management <span class="wt-rounds">round 62</span></div>
2775
- <div class="wt-stats">trigger: <code>CONTEXT_THRESHOLD</code> (80,000-token budget hit) &nbsp;·&nbsp; condenser LLM fires</div>
2776
- <div class="wt-stats">output state: <strong>11 trusted</strong> facts · 1 uncertain · 0 untrusted &nbsp;·&nbsp; 21 visited sources · 8 search queries (deduplicated)</div>
2777
- <details>
2778
- <summary>example trusted fact (1 of 11)</summary>
2779
- <pre>{
2780
- "id": "T1",
2781
- "claim": "Langchain-Chatchat README includes a pip install line:
2782
- 'pip install langchain-chatchat -U'.",
2783
- "sources": [
2784
- "https://github.com/chatchat-space/Langchain-Chatchat",
2785
- "https://pypi.org/project/langchain-chatchat/"
2786
- ],
2787
- "reason": "README's Installation section shows the pip command;
2788
- PyPI confirms the package."
2789
- }</pre>
2790
- </details>
2791
- <div class="wt-effect">
2792
- → history reset to <code>[system, question, state_summary]</code>
2793
- &nbsp;·&nbsp; <strong>122 messages → 2</strong>
2794
- &nbsp;·&nbsp; ~80k tokens of headroom reclaimed.
2795
- </div>
2796
- </div>
2797
-
2798
- <!-- Phase 2 -->
2799
- <div class="wt-block"
2800
- data-wt-phase="Phase 2 · Synthesize" data-wt-round="87" data-wt-tokens="41721" data-wt-trusted="11">
2801
- <div class="wt-phase-tag">Phase 2 · Resolve &amp; Synthesize <span class="wt-rounds">rounds 63 → 87</span></div>
2802
- <div class="wt-stats">
2803
- model reads <code>prev_state</code>, sees the one <em>uncertain</em> claim
2804
- (PageIndex's pip availability), re-visits the missing PyPI page to settle it,
2805
- and then synthesizes the final markdown table from the 11 trusted facts.
2806
- </div>
2807
- </div>
2808
-
2809
- <!-- Answer -->
2810
- <div class="wt-block"
2811
- data-wt-phase="✍️ Answer" data-wt-round="87" data-wt-tokens="41721" data-wt-trusted="11">
2812
- <div class="wt-phase-tag">✍️ Answer <span class="wt-rounds">round 87</span></div>
2813
- <div class="wt-stats">final structured markdown built directly from the consolidated trusted state</div>
2814
- <div class="wt-table-wrap">
2815
- <table class="wt-table">
2816
- <thead>
2817
- <tr><th>Repository</th><th>One-line <code>pip install</code>?</th><th>PyPI</th></tr>
2818
- </thead>
2819
- <tbody>
2820
- <tr><td><a href="https://github.com/chatchat-space/Langchain-Chatchat" target="_blank" rel="noopener">chatchat-space/Langchain-Chatchat</a></td><td>✅ <code>pip install langchain-chatchat -U</code></td><td><a href="https://pypi.org/project/langchain-chatchat/" target="_blank" rel="noopener">langchain-chatchat</a></td></tr>
2821
- <tr><td><a href="https://github.com/HKUDS/LightRAG" target="_blank" rel="noopener">HKUDS/LightRAG</a></td><td>✅ <code>pip install lightrag-hku</code></td><td><a href="https://pypi.org/project/lightrag-hku/" target="_blank" rel="noopener">lightrag-hku</a></td></tr>
2822
- <tr><td><a href="https://github.com/stanford-oval/storm" target="_blank" rel="noopener">stanford-oval/storm</a></td><td>✅ <code>pip install knowledge-storm</code></td><td><a href="https://pypi.org/project/knowledge-storm/" target="_blank" rel="noopener">knowledge-storm</a></td></tr>
2823
- <tr><td><a href="https://github.com/deepset-ai/haystack" target="_blank" rel="noopener">deepset-ai/haystack</a></td><td>✅ <code>pip install haystack-ai</code></td><td><a href="https://pypi.org/project/haystack-ai/" target="_blank" rel="noopener">haystack-ai</a></td></tr>
2824
- <tr><td><a href="https://github.com/HKUDS/RAG-Anything" target="_blank" rel="noopener">HKUDS/RAG-Anything</a></td><td>✅ <code>pip install raganything</code></td><td><a href="https://pypi.org/project/raganything/" target="_blank" rel="noopener">raganything</a></td></tr>
2825
- <tr><td><a href="https://github.com/memvid/memvid" target="_blank" rel="noopener">memvid/memvid</a></td><td>✅ <code>pip install memvid-sdk</code></td><td><a href="https://pypi.org/project/memvid-sdk/" target="_blank" rel="noopener">memvid-sdk</a></td></tr>
2826
- <tr><td><a href="https://github.com/llmware-ai/llmware" target="_blank" rel="noopener">llmware-ai/llmware</a></td><td>✅ <code>pip3 install llmware</code></td><td><a href="https://pypi.org/project/llmware/" target="_blank" rel="noopener">llmware</a></td></tr>
2827
- <tr><td><a href="https://github.com/VectifyAI/PageIndex" target="_blank" rel="noopener">VectifyAI/PageIndex</a></td><td>❌ not mentioned (README uses <code>pip install -r requirements.txt</code>)</td><td>—</td></tr>
2828
- <tr><td><a href="https://github.com/pathwaycom/llm-app" target="_blank" rel="noopener">pathwaycom/llm-app</a></td><td>❌ not mentioned (Docker / poetry / templates)</td><td>—</td></tr>
2829
- <tr><td><a href="https://github.com/NirDiamant/RAG_Techniques" target="_blank" rel="noopener">NirDiamant/RAG_Techniques</a></td><td>❌ not mentioned (clone + run notebooks)</td><td>—</td></tr>
2830
- </tbody>
2831
- </table>
2832
- </div>
2833
- </div>
2834
- </div>
2835
-
2836
- <script>
2837
- (function () {
2838
- // Wait for the walkthrough markup to actually be in the DOM (it lives inside
2839
- // an Accordion that may render later) and initialise once.
2840
- function init() {
2841
- var roots = document.querySelectorAll('.walkthrough');
2842
- roots.forEach(function (root) {
2843
- if (root.dataset.wtInit) return;
2844
- root.dataset.wtInit = '1';
2845
-
2846
- var blocks = root.querySelectorAll('.wt-block');
2847
- if (!blocks.length) return;
2848
- var TOTAL_BUDGET = 80824; // peak token count, used to scale the bar
2849
- var phaseEl = root.querySelector('[data-wt-phase]');
2850
- var roundEl = root.querySelector('[data-wt-round]');
2851
- var tokensEl = root.querySelector('[data-wt-tokens]');
2852
- var fillEl = root.querySelector('[data-wt-tokens-fill]');
2853
- var trustedEl = root.querySelector('[data-wt-trusted]');
2854
-
2855
- function setActive(idx) {
2856
- blocks.forEach(function (b, i) {
2857
- b.classList.toggle('wt-active', i === idx);
2858
- b.classList.toggle('wt-past', i < idx);
2859
- });
2860
- var b = blocks[idx];
2861
- if (!b) return;
2862
- phaseEl.textContent = b.dataset.wtPhase || '';
2863
- roundEl.textContent = b.dataset.wtRound || '0';
2864
- var t = parseInt(b.dataset.wtTokens || '0', 10);
2865
- tokensEl.textContent = t.toLocaleString();
2866
- fillEl.style.width = Math.min(100, (t / TOTAL_BUDGET) * 100) + '%';
2867
- fillEl.classList.toggle('dropped', b.dataset.wtTokensDrop === '1');
2868
- trustedEl.textContent = b.dataset.wtTrusted || '0';
2869
- }
2870
- setActive(0);
2871
-
2872
- // Determine active block by which one is closest to viewport center.
2873
- function recompute() {
2874
- var bestIdx = 0;
2875
- var bestDist = Infinity;
2876
- var vc = window.innerHeight / 2;
2877
- blocks.forEach(function (b, i) {
2878
- var r = b.getBoundingClientRect();
2879
- if (r.bottom < 0 || r.top > window.innerHeight) return;
2880
- var c = (r.top + r.bottom) / 2;
2881
- var d = Math.abs(c - vc);
2882
- if (d < bestDist) { bestDist = d; bestIdx = i; }
2883
- });
2884
- setActive(bestIdx);
2885
- }
2886
- window.addEventListener('scroll', recompute, { passive: true });
2887
- window.addEventListener('resize', recompute);
2888
- // Recompute when the accordion opens (its children become visible).
2889
- var io = new IntersectionObserver(function (entries) {
2890
- entries.forEach(function (e) { if (e.isIntersecting) recompute(); });
2891
- }, { threshold: 0.05 });
2892
- blocks.forEach(function (b) { io.observe(b); });
2893
- // First paint after Accordion expand
2894
- setTimeout(recompute, 80);
2895
- });
2896
- }
2897
- // Gradio mounts asynchronously — observe the DOM and (re)init when nodes appear.
2898
- if (document.readyState === 'loading') {
2899
- document.addEventListener('DOMContentLoaded', init);
2900
- } else {
2901
- init();
2902
- }
2903
- new MutationObserver(init).observe(document.body, { childList: true, subtree: true });
2904
- })();
2905
- </script>
2906
- """
2907
-
2908
 
2909
  def _example_label(ex: Dict[str, str]) -> str:
2910
  return f"{ex['icon']} {ex['category']} — {ex['text']}"
@@ -2957,15 +2501,6 @@ with gr.Blocks(
2957
  for ex in EXAMPLES
2958
  ]
2959
 
2960
- # Walkthrough: curated trace from one real Mind2Web 2 run.
2961
- # Sits between Try examples and Output; collapsed by default.
2962
- with gr.Accordion(
2963
- label="A real Mind2Web2 research run",
2964
- open=False,
2965
- elem_classes="walkthrough-acc",
2966
- ):
2967
- gr.HTML(WALKTHROUGH_HTML)
2968
-
2969
  with gr.Group(elem_classes="section-card"):
2970
  gr.HTML(
2971
  '<div class="section-heading section-heading-row">'
 
1122
  line-height: 1.45;
1123
  }
1124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1125
  .memory-help {
1126
  color: var(--q-muted);
1127
  font-size: 12.5px;
 
2449
  ]
2450
 
2451
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2452
 
2453
  def _example_label(ex: Dict[str, str]) -> str:
2454
  return f"{ex['icon']} {ex['category']} — {ex['text']}"
 
2501
  for ex in EXAMPLES
2502
  ]
2503
 
 
 
 
 
 
 
 
 
 
2504
  with gr.Group(elem_classes="section-card"):
2505
  gr.HTML(
2506
  '<div class="section-heading section-heading-row">'