diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2dd2447..f4eee11 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,6 +22,16 @@ jobs: - run: npm ci - run: npm run typecheck - run: npm test + # The npm package ships only dist/, src/, LICENSE and package.json: no + # demo video, voiceover, benchmark data or examples. + - name: Check npm package contents + working-directory: packages/codemode-git + run: | + npm pack --dry-run --json | node -e ' + const files = JSON.parse(require("fs").readFileSync(0, "utf8"))[0].files.map((f) => f.path); + const extra = files.filter((p) => !/^(dist|src)\//.test(p) && !["LICENSE", "package.json", "README.md"].includes(p)); + if (extra.length) { console.error("Unexpected files in the npm package:\n" + extra.join("\n")); process.exit(1); } + console.log(files.length + " files, all expected");' # Builds the example and checks the deploy without credentials. - run: npx cf build --mode production working-directory: examples/agent diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e71ee32..70d44e2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,6 +11,9 @@ permissions: {} jobs: verify: + # Only version releases (v1.2.3) publish; other releases, like the demo + # video's, skip every job. + if: startsWith(github.event.release.tag_name, 'v') runs-on: ubuntu-latest permissions: contents: read diff --git a/DEMO.md b/DEMO.md index f9048d7..4fe21af 100644 --- a/DEMO.md +++ b/DEMO.md @@ -39,10 +39,9 @@ The video is code: [demo/video](demo/video). [transcript.md](demo/video/transcri | 3 | **Every agent starts from zero** | A grid of agents, each writing code that dissolves | The problem | | 4 | **Code Mode** | Before: model ⇄ tools ping-pong. After: one program in an isolate | Brief context; the code is the plan | | 5 | **The gap** | The isolate collapses, and the code falls away | The plan is thrown away | -| 6 | **Phase 1: code memory** | Agents → their own Artifacts repos, with commits stacking up | 1 repo per agent, 1 writer per repo, 0 merges | +| 6 | **Phase 1: code memory** | Agents → their own Artifacts repos, with commits stacking up; then the measured swarm result | 1 repo per agent, 1 writer per repo, 0 merges; 1,000 agents committed at once in 27s with 0 errors | | 7 | **Under the hood** | execution ends → Durable Object SQLite outbox → isomorphic-git → Artifacts | How the write path works | | 8 | **Every attempt, in git** (≥30s) | `git log` of an agent: error, fix, answer | Slot for a VHS recording | -| 9 | **One repo per agent** (≥25s) | 1,000 squares lighting up | Slot for the swarm recording | | 10 | **Phase 2: learning** | michelle's repo → Workers AI → Vectorize → matthew. A provenance arrow back | Retrieval and `Codemode-Examples` | | 11 | **Lava lamp wall** (≥60s) | michelle and matthew lanes: runs ✓/✗ and token bars | Slot for the real `walkthrough.mjs` run | | 12 | **Learning curve** | Median tokens by run position, baseline vs memory | Cold start, then about a third | diff --git a/README.md b/README.md index ff8c63f..d9b6d9e 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/smithclay/codemode-git/tree/main/examples/agent) +[![Watch the 5-minute demo](docs/assets/demo-poster.jpg)](https://github.com/smithclay/codemode-git/releases/download/demo-video/codemode-git-demo.mp4) + **`codemode-git` gives Code Mode agents code memory on Cloudflare Artifacts.** Keep the code, and your Workers get smarter over time. Every [Code Mode](https://www.npmjs.com/package/@cloudflare/codemode) execution becomes a git commit on that agent's own [Cloudflare Artifacts](https://developers.cloudflare.com/artifacts/) repo. Clone it with plain `git` and `git log -p run.js` is the agent's trajectory. @@ -150,12 +152,12 @@ curl -X POST localhost:8787/agents/michelle/ask -d '{"question": "How many lava # {"agent","question","answer","steps","executions","errors","tokens":{"input","output"},"examples":["agent-…@sha"],"commits":[{"sha","intent","status"}],"indexed"} ``` -Pass `"useExamples": false` for a baseline without retrieval. `GET /agents/:name/examples?question=...` shows what `ask` would retrieve, without calling the chat model. +Pass `"useExamples": false` for a baseline without retrieval. Agents share the `lamps` examples scope; pass `"scope": ""` to keep a group of runs separate. `GET /agents/:name/examples?question=...[&scope=...]` shows what `ask` would retrieve, without calling the chat model. -`scripts/walkthrough.mjs` runs the two-agent demo: `michelle` asks how many lamps are flowing, then `matthew` asks how many red lamps are flowing and is shown michelle's run. Between the two it polls until michelle's run is retrievable, because Vectorize metadata filters see new vectors only after ~1–2 minutes (`--wait` caps the wait in seconds, default 180). Agent names get a run-unique prefix, so each rerun uses fresh agents and repos. It prints both answers side by side with executions, steps, tokens, examples and commit shas. +`scripts/walkthrough.mjs` runs the two-agent demo: `michelle` asks how many lamps are flowing, then `matthew` asks how many red lamps are flowing and is shown michelle's run. Between the two it polls until michelle's run is retrievable, because Vectorize metadata filters see new vectors only after ~1–2 minutes (`--wait` caps the wait in seconds, default 180). Agent names and the examples scope are run-unique, so each rerun uses fresh agents and repos, and earlier runs can't crowd out this run's michelle (`--scope lamps` shares memory instead). It prints both answers side by side with executions, steps, tokens, examples and commit shas. ```bash -node examples/agent/scripts/walkthrough.mjs https://codemode-git-example..workers.dev [--prefix demo] [--wait 180] +node examples/agent/scripts/walkthrough.mjs https://codemode-git-example..workers.dev [--prefix demo] [--scope ] [--wait 180] ``` ### Run many agents at once diff --git a/demo/video/README.md b/demo/video/README.md index 58bae3b..3668b71 100644 --- a/demo/video/README.md +++ b/demo/video/README.md @@ -1,6 +1,6 @@ # Demo video -The competition demo, built with [Remotion](https://www.remotion.dev/). The voiceover is generated on Workers AI with Deepgram Aura-2 (`@cf/deepgram/aura-2-en`), and Whisper (`@cf/openai/whisper`) supplies word timings for the captions. The narration is in [transcript.md](transcript.md), one `## ` section per scene. Scene order, diagrams and recording slots are in [src/script.ts](src/script.ts). The run of show it follows is in [DEMO.md](../../DEMO.md). +The competition demo, built with [Remotion](https://www.remotion.dev/). The voiceover is generated on Workers AI with Deepgram Aura-2 (`@cf/deepgram/aura-2-en`, voice `arcas`, uncompressed WAV), and Whisper (`@cf/openai/whisper`) supplies word timings for the captions. The narration is in [transcript.md](transcript.md), one `## ` section per scene. Scene order, diagrams and recording slots are in [src/script.ts](src/script.ts). The run of show it follows is in [DEMO.md](../../DEMO.md). This package sits outside the repo's npm workspaces, so Remotion's headless Chrome doesn't affect CI or the library install. @@ -23,3 +23,5 @@ To skip the local Worker, set `CLOUDFLARE_API_TOKEN` (with Workers AI access) an **Recordings:** a scene shows `public/clips/.mp4` instead of its diagram when the scene id is listed in `public/clips/index.json`. Scenes with `minSeconds` in the script stretch to that length once their recording exists (the git log, the swarm, and the michelle → matthew run). Until then they last only as long as their narration, so there's no silent padding. **Terminal recordings:** `npm run record` records [terminal/new-worker.tape](terminal/new-worker.tape) with [VHS](https://github.com/charmbracelet/vhs): `cf init`, installing Code Mode and codemode-git, the connector and bindings, and `cf deploy --dry-run` (nothing is deployed). [scripts/record.mjs](scripts/record.mjs) then encodes the clip to `public/clips/new-worker.mp4` and lists it in `public/clips/index.json`. VHS's own encoding fails silently with ffmpeg 9, so VHS writes frames and ffmpeg does the encoding. The recording turns off npm's minimum-release-age check for its own shell only, because the `cf init` template pins a `cf` beta that is less than a week old. + +**Publishing:** `npm run publish-video` renders the video, uploads it as `codemode-git-demo.mp4` to the `demo-video` GitHub release (creating it if needed, never marked latest), and refreshes the README poster (`docs/assets/demo-poster.jpg`, from the `Poster` still). The repo README links the poster to that release asset. GitHub only plays videos inline when they're uploaded through its web editor, so the README uses a poster that links to the MP4. diff --git a/demo/video/package.json b/demo/video/package.json index 1451347..0c78bb5 100644 --- a/demo/video/package.json +++ b/demo/video/package.json @@ -9,7 +9,8 @@ "studio": "remotion studio", "render": "remotion render Demo out/demo.mp4", "typecheck": "tsc -p . && tsc -p worker", - "record": "node scripts/record.mjs new-worker" + "record": "node scripts/record.mjs new-worker", + "publish-video": "node scripts/publish-video.mjs" }, "dependencies": { "@remotion/cli": "4.0.532", diff --git a/demo/video/public/clips/index.json b/demo/video/public/clips/index.json index 5d4057a..f75e26a 100644 --- a/demo/video/public/clips/index.json +++ b/demo/video/public/clips/index.json @@ -1,3 +1,5 @@ -[ - "new-worker" -] +{ + "new-worker": 39.2, + "repo": 34.5, + "provenance": 39.8 +} diff --git a/demo/video/public/clips/provenance.mp4 b/demo/video/public/clips/provenance.mp4 new file mode 100644 index 0000000..fdd0a3c Binary files /dev/null and b/demo/video/public/clips/provenance.mp4 differ diff --git a/demo/video/public/clips/repo.mp4 b/demo/video/public/clips/repo.mp4 new file mode 100644 index 0000000..ff765e1 Binary files /dev/null and b/demo/video/public/clips/repo.mp4 differ diff --git a/demo/video/public/voiceover/accuracy.mp3 b/demo/video/public/voiceover/accuracy.mp3 deleted file mode 100644 index 4d6ffd9..0000000 Binary files a/demo/video/public/voiceover/accuracy.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/accuracy.wav b/demo/video/public/voiceover/accuracy.wav new file mode 100644 index 0000000..f67462a Binary files /dev/null and b/demo/video/public/voiceover/accuracy.wav differ diff --git a/demo/video/public/voiceover/close.mp3 b/demo/video/public/voiceover/close.mp3 deleted file mode 100644 index 7dc01c5..0000000 Binary files a/demo/video/public/voiceover/close.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/close.wav b/demo/video/public/voiceover/close.wav new file mode 100644 index 0000000..9063a32 Binary files /dev/null and b/demo/video/public/voiceover/close.wav differ diff --git a/demo/video/public/voiceover/code-memory.mp3 b/demo/video/public/voiceover/code-memory.mp3 deleted file mode 100644 index 3f3de4d..0000000 Binary files a/demo/video/public/voiceover/code-memory.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/code-memory.wav b/demo/video/public/voiceover/code-memory.wav new file mode 100644 index 0000000..f9b8d9c Binary files /dev/null and b/demo/video/public/voiceover/code-memory.wav differ diff --git a/demo/video/public/voiceover/code-mode.mp3 b/demo/video/public/voiceover/code-mode.mp3 deleted file mode 100644 index 3277ab5..0000000 Binary files a/demo/video/public/voiceover/code-mode.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/code-mode.wav b/demo/video/public/voiceover/code-mode.wav new file mode 100644 index 0000000..573b6f1 Binary files /dev/null and b/demo/video/public/voiceover/code-mode.wav differ diff --git a/demo/video/public/voiceover/contagion.mp3 b/demo/video/public/voiceover/contagion.mp3 deleted file mode 100644 index 1186933..0000000 Binary files a/demo/video/public/voiceover/contagion.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/contagion.wav b/demo/video/public/voiceover/contagion.wav new file mode 100644 index 0000000..c187d70 Binary files /dev/null and b/demo/video/public/voiceover/contagion.wav differ diff --git a/demo/video/public/voiceover/credits.mp3 b/demo/video/public/voiceover/credits.mp3 deleted file mode 100644 index 79a01bb..0000000 Binary files a/demo/video/public/voiceover/credits.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/credits.wav b/demo/video/public/voiceover/credits.wav new file mode 100644 index 0000000..dac5f4f Binary files /dev/null and b/demo/video/public/voiceover/credits.wav differ diff --git a/demo/video/public/voiceover/curve.mp3 b/demo/video/public/voiceover/curve.mp3 deleted file mode 100644 index 999baa2..0000000 Binary files a/demo/video/public/voiceover/curve.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/curve.wav b/demo/video/public/voiceover/curve.wav new file mode 100644 index 0000000..4acd79c Binary files /dev/null and b/demo/video/public/voiceover/curve.wav differ diff --git a/demo/video/public/voiceover/gap.mp3 b/demo/video/public/voiceover/gap.mp3 deleted file mode 100644 index 75b9a0a..0000000 Binary files a/demo/video/public/voiceover/gap.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/gap.wav b/demo/video/public/voiceover/gap.wav new file mode 100644 index 0000000..e9edcc7 Binary files /dev/null and b/demo/video/public/voiceover/gap.wav differ diff --git a/demo/video/public/voiceover/hook.mp3 b/demo/video/public/voiceover/hook.mp3 deleted file mode 100644 index 7117c84..0000000 Binary files a/demo/video/public/voiceover/hook.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/hook.wav b/demo/video/public/voiceover/hook.wav new file mode 100644 index 0000000..b696ef5 Binary files /dev/null and b/demo/video/public/voiceover/hook.wav differ diff --git a/demo/video/public/voiceover/manifest.json b/demo/video/public/voiceover/manifest.json index 137daa4..34a2019 100644 --- a/demo/video/public/voiceover/manifest.json +++ b/demo/video/public/voiceover/manifest.json @@ -1,3400 +1,3630 @@ { "thesis": { - "file": "voiceover/thesis.mp3", - "hash": "57cb1c7f56534efa", + "file": "voiceover/thesis.wav", + "hash": "5b4fc05b9f4cb270", "text": "What if Cloudflare Artifacts could make Code Mode in Workers self-improving? Every Code Mode run is a program. Keep every program in Artifacts, and let the next agent learn from it. That's codemode-git.", - "seconds": 14.184, + "seconds": 12.96, "words": [ { - "word": "What", + "word": "One", "start": 0, - "end": 0.25999999046325684 + "end": 0.42 }, { - "word": "if", - "start": 0.25999999046325684, - "end": 0.41999998688697815 + "word": "of", + "start": 0.42, + "end": 0.54 }, { - "word": "CloudFlare", - "start": 0.41999998688697815, - "end": 1.0800000429153442 + "word": "Cloudflare", + "start": 0.54, + "end": 1.04 }, { "word": "artifacts", - "start": 1.0800000429153442, - "end": 1.5 + "start": 1.04, + "end": 1.42 }, { - "word": "could", - "start": 1.5, - "end": 1.899999976158142 + "word": "can", + "start": 1.42, + "end": 1.76 }, { "word": "make", - "start": 1.899999976158142, - "end": 2.0999999046325684 + "start": 1.76, + "end": 1.98 }, { "word": "code", - "start": 2.0999999046325684, - "end": 2.4000000953674316 + "start": 1.98, + "end": 2.42 }, { "word": "mode", - "start": 2.4000000953674316, - "end": 2.7200000286102295 + "start": 2.42, + "end": 2.7 }, { - "word": "in", - "start": 2.7200000286102295, - "end": 3.5 + "word": "and", + "start": 2.7, + "end": 2.94 }, { - "word": "workers'", - "start": 3.5, - "end": 4.21999979019165 + "word": "workers", + "start": 2.94, + "end": 3.3 }, { "word": "self", - "start": 4.21999979019165, - "end": 4.360000133514404 + "start": 3.3, + "end": 3.72 }, { - "word": "-improving?", - "start": 4.360000133514404, - "end": 5.539999961853027 + "word": "-improving.", + "start": 3.72, + "end": 4.86 }, { "word": "Every", - "start": 5.539999961853027, - "end": 5.78000020980835 + "start": 4.92, + "end": 5.2 }, { "word": "code", - "start": 5.78000020980835, - "end": 6.059999942779541 + "start": 5.2, + "end": 5.42 }, { - "word": "mode", - "start": 6.059999942779541, - "end": 6.300000190734863 + "word": "moving", + "start": 5.42, + "end": 5.62 }, { - "word": "run", - "start": 6.300000190734863, - "end": 6.539999961853027 + "word": "on", + "start": 5.62, + "end": 5.88 }, { "word": "is", - "start": 6.539999961853027, - "end": 6.78000020980835 + "start": 5.88, + "end": 6.04 }, { "word": "a", - "start": 6.78000020980835, - "end": 6.860000133514404 + "start": 6.04, + "end": 6.12 }, { "word": "program.", - "start": 6.860000133514404, - "end": 7.840000152587891 + "start": 6.12, + "end": 7.34 }, { "word": "Keep", - "start": 7.840000152587891, - "end": 7.960000038146973 + "start": 7.46, + "end": 7.5 }, { "word": "every", - "start": 7.960000038146973, - "end": 8.319999694824219 + "start": 7.5, + "end": 7.76 }, { "word": "program", - "start": 8.319999694824219, - "end": 8.779999732971191 + "start": 7.76, + "end": 8.14 }, { "word": "in", - "start": 8.779999732971191, - "end": 8.960000038146973 + "start": 8.14, + "end": 8.26 }, { "word": "artifacts", - "start": 8.960000038146973, - "end": 9.399999618530273 + "start": 8.26, + "end": 8.68 }, { "word": "and", - "start": 9.399999618530273, - "end": 10.260000228881836 + "start": 8.68, + "end": 9.48 }, { "word": "let", - "start": 10.260000228881836, - "end": 10.420000076293945 + "start": 9.48, + "end": 9.64 }, { "word": "the", - "start": 10.420000076293945, - "end": 10.579999923706055 + "start": 9.64, + "end": 9.8 }, { "word": "next", - "start": 10.579999923706055, - "end": 10.819999694824219 + "start": 9.8, + "end": 10 }, { "word": "agent", - "start": 10.819999694824219, - "end": 11.260000228881836 + "start": 10, + "end": 10.32 }, { "word": "learn", - "start": 11.260000228881836, - "end": 11.520000457763672 + "start": 10.32, + "end": 10.54 }, { "word": "from", - "start": 11.520000457763672, - "end": 11.779999732971191 + "start": 10.54, + "end": 10.78 }, { "word": "it.", - "start": 11.779999732971191, - "end": 12.460000038146973 + "start": 10.78, + "end": 11.3 }, { "word": "That's", - "start": 12.460000038146973, - "end": 12.899999618530273 + "start": 11.56, + "end": 11.78 }, { "word": "code", - "start": 12.899999618530273, - "end": 13.260000228881836 + "start": 11.78, + "end": 11.96 }, { - "word": "mode", - "start": 13.260000228881836, - "end": 13.640000343322754 + "word": "mode,", + "start": 11.96, + "end": 12.44 }, { - "word": "git.", - "start": 13.640000343322754, - "end": 14.15999984741211 + "word": "get", + "start": 12.44, + "end": 12.74 + }, + { + "word": "it.", + "start": 12.74, + "end": 12.94 } ] }, "hook": { - "file": "voiceover/hook.mp3", - "hash": "4d37c8ff1a40259b", + "file": "voiceover/hook.wav", + "hash": "7f4b59d30128bae8", "text": "We used an open source data analytics benchmark with the same four hundred and fifty tasks. Accuracy went from thirty-two percent to forty-six. On the hardest tasks, from twenty-three to almost thirty-nine. The only thing we added was memory using Artifacts.", - "seconds": 18.048, + "seconds": 14.8, "words": [ { "word": "We", - "start": 0, - "end": 0.23999999463558197 + "start": 0.019999999552965164, + "end": 0.4399999976158142 }, { "word": "used", - "start": 0.23999999463558197, - "end": 0.5799999833106995 + "start": 0.4399999976158142, + "end": 0.6399999856948853 }, { "word": "an", - "start": 0.5799999833106995, - "end": 0.7200000286102295 + "start": 0.6399999856948853, + "end": 0.7400000095367432 }, { "word": "open", - "start": 0.7200000286102295, - "end": 0.9800000190734863 + "start": 0.7400000095367432, + "end": 0.9200000166893005 }, { "word": "source", - "start": 0.9800000190734863, - "end": 1.2999999523162842 + "start": 0.9200000166893005, + "end": 1.2200000286102295 }, { "word": "data", - "start": 1.2999999523162842, + "start": 1.2200000286102295, "end": 1.7400000095367432 }, { "word": "analytics", "start": 1.7400000095367432, - "end": 2.259999990463257 + "end": 2.0999999046325684 }, { "word": "benchmark", - "start": 2.259999990463257, - "end": 2.799999952316284 + "start": 2.0999999046325684, + "end": 2.559999942779541 }, { "word": "with", - "start": 2.799999952316284, - "end": 3.2200000286102295 + "start": 2.559999942779541, + "end": 2.8399999141693115 }, { "word": "the", - "start": 3.2200000286102295, - "end": 3.380000114440918 + "start": 2.8399999141693115, + "end": 2.9800000190734863 }, { "word": "same", - "start": 3.380000114440918, - "end": 3.640000104904175 + "start": 2.9800000190734863, + "end": 3.180000066757202 }, { - "word": "450", - "start": 3.640000104904175, - "end": 4.340000152587891 + "word": "foreign", + "start": 3.180000066757202, + "end": 3.440000057220459 + }, + { + "word": "and", + "start": 3.440000057220459, + "end": 3.619999885559082 + }, + { + "word": "50", + "start": 3.619999885559082, + "end": 3.759999990463257 }, { "word": "tasks.", - "start": 4.340000152587891, - "end": 6.239999771118164 + "start": 3.759999990463257, + "end": 4.840000152587891 }, { - "word": "Accuracy", - "start": 6.239999771118164, - "end": 6.920000076293945 + "word": "Hack", + "start": 4.840000152587891, + "end": 5.119999885559082 }, { - "word": "went", - "start": 6.920000076293945, - "end": 7.159999847412109 + "word": "your", + "start": 5.119999885559082, + "end": 5.239999771118164 + }, + { + "word": "C1", + "start": 5.239999771118164, + "end": 5.599999904632568 }, { "word": "from", - "start": 7.159999847412109, - "end": 7.400000095367432 + "start": 5.599999904632568, + "end": 5.820000171661377 }, { "word": "32", - "start": 7.400000095367432, - "end": 7.860000133514404 + "start": 5.820000171661377, + "end": 6.199999809265137 }, { "word": "%", - "start": 7.860000133514404, - "end": 8.319999694824219 + "start": 6.199999809265137, + "end": 6.619999885559082 }, { "word": "to", - "start": 8.319999694824219, - "end": 8.760000228881836 + "start": 6.619999885559082, + "end": 7.019999980926514 }, { - "word": "46,", - "start": 8.760000228881836, - "end": 10.15999984741211 + "word": "46.", + "start": 7.019999980926514, + "end": 8.359999656677246 }, { - "word": "on", - "start": 10.15999984741211, - "end": 10.420000076293945 + "word": "On", + "start": 8.359999656677246, + "end": 8.460000038146973 }, { "word": "the", - "start": 10.420000076293945, - "end": 10.5600004196167 + "start": 8.460000038146973, + "end": 8.5600004196167 }, { "word": "hardest", - "start": 10.5600004196167, - "end": 10.819999694824219 + "start": 8.5600004196167, + "end": 8.760000228881836 }, { "word": "tasks", - "start": 10.819999694824219, - "end": 11.380000114440918 + "start": 8.760000228881836, + "end": 9.199999809265137 }, { "word": "from", - "start": 11.380000114440918, - "end": 11.960000038146973 + "start": 9.199999809265137, + "end": 9.760000228881836 }, { "word": "23", - "start": 11.960000038146973, - "end": 12.539999961853027 + "start": 9.760000228881836, + "end": 10.319999694824219 }, { "word": "to", - "start": 12.539999961853027, - "end": 13.079999923706055 + "start": 10.319999694824219, + "end": 10.600000381469727 }, { "word": "almost", - "start": 13.079999923706055, - "end": 13.420000076293945 + "start": 10.600000381469727, + "end": 10.84000015258789 }, { - "word": "39.", - "start": 13.420000076293945, - "end": 14.779999732971191 + "word": "39,", + "start": 10.84000015258789, + "end": 12.199999809265137 }, { - "word": "The", - "start": 14.779999732971191, - "end": 14.979999542236328 + "word": "the", + "start": 12.199999809265137, + "end": 12.319999694824219 }, { "word": "only", - "start": 14.979999542236328, - "end": 15.199999809265137 + "start": 12.319999694824219, + "end": 12.4399995803833 }, { "word": "thing", - "start": 15.199999809265137, - "end": 15.4399995803833 + "start": 12.4399995803833, + "end": 12.619999885559082 }, { "word": "we", - "start": 15.4399995803833, - "end": 15.619999885559082 + "start": 12.619999885559082, + "end": 12.800000190734863 }, { "word": "added", - "start": 15.619999885559082, - "end": 15.920000076293945 + "start": 12.800000190734863, + "end": 13 }, { "word": "was", - "start": 15.920000076293945, - "end": 16.280000686645508 + "start": 13, + "end": 13.239999771118164 }, { "word": "memory", - "start": 16.280000686645508, - "end": 16.639999389648438 + "start": 13.239999771118164, + "end": 13.579999923706055 }, { "word": "using", - "start": 16.639999389648438, - "end": 17.100000381469727 + "start": 13.579999923706055, + "end": 13.899999618530273 }, { "word": "artifacts.", - "start": 17.100000381469727, - "end": 18.020000457763672 + "start": 13.899999618530273, + "end": 14.779999732971191 } ] }, "vanish": { - "file": "voiceover/vanish.mp3", - "hash": "a7ee048f6dd2494d", + "file": "voiceover/vanish.wav", + "hash": "d40eecf6dee17e4d", "text": "Today, every Code Mode agent writes code, runs it, gets an answer, and the code is gone. A thousand agents solve similar problems hundreds of times, even if they've seen it before.", - "seconds": 13.848, + "seconds": 10.68, "words": [ { "word": "Today,", - "start": 0, - "end": 1.0399999618530273 + "start": 0.11999999731779099, + "end": 0.8199999928474426 }, { "word": "every", - "start": 1.0399999618530273, - "end": 1.340000033378601 + "start": 0.8199999928474426, + "end": 0.9599999785423279 }, { "word": "code", - "start": 1.340000033378601, - "end": 1.6200000047683716 + "start": 0.9599999785423279, + "end": 1.1799999475479126 }, { "word": "mode", - "start": 1.6200000047683716, - "end": 1.8799999952316284 + "start": 1.1799999475479126, + "end": 1.3600000143051147 }, { "word": "agent", - "start": 1.8799999952316284, - "end": 2.319999933242798 + "start": 1.3600000143051147, + "end": 1.7200000286102295 }, { "word": "writes", - "start": 2.319999933242798, - "end": 2.8399999141693115 + "start": 1.7200000286102295, + "end": 2.059999942779541 }, { "word": "code,", - "start": 2.8399999141693115, - "end": 4.059999942779541 + "start": 2.059999942779541, + "end": 2.8399999141693115 }, { "word": "runs", - "start": 4.059999942779541, - "end": 4.28000020980835 + "start": 2.8399999141693115, + "end": 2.940000057220459 }, { "word": "it,", - "start": 4.28000020980835, - "end": 5.059999942779541 + "start": 2.940000057220459, + "end": 3.4200000762939453 }, { "word": "gets", - "start": 5.059999942779541, - "end": 5.21999979019165 + "start": 3.4200000762939453, + "end": 3.619999885559082 }, { "word": "an", - "start": 5.21999979019165, - "end": 5.5 + "start": 3.619999885559082, + "end": 3.819999933242798 }, { "word": "answer,", - "start": 5.5, - "end": 6.340000152587891 + "start": 3.819999933242798, + "end": 4.480000019073486 }, { "word": "and", - "start": 6.340000152587891, - "end": 6.579999923706055 + "start": 4.480000019073486, + "end": 4.880000114440918 }, { "word": "the", - "start": 6.579999923706055, - "end": 6.679999828338623 + "start": 4.880000114440918, + "end": 4.960000038146973 }, { "word": "code", - "start": 6.679999828338623, - "end": 7 + "start": 4.960000038146973, + "end": 5.139999866485596 }, { "word": "is", - "start": 7, - "end": 7.260000228881836 + "start": 5.139999866485596, + "end": 5.28000020980835 }, { "word": "gone.", - "start": 7.260000228881836, - "end": 8.300000190734863 + "start": 5.28000020980835, + "end": 6.28000020980835 }, { "word": "A", - "start": 8.300000190734863, - "end": 8.380000114440918 + "start": 6.28000020980835, + "end": 6.440000057220459 }, { "word": "thousand", - "start": 8.380000114440918, - "end": 8.760000228881836 + "start": 6.440000057220459, + "end": 6.699999809265137 }, { "word": "agents", - "start": 8.760000228881836, - "end": 9.260000228881836 + "start": 6.699999809265137, + "end": 7 }, { - "word": "saw", - "start": 9.260000228881836, - "end": 9.5600004196167 + "word": "solve", + "start": 7, + "end": 7.260000228881836 }, { "word": "similar", - "start": 9.5600004196167, - "end": 10.020000457763672 + "start": 7.260000228881836, + "end": 7.619999885559082 }, { "word": "problems", - "start": 10.020000457763672, - "end": 10.5600004196167 + "start": 7.619999885559082, + "end": 7.960000038146973 }, { "word": "hundreds", - "start": 10.5600004196167, - "end": 11.0600004196167 + "start": 7.960000038146973, + "end": 8.260000228881836 }, { "word": "of", - "start": 11.0600004196167, - "end": 11.279999732971191 + "start": 8.260000228881836, + "end": 8.4399995803833 }, { "word": "times,", - "start": 11.279999732971191, - "end": 12.260000228881836 + "start": 8.4399995803833, + "end": 9.239999771118164 }, { "word": "even", - "start": 12.260000228881836, - "end": 12.520000457763672 + "start": 9.239999771118164, + "end": 9.460000038146973 }, { "word": "if", - "start": 12.520000457763672, - "end": 12.680000305175781 + "start": 9.460000038146973, + "end": 9.600000381469727 }, { "word": "they've", - "start": 12.680000305175781, - "end": 12.920000076293945 + "start": 9.600000381469727, + "end": 9.779999732971191 }, { "word": "seen", - "start": 12.920000076293945, - "end": 13.100000381469727 + "start": 9.779999732971191, + "end": 9.960000038146973 }, { "word": "it", - "start": 13.100000381469727, - "end": 13.239999771118164 + "start": 9.960000038146973, + "end": 10.039999961853027 }, { "word": "before.", - "start": 13.239999771118164, - "end": 13.819999694824219 + "start": 10.039999961853027, + "end": 10.65999984741211 } ] }, "code-mode": { - "file": "voiceover/code-mode.mp3", - "hash": "6f7bd8bfb0777b37", + "file": "voiceover/code-mode.wav", + "hash": "c1cba662d567421c", "text": "First, let's review Cloudflare's Code Mode. Agents don't call tools one at a time, sending every result back through the model: They write one program against the tools and run it in a fresh Worker isolate. That program is a complete record of how the agent solved the problem.", - "seconds": 18.936, + "seconds": 15.76, "words": [ { "word": "First,", - "start": 0, - "end": 0.9599999785423279 + "start": 0.03999999910593033, + "end": 0.6000000238418579 }, { "word": "let's", - "start": 0.9599999785423279, - "end": 1.4199999570846558 + "start": 0.6000000238418579, + "end": 0.8199999928474426 }, { "word": "review", - "start": 1.4199999570846558, - "end": 1.7599999904632568 + "start": 0.8199999928474426, + "end": 1.059999942779541 }, { - "word": "CloudFlares", - "start": 1.7599999904632568, - "end": 2.4800000190734863 + "word": "CloudFlare's", + "start": 1.059999942779541, + "end": 1.8200000524520874 }, { - "word": "Code", - "start": 2.4800000190734863, - "end": 2.9000000953674316 + "word": "code", + "start": 1.8200000524520874, + "end": 2.0399999618530273 }, { - "word": "Mode.", - "start": 2.9000000953674316, - "end": 4 + "word": "mod.", + "start": 2.0399999618530273, + "end": 3.1600000858306885 }, { "word": "Agents", - "start": 4, - "end": 4.400000095367432 + "start": 3.1600000858306885, + "end": 3.440000057220459 }, { "word": "don't", - "start": 4.400000095367432, - "end": 4.699999809265137 + "start": 3.440000057220459, + "end": 3.6600000858306885 }, { "word": "call", - "start": 4.699999809265137, - "end": 4.860000133514404 + "start": 3.6600000858306885, + "end": 3.819999933242798 }, { "word": "tools", - "start": 4.860000133514404, - "end": 5.21999979019165 + "start": 3.819999933242798, + "end": 4.099999904632568 }, { "word": "one", - "start": 5.21999979019165, - "end": 5.559999942779541 + "start": 4.099999904632568, + "end": 4.400000095367432 }, { "word": "at", - "start": 5.559999942779541, - "end": 5.679999828338623 + "start": 4.400000095367432, + "end": 4.559999942779541 }, { "word": "a", - "start": 5.679999828338623, - "end": 5.820000171661377 + "start": 4.559999942779541, + "end": 4.659999847412109 }, { "word": "time,", - "start": 5.820000171661377, - "end": 6.559999942779541 + "start": 4.659999847412109, + "end": 5.320000171661377 }, { "word": "sending", - "start": 6.559999942779541, - "end": 6.940000057220459 + "start": 5.320000171661377, + "end": 5.619999885559082 }, { "word": "every", - "start": 6.940000057220459, - "end": 7.300000190734863 + "start": 5.619999885559082, + "end": 5.920000076293945 }, { "word": "result", - "start": 7.300000190734863, - "end": 7.639999866485596 + "start": 5.920000076293945, + "end": 6.239999771118164 }, { "word": "back", - "start": 7.639999866485596, - "end": 7.960000038146973 + "start": 6.239999771118164, + "end": 6.519999980926514 }, { "word": "through", - "start": 7.960000038146973, - "end": 8.260000228881836 + "start": 6.519999980926514, + "end": 6.739999771118164 }, { "word": "the", - "start": 8.260000228881836, - "end": 8.399999618530273 + "start": 6.739999771118164, + "end": 6.840000152587891 }, { "word": "model.", - "start": 8.399999618530273, - "end": 9.239999771118164 + "start": 6.840000152587891, + "end": 7.71999979019165 }, { "word": "They", - "start": 9.239999771118164, - "end": 9.479999542236328 + "start": 7.71999979019165, + "end": 8.039999961853027 }, { "word": "write", - "start": 9.479999542236328, - "end": 9.699999809265137 + "start": 8.039999961853027, + "end": 8.15999984741211 }, { "word": "one", - "start": 9.699999809265137, - "end": 10 + "start": 8.15999984741211, + "end": 8.399999618530273 }, { "word": "program", - "start": 10, - "end": 10.479999542236328 + "start": 8.399999618530273, + "end": 8.819999694824219 }, { "word": "against", - "start": 10.479999542236328, - "end": 10.899999618530273 + "start": 8.819999694824219, + "end": 9.140000343322754 }, { "word": "the", - "start": 10.899999618530273, - "end": 11.119999885559082 + "start": 9.140000343322754, + "end": 9.34000015258789 }, { "word": "tools", - "start": 11.119999885559082, - "end": 11.4399995803833 + "start": 9.34000015258789, + "end": 9.640000343322754 }, { "word": "and", - "start": 11.4399995803833, - "end": 12.0600004196167 + "start": 9.640000343322754, + "end": 10.34000015258789 }, { "word": "run", - "start": 12.0600004196167, - "end": 12.279999732971191 + "start": 10.34000015258789, + "end": 10.520000457763672 }, { "word": "it", - "start": 12.279999732971191, - "end": 12.4399995803833 + "start": 10.520000457763672, + "end": 10.640000343322754 }, { "word": "in", - "start": 12.4399995803833, - "end": 12.579999923706055 + "start": 10.640000343322754, + "end": 10.760000228881836 }, { "word": "a", - "start": 12.579999923706055, - "end": 12.680000305175781 + "start": 10.760000228881836, + "end": 10.819999694824219 }, { "word": "fresh", - "start": 12.680000305175781, - "end": 12.979999542236328 + "start": 10.819999694824219, + "end": 11.039999961853027 }, { "word": "worker", - "start": 12.979999542236328, - "end": 13.399999618530273 + "start": 11.039999961853027, + "end": 11.380000114440918 }, { "word": "isolate.", - "start": 13.399999618530273, - "end": 14.680000305175781 + "start": 11.380000114440918, + "end": 12.460000038146973 }, { "word": "That", - "start": 14.680000305175781, - "end": 14.979999542236328 + "start": 12.460000038146973, + "end": 12.760000228881836 }, { "word": "program", - "start": 14.979999542236328, - "end": 15.479999542236328 + "start": 12.760000228881836, + "end": 13.119999885559082 }, { "word": "is", - "start": 15.479999542236328, - "end": 15.739999771118164 + "start": 13.119999885559082, + "end": 13.300000190734863 }, { "word": "a", - "start": 15.739999771118164, - "end": 15.880000114440918 + "start": 13.300000190734863, + "end": 13.359999656677246 }, { "word": "complete", - "start": 15.880000114440918, - "end": 16.219999313354492 + "start": 13.359999656677246, + "end": 13.640000343322754 }, { "word": "record", - "start": 16.219999313354492, - "end": 16.700000762939453 + "start": 13.640000343322754, + "end": 14.020000457763672 }, { "word": "of", - "start": 16.700000762939453, - "end": 16.959999084472656 + "start": 14.020000457763672, + "end": 14.220000267028809 }, { "word": "how", - "start": 16.959999084472656, - "end": 17.15999984741211 + "start": 14.220000267028809, + "end": 14.319999694824219 }, { "word": "the", - "start": 17.15999984741211, - "end": 17.3799991607666 + "start": 14.319999694824219, + "end": 14.4399995803833 }, { - "word": "agent", - "start": 17.3799991607666, - "end": 17.760000228881836 + "word": "agents", + "start": 14.4399995803833, + "end": 14.720000267028809 }, { "word": "solve", - "start": 17.760000228881836, - "end": 18.1200008392334 + "start": 14.720000267028809, + "end": 14.960000038146973 }, { "word": "the", - "start": 18.1200008392334, - "end": 18.3799991607666 + "start": 14.960000038146973, + "end": 15.119999885559082 }, { "word": "problem.", - "start": 18.3799991607666, - "end": 18.899999618530273 + "start": 15.119999885559082, + "end": 15.739999771118164 } ] }, "gap": { - "file": "voiceover/gap.mp3", - "hash": "eef311160da318e7", + "file": "voiceover/gap.wav", + "hash": "26378aa8d8d76f94", "text": "But the isolate is thrown away after every run, and the code goes with it. When similar tasks are given to the agent again, it forgets.", - "seconds": 8.664, + "seconds": 7.4, "words": [ { - "word": "that", - "start": 0, - "end": 0.20000000298023224 + "word": "But", + "start": 0.14000000059604645, + "end": 0.47999998927116394 }, { "word": "the", - "start": 0.20000000298023224, - "end": 0.3799999952316284 + "start": 0.47999998927116394, + "end": 0.6200000047683716 }, { - "word": "isolate", - "start": 0.3799999952316284, - "end": 0.6800000071525574 + "word": "ice", + "start": 0.6200000047683716, + "end": 0.7799999713897705 + }, + { + "word": "-light", + "start": 0.7799999713897705, + "end": 0.9200000166893005 }, { "word": "is", - "start": 0.6800000071525574, - "end": 1.0199999809265137 + "start": 0.9200000166893005, + "end": 1.059999942779541 }, { "word": "thrown", - "start": 1.0199999809265137, + "start": 1.059999942779541, "end": 1.2400000095367432 }, { "word": "away", "start": 1.2400000095367432, - "end": 1.559999942779541 + "end": 1.5399999618530273 }, { "word": "after", - "start": 1.559999942779541, - "end": 1.8799999952316284 + "start": 1.5399999618530273, + "end": 1.8200000524520874 }, { "word": "every", - "start": 1.8799999952316284, - "end": 2.2200000286102295 + "start": 1.8200000524520874, + "end": 2.0799999237060547 }, { - "word": "run", - "start": 2.2200000286102295, - "end": 2.4600000381469727 + "word": "run,", + "start": 2.0799999237060547, + "end": 2.640000104904175 }, { "word": "and", - "start": 2.4600000381469727, - "end": 3.0399999618530273 + "start": 2.640000104904175, + "end": 2.7200000286102295 }, { "word": "the", - "start": 3.0399999618530273, - "end": 3.1600000858306885 + "start": 2.7200000286102295, + "end": 2.859999895095825 }, { - "word": "code", - "start": 3.1600000858306885, - "end": 3.380000114440918 + "word": "cone", + "start": 2.859999895095825, + "end": 2.9600000381469727 }, { "word": "goes", - "start": 3.380000114440918, - "end": 3.640000104904175 + "start": 2.9600000381469727, + "end": 3.240000009536743 }, { "word": "with", - "start": 3.640000104904175, - "end": 3.880000114440918 + "start": 3.240000009536743, + "end": 3.4200000762939453 }, { "word": "it.", - "start": 3.880000114440918, - "end": 4.659999847412109 + "start": 3.4200000762939453, + "end": 4.260000228881836 }, { "word": "When", - "start": 4.659999847412109, - "end": 4.860000133514404 + "start": 4.260000228881836, + "end": 4.519999980926514 }, { - "word": "similar", - "start": 4.860000133514404, - "end": 5.260000228881836 + "word": "some", + "start": 4.519999980926514, + "end": 4.679999828338623 }, { - "word": "tasks", - "start": 5.260000228881836, - "end": 5.639999866485596 + "word": "more", + "start": 4.679999828338623, + "end": 4.860000133514404 + }, + { + "word": "tests", + "start": 4.860000133514404, + "end": 5.039999961853027 }, { "word": "are", - "start": 5.639999866485596, - "end": 5.960000038146973 + "start": 5.039999961853027, + "end": 5.260000228881836 }, { "word": "given", - "start": 5.960000038146973, - "end": 6.199999809265137 + "start": 5.260000228881836, + "end": 5.440000057220459 }, { "word": "to", - "start": 6.199999809265137, - "end": 6.400000095367432 + "start": 5.440000057220459, + "end": 5.619999885559082 }, { "word": "the", - "start": 6.400000095367432, - "end": 6.559999942779541 + "start": 5.619999885559082, + "end": 5.739999771118164 }, { "word": "agent", - "start": 6.559999942779541, - "end": 6.820000171661377 + "start": 5.739999771118164, + "end": 5.920000076293945 }, { "word": "again,", - "start": 6.820000171661377, - "end": 7.760000228881836 + "start": 5.920000076293945, + "end": 6.639999866485596 }, { "word": "it", - "start": 7.760000228881836, - "end": 7.900000095367432 + "start": 6.639999866485596, + "end": 6.699999809265137 }, { "word": "forgets.", - "start": 7.900000095367432, - "end": 8.640000343322754 + "start": 6.699999809265137, + "end": 7.380000114440918 } ] }, "code-memory": { - "file": "voiceover/code-memory.mp3", - "hash": "459162f3101d3c1d", - "text": "So we keep it in a Cloudflare Artifact git repository. Every execution becomes a commit on that agent's own personal repo: the code, every tool call and its result, and the outcome. One repo per agent, and one writer per repo. Nothing to lock, nothing to merge.", - "seconds": 20.424, + "file": "voiceover/code-memory.wav", + "hash": "2769878f960f11f3", + "text": "So we keep it in a Cloudflare Artifact git repository. Every execution becomes a commit on that agent's own personal repo: the code, every tool call and its result, and the outcome. One repo per agent, and one writer per repo. Nothing to lock, nothing to merge. In our test, a thousand agents committed at once: a thousand commits in under thirty seconds, with zero errors.", + "seconds": 25, "words": [ { "word": "So", "start": 0, - "end": 0.36000001430511475 + "end": 0.5600000023841858 }, { "word": "we", - "start": 0.36000001430511475, - "end": 0.5600000023841858 + "start": 0.5600000023841858, + "end": 0.6600000262260437 }, { "word": "keep", - "start": 0.5600000023841858, - "end": 0.7799999713897705 + "start": 0.6600000262260437, + "end": 0.800000011920929 }, { "word": "it", - "start": 0.7799999713897705, - "end": 0.9800000190734863 + "start": 0.800000011920929, + "end": 0.9599999785423279 }, { "word": "in", - "start": 0.9800000190734863, - "end": 1.1799999475479126 + "start": 0.9599999785423279, + "end": 1.059999942779541 }, { "word": "a", - "start": 1.1799999475479126, - "end": 1.3200000524520874 - }, - { - "word": "Cloud", - "start": 1.3200000524520874, - "end": 1.6200000047683716 + "start": 1.059999942779541, + "end": 1.1399999856948853 }, { - "word": "Flare", - "start": 1.6200000047683716, - "end": 2.0799999237060547 + "word": "CloudflareHurt", + "start": 1.1399999856948853, + "end": 1.840000033378601 }, { - "word": "Artifact", - "start": 2.0799999237060547, - "end": 2.799999952316284 + "word": "effect", + "start": 1.840000033378601, + "end": 2.0199999809265137 }, { "word": "Git", - "start": 2.799999952316284, - "end": 3.259999990463257 + "start": 2.0199999809265137, + "end": 2.2799999713897705 }, { "word": "repository.", - "start": 3.259999990463257, - "end": 4.760000228881836 + "start": 2.2799999713897705, + "end": 3.559999942779541 }, { "word": "Every", - "start": 4.760000228881836, - "end": 5.039999961853027 + "start": 3.559999942779541, + "end": 3.880000114440918 }, { "word": "execution", - "start": 5.039999961853027, - "end": 5.71999979019165 + "start": 3.880000114440918, + "end": 4.400000095367432 }, { "word": "becomes", - "start": 5.71999979019165, - "end": 6.159999847412109 + "start": 4.400000095367432, + "end": 4.78000020980835 }, { "word": "a", - "start": 6.159999847412109, - "end": 6.400000095367432 + "start": 4.78000020980835, + "end": 4.940000057220459 }, { "word": "commit", - "start": 6.400000095367432, - "end": 6.699999809265137 + "start": 4.940000057220459, + "end": 5.139999866485596 }, { "word": "on", - "start": 6.699999809265137, - "end": 6.980000019073486 + "start": 5.139999866485596, + "end": 5.300000190734863 }, { "word": "that", - "start": 6.980000019073486, - "end": 7.199999809265137 + "start": 5.300000190734863, + "end": 5.440000057220459 }, { "word": "agent's", - "start": 7.199999809265137, - "end": 7.78000020980835 + "start": 5.440000057220459, + "end": 5.840000152587891 }, { "word": "own", - "start": 7.78000020980835, - "end": 7.960000038146973 + "start": 5.840000152587891, + "end": 5.940000057220459 }, { "word": "personal", - "start": 7.960000038146973, - "end": 8.479999542236328 + "start": 5.940000057220459, + "end": 6.340000152587891 }, { - "word": "repo,", - "start": 8.479999542236328, - "end": 9.319999694824219 + "word": "repo.", + "start": 6.340000152587891, + "end": 7.420000076293945 }, { - "word": "the", - "start": 9.319999694824219, - "end": 9.520000457763672 + "word": "The", + "start": 7.420000076293945, + "end": 7.519999980926514 }, { "word": "code,", - "start": 9.520000457763672, - "end": 10.279999732971191 + "start": 7.519999980926514, + "end": 8.220000267028809 }, { "word": "every", - "start": 10.279999732971191, - "end": 10.65999984741211 + "start": 8.220000267028809, + "end": 8.539999961853027 }, { "word": "tool", - "start": 10.65999984741211, - "end": 10.9399995803833 + "start": 8.539999961853027, + "end": 8.739999771118164 }, { "word": "call,", - "start": 10.9399995803833, - "end": 11.600000381469727 + "start": 8.739999771118164, + "end": 9.65999984741211 }, { "word": "and", - "start": 11.600000381469727, - "end": 11.899999618530273 + "start": 9.65999984741211, + "end": 9.720000267028809 }, { "word": "its", - "start": 11.899999618530273, - "end": 12.119999885559082 + "start": 9.720000267028809, + "end": 9.880000114440918 }, { - "word": "results,", - "start": 12.119999885559082, - "end": 12.880000114440918 + "word": "result,", + "start": 9.880000114440918, + "end": 10.880000114440918 }, { "word": "and", - "start": 12.880000114440918, - "end": 13.220000267028809 + "start": 10.880000114440918, + "end": 11.180000305175781 }, { "word": "the", - "start": 13.220000267028809, - "end": 13.399999618530273 + "start": 11.180000305175781, + "end": 11.300000190734863 }, { "word": "outcome.", - "start": 13.399999618530273, - "end": 14.460000038146973 + "start": 11.300000190734863, + "end": 12.4399995803833 }, { "word": "One", - "start": 14.460000038146973, - "end": 14.619999885559082 + "start": 12.4399995803833, + "end": 12.579999923706055 }, { "word": "repo", - "start": 14.619999885559082, - "end": 14.960000038146973 + "start": 12.579999923706055, + "end": 12.859999656677246 }, { "word": "per", - "start": 14.960000038146973, - "end": 15.220000267028809 + "start": 12.859999656677246, + "end": 13.100000381469727 }, { - "word": "agent,", - "start": 15.220000267028809, - "end": 16.059999465942383 + "word": "agent", + "start": 13.100000381469727, + "end": 13.380000114440918 }, { "word": "and", - "start": 16.059999465942383, - "end": 16.299999237060547 + "start": 13.380000114440918, + "end": 13.859999656677246 }, { "word": "one", - "start": 16.299999237060547, - "end": 16.520000457763672 + "start": 13.859999656677246, + "end": 14.0600004196167 }, { "word": "writer", - "start": 16.520000457763672, - "end": 16.84000015258789 + "start": 14.0600004196167, + "end": 14.319999694824219 }, { "word": "per", - "start": 16.84000015258789, - "end": 17.1200008392334 + "start": 14.319999694824219, + "end": 14.539999961853027 }, { "word": "repo.", - "start": 17.1200008392334, - "end": 18.1200008392334 + "start": 14.539999961853027, + "end": 15.640000343322754 }, { "word": "Nothing", - "start": 18.1200008392334, - "end": 18.399999618530273 + "start": 15.640000343322754, + "end": 15.9399995803833 }, { "word": "to", - "start": 18.399999618530273, - "end": 18.6200008392334 + "start": 15.9399995803833, + "end": 16.100000381469727 }, { "word": "lock,", - "start": 18.6200008392334, - "end": 19.31999969482422 + "start": 16.100000381469727, + "end": 16.84000015258789 }, { "word": "nothing", - "start": 19.31999969482422, - "end": 19.639999389648438 + "start": 16.84000015258789, + "end": 17.15999984741211 }, { "word": "to", - "start": 19.639999389648438, - "end": 19.8799991607666 + "start": 17.15999984741211, + "end": 17.360000610351562 }, { "word": "merge.", - "start": 19.8799991607666, - "end": 20.399999618530273 - } - ] - }, - "under-the-hood": { - "file": "voiceover/under-the-hood.mp3", - "hash": "4964807411f4df2b", - "text": "Under the hood, a connector hooks the end of every execution in the Cloudflare SDK. The run lands in a SQLite outbox inside the agent's Durable Object, and git pushes it to Artifacts. Any git client can read an agent's history and use that to learn.", - "seconds": 16.704, - "words": [ + "start": 17.360000610351562, + "end": 18.440000534057617 + }, { - "word": "Under", - "start": 0, - "end": 0.3199999928474426 + "word": "In", + "start": 18.440000534057617, + "end": 18.559999465942383 }, { - "word": "the", - "start": 0.3199999928474426, - "end": 0.5400000214576721 + "word": "our", + "start": 18.559999465942383, + "end": 18.700000762939453 }, { - "word": "hood,", - "start": 0.5400000214576721, - "end": 0.9599999785423279 + "word": "test,", + "start": 18.700000762939453, + "end": 19.280000686645508 }, { - "word": "a", - "start": 0.9599999785423279, - "end": 1.059999942779541 + "word": "1", + "start": 19.280000686645508, + "end": 19.5 }, { - "word": "connector", - "start": 1.059999942779541, - "end": 1.4199999570846558 + "word": ",000", + "start": 19.5, + "end": 19.81999969482422 }, { - "word": "hooks", - "start": 1.4199999570846558, - "end": 1.6799999475479126 + "word": "agents", + "start": 19.81999969482422, + "end": 20.059999465942383 }, { - "word": "the", - "start": 1.6799999475479126, - "end": 1.9600000381469727 + "word": "committed", + "start": 20.059999465942383, + "end": 20.3799991607666 }, { - "word": "end", - "start": 1.9600000381469727, - "end": 2.2200000286102295 + "word": "at", + "start": 20.3799991607666, + "end": 20.6200008392334 }, { - "word": "of", - "start": 2.2200000286102295, - "end": 2.4000000953674316 + "word": "once.", + "start": 20.6200008392334, + "end": 21.600000381469727 }, { - "word": "every", - "start": 2.4000000953674316, - "end": 2.799999952316284 + "word": "1", + "start": 21.600000381469727, + "end": 21.719999313354492 }, { - "word": "execution", - "start": 2.799999952316284, - "end": 3.4000000953674316 + "word": ",000", + "start": 21.719999313354492, + "end": 22.040000915527344 }, { - "word": "in", - "start": 3.4000000953674316, - "end": 3.740000009536743 + "word": "commits", + "start": 22.040000915527344, + "end": 22.299999237060547 }, { - "word": "the", - "start": 3.740000009536743, - "end": 3.859999895095825 + "word": "in", + "start": 22.299999237060547, + "end": 22.479999542236328 }, { - "word": "CloudFlayer", - "start": 3.859999895095825, - "end": 4.539999961853027 + "word": "under", + "start": 22.479999542236328, + "end": 22.68000030517578 }, { - "word": "SDK.", - "start": 4.539999961853027, - "end": 5.960000038146973 + "word": "30", + "start": 22.68000030517578, + "end": 23.020000457763672 }, { - "word": "The", - "start": 5.960000038146973, - "end": 6.260000228881836 + "word": "seconds", + "start": 23.020000457763672, + "end": 23.5 }, { - "word": "run", - "start": 6.260000228881836, - "end": 6.480000019073486 + "word": "with", + "start": 23.5, + "end": 23.979999542236328 }, { - "word": "lands", - "start": 6.480000019073486, - "end": 6.760000228881836 + "word": "zero", + "start": 23.979999542236328, + "end": 24.31999969482422 }, { - "word": "in", - "start": 6.760000228881836, - "end": 6.960000038146973 + "word": "errors.", + "start": 24.31999969482422, + "end": 24.979999542236328 + } + ] + }, + "under-the-hood": { + "file": "voiceover/under-the-hood.wav", + "hash": "96cc082685c18781", + "text": "Under the hood, a connector hooks the end of every execution in the Cloudflare SDK. The run lands in a SQLite outbox inside the agent's Durable Object, and git pushes it to Artifacts. Any git client can read an agent's history and use that to learn.", + "seconds": 14.2, + "words": [ + { + "word": "Bandit", + "start": 0.2199999988079071, + "end": 0.6000000238418579 }, { - "word": "a", - "start": 6.960000038146973, - "end": 7.099999904632568 + "word": "darrnara", + "start": 0.6000000238418579, + "end": 0.8799999952316284 }, { - "word": "SQLite", - "start": 7.099999904632568, - "end": 7.639999866485596 + "word": "connector", + "start": 0.8799999952316284, + "end": 1.1799999475479126 }, { - "word": "outbox", - "start": 7.639999866485596, - "end": 8.0600004196167 + "word": "hooks", + "start": 1.1799999475479126, + "end": 1.5399999618530273 }, { - "word": "inside", - "start": 8.0600004196167, - "end": 8.600000381469727 + "word": "the", + "start": 1.5399999618530273, + "end": 1.7799999713897705 + }, + { + "word": "end", + "start": 1.7799999713897705, + "end": 1.9199999570846558 + }, + { + "word": "of", + "start": 1.9199999570846558, + "end": 2.059999942779541 + }, + { + "word": "every", + "start": 2.059999942779541, + "end": 2.240000009536743 + }, + { + "word": "execution", + "start": 2.240000009536743, + "end": 2.819999933242798 + }, + { + "word": "in", + "start": 2.819999933242798, + "end": 3 }, { "word": "the", - "start": 8.600000381469727, - "end": 8.920000076293945 + "start": 3, + "end": 3.119999885559082 }, { - "word": "agent's", - "start": 8.920000076293945, - "end": 9.34000015258789 + "word": "CloudFlare", + "start": 3.119999885559082, + "end": 3.5999999046325684 }, { - "word": "durable", - "start": 9.34000015258789, - "end": 9.619999885559082 + "word": "SDK.", + "start": 3.5999999046325684, + "end": 4.880000114440918 + }, + { + "word": "The", + "start": 4.880000114440918, + "end": 5.059999942779541 + }, + { + "word": "run", + "start": 5.059999942779541, + "end": 5.21999979019165 + }, + { + "word": "lands", + "start": 5.21999979019165, + "end": 5.460000038146973 }, { - "word": "object", - "start": 9.619999885559082, - "end": 10.140000343322754 + "word": "in", + "start": 5.460000038146973, + "end": 5.619999885559082 + }, + { + "word": "a", + "start": 5.619999885559082, + "end": 5.739999771118164 + }, + { + "word": "SQLite", + "start": 5.739999771118164, + "end": 6.21999979019165 + }, + { + "word": "outbox", + "start": 6.21999979019165, + "end": 6.599999904632568 + }, + { + "word": "inside", + "start": 6.599999904632568, + "end": 7.019999980926514 + }, + { + "word": "the", + "start": 7.019999980926514, + "end": 7.260000228881836 + }, + { + "word": "AgentStoreBloject", + "start": 7.260000228881836, + "end": 8.279999732971191 }, { "word": "and", - "start": 10.140000343322754, - "end": 10.760000228881836 + "start": 8.279999732971191, + "end": 9.0600004196167 }, { - "word": "Git", - "start": 10.760000228881836, - "end": 10.960000038146973 + "word": "get", + "start": 9.0600004196167, + "end": 9.239999771118164 }, { "word": "pushes", - "start": 10.960000038146973, - "end": 11.34000015258789 + "start": 9.239999771118164, + "end": 9.579999923706055 }, { "word": "it", - "start": 11.34000015258789, - "end": 11.5600004196167 + "start": 9.579999923706055, + "end": 9.779999732971191 }, { "word": "to", - "start": 11.5600004196167, - "end": 11.739999771118164 + "start": 9.779999732971191, + "end": 9.9399995803833 }, { "word": "artifacts.", - "start": 11.739999771118164, - "end": 12.9399995803833 + "start": 9.9399995803833, + "end": 11.199999809265137 }, { "word": "Any", - "start": 12.9399995803833, - "end": 13.220000267028809 + "start": 11.199999809265137, + "end": 11.380000114440918 }, { "word": "Git", - "start": 13.220000267028809, - "end": 13.479999542236328 + "start": 11.380000114440918, + "end": 11.619999885559082 }, { "word": "client", - "start": 13.479999542236328, - "end": 13.920000076293945 + "start": 11.619999885559082, + "end": 11.859999656677246 }, { "word": "can", - "start": 13.920000076293945, - "end": 14.15999984741211 + "start": 11.859999656677246, + "end": 12.079999923706055 }, { "word": "read", - "start": 14.15999984741211, - "end": 14.359999656677246 + "start": 12.079999923706055, + "end": 12.220000267028809 }, { "word": "an", - "start": 14.359999656677246, - "end": 14.539999961853027 + "start": 12.220000267028809, + "end": 12.380000114440918 }, { "word": "agent's", - "start": 14.539999961853027, - "end": 15 + "start": 12.380000114440918, + "end": 12.760000228881836 }, { "word": "history", - "start": 15, - "end": 15.34000015258789 + "start": 12.760000228881836, + "end": 13.039999961853027 }, { "word": "and", - "start": 15.34000015258789, - "end": 15.600000381469727 + "start": 13.039999961853027, + "end": 13.199999809265137 }, { "word": "use", - "start": 15.600000381469727, - "end": 15.819999694824219 + "start": 13.199999809265137, + "end": 13.34000015258789 }, { "word": "that", - "start": 15.819999694824219, - "end": 16.059999465942383 + "start": 13.34000015258789, + "end": 13.539999961853027 }, { "word": "to", - "start": 16.059999465942383, - "end": 16.280000686645508 + "start": 13.539999961853027, + "end": 13.699999809265137 }, { "word": "learn.", - "start": 16.280000686645508, - "end": 16.68000030517578 + "start": 13.699999809265137, + "end": 14.180000305175781 } ] }, "repo": { - "file": "voiceover/repo.mp3", - "hash": "e0d4b20fb9f18937", - "seconds": 8.064, + "file": "voiceover/repo.wav", + "hash": "d4470f0cb71ea7ab", + "text": "Clone an agent's repo, and its log is the agent's trajectory: every attempt, every fix, every answer.", + "seconds": 7.6, "words": [ { "word": "Clone", "start": 0, - "end": 0.36000001430511475 + "end": 0.48 }, { - "word": "an", - "start": 0.36000001430511475, - "end": 0.5600000023841858 + "word": "in", + "start": 0.48, + "end": 0.62 }, { - "word": "agent's", - "start": 0.5600000023841858, - "end": 1.059999942779541 + "word": "Agents", + "start": 0.62, + "end": 0.92 }, { - "word": "repo", - "start": 1.059999942779541, - "end": 1.2999999523162842 + "word": "repo,", + "start": 0.92, + "end": 1.86 }, { "word": "and", - "start": 1.2999999523162842, - "end": 1.940000057220459 + "start": 1.86, + "end": 2.08 }, { "word": "its", - "start": 1.940000057220459, - "end": 2.180000066757202 + "start": 2.08, + "end": 2.24 }, { - "word": "log", - "start": 2.180000066757202, - "end": 2.440000057220459 + "word": "law", + "start": 2.24, + "end": 2.44 }, { "word": "is", - "start": 2.440000057220459, - "end": 2.7799999713897705 + "start": 2.44, + "end": 2.62 }, { "word": "the", - "start": 2.7799999713897705, - "end": 2.9200000762939453 + "start": 2.62, + "end": 2.82 }, { "word": "agent's", - "start": 2.9200000762939453, - "end": 3.440000057220459 + "start": 2.82, + "end": 3.24 }, { "word": "trajectory.", - "start": 3.440000057220459, - "end": 4.559999942779541 + "start": 3.24, + "end": 4.2 }, { "word": "Every", - "start": 4.559999942779541, - "end": 4.940000057220459 + "start": 4.52, + "end": 4.6 }, { "word": "attempt,", - "start": 4.940000057220459, - "end": 5.880000114440918 + "start": 4.6, + "end": 5.58 }, { "word": "every", - "start": 5.880000114440918, - "end": 6.139999866485596 + "start": 5.58, + "end": 5.8 }, { "word": "fix,", - "start": 6.139999866485596, - "end": 7.139999866485596 + "start": 5.8, + "end": 6.74 }, { "word": "every", - "start": 7.139999866485596, - "end": 7.440000057220459 + "start": 6.74, + "end": 7 }, { "word": "answer.", - "start": 7.440000057220459, - "end": 8.039999961853027 + "start": 7, + "end": 7.58 } - ], - "text": "Clone an agent's repo, and its log is the agent's trajectory: every attempt, every fix, every answer." + ] }, - "scale": { - "file": "voiceover/scale.mp3", - "hash": "bb2d598015c04775", - "seconds": 7.344, + "recall": { + "file": "voiceover/recall.wav", + "hash": "60c056c40d755db3", + "text": "Here's a simple way agents can use Artifacts to learn. When a run produces an answer, Workers AI embeds the question and the code into Cloudflare Vectorize. The next agent with a similar question searches for similar solutions and uses that for better context.", + "seconds": 15.96, "words": [ { - "word": "Artifacts", - "start": 0.20000000298023224, - "end": 0.7799999713897705 + "word": "Here's", + "start": 0.1599999964237213, + "end": 0.5799999833106995 }, { - "word": "is", - "start": 0.7799999713897705, - "end": 0.9800000190734863 + "word": "a", + "start": 0.5799999833106995, + "end": 0.6600000262260437 }, { - "word": "built", - "start": 0.9800000190734863, - "end": 1.2200000286102295 + "word": "simple", + "start": 0.6600000262260437, + "end": 0.9200000166893005 }, { - "word": "for", - "start": 1.2200000286102295, - "end": 1.5 + "word": "way", + "start": 0.9200000166893005, + "end": 1.100000023841858 }, { - "word": "tens", - "start": 1.5, - "end": 1.7799999713897705 + "word": "agents", + "start": 1.100000023841858, + "end": 1.399999976158142 }, { - "word": "of", - "start": 1.7799999713897705, + "word": "can", + "start": 1.399999976158142, + "end": 1.6399999856948853 + }, + { + "word": "use", + "start": 1.6399999856948853, + "end": 1.8200000524520874 + }, + { + "word": "artifacts", + "start": 1.8200000524520874, "end": 2.0799999237060547 }, { - "word": "millions", + "word": "to", "start": 2.0799999237060547, - "end": 2.380000114440918 + "end": 2.4000000953674316 }, { - "word": "of", - "start": 2.380000114440918, - "end": 2.680000066757202 + "word": "learn.", + "start": 2.4000000953674316, + "end": 3.299999952316284 }, { - "word": "repos,", - "start": 2.680000066757202, - "end": 3.5399999618530273 + "word": "When", + "start": 3.299999952316284, + "end": 3.5199999809265137 }, { - "word": "so", - "start": 3.5399999618530273, - "end": 3.799999952316284 + "word": "a", + "start": 3.5199999809265137, + "end": 3.619999885559082 }, { - "word": "every", - "start": 3.799999952316284, - "end": 4.099999904632568 + "word": "run", + "start": 3.619999885559082, + "end": 3.759999990463257 }, { - "word": "agent", - "start": 4.099999904632568, - "end": 4.460000038146973 + "word": "produces", + "start": 3.759999990463257, + "end": 4.21999979019165 }, { - "word": "debts", - "start": 4.460000038146973, - "end": 4.71999979019165 + "word": "an", + "start": 4.21999979019165, + "end": 4.480000019073486 }, { - "word": "its", - "start": 4.71999979019165, - "end": 4.940000057220459 + "word": "answer,", + "start": 4.480000019073486, + "end": 5.400000095367432 }, { - "word": "own,", - "start": 4.940000057220459, - "end": 5.639999866485596 + "word": "workers", + "start": 5.400000095367432, + "end": 5.559999942779541 }, { - "word": "and", - "start": 5.639999866485596, - "end": 5.71999979019165 + "word": "AI", + "start": 5.559999942779541, + "end": 5.860000133514404 }, { - "word": "they", - "start": 5.71999979019165, - "end": 5.840000152587891 + "word": "embeds", + "start": 5.860000133514404, + "end": 6.480000019073486 }, { - "word": "all", - "start": 5.840000152587891, - "end": 6.039999961853027 + "word": "the", + "start": 6.480000019073486, + "end": 6.579999923706055 }, { - "word": "write", - "start": 6.039999961853027, - "end": 6.239999771118164 + "word": "question", + "start": 6.579999923706055, + "end": 7.019999980926514 }, { - "word": "at", - "start": 6.239999771118164, - "end": 6.460000038146973 + "word": "and", + "start": 7.019999980926514, + "end": 7.559999942779541 }, { "word": "the", - "start": 6.460000038146973, - "end": 6.559999942779541 + "start": 7.559999942779541, + "end": 7.679999828338623 }, { - "word": "same", - "start": 6.559999942779541, - "end": 6.820000171661377 + "word": "code", + "start": 7.679999828338623, + "end": 7.940000057220459 }, { - "word": "time.", - "start": 6.820000171661377, - "end": 7.320000171661377 - } - ], - "text": "Artifacts is built for tens of millions of repos, so every agent gets its own, and they all write at the same time." - }, - "recall": { - "file": "voiceover/recall.mp3", - "hash": "dd2388e0f7d4f8ac", - "text": "Here's a simple way agents can use Artifacts to learn. When a run produces an answer, Workers AI embeds the question and the code into Cloudflare Vectorize. The next agent with a similar question searches for similar solutions and uses that for better context.", - "seconds": 18.624, - "words": [ - { - "word": "Here's", - "start": 0, - "end": 0.46000000834465027 + "word": "into", + "start": 7.940000057220459, + "end": 8.199999809265137 }, { - "word": "a", - "start": 0.46000000834465027, - "end": 0.5400000214576721 + "word": "Cloud", + "start": 8.199999809265137, + "end": 8.460000038146973 }, { - "word": "simple", - "start": 0.5400000214576721, - "end": 0.9200000166893005 + "word": "Flare", + "start": 8.460000038146973, + "end": 8.779999732971191 }, { - "word": "way", - "start": 0.9200000166893005, - "end": 1.2599999904632568 + "word": "vectorize.", + "start": 8.779999732971191, + "end": 10.039999961853027 }, { - "word": "agents", - "start": 1.2599999904632568, - "end": 1.899999976158142 + "word": "The", + "start": 10.039999961853027, + "end": 10.260000228881836 }, { - "word": "can", - "start": 1.899999976158142, - "end": 2.2200000286102295 + "word": "next", + "start": 10.260000228881836, + "end": 10.4399995803833 }, { - "word": "use", - "start": 2.2200000286102295, - "end": 2.5399999618530273 + "word": "agent", + "start": 10.4399995803833, + "end": 10.800000190734863 }, { - "word": "artifacts", - "start": 2.5399999618530273, - "end": 2.940000057220459 + "word": "with", + "start": 10.800000190734863, + "end": 11.039999961853027 }, { - "word": "to", - "start": 2.940000057220459, - "end": 3.380000114440918 + "word": "a", + "start": 11.039999961853027, + "end": 11.15999984741211 }, { - "word": "learn.", - "start": 3.380000114440918, - "end": 4.260000228881836 + "word": "similar", + "start": 11.15999984741211, + "end": 11.399999618530273 }, { - "word": "When", - "start": 4.260000228881836, - "end": 4.480000019073486 + "word": "question", + "start": 11.399999618530273, + "end": 11.9399995803833 }, { - "word": "a", - "start": 4.480000019073486, - "end": 4.579999923706055 + "word": "searches", + "start": 11.9399995803833, + "end": 12.680000305175781 }, { - "word": "run", - "start": 4.579999923706055, - "end": 4.760000228881836 + "word": "for", + "start": 12.680000305175781, + "end": 12.9399995803833 }, { - "word": "produces", - "start": 4.760000228881836, - "end": 5.21999979019165 + "word": "similar", + "start": 12.9399995803833, + "end": 13.279999732971191 }, { - "word": "an", - "start": 5.21999979019165, - "end": 5.5 + "word": "solutions", + "start": 13.279999732971191, + "end": 13.819999694824219 }, { - "word": "answer,", - "start": 5.5, - "end": 6.380000114440918 + "word": "and", + "start": 13.819999694824219, + "end": 14.15999984741211 }, { - "word": "workers", - "start": 6.380000114440918, - "end": 6.579999923706055 + "word": "uses", + "start": 14.15999984741211, + "end": 14.420000076293945 }, { - "word": "AI", - "start": 6.579999923706055, - "end": 7 + "word": "that", + "start": 14.420000076293945, + "end": 14.699999809265137 }, { - "word": "embeds", - "start": 7, - "end": 7.820000171661377 + "word": "for", + "start": 14.699999809265137, + "end": 14.899999618530273 + }, + { + "word": "better", + "start": 14.899999618530273, + "end": 15.079999923706055 + }, + { + "word": "context.", + "start": 15.079999923706055, + "end": 15.9399995803833 + } + ] + }, + "walkthrough": { + "file": "voiceover/walkthrough.wav", + "hash": "9ba5b123c7a20f41", + "text": "Here's one real task from the benchmark: if a fee only applied to one account type in 2023, which merchants would it affect? Without memory, the agent wrote ten programs, ran out of steps, and gave up. With memory, it started from three runs of similar questions, and got it right in two programs, with eight thousand tokens instead of two hundred and seventy-nine thousand.", + "seconds": 21.28, + "words": [ + { + "word": "Here's", + "start": 0, + "end": 0.5799999833106995 + }, + { + "word": "one", + "start": 0.5799999833106995, + "end": 0.7200000286102295 + }, + { + "word": "real", + "start": 0.7200000286102295, + "end": 0.8999999761581421 + }, + { + "word": "task", + "start": 0.8999999761581421, + "end": 1.159999966621399 + }, + { + "word": "from", + "start": 1.159999966621399, + "end": 1.399999976158142 }, { "word": "the", - "start": 7.820000171661377, - "end": 7.940000057220459 + "start": 1.399999976158142, + "end": 1.5199999809265137 }, { - "word": "question", - "start": 7.940000057220459, - "end": 8.399999618530273 + "word": "benchmark.", + "start": 1.5199999809265137, + "end": 2.559999942779541 }, { - "word": "and", - "start": 8.399999618530273, - "end": 8.779999732971191 + "word": "If", + "start": 2.559999942779541, + "end": 2.819999933242798 }, { "word": "the", - "start": 8.779999732971191, - "end": 8.9399995803833 + "start": 2.819999933242798, + "end": 2.9200000762939453 }, { - "word": "code", - "start": 8.9399995803833, - "end": 9.260000228881836 + "word": "fee", + "start": 2.9200000762939453, + "end": 3.059999942779541 }, { - "word": "into", - "start": 9.260000228881836, - "end": 9.65999984741211 + "word": "only", + "start": 3.059999942779541, + "end": 3.259999990463257 }, { - "word": "CloudFlare", - "start": 9.65999984741211, - "end": 10.420000076293945 + "word": "applied", + "start": 3.259999990463257, + "end": 3.5399999618530273 }, { - "word": "vectorize.", - "start": 10.420000076293945, - "end": 11.760000228881836 + "word": "to", + "start": 3.5399999618530273, + "end": 3.7200000286102295 }, { - "word": "The", - "start": 11.760000228881836, - "end": 12.0600004196167 + "word": "one", + "start": 3.7200000286102295, + "end": 3.859999895095825 }, { - "word": "next", - "start": 12.0600004196167, - "end": 12.279999732971191 + "word": "account", + "start": 3.859999895095825, + "end": 4.099999904632568 }, { - "word": "agent", - "start": 12.279999732971191, - "end": 12.699999809265137 + "word": "type", + "start": 4.099999904632568, + "end": 4.360000133514404 }, { - "word": "with", - "start": 12.699999809265137, - "end": 12.9399995803833 + "word": "in", + "start": 4.360000133514404, + "end": 4.539999961853027 + }, + { + "word": "2023,", + "start": 4.539999961853027, + "end": 5.739999771118164 + }, + { + "word": "which", + "start": 5.739999771118164, + "end": 6.139999866485596 + }, + { + "word": "merchants", + "start": 6.139999866485596, + "end": 6.460000038146973 + }, + { + "word": "would", + "start": 6.460000038146973, + "end": 6.679999828338623 + }, + { + "word": "it", + "start": 6.679999828338623, + "end": 6.800000190734863 + }, + { + "word": "affect?", + "start": 6.800000190734863, + "end": 7.900000095367432 + }, + { + "word": "Without", + "start": 7.900000095367432, + "end": 8.220000267028809 + }, + { + "word": "memory,", + "start": 8.220000267028809, + "end": 8.699999809265137 + }, + { + "word": "the", + "start": 8.699999809265137, + "end": 8.779999732971191 + }, + { + "word": "age", + "start": 8.779999732971191, + "end": 8.920000076293945 + }, + { + "word": "of", + "start": 8.920000076293945, + "end": 9.020000457763672 }, { "word": "a", - "start": 12.9399995803833, - "end": 13.039999961853027 + "start": 9.020000457763672, + "end": 9.100000381469727 }, { - "word": "similar", - "start": 13.039999961853027, - "end": 13.359999656677246 + "word": "10", + "start": 9.100000381469727, + "end": 9.359999656677246 }, { - "word": "question", - "start": 13.359999656677246, - "end": 13.920000076293945 + "word": "programs", + "start": 9.359999656677246, + "end": 9.84000015258789 }, { - "word": "searches", - "start": 13.920000076293945, - "end": 14.65999984741211 + "word": "ran", + "start": 9.84000015258789, + "end": 10.619999885559082 }, { - "word": "for", - "start": 14.65999984741211, - "end": 14.960000038146973 + "word": "out", + "start": 10.619999885559082, + "end": 10.800000190734863 }, { - "word": "similar", - "start": 14.960000038146973, - "end": 15.380000114440918 + "word": "of", + "start": 10.800000190734863, + "end": 10.880000114440918 }, { - "word": "solutions", - "start": 15.380000114440918, - "end": 16 + "word": "steps", + "start": 10.880000114440918, + "end": 11.100000381469727 }, { "word": "and", - "start": 16, - "end": 16.639999389648438 + "start": 11.100000381469727, + "end": 11.800000190734863 }, { - "word": "uses", - "start": 16.639999389648438, - "end": 16.940000534057617 + "word": "gave", + "start": 11.800000190734863, + "end": 11.9399995803833 }, { - "word": "that", - "start": 16.940000534057617, - "end": 17.260000228881836 + "word": "up.", + "start": 11.9399995803833, + "end": 13.020000457763672 }, { - "word": "for", - "start": 17.260000228881836, - "end": 17.5 + "word": "With", + "start": 13.020000457763672, + "end": 13.15999984741211 }, { - "word": "better", - "start": 17.5, - "end": 17.739999771118164 + "word": "memory,", + "start": 13.15999984741211, + "end": 13.520000457763672 }, { - "word": "context.", - "start": 17.739999771118164, - "end": 18.600000381469727 - } - ] - }, - "walkthrough": { - "file": "voiceover/walkthrough.mp3", - "hash": "b7d34eef4ff8e26f", - "text": "Let's walk through an example: Cloudflare's wall of lava lamps. Agent Michelle asks how many lamps are flowing. With no memory, Michelle has to discover that the wall is paginated. Agent Matthew asks about the red lamps, starts from Michelle's run, and already knows to walk every page.", - "seconds": 19.056, - "words": [ + "word": "it", + "start": 13.520000457763672, + "end": 13.619999885559082 + }, { - "word": "Let's", - "start": 0, - "end": 0.36000001430511475 + "word": "started", + "start": 13.619999885559082, + "end": 13.819999694824219 }, { - "word": "walk", - "start": 0.36000001430511475, - "end": 0.5199999809265137 + "word": "from", + "start": 13.819999694824219, + "end": 14.0600004196167 }, { - "word": "through", - "start": 0.5199999809265137, - "end": 0.7799999713897705 + "word": "three", + "start": 14.0600004196167, + "end": 14.300000190734863 }, { - "word": "an", - "start": 0.7799999713897705, - "end": 0.9200000166893005 + "word": "runs", + "start": 14.300000190734863, + "end": 14.479999542236328 }, { - "word": "example.", - "start": 0.9200000166893005, - "end": 2.0799999237060547 + "word": "of", + "start": 14.479999542236328, + "end": 14.65999984741211 }, { - "word": "Cloudflare's", - "start": 2.0799999237060547, - "end": 2.619999885559082 + "word": "similar", + "start": 14.65999984741211, + "end": 14.920000076293945 }, { - "word": "wall", - "start": 2.619999885559082, - "end": 2.799999952316284 + "word": "questions", + "start": 14.920000076293945, + "end": 15.479999542236328 }, { - "word": "of", - "start": 2.799999952316284, - "end": 3.140000104904175 + "word": "and", + "start": 15.479999542236328, + "end": 16.239999771118164 }, { - "word": "lava", - "start": 3.140000104904175, - "end": 3.4000000953674316 + "word": "got", + "start": 16.239999771118164, + "end": 16.399999618530273 }, { - "word": "lamps.", - "start": 3.4000000953674316, - "end": 4.639999866485596 + "word": "to", + "start": 16.399999618530273, + "end": 16.520000457763672 }, { - "word": "Agent", - "start": 4.639999866485596, - "end": 4.880000114440918 + "word": "write", + "start": 16.520000457763672, + "end": 16.700000762939453 }, { - "word": "Michelle", - "start": 4.880000114440918, - "end": 5.099999904632568 + "word": "in", + "start": 16.700000762939453, + "end": 16.8799991607666 }, { - "word": "asks", - "start": 5.099999904632568, - "end": 5.71999979019165 + "word": "two", + "start": 16.8799991607666, + "end": 17.040000915527344 }, { - "word": "how", - "start": 5.71999979019165, - "end": 6.079999923706055 + "word": "programs,", + "start": 17.040000915527344, + "end": 18.079999923706055 }, { - "word": "many", - "start": 6.079999923706055, - "end": 6.28000020980835 + "word": "with", + "start": 18.079999923706055, + "end": 18.260000228881836 }, { - "word": "lamps", - "start": 6.28000020980835, - "end": 6.539999961853027 + "word": "8", + "start": 18.260000228881836, + "end": 18.479999542236328 }, { - "word": "are", - "start": 6.539999961853027, - "end": 6.739999771118164 + "word": ",000", + "start": 18.479999542236328, + "end": 18.799999237060547 }, { - "word": "flowing.", - "start": 6.739999771118164, - "end": 7.739999771118164 + "word": "tokens", + "start": 18.799999237060547, + "end": 19.079999923706055 }, { - "word": "With", - "start": 7.739999771118164, - "end": 8 + "word": "instead", + "start": 19.079999923706055, + "end": 19.5 }, { - "word": "no", - "start": 8, - "end": 8.199999809265137 + "word": "of", + "start": 19.5, + "end": 19.65999984741211 }, { - "word": "memory,", - "start": 8.199999809265137, - "end": 9.100000381469727 + "word": "2", + "start": 19.65999984741211, + "end": 19.799999237060547 + }, + { + "word": ".0", + "start": 19.799999237060547, + "end": 19.979999542236328 + }, + { + "word": "and", + "start": 19.979999542236328, + "end": 20.100000381469727 + }, + { + "word": "7", + "start": 20.100000381469727, + "end": 20.239999771118164 + }, + { + "word": ".9000.", + "start": 20.239999771118164, + "end": 21.260000228881836 + } + ] + }, + "provenance": { + "file": "voiceover/provenance.wav", + "hash": "8403b4ab01b8bb4c", + "text": "And it's all in Artifacts. Clone that agent's repo, and its commit names the exact runs it learned from. Follow the link to the next repo, and there's the code it started from.", + "seconds": 10.36, + "words": [ + { + "word": "and", + "start": 0.1599999964237213, + "end": 0.5400000214576721 + }, + { + "word": "it's", + "start": 0.5400000214576721, + "end": 0.699999988079071 + }, + { + "word": "all", + "start": 0.699999988079071, + "end": 0.8199999928474426 + }, + { + "word": "in", + "start": 0.8199999928474426, + "end": 0.9399999976158142 + }, + { + "word": "artifacts.", + "start": 0.9399999976158142, + "end": 2.2200000286102295 + }, + { + "word": "Climb", + "start": 2.2200000286102295, + "end": 2.359999895095825 + }, + { + "word": "that", + "start": 2.359999895095825, + "end": 2.5 + }, + { + "word": "agents", + "start": 2.5, + "end": 2.7200000286102295 }, { - "word": "Michelle", - "start": 9.100000381469727, - "end": 9.319999694824219 + "word": "repo", + "start": 2.7200000286102295, + "end": 3.059999942779541 }, { - "word": "has", - "start": 9.319999694824219, - "end": 9.5600004196167 + "word": "and", + "start": 3.059999942779541, + "end": 3.819999933242798 }, { - "word": "to", - "start": 9.5600004196167, - "end": 9.739999771118164 + "word": "its", + "start": 3.819999933242798, + "end": 3.9800000190734863 }, { - "word": "discover", - "start": 9.739999771118164, - "end": 10.180000305175781 + "word": "commit", + "start": 3.9800000190734863, + "end": 4.179999828338623 }, { - "word": "that", - "start": 10.180000305175781, - "end": 10.5600004196167 + "word": "names", + "start": 4.179999828338623, + "end": 4.480000019073486 }, { "word": "the", - "start": 10.5600004196167, - "end": 10.680000305175781 - }, - { - "word": "wall", - "start": 10.680000305175781, - "end": 10.920000076293945 + "start": 4.480000019073486, + "end": 4.699999809265137 }, { - "word": "is", - "start": 10.920000076293945, - "end": 11.180000305175781 + "word": "exact", + "start": 4.699999809265137, + "end": 5 }, { - "word": "paginated.", - "start": 11.180000305175781, - "end": 12.5 + "word": "runs", + "start": 5, + "end": 5.360000133514404 }, { - "word": "Agent", - "start": 12.5, - "end": 12.819999694824219 + "word": "that", + "start": 5.360000133514404, + "end": 5.539999961853027 }, { - "word": "Matthew", - "start": 12.819999694824219, - "end": 13.180000305175781 + "word": "learn", + "start": 5.539999961853027, + "end": 5.71999979019165 }, { - "word": "asks", - "start": 13.180000305175781, - "end": 13.619999885559082 + "word": "from.", + "start": 5.71999979019165, + "end": 6.71999979019165 }, { - "word": "about", - "start": 13.619999885559082, - "end": 13.960000038146973 + "word": "Follow", + "start": 6.71999979019165, + "end": 7 }, { "word": "the", - "start": 13.960000038146973, - "end": 14.119999885559082 - }, - { - "word": "red", - "start": 14.119999885559082, - "end": 14.300000190734863 + "start": 7, + "end": 7.179999828338623 }, { - "word": "lamps,", - "start": 14.300000190734863, - "end": 15.199999809265137 + "word": "link", + "start": 7.179999828338623, + "end": 7.320000171661377 }, { - "word": "starts", - "start": 15.199999809265137, - "end": 15.479999542236328 + "word": "to", + "start": 7.320000171661377, + "end": 7.460000038146973 }, { - "word": "from", - "start": 15.479999542236328, - "end": 15.739999771118164 + "word": "the", + "start": 7.460000038146973, + "end": 7.559999942779541 }, { - "word": "Michelle's", - "start": 15.739999771118164, - "end": 16.239999771118164 + "word": "next", + "start": 7.559999942779541, + "end": 7.760000228881836 }, { - "word": "run,", - "start": 16.239999771118164, - "end": 17 + "word": "repo", + "start": 7.760000228881836, + "end": 8.100000381469727 }, { "word": "and", - "start": 17, - "end": 17.079999923706055 + "start": 8.100000381469727, + "end": 8.859999656677246 }, { - "word": "already", - "start": 17.079999923706055, - "end": 17.399999618530273 + "word": "there's", + "start": 8.859999656677246, + "end": 9.100000381469727 }, { - "word": "knows", - "start": 17.399999618530273, - "end": 17.65999984741211 + "word": "the", + "start": 9.100000381469727, + "end": 9.199999809265137 }, { - "word": "to", - "start": 17.65999984741211, - "end": 17.920000076293945 + "word": "code", + "start": 9.199999809265137, + "end": 9.399999618530273 }, { - "word": "walk", - "start": 17.920000076293945, - "end": 18.15999984741211 + "word": "it", + "start": 9.399999618530273, + "end": 9.520000457763672 }, { - "word": "every", - "start": 18.15999984741211, - "end": 18.520000457763672 + "word": "started", + "start": 9.520000457763672, + "end": 9.720000267028809 }, { - "word": "page.", - "start": 18.520000457763672, - "end": 19.020000457763672 + "word": "from.", + "start": 9.720000267028809, + "end": 10.34000015258789 } ] }, "curve": { - "file": "voiceover/curve.mp3", - "hash": "2a88f36f166a9dc2", + "file": "voiceover/curve.wav", + "hash": "1f14b1bdc9592896", "text": "At scale, we ran the DABstep benchmark: four hundred and fifty real multi-step data investigations over payments data. With no code stored in Artifacts, both arms cost the same. However, as Code Mode and Vectorize index more programs, the median cost per task drops to about a third, within the first few dozen tasks, and it stays there.", - "seconds": 23.496, + "seconds": 20.64, "words": [ { "word": "At", "start": 0, - "end": 0.25999999046325684 + "end": 0.3799999952316284 }, { "word": "scale,", - "start": 0.25999999046325684, - "end": 0.8600000143051147 + "start": 0.3799999952316284, + "end": 0.6200000047683716 }, { "word": "we", - "start": 0.8600000143051147, - "end": 0.9399999976158142 + "start": 0.6200000047683716, + "end": 0.8600000143051147 }, { "word": "ran", - "start": 0.9399999976158142, - "end": 1.1799999475479126 + "start": 0.8600000143051147, + "end": 1.0399999618530273 }, { "word": "the", - "start": 1.1799999475479126, - "end": 1.3600000143051147 + "start": 1.0399999618530273, + "end": 1.2200000286102295 }, { "word": "DAB", - "start": 1.3600000143051147, - "end": 1.6799999475479126 + "start": 1.2200000286102295, + "end": 1.6399999856948853 }, { - "word": "Step", - "start": 1.6799999475479126, - "end": 1.899999976158142 + "word": "step", + "start": 1.6399999856948853, + "end": 1.9600000381469727 }, { - "word": "Benchmark,", - "start": 1.899999976158142, - "end": 3.119999885559082 + "word": "benchmark,", + "start": 1.9600000381469727, + "end": 3.0199999809265137 }, { "word": "450", - "start": 3.119999885559082, - "end": 4.019999980926514 + "start": 3.0199999809265137, + "end": 3.799999952316284 }, { "word": "real", - "start": 4.019999980926514, - "end": 4.599999904632568 + "start": 3.799999952316284, + "end": 4.28000020980835 }, { "word": "multi", - "start": 4.599999904632568, - "end": 4.940000057220459 + "start": 4.28000020980835, + "end": 4.579999923706055 }, { "word": "-step", - "start": 4.940000057220459, - "end": 5.21999979019165 + "start": 4.579999923706055, + "end": 4.880000114440918 }, { "word": "data", - "start": 5.21999979019165, - "end": 5.599999904632568 + "start": 4.880000114440918, + "end": 5.21999979019165 }, { "word": "investigations", - "start": 5.599999904632568, - "end": 6.380000114440918 + "start": 5.21999979019165, + "end": 5.860000133514404 }, { "word": "over", - "start": 6.380000114440918, - "end": 6.78000020980835 + "start": 5.860000133514404, + "end": 6.21999979019165 }, { "word": "payments", - "start": 6.78000020980835, - "end": 7.139999866485596 + "start": 6.21999979019165, + "end": 6.559999942779541 }, { "word": "data,", - "start": 7.139999866485596, - "end": 8 + "start": 6.559999942779541, + "end": 7.539999961853027 }, { "word": "with", - "start": 8, - "end": 8.239999771118164 + "start": 7.539999961853027, + "end": 7.760000228881836 }, { "word": "no", - "start": 8.239999771118164, - "end": 8.479999542236328 + "start": 7.760000228881836, + "end": 7.940000057220459 }, { "word": "code", - "start": 8.479999542236328, - "end": 8.779999732971191 + "start": 7.940000057220459, + "end": 8.119999885559082 }, { "word": "stored", - "start": 8.779999732971191, - "end": 9.15999984741211 + "start": 8.119999885559082, + "end": 8.420000076293945 }, { - "word": "in", - "start": 9.15999984741211, - "end": 9.399999618530273 + "word": "at", + "start": 8.420000076293945, + "end": 8.5600004196167 }, { "word": "artifacts,", - "start": 9.399999618530273, - "end": 10.479999542236328 + "start": 8.5600004196167, + "end": 9.579999923706055 }, { "word": "both", - "start": 10.479999542236328, - "end": 10.65999984741211 + "start": 9.579999923706055, + "end": 9.720000267028809 }, { "word": "arms", - "start": 10.65999984741211, - "end": 11.079999923706055 + "start": 9.720000267028809, + "end": 10 }, { "word": "cost", - "start": 11.079999923706055, - "end": 11.34000015258789 + "start": 10, + "end": 10.239999771118164 }, { "word": "the", - "start": 11.34000015258789, - "end": 11.619999885559082 + "start": 10.239999771118164, + "end": 10.460000038146973 }, { "word": "same.", - "start": 11.619999885559082, - "end": 12.460000038146973 + "start": 10.460000038146973, + "end": 11.5 }, { "word": "However,", - "start": 12.460000038146973, - "end": 13.420000076293945 + "start": 11.5, + "end": 12.119999885559082 }, { "word": "as", - "start": 13.420000076293945, - "end": 13.539999961853027 + "start": 12.119999885559082, + "end": 12.220000267028809 }, { "word": "code", - "start": 13.539999961853027, - "end": 13.819999694824219 + "start": 12.220000267028809, + "end": 12.399999618530273 }, { "word": "mode", - "start": 13.819999694824219, - "end": 14.140000343322754 + "start": 12.399999618530273, + "end": 12.619999885559082 }, { "word": "and", - "start": 14.140000343322754, - "end": 14.420000076293945 + "start": 12.619999885559082, + "end": 12.779999732971191 }, { - "word": "vectorize", - "start": 14.420000076293945, - "end": 15.079999923706055 + "word": "vectorized", + "start": 12.779999732971191, + "end": 13.239999771118164 }, { "word": "index", - "start": 15.079999923706055, - "end": 15.359999656677246 + "start": 13.239999771118164, + "end": 13.539999961853027 }, { "word": "more", - "start": 15.359999656677246, - "end": 15.640000343322754 + "start": 13.539999961853027, + "end": 13.739999771118164 }, { "word": "programs,", - "start": 15.640000343322754, - "end": 16.799999237060547 + "start": 13.739999771118164, + "end": 14.859999656677246 }, { "word": "the", - "start": 16.799999237060547, - "end": 16.860000610351562 + "start": 14.859999656677246, + "end": 14.899999618530273 }, { "word": "median", - "start": 16.860000610351562, - "end": 17.200000762939453 + "start": 14.899999618530273, + "end": 15.15999984741211 }, { "word": "cost", - "start": 17.200000762939453, - "end": 17.579999923706055 + "start": 15.15999984741211, + "end": 15.4399995803833 }, { "word": "per", - "start": 17.579999923706055, - "end": 17.8799991607666 + "start": 15.4399995803833, + "end": 15.65999984741211 }, { "word": "task", - "start": 17.8799991607666, - "end": 18.200000762939453 + "start": 15.65999984741211, + "end": 15.9399995803833 }, { "word": "drops", - "start": 18.200000762939453, - "end": 18.65999984741211 + "start": 15.9399995803833, + "end": 16.260000228881836 }, { "word": "to", - "start": 18.65999984741211, - "end": 18.920000076293945 + "start": 16.260000228881836, + "end": 16.5 }, { "word": "about", - "start": 18.920000076293945, - "end": 19.15999984741211 + "start": 16.5, + "end": 16.700000762939453 }, { "word": "a", - "start": 19.15999984741211, - "end": 19.299999237060547 + "start": 16.700000762939453, + "end": 16.81999969482422 }, { "word": "third", - "start": 19.299999237060547, - "end": 19.639999389648438 + "start": 16.81999969482422, + "end": 17.1200008392334 }, { "word": "within", - "start": 19.639999389648438, - "end": 20.31999969482422 + "start": 17.1200008392334, + "end": 17.860000610351562 }, { "word": "the", - "start": 20.31999969482422, - "end": 20.5 + "start": 17.860000610351562, + "end": 18 }, { "word": "first", - "start": 20.5, - "end": 20.799999237060547 + "start": 18, + "end": 18.219999313354492 }, { "word": "few", - "start": 20.799999237060547, - "end": 21.100000381469727 + "start": 18.219999313354492, + "end": 18.420000076293945 }, { "word": "dozen", - "start": 21.100000381469727, - "end": 21.440000534057617 + "start": 18.420000076293945, + "end": 18.68000030517578 }, { "word": "tasks,", - "start": 21.440000534057617, - "end": 22.479999542236328 + "start": 18.68000030517578, + "end": 19.579999923706055 }, { "word": "and", - "start": 22.479999542236328, - "end": 22.600000381469727 + "start": 19.579999923706055, + "end": 19.760000228881836 }, { "word": "it", - "start": 22.600000381469727, - "end": 22.700000762939453 + "start": 19.760000228881836, + "end": 19.84000015258789 }, { "word": "stays", - "start": 22.700000762939453, - "end": 23 + "start": 19.84000015258789, + "end": 20.139999389648438 }, { "word": "there.", - "start": 23, - "end": 23.459999084472656 + "start": 20.139999389648438, + "end": 20.6200008392334 } ] }, "accuracy": { - "file": "voiceover/accuracy.mp3", - "hash": "15be00d3acf1f36e", + "file": "voiceover/accuracy.wav", + "hash": "e3d18ad577e6c387", "text": "And they're not just cheaper. They're right more often. Scored by DABstep: forty-six percent overall, up from thirty-two.", - "seconds": 8.568, + "seconds": 7.72, "words": [ { "word": "And", - "start": 0.23999999463558197, - "end": 0.5199999809265137 + "start": 0.2800000011920929, + "end": 0.5 }, { "word": "they're", - "start": 0.5199999809265137, - "end": 0.6200000047683716 + "start": 0.5, + "end": 0.5799999833106995 }, { "word": "not", - "start": 0.6200000047683716, - "end": 0.7799999713897705 + "start": 0.5799999833106995, + "end": 0.699999988079071 }, { "word": "just", - "start": 0.7799999713897705, - "end": 1.0800000429153442 + "start": 0.699999988079071, + "end": 0.8999999761581421 }, { "word": "cheaper.", - "start": 1.0800000429153442, - "end": 2.1600000858306885 + "start": 0.8999999761581421, + "end": 1.9199999570846558 }, { "word": "They're", - "start": 2.1600000858306885, - "end": 2.319999933242798 + "start": 1.9199999570846558, + "end": 1.9800000190734863 }, { "word": "right", - "start": 2.319999933242798, - "end": 2.5199999809265137 + "start": 1.9800000190734863, + "end": 2.180000066757202 }, { "word": "more", - "start": 2.5199999809265137, - "end": 2.740000009536743 + "start": 2.180000066757202, + "end": 2.380000114440918 }, { "word": "often.", - "start": 2.740000009536743, - "end": 3.740000009536743 + "start": 2.380000114440918, + "end": 3.5799999237060547 }, { - "word": "Scored", - "start": 3.740000009536743, - "end": 4.039999961853027 + "word": "Squirt", + "start": 3.5799999237060547, + "end": 3.8399999141693115 }, { - "word": "by", - "start": 4.039999961853027, - "end": 4.28000020980835 + "word": "my", + "start": 3.8399999141693115, + "end": 4 }, { - "word": "Dabstep.", - "start": 4.28000020980835, - "end": 5.460000038146973 + "word": "Dabstep,", + "start": 4, + "end": 4.840000152587891 }, { "word": "46", - "start": 5.460000038146973, - "end": 5.920000076293945 + "start": 4.840000152587891, + "end": 5.340000152587891 }, { "word": "%", - "start": 5.920000076293945, - "end": 6.340000152587891 + "start": 5.340000152587891, + "end": 5.699999809265137 }, { - "word": "overall.", - "start": 6.340000152587891, - "end": 7.420000076293945 + "word": "overall,", + "start": 5.699999809265137, + "end": 6.659999847412109 }, { - "word": "Up", - "start": 7.420000076293945, - "end": 7.559999942779541 + "word": "up", + "start": 6.659999847412109, + "end": 6.760000228881836 }, { "word": "from", - "start": 7.559999942779541, - "end": 7.800000190734863 + "start": 6.760000228881836, + "end": 6.980000019073486 }, { "word": "32.", - "start": 7.800000190734863, - "end": 8.539999961853027 + "start": 6.980000019073486, + "end": 7.699999809265137 } ] }, "contagion": { - "file": "voiceover/contagion.mp3", - "hash": "554425aab7ac90d0", - "seconds": 17.976, + "file": "voiceover/contagion.wav", + "hash": "299010f3193833dd", + "text": "We also learned what kind of memory works. Our first version distilled runs into a shared library of verified skills. One wrong skill spread to every agent that used it. Raw runs, labeled unverified, worked better, because each agent still runs its own code.", + "seconds": 16.12, "words": [ { "word": "We", "start": 0, - "end": 0.23999999463558197 + "end": 0.4399999976158142 }, { "word": "also", - "start": 0.23999999463558197, - "end": 0.5 + "start": 0.4399999976158142, + "end": 0.6800000071525574 }, { - "word": "learned", - "start": 0.5, - "end": 0.7799999713897705 + "word": "learn", + "start": 0.6800000071525574, + "end": 0.9200000166893005 }, { "word": "what", - "start": 0.7799999713897705, - "end": 1.0199999809265137 + "start": 0.9200000166893005, + "end": 1.100000023841858 }, { "word": "kind", - "start": 1.0199999809265137, + "start": 1.100000023841858, "end": 1.2599999904632568 }, { "word": "of", "start": 1.2599999904632568, - "end": 1.4800000190734863 + "end": 1.3799999952316284 }, { "word": "memory", - "start": 1.4800000190734863, - "end": 1.6799999475479126 + "start": 1.3799999952316284, + "end": 1.5199999809265137 }, { "word": "works.", - "start": 1.6799999475479126, - "end": 2.7799999713897705 + "start": 1.5199999809265137, + "end": 2.5999999046325684 }, { "word": "Our", - "start": 2.7799999713897705, - "end": 3.0199999809265137 + "start": 2.5999999046325684, + "end": 2.9200000762939453 }, { "word": "first", - "start": 3.0199999809265137, - "end": 3.359999895095825 + "start": 2.9200000762939453, + "end": 3.200000047683716 }, { "word": "version", - "start": 3.359999895095825, - "end": 3.740000009536743 + "start": 3.200000047683716, + "end": 3.559999942779541 }, { "word": "distilled", - "start": 3.740000009536743, - "end": 4.260000228881836 + "start": 3.559999942779541, + "end": 3.9800000190734863 }, { "word": "runs", - "start": 4.260000228881836, - "end": 4.519999980926514 + "start": 3.9800000190734863, + "end": 4.199999809265137 }, { "word": "into", - "start": 4.519999980926514, - "end": 4.940000057220459 + "start": 4.199999809265137, + "end": 4.5 }, { "word": "a", - "start": 4.940000057220459, - "end": 5.119999885559082 + "start": 4.5, + "end": 4.599999904632568 }, { "word": "shared", - "start": 5.119999885559082, - "end": 5.380000114440918 + "start": 4.599999904632568, + "end": 4.739999771118164 }, { - "word": "library", - "start": 5.380000114440918, - "end": 5.980000019073486 + "word": "library,", + "start": 4.739999771118164, + "end": 5.679999828338623 }, { - "word": "of", - "start": 5.980000019073486, - "end": 6.28000020980835 + "word": "and", + "start": 5.679999828338623, + "end": 5.699999809265137 }, { "word": "verified", - "start": 6.28000020980835, - "end": 6.739999771118164 + "start": 5.699999809265137, + "end": 6.059999942779541 }, { "word": "skills.", - "start": 6.739999771118164, - "end": 8.079999923706055 + "start": 6.059999942779541, + "end": 7.260000228881836 }, { "word": "One", - "start": 8.079999923706055, - "end": 8.239999771118164 + "start": 7.260000228881836, + "end": 7.519999980926514 }, { - "word": "wrong", - "start": 8.239999771118164, - "end": 8.460000038146973 + "word": "ROM", + "start": 7.519999980926514, + "end": 7.71999979019165 }, { "word": "skill", - "start": 8.460000038146973, - "end": 8.880000114440918 + "start": 7.71999979019165, + "end": 8.079999923706055 }, { "word": "spread", - "start": 8.880000114440918, - "end": 9.260000228881836 + "start": 8.079999923706055, + "end": 8.399999618530273 }, { "word": "to", - "start": 9.260000228881836, - "end": 9.460000038146973 + "start": 8.399999618530273, + "end": 8.5600004196167 }, { "word": "every", - "start": 9.460000038146973, - "end": 9.739999771118164 + "start": 8.5600004196167, + "end": 8.779999732971191 }, { "word": "agent", - "start": 9.739999771118164, - "end": 10.100000381469727 + "start": 8.779999732971191, + "end": 9.140000343322754 }, { - "word": "that", - "start": 10.100000381469727, - "end": 10.319999694824219 + "word": "and", + "start": 9.140000343322754, + "end": 9.300000190734863 }, { "word": "used", - "start": 10.319999694824219, - "end": 10.619999885559082 + "start": 9.300000190734863, + "end": 9.520000457763672 }, { "word": "it.", - "start": 10.619999885559082, - "end": 11.460000038146973 + "start": 9.520000457763672, + "end": 10.300000190734863 }, { "word": "Raw", - "start": 11.460000038146973, - "end": 11.720000267028809 + "start": 10.300000190734863, + "end": 10.539999961853027 }, { "word": "runs", - "start": 11.720000267028809, - "end": 12.180000305175781 + "start": 10.539999961853027, + "end": 10.920000076293945 }, { "word": "labeled", - "start": 12.180000305175781, - "end": 12.819999694824219 + "start": 10.920000076293945, + "end": 11.520000457763672 }, { "word": "unverified,", - "start": 12.819999694824219, - "end": 14.319999694824219 + "start": 11.520000457763672, + "end": 12.739999771118164 }, { "word": "worked", - "start": 14.319999694824219, - "end": 14.539999961853027 + "start": 12.739999771118164, + "end": 12.9399995803833 }, { - "word": "better", - "start": 14.539999961853027, - "end": 14.859999656677246 + "word": "better,", + "start": 12.9399995803833, + "end": 13.760000228881836 }, { "word": "because", - "start": 14.859999656677246, - "end": 15.5600004196167 + "start": 13.760000228881836, + "end": 14.119999885559082 }, { "word": "each", - "start": 15.5600004196167, - "end": 15.880000114440918 + "start": 14.119999885559082, + "end": 14.380000114440918 }, { "word": "agent", - "start": 15.880000114440918, - "end": 16.260000228881836 + "start": 14.380000114440918, + "end": 14.680000305175781 }, { "word": "still", - "start": 16.260000228881836, - "end": 16.639999389648438 + "start": 14.680000305175781, + "end": 15 }, { "word": "runs", - "start": 16.639999389648438, - "end": 16.920000076293945 + "start": 15, + "end": 15.239999771118164 }, { "word": "its", - "start": 16.920000076293945, - "end": 17.15999984741211 + "start": 15.239999771118164, + "end": 15.420000076293945 }, { "word": "own", - "start": 17.15999984741211, - "end": 17.420000076293945 + "start": 15.420000076293945, + "end": 15.579999923706055 }, { "word": "code.", - "start": 17.420000076293945, - "end": 17.940000534057617 + "start": 15.579999923706055, + "end": 16.100000381469727 } - ], - "text": "We also learned what kind of memory works. Our first version distilled runs into a shared library of verified skills. One wrong skill spread to every agent that used it. Raw runs, labeled unverified, worked better, because each agent still runs its own code." + ] }, "next-steps": { - "file": "voiceover/next-steps.mp3", - "hash": "e45efdc013161d78", + "file": "voiceover/next-steps.wav", + "hash": "feb47c0749d02692", "text": "What's next. Today, a run becomes memory when it produces an answer. Next, we'll record whether that answer was right, as a git note on the commit, so agents learn from the runs that worked. Artifacts events can index each run the moment it's pushed. And agents can review their own history between tasks.", - "seconds": 21.888, + "seconds": 17.2, "words": [ { "word": "What's", "start": 0, - "end": 0.6 + "end": 0.5400000214576721 }, { "word": "next?", - "start": 0.6, - "end": 1.66 + "start": 0.5400000214576721, + "end": 1.4800000190734863 }, { "word": "Today", - "start": 1.66, - "end": 2.06 + "start": 1.4800000190734863, + "end": 1.5800000429153442 }, { "word": "a", - "start": 2.06, - "end": 2.68 + "start": 1.5800000429153442, + "end": 1.7599999904632568 }, { "word": "run", - "start": 2.68, - "end": 2.92 + "start": 1.7599999904632568, + "end": 1.8600000143051147 }, { "word": "becomes", - "start": 2.92, - "end": 3.32 + "start": 1.8600000143051147, + "end": 2.140000104904175 }, { "word": "memory", - "start": 3.32, - "end": 3.9 + "start": 2.140000104904175, + "end": 2.559999942779541 }, { "word": "when", - "start": 3.9, - "end": 4.18 + "start": 2.559999942779541, + "end": 2.759999990463257 }, { "word": "it", - "start": 4.18, - "end": 4.3 + "start": 2.759999990463257, + "end": 2.859999895095825 }, { "word": "produces", - "start": 4.3, - "end": 4.74 + "start": 2.859999895095825, + "end": 3.180000066757202 }, { "word": "an", - "start": 4.74, - "end": 4.98 + "start": 3.180000066757202, + "end": 3.4000000953674316 }, { "word": "answer.", - "start": 4.98, - "end": 5.9 + "start": 3.4000000953674316, + "end": 4.320000171661377 }, { "word": "Next", - "start": 5.9, - "end": 6.24 + "start": 4.320000171661377, + "end": 4.539999961853027 }, { - "word": "will", - "start": 6.24, - "end": 6.8 + "word": "we'll", + "start": 4.539999961853027, + "end": 4.78000020980835 }, { "word": "record", - "start": 6.8, - "end": 7.18 + "start": 4.78000020980835, + "end": 5.099999904632568 }, { "word": "whether", - "start": 7.18, - "end": 7.58 + "start": 5.099999904632568, + "end": 5.440000057220459 }, { "word": "that", - "start": 7.58, - "end": 7.78 + "start": 5.440000057220459, + "end": 5.619999885559082 }, { "word": "answer", - "start": 7.78, - "end": 8.14 + "start": 5.619999885559082, + "end": 5.860000133514404 }, { "word": "was", - "start": 8.14, - "end": 8.36 + "start": 5.860000133514404, + "end": 6.059999942779541 }, { - "word": "right", - "start": 8.36, - "end": 8.62 + "word": "right.", + "start": 6.059999942779541, + "end": 6.820000171661377 }, { - "word": "as", - "start": 8.62, - "end": 9.4 + "word": "Has", + "start": 6.820000171661377, + "end": 7.059999942779541 }, { "word": "a", - "start": 9.4, - "end": 9.52 + "start": 7.059999942779541, + "end": 7.159999847412109 }, { "word": "get", - "start": 9.52, - "end": 9.7 + "start": 7.159999847412109, + "end": 7.28000020980835 }, { - "word": "note", - "start": 9.7, - "end": 10.02 + "word": "-note", + "start": 7.28000020980835, + "end": 7.480000019073486 }, { "word": "on", - "start": 10.02, - "end": 10.32 + "start": 7.480000019073486, + "end": 7.639999866485596 }, { "word": "the", - "start": 10.32, - "end": 10.46 + "start": 7.639999866485596, + "end": 7.760000228881836 }, { - "word": "commit", - "start": 10.46, - "end": 10.74 + "word": "commit,", + "start": 7.760000228881836, + "end": 8.619999885559082 }, { "word": "so", - "start": 10.74, - "end": 11.34 + "start": 8.619999885559082, + "end": 8.800000190734863 }, { "word": "agents", - "start": 11.34, - "end": 11.72 + "start": 8.800000190734863, + "end": 9.0600004196167 }, { "word": "learn", - "start": 11.72, - "end": 12.1 + "start": 9.0600004196167, + "end": 9.279999732971191 }, { "word": "from", - "start": 12.1, - "end": 12.38 + "start": 9.279999732971191, + "end": 9.539999961853027 }, { "word": "the", - "start": 12.38, - "end": 12.54 + "start": 9.539999961853027, + "end": 9.65999984741211 }, { "word": "runs", - "start": 12.54, - "end": 12.74 + "start": 9.65999984741211, + "end": 9.819999694824219 }, { "word": "that", - "start": 12.96, - "end": 13.02 + "start": 9.819999694824219, + "end": 10.039999961853027 }, { "word": "worked.", - "start": 13.02, - "end": 13.96 + "start": 10.039999961853027, + "end": 11.180000305175781 + }, + { + "word": "Hurt", + "start": 11.180000305175781, + "end": 11.399999618530273 + }, + { + "word": "-a", + "start": 11.399999618530273, + "end": 11.479999542236328 }, { - "word": "Artifacts", - "start": 13.96, - "end": 14.46 + "word": "-facts", + "start": 11.479999542236328, + "end": 11.619999885559082 }, { "word": "events", - "start": 14.46, - "end": 14.84 + "start": 11.619999885559082, + "end": 11.9399995803833 }, { "word": "can", - "start": 14.84, - "end": 15.5 + "start": 11.9399995803833, + "end": 12.180000305175781 }, { "word": "index", - "start": 15.5, - "end": 15.96 + "start": 12.180000305175781, + "end": 12.479999542236328 }, { "word": "each", - "start": 15.96, - "end": 16.36 + "start": 12.479999542236328, + "end": 12.779999732971191 }, { "word": "run", - "start": 16.36, - "end": 16.76 + "start": 12.779999732971191, + "end": 12.960000038146973 }, { "word": "the", - "start": 16.76, - "end": 17.18 + "start": 12.960000038146973, + "end": 13.119999885559082 }, { "word": "moment", - "start": 17.18, - "end": 17.48 + "start": 13.119999885559082, + "end": 13.300000190734863 }, { "word": "it's", - "start": 17.48, - "end": 17.82 + "start": 13.300000190734863, + "end": 13.520000457763672 }, { - "word": "pushed", - "start": 17.82, - "end": 18.16 + "word": "pushed,", + "start": 13.520000457763672, + "end": 14.520000457763672 }, { "word": "and", - "start": 18.16, - "end": 18.82 + "start": 14.520000457763672, + "end": 14.619999885559082 }, { "word": "agents", - "start": 18.82, - "end": 19.2 + "start": 14.619999885559082, + "end": 14.859999656677246 }, { "word": "can", - "start": 19.2, - "end": 19.54 + "start": 14.859999656677246, + "end": 15.079999923706055 }, { "word": "review", - "start": 19.68, - "end": 19.84 + "start": 15.079999923706055, + "end": 15.34000015258789 }, { "word": "their", - "start": 19.84, - "end": 20.12 + "start": 15.34000015258789, + "end": 15.5600004196167 }, { "word": "own", - "start": 20.12, - "end": 20.32 + "start": 15.5600004196167, + "end": 15.720000267028809 }, { "word": "history", - "start": 20.32, - "end": 20.74 + "start": 15.720000267028809, + "end": 16.040000915527344 }, { "word": "between", - "start": 20.74, - "end": 21.16 + "start": 16.040000915527344, + "end": 16.440000534057617 }, { "word": "tasks.", - "start": 21.16, - "end": 21.86 + "start": 16.440000534057617, + "end": 17.18000030517578 } ] }, "new-worker": { - "file": "voiceover/new-worker.mp3", - "hash": "db52d1127c0cb094", + "file": "voiceover/new-worker.wav", + "hash": "12027ad290a7b41b", "text": "Getting started takes about a minute. Create a Worker with the cf CLI, and install Code Mode and codemode-git. Add the connector and three bindings: Artifacts, a Worker Loader, and a Durable Object. A dry run shows everything wired up.", - "seconds": 16.488, + "seconds": 15.72, "words": [ { - "word": "Getting", - "start": 0, - "end": 0.30000001192092896 + "word": "Dining", + "start": 0.20000000298023224, + "end": 0.46000000834465027 }, { "word": "started", - "start": 0.30000001192092896, - "end": 0.6600000262260437 + "start": 0.46000000834465027, + "end": 0.7200000286102295 }, { "word": "takes", - "start": 0.6600000262260437, - "end": 0.9800000190734863 + "start": 0.7200000286102295, + "end": 1.0199999809265137 }, { "word": "about", - "start": 0.9800000190734863, - "end": 1.2799999713897705 + "start": 1.0199999809265137, + "end": 1.2400000095367432 }, { "word": "a", - "start": 1.2799999713897705, - "end": 1.3799999952316284 + "start": 1.2400000095367432, + "end": 1.340000033378601 }, { "word": "minute.", - "start": 1.3799999952316284, - "end": 2.240000009536743 + "start": 1.340000033378601, + "end": 2.4000000953674316 }, { "word": "Create", - "start": 2.240000009536743, - "end": 2.440000057220459 + "start": 2.4000000953674316, + "end": 2.5199999809265137 }, { "word": "a", - "start": 2.440000057220459, + "start": 2.5199999809265137, "end": 2.640000104904175 }, { "word": "worker", "start": 2.640000104904175, - "end": 2.940000057220459 + "end": 2.880000114440918 }, { "word": "with", - "start": 2.940000057220459, - "end": 3.200000047683716 + "start": 2.880000114440918, + "end": 3.0999999046325684 }, { "word": "the", - "start": 3.200000047683716, - "end": 3.359999895095825 - }, - { - "word": "CF", - "start": 3.359999895095825, - "end": 3.640000104904175 + "start": 3.0999999046325684, + "end": 3.2200000286102295 }, { - "word": "CLI", - "start": 3.640000104904175, - "end": 4.340000152587891 + "word": "CFCLI,", + "start": 3.2200000286102295, + "end": 4.519999980926514 }, { "word": "and", - "start": 4.340000152587891, - "end": 4.840000152587891 + "start": 4.519999980926514, + "end": 4.539999961853027 }, { "word": "install", - "start": 4.840000152587891, - "end": 5.179999828338623 - }, - { - "word": "Code", - "start": 5.179999828338623, - "end": 5.599999904632568 + "start": 4.539999961853027, + "end": 4.840000152587891 }, { - "word": "Mode", - "start": 5.599999904632568, - "end": 5.880000114440918 + "word": "CodeMode", + "start": 4.840000152587891, + "end": 5.480000019073486 }, { "word": "and", - "start": 5.880000114440918, - "end": 6.260000228881836 - }, - { - "word": "Code", - "start": 6.260000228881836, - "end": 6.579999923706055 - }, - { - "word": "Mode", - "start": 6.579999923706055, - "end": 6.900000095367432 + "start": 5.480000019073486, + "end": 5.820000171661377 }, { - "word": "Git.", - "start": 6.900000095367432, - "end": 7.960000038146973 + "word": "CodeModeKit.", + "start": 5.820000171661377, + "end": 7.340000152587891 }, { - "word": "Add", - "start": 7.960000038146973, - "end": 8.079999923706055 + "word": "Cat", + "start": 7.340000152587891, + "end": 7.619999885559082 }, { "word": "the", - "start": 8.079999923706055, - "end": 8.239999771118164 + "start": 7.619999885559082, + "end": 7.760000228881836 }, { - "word": "connector", - "start": 8.239999771118164, - "end": 8.619999885559082 + "word": "connector,", + "start": 7.760000228881836, + "end": 8.739999771118164 }, { "word": "and", - "start": 8.619999885559082, - "end": 8.920000076293945 + "start": 8.739999771118164, + "end": 8.800000190734863 }, { - "word": "pre", - "start": 8.920000076293945, - "end": 9.100000381469727 + "word": "three", + "start": 8.800000190734863, + "end": 9.039999961853027 }, { - "word": "-bindings,", - "start": 9.100000381469727, - "end": 10.260000228881836 + "word": "bindings.", + "start": 9.039999961853027, + "end": 10.119999885559082 }, { - "word": "Artifacts,", - "start": 10.260000228881836, - "end": 11.239999771118164 + "word": "Hardifacts,", + "start": 10.119999885559082, + "end": 11.180000305175781 }, { "word": "a", - "start": 11.239999771118164, - "end": 11.300000190734863 + "start": 11.180000305175781, + "end": 11.239999771118164 }, { "word": "worker", - "start": 11.300000190734863, - "end": 11.579999923706055 + "start": 11.239999771118164, + "end": 11.520000457763672 }, { "word": "loader,", - "start": 11.579999923706055, - "end": 12.34000015258789 + "start": 11.520000457763672, + "end": 12.359999656677246 }, { "word": "and", - "start": 12.34000015258789, - "end": 12.579999923706055 + "start": 12.359999656677246, + "end": 12.4399995803833 }, { "word": "a", - "start": 12.579999923706055, - "end": 12.680000305175781 + "start": 12.4399995803833, + "end": 12.539999961853027 }, { "word": "durable", - "start": 12.680000305175781, - "end": 12.979999542236328 + "start": 12.539999961853027, + "end": 12.800000190734863 }, { "word": "object.", - "start": 12.979999542236328, - "end": 14.279999732971191 + "start": 12.800000190734863, + "end": 13.960000038146973 }, { "word": "A", - "start": 14.279999732971191, - "end": 14.380000114440918 + "start": 13.960000038146973, + "end": 14.039999961853027 }, { - "word": "dry", - "start": 14.380000114440918, - "end": 14.600000381469727 + "word": "try", + "start": 14.039999961853027, + "end": 14.199999809265137 }, { - "word": "run", - "start": 14.600000381469727, - "end": 14.84000015258789 + "word": "-run", + "start": 14.199999809265137, + "end": 14.380000114440918 }, { "word": "shows", - "start": 14.84000015258789, - "end": 15.119999885559082 + "start": 14.380000114440918, + "end": 14.600000381469727 }, { "word": "everything", - "start": 15.119999885559082, - "end": 15.65999984741211 + "start": 14.600000381469727, + "end": 15.020000457763672 }, { "word": "wired", - "start": 15.65999984741211, - "end": 16.020000457763672 + "start": 15.020000457763672, + "end": 15.300000190734863 }, { "word": "up.", - "start": 16.020000457763672, - "end": 16.459999084472656 + "start": 15.300000190734863, + "end": 15.699999809265137 } ] }, "close": { - "file": "voiceover/close.mp3", - "hash": "4189b14a9278e2da", + "file": "voiceover/close.wav", + "hash": "08fb458b0fe0b66b", "text": "It's on npm: three lines in any Code Mode agent. Keep the code, and your Workers get smarter over time.", - "seconds": 7.704, + "seconds": 6.24, "words": [ { "word": "It's", "start": 0, - "end": 0.30000001192092896 + "end": 0.46000000834465027 }, { "word": "on", - "start": 0.30000001192092896, - "end": 0.41999998688697815 - }, - { - "word": "NPM.", - "start": 0.41999998688697815, - "end": 1.6399999856948853 + "start": 0.46000000834465027, + "end": 0.5799999833106995 }, { - "word": "Three", - "start": 1.6399999856948853, - "end": 1.8799999952316284 + "word": "HMPM3", + "start": 0.5799999833106995, + "end": 1.2999999523162842 }, { "word": "lines", - "start": 1.8799999952316284, - "end": 2.1600000858306885 + "start": 1.2999999523162842, + "end": 1.6399999856948853 }, { "word": "in", - "start": 2.1600000858306885, - "end": 2.619999885559082 + "start": 1.6399999856948853, + "end": 1.8600000143051147 }, { "word": "any", - "start": 2.619999885559082, - "end": 3.0199999809265137 + "start": 1.8600000143051147, + "end": 2.059999942779541 }, { "word": "code", - "start": 3.0199999809265137, - "end": 3.359999895095825 + "start": 2.059999942779541, + "end": 2.319999933242798 }, { - "word": "mode", - "start": 3.359999895095825, - "end": 3.6600000858306885 + "word": "node", + "start": 2.319999933242798, + "end": 2.5799999237060547 }, { "word": "agent.", - "start": 3.6600000858306885, - "end": 4.800000190734863 + "start": 2.5799999237060547, + "end": 3.5399999618530273 }, { "word": "Keep", - "start": 4.800000190734863, - "end": 4.960000038146973 + "start": 3.5399999618530273, + "end": 3.8399999141693115 }, { "word": "the", - "start": 4.960000038146973, - "end": 5.159999847412109 + "start": 3.8399999141693115, + "end": 4.019999980926514 }, { "word": "code", - "start": 5.159999847412109, - "end": 5.420000076293945 + "start": 4.019999980926514, + "end": 4.199999809265137 }, { "word": "and", - "start": 5.420000076293945, - "end": 5.659999847412109 + "start": 4.199999809265137, + "end": 4.360000133514404 }, { "word": "your", - "start": 5.659999847412109, - "end": 5.820000171661377 + "start": 4.360000133514404, + "end": 4.5 }, { "word": "workers", - "start": 5.820000171661377, - "end": 6.139999866485596 + "start": 4.5, + "end": 4.760000228881836 }, { "word": "get", - "start": 6.139999866485596, - "end": 6.420000076293945 + "start": 4.760000228881836, + "end": 5 }, { "word": "smarter", - "start": 6.420000076293945, - "end": 6.820000171661377 + "start": 5, + "end": 5.320000171661377 }, { "word": "over", - "start": 6.820000171661377, - "end": 7.179999828338623 + "start": 5.320000171661377, + "end": 5.639999866485596 }, { "word": "time.", - "start": 7.179999828338623, - "end": 7.679999828338623 + "start": 5.639999866485596, + "end": 6.21999979019165 } ] }, "credits": { - "file": "voiceover/credits.mp3", - "hash": "9cfeae5596cc48c7", + "file": "voiceover/credits.wav", + "hash": "2b45735398cd97d3", "text": "Built by Clay Smith, on Cloudflare. Thanks for watching.", - "seconds": 3.888, + "seconds": 3.52, "words": [ { "word": "Built", - "start": 0, - "end": 0.2800000011920929 + "start": 0.20000000298023224, + "end": 0.46000000834465027 }, { - "word": "by", - "start": 0.2800000011920929, - "end": 0.5199999809265137 + "word": "that", + "start": 0.46000000834465027, + "end": 0.6000000238418579 }, { "word": "Clay", - "start": 0.5199999809265137, - "end": 0.7400000095367432 + "start": 0.6000000238418579, + "end": 0.800000011920929 }, { "word": "Smith", - "start": 0.7400000095367432, - "end": 1.0399999618530273 + "start": 0.800000011920929, + "end": 1.059999942779541 }, { "word": "on", - "start": 1.0399999618530273, - "end": 1.6200000047683716 + "start": 1.059999942779541, + "end": 1.3200000524520874 }, { "word": "Cloudflare.", - "start": 1.6200000047683716, - "end": 2.7799999713897705 + "start": 1.3200000524520874, + "end": 2.380000114440918 }, { "word": "Thanks", - "start": 2.7799999713897705, - "end": 3.200000047683716 + "start": 2.380000114440918, + "end": 2.799999952316284 }, { "word": "for", - "start": 3.200000047683716, - "end": 3.380000114440918 + "start": 2.799999952316284, + "end": 2.9000000953674316 }, { "word": "watching.", - "start": 3.380000114440918, - "end": 3.859999895095825 + "start": 2.9000000953674316, + "end": 3.5 } ] } diff --git a/demo/video/public/voiceover/new-worker.mp3 b/demo/video/public/voiceover/new-worker.mp3 deleted file mode 100644 index 4a51c27..0000000 Binary files a/demo/video/public/voiceover/new-worker.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/new-worker.wav b/demo/video/public/voiceover/new-worker.wav new file mode 100644 index 0000000..9f7cd3a Binary files /dev/null and b/demo/video/public/voiceover/new-worker.wav differ diff --git a/demo/video/public/voiceover/next-steps.mp3 b/demo/video/public/voiceover/next-steps.mp3 deleted file mode 100644 index 534df74..0000000 Binary files a/demo/video/public/voiceover/next-steps.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/next-steps.wav b/demo/video/public/voiceover/next-steps.wav new file mode 100644 index 0000000..aafafcf Binary files /dev/null and b/demo/video/public/voiceover/next-steps.wav differ diff --git a/demo/video/public/voiceover/provenance.wav b/demo/video/public/voiceover/provenance.wav new file mode 100644 index 0000000..b180c8e Binary files /dev/null and b/demo/video/public/voiceover/provenance.wav differ diff --git a/demo/video/public/voiceover/recall.mp3 b/demo/video/public/voiceover/recall.mp3 deleted file mode 100644 index c920d7e..0000000 Binary files a/demo/video/public/voiceover/recall.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/recall.wav b/demo/video/public/voiceover/recall.wav new file mode 100644 index 0000000..8dc183a Binary files /dev/null and b/demo/video/public/voiceover/recall.wav differ diff --git a/demo/video/public/voiceover/repo.mp3 b/demo/video/public/voiceover/repo.mp3 deleted file mode 100644 index cf4343a..0000000 Binary files a/demo/video/public/voiceover/repo.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/repo.wav b/demo/video/public/voiceover/repo.wav new file mode 100644 index 0000000..40216d2 Binary files /dev/null and b/demo/video/public/voiceover/repo.wav differ diff --git a/demo/video/public/voiceover/scale.mp3 b/demo/video/public/voiceover/scale.mp3 deleted file mode 100644 index f77c3a7..0000000 Binary files a/demo/video/public/voiceover/scale.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/thesis.mp3 b/demo/video/public/voiceover/thesis.mp3 deleted file mode 100644 index 95dc480..0000000 Binary files a/demo/video/public/voiceover/thesis.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/thesis.wav b/demo/video/public/voiceover/thesis.wav new file mode 100644 index 0000000..768f282 Binary files /dev/null and b/demo/video/public/voiceover/thesis.wav differ diff --git a/demo/video/public/voiceover/under-the-hood.mp3 b/demo/video/public/voiceover/under-the-hood.mp3 deleted file mode 100644 index 0da1fc3..0000000 Binary files a/demo/video/public/voiceover/under-the-hood.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/under-the-hood.wav b/demo/video/public/voiceover/under-the-hood.wav new file mode 100644 index 0000000..bc32e39 Binary files /dev/null and b/demo/video/public/voiceover/under-the-hood.wav differ diff --git a/demo/video/public/voiceover/vanish.mp3 b/demo/video/public/voiceover/vanish.mp3 deleted file mode 100644 index 4e4e117..0000000 Binary files a/demo/video/public/voiceover/vanish.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/vanish.wav b/demo/video/public/voiceover/vanish.wav new file mode 100644 index 0000000..43fba56 Binary files /dev/null and b/demo/video/public/voiceover/vanish.wav differ diff --git a/demo/video/public/voiceover/walkthrough.mp3 b/demo/video/public/voiceover/walkthrough.mp3 deleted file mode 100644 index bd4c939..0000000 Binary files a/demo/video/public/voiceover/walkthrough.mp3 and /dev/null differ diff --git a/demo/video/public/voiceover/walkthrough.wav b/demo/video/public/voiceover/walkthrough.wav new file mode 100644 index 0000000..0ff44e7 Binary files /dev/null and b/demo/video/public/voiceover/walkthrough.wav differ diff --git a/demo/video/scripts/artifacts-token.mjs b/demo/video/scripts/artifacts-token.mjs new file mode 100644 index 0000000..fa77588 --- /dev/null +++ b/demo/video/scripts/artifacts-token.mjs @@ -0,0 +1,15 @@ +#!/usr/bin/env node +// Prints a short-lived read token for one agent's Artifacts repo, for the +// terminal recordings (used off camera, so the token never appears on screen). +// node scripts/artifacts-token.mjs agent- [ttl-seconds] +import { execFileSync } from "node:child_process"; + +const [repo, ttl = "900"] = process.argv.slice(2); +if (!repo) throw new Error("usage: artifacts-token.mjs [ttl-seconds]"); +const out = execFileSync("npx", ["cf", "artifacts", "namespaces", "tokens", "create", "codemode-git", "--repo", repo, "--scope", "read", "--ttl", ttl], { + encoding: "utf8", + stdio: ["ignore", "pipe", "ignore"] +}); +const secret = /"plaintext":\s*"([^"?]+)/.exec(out)?.[1]; +if (!secret) throw new Error("no token in cf output"); +process.stdout.write(secret); diff --git a/demo/video/scripts/publish-video.mjs b/demo/video/scripts/publish-video.mjs new file mode 100644 index 0000000..397ed19 --- /dev/null +++ b/demo/video/scripts/publish-video.mjs @@ -0,0 +1,31 @@ +#!/usr/bin/env node +// Publishes the demo video for the README: +// npm run publish-video (renders first) +// npm run publish-video -- --no-render +// Renders out/demo.mp4, uploads it as codemode-git-demo.mp4 to the +// `demo-video` GitHub release (created if missing, never marked latest), and +// refreshes the README poster at docs/assets/demo-poster.jpg. + +import { execFileSync } from "node:child_process"; +import { copyFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const run = (cmd, args, opts = {}) => execFileSync(cmd, args, { cwd: root, stdio: "inherit", ...opts }); +const TAG = "demo-video"; +const asset = join(root, "out/codemode-git-demo.mp4"); + +if (!process.argv.includes("--no-render")) run("npx", ["remotion", "render", "Demo", "out/demo.mp4"]); +copyFileSync(join(root, "out/demo.mp4"), asset); + +run("npx", ["remotion", "still", "Poster", "out/poster.png"]); +run("ffmpeg", ["-v", "error", "-y", "-i", "out/poster.png", "-vf", "scale=1280:-1", "-q:v", "3", "../../docs/assets/demo-poster.jpg"]); + +try { + execFileSync("gh", ["release", "view", TAG], { cwd: root, stdio: "ignore" }); +} catch { + run("gh", ["release", "create", TAG, "--title", "Demo video", "--notes", "The competition demo video, rendered from demo/video. Linked from the README.", "--latest=false"]); +} +run("gh", ["release", "upload", TAG, asset, "--clobber"]); +console.log(`Uploaded. README link: https://github.com/smithclay/codemode-git/releases/download/${TAG}/codemode-git-demo.mp4`); diff --git a/demo/video/scripts/record.mjs b/demo/video/scripts/record.mjs index d3df194..3ac3cd8 100644 --- a/demo/video/scripts/record.mjs +++ b/demo/video/scripts/record.mjs @@ -3,8 +3,9 @@ // node scripts/record.mjs [new-worker] // VHS writes text and cursor frames to frames-/; ffmpeg // overlays them, centers them on a 1920×1080 background, and writes -// public/clips/.mp4. (VHS's built-in encoding fails silently with -// ffmpeg 9.) Then add to public/clips/index.json. +// public/clips/.mp4, and records its length in public/clips/index.json. +// must be the id of the scene that plays it. (VHS's built-in encoding +// fails silently with ffmpeg 9.) import { execFileSync } from "node:child_process"; import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; @@ -34,8 +35,10 @@ execFileSync("ffmpeg", [ ], { stdio: "inherit" }); rmSync(frames, { recursive: true, force: true }); -const indexPath = join(root, "public/clips/index.json"); -const index = existsSync(indexPath) ? JSON.parse(readFileSync(indexPath, "utf8")) : []; -if (!index.includes(name)) writeFileSync(indexPath, JSON.stringify([...index, name], null, 2) + "\n"); +// index.json maps each recorded scene to its clip's length, so the scene +// lasts at least as long as the recording. const seconds = Number(execFileSync("ffprobe", ["-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", out]).toString()); -console.log(`${out}: ${seconds.toFixed(1)}s; "${name}" is listed in public/clips/index.json`); +const indexPath = join(root, "public/clips/index.json"); +const index = existsSync(indexPath) ? JSON.parse(readFileSync(indexPath, "utf8")) : {}; +writeFileSync(indexPath, JSON.stringify({ ...index, [name]: Math.round(seconds * 10) / 10 }, null, 2) + "\n"); +console.log(`${out}: ${seconds.toFixed(1)}s; listed in public/clips/index.json`); diff --git a/demo/video/scripts/voiceover.mjs b/demo/video/scripts/voiceover.mjs index 3a5d769..9326a09 100644 --- a/demo/video/scripts/voiceover.mjs +++ b/demo/video/scripts/voiceover.mjs @@ -8,7 +8,8 @@ // terminal, which uses your cf login. Override with VOICE_URL. // 2. The REST API: set CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID. // -// Writes public/voiceover/.mp3 and public/voiceover/manifest.json +// Writes public/voiceover/.wav (uncompressed 16-bit, 24 kHz: MP3 at +// Aura's 48 kbps had audible artifacts) and public/voiceover/manifest.json // (with the text each clip was generated from, for captions). A scene is // regenerated only when its text or speaker changes. @@ -35,12 +36,12 @@ async function speak(text) { ? await fetch(rest("@cf/deepgram/aura-2-en"), { method: "POST", headers: { authorization: `Bearer ${token}`, "content-type": "application/json" }, - body: JSON.stringify({ text, speaker: SPEAKER, encoding: "mp3" }) + body: JSON.stringify({ text, speaker: SPEAKER, encoding: "linear16", container: "wav", sample_rate: 24000 }) }) : await fetch(`${voiceUrl}/tts`, { method: "POST", headers: { "content-type": "application/json" }, - body: JSON.stringify({ text, speaker: SPEAKER }) + body: JSON.stringify({ text, speaker: SPEAKER, wav: true }) }); if (!res.ok) throw new Error(`tts: HTTP ${res.status} ${(await res.text()).slice(0, 200)}`); return Buffer.from(await res.arrayBuffer()); @@ -108,8 +109,8 @@ const manifest = {}; let generated = 0; for (const scene of scenes) { const text = transcript[scene.id]; - const hash = createHash("sha256").update(`${SPEAKER}\n${text}`).digest("hex").slice(0, 16); - const file = `voiceover/${scene.id}.mp3`; + const hash = createHash("sha256").update(`${SPEAKER}\nwav\n${text}`).digest("hex").slice(0, 16); + const file = `voiceover/${scene.id}.wav`; const path = join(root, "public", file); if (previous[scene.id]?.hash === hash && existsSync(path)) { manifest[scene.id] = { ...previous[scene.id], text }; @@ -131,12 +132,19 @@ console.log(`${generated} scene(s) generated, ${scenes.length - generated} cache // Runtime report: what the composition will use, scene by scene. const clipsPath = join(root, "public/clips/index.json"); -const clips = existsSync(clipsPath) ? JSON.parse(readFileSync(clipsPath, "utf8")) : []; -const fmt = (sec) => `${Math.floor(sec / 60)}:${String(Math.round(sec % 60)).padStart(2, "0")}`; +const clips = existsSync(clipsPath) ? JSON.parse(readFileSync(clipsPath, "utf8")) : {}; +const fmt = (sec) => { + const s = Math.round(sec); + return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`; +}; let runtime = 0; for (const scene of scenes) { - const seconds = sceneSeconds(scene, manifest[scene.id].seconds, clips.includes(scene.id)); - const slot = scene.minSeconds ? (clips.includes(scene.id) ? ` recording (${scene.minSeconds}s)` : ` recording slot empty (+${Math.max(0, scene.minSeconds - seconds).toFixed(0)}s when filled)`) : ""; + const seconds = sceneSeconds(scene, manifest[scene.id].seconds, clips[scene.id]); + const slot = clips[scene.id] + ? ` recording (${clips[scene.id]}s)` + : scene.minSeconds + ? ` recording slot empty (about +${Math.max(0, scene.minSeconds - seconds).toFixed(0)}s when filled)` + : ""; console.log(`${fmt(runtime).padStart(5)} ${scene.id.padEnd(16)} ${seconds.toFixed(1).padStart(5)}s${slot}`); runtime += seconds; } diff --git a/demo/video/src/Demo.tsx b/demo/video/src/Demo.tsx index 80518a9..212de53 100644 --- a/demo/video/src/Demo.tsx +++ b/demo/video/src/Demo.tsx @@ -7,10 +7,12 @@ export const FPS = 30; export type Word = { word: string; start: number; end: number }; export type Manifest = Record; -export type DemoProps = { manifest: Manifest; clips: string[] }; +/** Recorded scenes and their clip lengths, from public/clips/index.json. */ +export type Clips = Record; +export type DemoProps = { manifest: Manifest; clips: Clips }; -export const sceneFrames = (scene: Scene, manifest: Manifest, clips: string[]) => - Math.ceil(sceneSeconds(scene, manifest[scene.id]?.seconds, clips.includes(scene.id)) * FPS); +export const sceneFrames = (scene: Scene, manifest: Manifest, clips: Clips) => + Math.ceil(sceneSeconds(scene, manifest[scene.id]?.seconds, clips[scene.id]) * FPS); /** * Seconds into the scene when a word is spoken, for syncing visuals to the @@ -49,7 +51,7 @@ export const Demo = ({ manifest, clips }: DemoProps) => ( {scenes.map((scene) => { const voice = manifest[scene.id]; const words = voice ? alignToScript(voice.text, voice.words) : []; - const clip = clips.includes(scene.id) ? staticFile(`clips/${scene.id}.mp4`) : null; + const clip = clips[scene.id] ? staticFile(`clips/${scene.id}.mp4`) : null; return ( {clip ? ( diff --git a/demo/video/src/Root.tsx b/demo/video/src/Root.tsx index 51a56e4..9a2948f 100644 --- a/demo/video/src/Root.tsx +++ b/demo/video/src/Root.tsx @@ -1,5 +1,6 @@ -import { Composition, staticFile } from "remotion"; -import { Demo, FPS, sceneFrames, type DemoProps, type Manifest } from "./Demo"; +import { Composition, Still, staticFile } from "remotion"; +import { Poster } from "./scenes/Visual"; +import { Demo, FPS, sceneFrames, type Clips, type DemoProps, type Manifest } from "./Demo"; import { scenes } from "./script"; // Scene lengths come from the generated voiceover; a scene without audio yet @@ -13,29 +14,32 @@ async function loadManifest(): Promise { } } -// Scene ids with a recording in public/clips/.mp4, listed in -// public/clips/index.json (add the id there when you add a recording). -async function loadClips(): Promise { +// Scenes with a recording in public/clips/.mp4, and each clip's length, +// from public/clips/index.json (written by scripts/record.mjs). +async function loadClips(): Promise { try { const res = await fetch(staticFile("clips/index.json")); - return res.ok ? ((await res.json()) as string[]) : []; + return res.ok ? ((await res.json()) as Clips) : {}; } catch { - return []; + return {}; } } export const RemotionRoot = () => ( + <> + { const [manifest, clips] = await Promise.all([loadManifest(), loadClips()]); const durationInFrames = scenes.reduce((sum, scene) => sum + sceneFrames(scene, manifest, clips), 0); return { durationInFrames, props: { manifest, clips } }; }} /> + ); diff --git a/demo/video/src/data.ts b/demo/video/src/data.ts index c3c95ff..9957ca6 100644 --- a/demo/video/src/data.ts +++ b/demo/video/src/data.ts @@ -13,10 +13,11 @@ export const accuracy = [ { level: "Overall (450)", baseline: 32.2, examples: 46.2 } ]; -// michelle → matthew on the lava lamp wall. Illustrative until filled in from -// a recorded run of examples/agent/scripts/walkthrough.mjs. +// DABstep task 2557 (hard), from docs/experiments.md runs and Adyen's +// official per-task scores: the same agent and prompt, without and with memory. export const walkthrough = { - illustrative: true, - michelle: { runs: ["error", "ok", "ok"] as ("error" | "ok")[], tokens: 3 }, - matthew: { runs: ["ok"] as ("error" | "ok")[], tokens: 1 } + task: "2557", + question: "Fee 64 applied only to account type S in 2023: which merchants are affected?", + without: { runs: 10, tokensK: 279, correct: false, answer: "Not Applicable (ran out of steps)" }, + with: { runs: 2, tokensK: 8, correct: true, answer: "correct", examples: ["t2556", "t2563", "t2575"] } }; diff --git a/demo/video/src/scenes/Visual.tsx b/demo/video/src/scenes/Visual.tsx index 371f5b7..78529d9 100644 --- a/demo/video/src/scenes/Visual.tsx +++ b/demo/video/src/scenes/Visual.tsx @@ -19,9 +19,9 @@ export function Visual({ visual, cue }: { visual: VisualKind; cue: Cue }) { memory: () => , "under-the-hood": () => , repo: () => , - scale: () => , recall: () => , walkthrough: () => , + provenance: () => , curve: () => , accuracy: () => , contagion: () => , @@ -369,6 +369,7 @@ function Memory({ cue }: { cue: Cue }) { const t = useSeconds(); const tCommit = cue("commit", 1.6); const tOne = cue("One repo", 9); + const tSwarm = cue("a thousand agents", 99); return ( PHASE 1 · CODE MEMORY @@ -386,9 +387,12 @@ function Memory({ cue }: { cue: Cue }) { ); })} - ); } @@ -450,28 +454,6 @@ function RepoLog() { ); } -function Scale() { - const t = useSeconds(); - const cols = 50, rows = 20, size = 26, gap = 6; - const x0 = (1920 - cols * (size + gap)) / 2; - const cells = []; - for (let i = 0; i < cols * rows; i++) { - const lit = ramp(t, 0.5 + (i % 37) * 0.04 + Math.floor(i / cols) * 0.18, 1 + (i % 37) * 0.04 + Math.floor(i / cols) * 0.18); - cells.push( - 0.5 ? theme.orange : theme.panel} opacity={0.35 + 0.65 * lit} /> - ); - } - return ( - - ONE REPO PER AGENT - {cells} - - - ); -} - function Recall({ cue }: { cue: Cue }) { const t = useSeconds(); const tEmbed = cue("embeds", 2.5); @@ -502,45 +484,46 @@ function Recall({ cue }: { cue: Cue }) { ); } -function Lane({ y, name, runs, tokens, maxTokens, at, color }: { - y: number; name: string; runs: ("error" | "ok")[]; tokens: number; maxTokens: number; at: number; color: string; +function Lane({ y, label, runs, tokensK, maxTokensK, correct, at, color }: { + y: number; label: string; runs: number; tokensK: number; maxTokensK: number; correct: boolean; at: number; color: string; }) { const t = useSeconds(); + const step = 0.18; + const verdictAt = at + 0.6 + runs * step; return ( - - {runs.map((r, i) => ( - - - + + {Array.from({ length: runs }, (_, i) => ( + + + ))} - - - + + + + + + + ); } function Walkthrough({ cue }: { cue: Cue }) { - const tM = cue("Michelle asks", 2); - const tT = cue("Matthew asks", 9); const d = walkthrough; - const max = Math.max(d.michelle.tokens, d.matthew.tokens); + const tWithout = cue("Without memory", 4); + const tWith = cue("With memory", 9); + const max = Math.max(d.without.tokensK, d.with.tokensK); return ( - THE LAVA LAMP WALL - - {Array.from({ length: 12 }, (_, i) => ( - - ))} - - - - {d.illustrative && ( - - )} + DABSTEP · TASK {d.task} · HARD + + + ); } @@ -776,3 +759,30 @@ function Credits() { ); } + +/** The README poster: the opening question, the title, and a play button. */ +export function Poster() { + return ( + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/demo/video/src/script.ts b/demo/video/src/script.ts index 3f4ab81..aa38b9b 100644 --- a/demo/video/src/script.ts +++ b/demo/video/src/script.ts @@ -6,9 +6,11 @@ // Style: one idea per scene, told with a diagram, with on-screen text of a few // words at most. The voiceover carries the detail. // -// `minSeconds` is how long a scene's recording (public/clips/.mp4, listed -// in public/clips/index.json) needs. It applies only once the recording -// exists. The rules require 5–10 min; `npm run voiceover` reports the total. +// A scene plays public/clips/.mp4 instead of its diagram when +// public/clips/index.json lists it (scripts/record.mjs does that), and lasts +// at least as long as the clip. `minSeconds` estimates an empty slot's length +// for the runtime report. The rules require 5–10 min; `npm run voiceover` +// reports the total. export type Visual = | "thesis" @@ -18,10 +20,10 @@ export type Visual = | "gap" | "memory" | "under-the-hood" - | "scale" | "recall" | "walkthrough" | "repo" + | "provenance" | "curve" | "accuracy" | "contagion" @@ -33,7 +35,7 @@ export type Visual = // `extraHold` lengthens a scene past its voiceover, e.g. for credits. export type Scene = { id: string; visual: Visual; minSeconds?: number; extraHold?: number }; -export const SPEAKER = "orion"; +export const SPEAKER = "arcas"; // Seconds of silence before each line and after it. Keep these small: Aura's // own phrasing already has natural pauses, and long holds read as dead air. @@ -42,12 +44,12 @@ export const HOLD = 0.6; /** * A scene's length: its voiceover plus the lead-in and hold, stretched to - * `minSeconds` only when that scene's recording exists. Placeholders - * shouldn't pad with silence. + * fit its recording (`clipSeconds`, from public/clips/index.json) when there + * is one. Placeholders don't pad with silence. */ -export function sceneSeconds(scene: Scene, voiceSeconds: number | undefined, hasClip: boolean): number { +export function sceneSeconds(scene: Scene, voiceSeconds: number | undefined, clipSeconds?: number): number { const voiced = LEAD_IN + (voiceSeconds ?? 8) + HOLD + (scene.extraHold ?? 0); - return hasClip ? Math.max(voiced, scene.minSeconds ?? 0) : voiced; + return clipSeconds ? Math.max(voiced, clipSeconds + 0.3) : voiced; } export const scenes: Scene[] = [ @@ -59,9 +61,9 @@ export const scenes: Scene[] = [ { id: "code-memory", visual: "memory" }, { id: "under-the-hood", visual: "under-the-hood" }, { id: "repo", visual: "repo", minSeconds: 30 }, - { id: "scale", visual: "scale", minSeconds: 25 }, { id: "recall", visual: "recall" }, - { id: "walkthrough", visual: "walkthrough", minSeconds: 60 }, + { id: "walkthrough", visual: "walkthrough" }, + { id: "provenance", visual: "provenance", minSeconds: 35 }, { id: "curve", visual: "curve" }, { id: "accuracy", visual: "accuracy" }, { id: "contagion", visual: "contagion" }, diff --git a/demo/video/terminal/new-worker.tape b/demo/video/terminal/new-worker.tape index ddeddfa..8da906b 100644 --- a/demo/video/terminal/new-worker.tape +++ b/demo/video/terminal/new-worker.tape @@ -7,17 +7,8 @@ # and then shown with cat. Output frames-new-worker/ -Set Framerate 30 Require npx - -Set Shell "bash" -Set FontSize 26 -Set Width 1920 -Set Height 1080 -Set Padding 56 -Set TypingSpeed 40ms -Set WaitTimeout 240s -Set Theme { "name": "codemode", "background": "#0f1115", "foreground": "#eef0f4", "cursor": "#f38020", "selection": "#2a2f3a", "black": "#181b22", "red": "#ef5b5b", "green": "#3ecf8e", "yellow": "#fbad41", "blue": "#4d9fff", "magenta": "#a974ff", "cyan": "#5ad1e6", "white": "#eef0f4", "brightBlack": "#9aa3b2", "brightRed": "#ef5b5b", "brightGreen": "#3ecf8e", "brightYellow": "#fbad41", "brightBlue": "#4d9fff", "brightMagenta": "#a974ff", "brightCyan": "#5ad1e6", "brightWhite": "#ffffff" } +Source terminal/theme.tape # Off camera: a clean prompt, an empty directory, no credentials (the deploy is # a dry run), and npm's minimum-release-age check off for this session only. diff --git a/demo/video/terminal/provenance.tape b/demo/video/terminal/provenance.tape new file mode 100644 index 0000000..0d2d403 --- /dev/null +++ b/demo/video/terminal/provenance.tape @@ -0,0 +1,35 @@ +# Terminal recording for the "provenance" scene: follow DABstep task 2557's +# Codemode-Examples trailer from its Artifacts repo to the run it learned from +# (task 2556, commit dd79a79), with plain git. +# ARTIFACTS_BASE=https://.artifacts.cloudflare.net/git/codemode-git node scripts/record.mjs provenance +# Short-lived read tokens are created off camera; only $T1 and $T2 are shown. + +Output frames-provenance/ +Require git +Source terminal/theme.tape + +Hide +Type `export PS1='$ ' T1=$(node scripts/artifacts-token.mjs full1-codemode-git-examples-t2557 900) T2=$(node scripts/artifacts-token.mjs full1-codemode-git-examples-t2556 900) R=$ARTIFACTS_BASE && cd $(mktemp -d) && clear` +Enter +Sleep 10s +Show + +Type `git clone -q -c http.extraHeader="Authorization: Bearer $T1" $R/full1-codemode-git-examples-t2557.git task-2557` +Sleep 400ms +Enter +Sleep 3s + +Type `git -C task-2557 log -1 --skip 1 --format='%C(yellow)%h%Creset %s%n%n%(trailers:key=Codemode-Status,key=Codemode-Examples)'` +Sleep 400ms +Enter +Sleep 7s + +Type `git clone -q -c http.extraHeader="Authorization: Bearer $T2" $R/full1-codemode-git-examples-t2556.git task-2556` +Sleep 400ms +Enter +Sleep 3s + +Type "clear && git -C task-2556 show dd79a79:run.js | head -22" +Sleep 400ms +Enter +Sleep 9s diff --git a/demo/video/terminal/repo.tape b/demo/video/terminal/repo.tape new file mode 100644 index 0000000..c687bae --- /dev/null +++ b/demo/video/terminal/repo.tape @@ -0,0 +1,34 @@ +# Terminal recording for the "repo" scene: clone one agent's Artifacts repo +# with plain git and read its history. +# REPO_NAME=agent- REPO_REMOTE=https://…/agent-.git node scripts/record.mjs repo +# A short-lived read token is created off camera; only $TOKEN is shown. + +Output frames-repo/ +Require git +Source terminal/theme.tape + +Hide +Type `export PS1='$ ' TOKEN=$(node scripts/artifacts-token.mjs $REPO_NAME 900) && cd $(mktemp -d) && clear` +Enter +Sleep 6s +Show + +Type `git clone -c http.extraHeader="Authorization: Bearer $TOKEN" $REPO_REMOTE matthew` +Sleep 400ms +Enter +Sleep 4s + +Type `cd matthew && git log --format='%C(yellow)%h%Creset %s%n%(trailers:key=Codemode-Status,key=Codemode-Examples)'` +Sleep 400ms +Enter +Sleep 7s + +Type "clear && cat run.js" +Sleep 300ms +Enter +Sleep 7s + +Type "clear && cat result.json | head -c 400; echo" +Sleep 300ms +Enter +Sleep 5s diff --git a/demo/video/terminal/theme.tape b/demo/video/terminal/theme.tape new file mode 100644 index 0000000..aac55a1 --- /dev/null +++ b/demo/video/terminal/theme.tape @@ -0,0 +1,10 @@ +# Shared settings for the terminal recordings. +Set Framerate 30 +Set Shell "bash" +Set FontSize 26 +Set Width 1920 +Set Height 1080 +Set Padding 56 +Set TypingSpeed 40ms +Set WaitTimeout 240s +Set Theme { "name": "codemode", "background": "#0f1115", "foreground": "#eef0f4", "cursor": "#f38020", "selection": "#2a2f3a", "black": "#181b22", "red": "#ef5b5b", "green": "#3ecf8e", "yellow": "#fbad41", "blue": "#4d9fff", "magenta": "#a974ff", "cyan": "#5ad1e6", "white": "#eef0f4", "brightBlack": "#9aa3b2", "brightRed": "#ef5b5b", "brightGreen": "#3ecf8e", "brightYellow": "#fbad41", "brightBlue": "#4d9fff", "brightMagenta": "#a974ff", "brightCyan": "#5ad1e6", "brightWhite": "#ffffff" } diff --git a/demo/video/transcript.md b/demo/video/transcript.md index b23b0ec..b12fd0c 100644 --- a/demo/video/transcript.md +++ b/demo/video/transcript.md @@ -33,7 +33,7 @@ But the isolate is thrown away after every run, and the code goes with it. When ## code-memory -So we keep it in a Cloudflare Artifact git repository. Every execution becomes a commit on that agent's own personal repo: the code, every tool call and its result, and the outcome. One repo per agent, and one writer per repo. Nothing to lock, nothing to merge. +So we keep it in a Cloudflare Artifact git repository. Every execution becomes a commit on that agent's own personal repo: the code, every tool call and its result, and the outcome. One repo per agent, and one writer per repo. Nothing to lock, nothing to merge. In our test, a thousand agents committed at once: a thousand commits in under thirty seconds, with zero errors. ## under-the-hood @@ -43,18 +43,17 @@ Under the hood, a connector hooks the end of every execution in the Cloudflare S Clone an agent's repo, and its log is the agent's trajectory: every attempt, every fix, every answer. -## scale - -Artifacts is built for tens of millions of repos, so every agent gets its own, and they all write at the same time. - ## recall Here's a simple way agents can use Artifacts to learn. When a run produces an answer, Workers AI embeds the question and the code into Cloudflare Vectorize. The next agent with a similar question searches for similar solutions and uses that for better context. ## walkthrough - -Let's walk through an example: Cloudflare's wall of lava lamps. Agent Michelle asks how many lamps are flowing. With no memory, Michelle has to discover that the wall is paginated. Agent Matthew asks about the red lamps, starts from Michelle's run, and already knows to walk every page. +Here's one real task from the benchmark: if a fee only applied to one account type in 2023, which merchants would it affect? Without memory, the agent wrote ten programs, ran out of steps, and gave up. With memory, it started from three runs of similar questions, and got it right in two programs, with eight thousand tokens instead of two hundred and seventy-nine thousand. + +## provenance + +And it's all in Artifacts. Clone that agent's repo, and its commit names the exact runs it learned from. Follow the link to the next repo, and there's the code it started from. ## curve diff --git a/demo/video/worker/index.ts b/demo/video/worker/index.ts index 2e340af..10f8630 100644 --- a/demo/video/worker/index.ts +++ b/demo/video/worker/index.ts @@ -1,4 +1,5 @@ -// POST /tts {"text": "...", "speaker": "orion"} -> audio/mpeg (Deepgram Aura-2) +// POST /tts {"text": "...", "speaker": "orion", "wav"?: true} -> audio (Deepgram Aura-2): +// MP3 by default, or uncompressed 16-bit 24 kHz WAV with "wav": true // POST /transcribe