oneshotlm
Compare all models on this prompt →

Force-directed graph · qwen3.8-max

Using the pre-provided d3.min.js (global d3), render an interactive force-directed graph of about 40 nodes in several clusters with draggable nodes, hover highlighting of neighbors, and zoom/pan. Define the sample nodes and links inline.

⛨ sandboxed Open in new tab ↗
transcript · 8 messages
user

Using the pre-provided d3.min.js (global d3), render an interactive force-directed graph of about 40 nodes in several clusters with draggable nodes, hover highlighting of neighbors, and zoom/pan. Define the sample nodes and links inline.

assistant
thinking
Write a self-contained index.html containing a force graph of about 40 nodes divided into clusters. Include drag, hover highlighting, and zoom/pan.
bash {"command":"ls /tmp/ws"}
toolResult

d3.min.js

assistant
thinking
Write index.html. Generate about 40 nodes inline (as literal data, but the spec says to define the sample nodes and links inline — can programmatically define clusters, but keep them as inline data. A generator function inside the script also counts as inline, but literal arrays are safer. Define clusters with names, and generate nodes/links with a seeded deterministic loop — that would still be "inline." But to be safe, write out literal data: 4 clusters of 10 nodes each, with a link array connecting them. Too much typing; a small generator with fixed cluster assignments would be fine and self-contained. Do it as a mix: literal cluster definitions, generate nodes per cluster, and links: a hub-and-spoke structure + extra links within a cluster + bridges between clusters. Deterministic (seeded RNG, or fixed pattern). That's clean enough.
write /tmp/ws/index.html (8617 bytes)
toolResult

Successfully wrote 8617 bytes to /tmp/ws/index.html

assistant
thinking
If possible, verify quickly that d3.min.js exists and do a syntax check on the script portion. Also verify that the data generation is correct (e.g., the link index range). addLink(hub + i, hub + 1 + floor(rand*i)) — for i>=1, 1+floor(rand*i) is in the range 1..i, so hub+1..hub+i, but since we return if a===b, self-references are already handled by the guard. No problem.

Simple sanity check on the node count / links using node? d3 is browser-only. Could also just extract the data generation logic and test it with node. Quick check:
bash {"command":"cd /tmp/ws && node -e \"\nlet seed=42;\nfunction rand(){seed|=0;seed=(seed+0x6D2B79F5)|0;let t=Math.imul(seed^(seed>>>15),1|seed
toolResult

nodes: 40 links: 61 all links valid -rw-r--r--. 1 node node 8617 Aug 3 23:54 index.html

assistant
thinking
Confirmed: 40 nodes, 61 valid links. Done.

Done. `/tmp/ws/index.html` is a single self-contained file (inline `<style>` + `<script>`) that loads the local `d3.min.js` via a plain script tag — no external resources. **What it contains:** - **Sample data defined inline** — 40 nodes in 4 named clusters (Core, Analytics, Storage, Edge), each cluster generated as a hub-and-spoke structure with random chords, plus 12 bridge links between clusters (61 links total, verified valid with no self-loops or out-of-range indices). A seeded RNG keeps the data deterministic. - **Force-directed layout** — `forceLink`, `forceManyBody`, collision, and per-cluster `forceX`/`forceY` anchors arrange the clusters spatially; hub nodes are drawn larger. - **Draggable nodes** — `d3.drag` pins the node under the cursor and reheats the simulation while dragging. - **Hover highlighting** — hovering a node dims everything else, highlights the node + its neighbors and connecting edges in gold, and shows a tooltip with the node's name, cluster, and connection count. - **Zoom/pan** — `d3.zoom` on the SVG (scroll to zoom 0.25×–6×, drag background to pan), with a small help panel explaining the interactions.

TAKE IT TO CODE

A single self-contained HTML file — copy it and open in any browser, or reuse the prompt with your own pi-agent run.

RUN

modelqwen3.8-max
vendorQwen
harnesspi-agent
generated2026-08-03

EVALUATION

3/5 working

Interactive node-link graph visualization; drag pans and wheel zooms, but keyboard input has no effect.

Vision grade · anthropic/claude-sonnet-5

MEASUREMENTS

Raw readings from the capture, not a verdict — the grade above is the only judgement. Percentages are how much of the screen changed; the measure under-reports sparse motion on a dark background.

idle motion0.3%
on click0.0%
on drag4.8%
on wheel3.3%
on enter + space0.0%
on arrow keys0.0%
on w/a/s/d0.0%
frame spread14.1 / 255
console errors0
js errors none

METRICS

runtime78.8s
tokens in14k
tokens out4.2k
cached7.3k
cost / run$0.0407