Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
137 lines (135 loc) · 19.6 KB
/
Copy pathindex.html
File metadata and controls
137 lines (135 loc) · 19.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#fafafa">
<meta name="description" content="CacheBack: receiver-conditioned communication between LLM agents. Paper, code, results, and demonstrations.">
<meta property="og:title" content="CacheBack | Receiver-conditioned communication">
<meta property="og:description" content="The receiver asks for what it needs. CacheBack uses that request to select which internal state gets sent, without additional training.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://agentcacheback.github.io/">
<meta property="og:image" content="https://agentcacheback.github.io/demo/coding/poster.jpg">
<meta property="og:image:alt" content="CacheBack completes a Django patch while text workers are still writing reports.">
<meta name="twitter:card" content="summary_large_image">
<link rel="canonical" href="https://agentcacheback.github.io/">
<title>CacheBack | Receiver-conditioned communication</title>
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='6' fill='%231c211e'/%3E%3Cpath d='M7 7h7v7H7zm11 0h7v7h-7zM7 18h7v7H7z' fill='%230f766e'/%3E%3Cpath d='M18 18h7v7h-7z' fill='%23fff'/%3E%3C/svg%3E">
<link rel="stylesheet" href="website/assets/styles.css?v=lean-2">
<script type="module" src="website/assets/app.js"></script>
</head>
<body>
<a class="skip-link" href="#main">Skip to content</a>
<header class="site-header wrap">
<a class="brand" href="#" aria-label="CacheBack home"><span class="brand-mark" aria-hidden="true"><i></i><i></i><i></i><i></i></span>CacheBack</a>
<nav aria-label="Main navigation"><a href="#abstract">Overview</a><a href="#results">Results</a><a href="#demo">Demos</a></nav>
</header>
<main id="main">
<section class="hero wrap" aria-labelledby="hero-title">
<div class="hero-copy">
<p class="eyebrow">September 2026</p>
<h1 id="hero-title">CacheBack</h1>
<p class="hero-subtitle">Receiver-conditioned communication<br>between LLM agents.</p>
<div class="hero-authors">
<ul aria-label="Authors"><li>Maximillian Rossi</li><li>Prajwal Raghunath</li><li>Haoqing Xuan</li><li>Yusen Zhang</li><li>Eugene Wu</li></ul>
<p class="affiliations"><a href="https://daplab.cs.columbia.edu/"><img src="https://daplab.cs.columbia.edu/files/images/daplab_logo_horiz.png" width="1508" height="331" alt="DAP Lab"></a><span>Columbia University</span></p>
</div>
<p class="hero-intro"><strong>The receiver asks for <span class="rclc-emphasis">what it needs.</span></strong></p>
<nav class="resource-links" aria-label="Project resources">
<a href="https://arxiv.org/pdf/2609.32046">Paper <span>PDF</span></a>
<a href="https://github.com/agentcacheback/cacheback">Code</a>
<a href="#demo">Watch demo</a>
<a href="https://arxiv.org/abs/2609.32046">arXiv</a>
<a href="#citation" id="cite-link">Cite</a>
</nav>
</div>
<aside class="hero-results" aria-labelledby="hero-results-title">
<h2 id="hero-results-title" class="eyebrow">FANOUTQA</h2>
<p class="chart-context">Questions spanning multiple documents. Compared with same-size text senders.</p>
<figure id="result-summary" class="comparison-plot" aria-labelledby="hero-results-title">
<div class="plot-legend"><span><i></i>Text</span><span class="rclc-emphasis"><i></i>CacheBack</span></div>
<div class="paired-metrics chart-heading"><div><strong>Strict accuracy (%) ↑</strong></div><div><strong>Median time (s) ↓</strong></div></div>
<div class="model-row" data-model="qwen"><div class="model-heading paired-metrics"><div class="model-label"><h3>Qwen 3 <small>8B</small></h3><strong class="accuracy-gain">+14.7<abbr title="percentage points">pp</abbr></strong></div></div><div class="paired-metrics"><div class="paired-bars"><div class="bar-row" role="img" aria-label="Text: 40.7%"><div class="bar-track"><i style="width:40.6700%"></i></div><b>40.7%</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 55.3%"><div class="bar-track"><i style="width:55.3300%"></i></div><b>55.3%</b></div></div><div class="paired-bars latency-bars"><div class="speed-guide" style="--cache-end:11.9938%"><strong class="speedup">3.2× faster</strong></div><div class="bar-row" role="img" aria-label="Text: 612 s"><div class="bar-track"><i style="width:38.2437%"></i></div><b>612 s</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 192 s"><div class="bar-track"><i style="width:11.9938%"></i></div><b>192 s</b></div></div></div></div>
<div class="model-row" data-model="nemotron"><div class="model-heading paired-metrics"><div class="model-label"><h3>Nemotron <small>12B</small></h3><strong class="accuracy-gain">+11.3<abbr title="percentage points">pp</abbr></strong></div></div><div class="paired-metrics"><div class="paired-bars"><div class="bar-row" role="img" aria-label="Text: 38.7%"><div class="bar-track"><i style="width:38.6667%"></i></div><b>38.7%</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 50.0%"><div class="bar-track"><i style="width:50.0000%"></i></div><b>50.0%</b></div></div><div class="paired-bars latency-bars"><div class="speed-guide" style="--cache-end:6.3516%"><strong class="speedup">1.3× faster</strong></div><div class="bar-row" role="img" aria-label="Text: 131 s"><div class="bar-track"><i style="width:8.2023%"></i></div><b>131 s</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 102 s"><div class="bar-track"><i style="width:6.3516%"></i></div><b>102 s</b></div></div></div></div>
<div class="model-row" data-model="gemma"><div class="model-heading paired-metrics"><div class="model-label"><h3>Gemma 4 <small>12B</small></h3><strong class="accuracy-gain">+7.3<abbr title="percentage points">pp</abbr></strong></div></div><div class="paired-metrics"><div class="paired-bars"><div class="bar-row" role="img" aria-label="Text: 52.0%"><div class="bar-track"><i style="width:52.0000%"></i></div><b>52.0%</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 59.3%"><div class="bar-track"><i style="width:59.3300%"></i></div><b>59.3%</b></div></div><div class="paired-bars latency-bars"><div class="speed-guide" style="--cache-end:12.5812%"><strong class="speedup">3× faster</strong></div><div class="bar-row" role="img" aria-label="Text: 603 s"><div class="bar-track"><i style="width:37.6938%"></i></div><b>603 s</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 201 s"><div class="bar-track"><i style="width:12.5812%"></i></div><b>201 s</b></div></div></div></div>
<div class="model-row" data-model="ministral"><div class="model-heading paired-metrics"><div class="model-label"><h3>Ministral 3 <small>14B</small></h3><strong class="accuracy-gain">+20.7<abbr title="percentage points">pp</abbr></strong></div></div><div class="paired-metrics"><div class="paired-bars"><div class="bar-row" role="img" aria-label="Text: 38.7%"><div class="bar-track"><i style="width:38.6700%"></i></div><b>38.7%</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 59.3%"><div class="bar-track"><i style="width:59.3300%"></i></div><b>59.3%</b></div></div><div class="paired-bars latency-bars"><div class="speed-guide" style="--cache-end:12.0813%"><strong class="speedup">8× faster</strong></div><div class="bar-row" role="img" aria-label="Text: 1,537 s"><div class="bar-track"><i style="width:96.0563%"></i></div><b>1,537 s</b></div><div class="bar-row rclc-bar" role="img" aria-label="CacheBack: 193 s"><div class="bar-track"><i style="width:12.0813%"></i></div><b>193 s</b></div></div></div></div>
<div class="paired-metrics chart-axes" aria-hidden="true"><div class="chart-axis"><span>0</span><span>50</span><span>100</span></div><div class="chart-axis"><span>0</span><span>800</span><span>1,600</span></div></div>
</figure>
<details class="technical"><summary>Experimental setup</summary><p>pp means percentage points. Timing bars share a 0-1,600 second scale. Speedup compares median completion times.</p><p><strong>rX is the compression factor:</strong> keep about 1 in X positions from the sender’s processed sequence. <strong>r4 keeps 25%.</strong></p><p class="results-note" id="results-note">FanOutQA · Qwen 3 8B r4, Nemotron Nano 2 12B r8, Gemma 4 12B r4, and Ministral 3 14B r32 · 50 concurrent tasks on 8 H100 GPUs. Accuracy averaged over three receiver draws. Completion includes queueing and final answer generation.</p><p>Selected operating points with a fixed receiver and same-size text sender; GPU allocation differs by channel. Strict accuracy requires all reference-answer groups. See the paper for full frontiers and variability.</p><p>The title’s 94% refers to r16: one in sixteen sender positions retained, or 93.75% removed. The Qwen numbers above use r4, which removes 75%. Position reduction is not the same quantity as total GPU memory saved. <a href="https://arxiv.org/pdf/2609.32046#page=7">Published results</a> · <a href="website/assets/results.json">Download these data</a></p></details>
</aside>
</section>
<section id="demo" class="demo-section" aria-labelledby="demo-title">
<div class="wrap">
<div class="demo-heading"><h2 id="demo-title">Watch the demo</h2></div>
<article class="recorded-demo coding-demo" id="coding-demo" aria-labelledby="coding-title">
<div class="demo-description"><div><p class="demo-type">36 seconds · 4K · Recorded coding task</p><h3 id="coding-title">Fixing a Django bug with seven coding agents</h3><p>Qwen3-8B produces the patch <strong class="rclc-emphasis">4.41× faster</strong> with CacheBack than with written reports on this case. Both runs make the same one-line code change and pass all 88 tests.</p></div></div>
<div class="demo-player"><video id="coding-video" controls playsinline preload="none" tabindex="0" width="3840" height="2160" poster="demo/coding/poster.jpg" aria-labelledby="coding-title" aria-describedby="coding-caption">
<source src="demo/coding/rclc-cacheback-4k.mp4" type="video/mp4">
<p><a href="demo/coding/rclc-cacheback-4k.mp4">Watch the demo as an MP4</a>.</p>
</video><button class="play-demo" id="play-demo" type="button" hidden><span aria-hidden="true">▶</span> Watch the full demo</button></div>
<div class="demo-caption" id="coding-caption"><p><strong>One recorded case:</strong> CacheBack 25.66 s; text 113.21 s. Startup and test grading excluded. Silent video; playback speed varies. <a href="demo/coding/rclc-cacheback-4k.mp4">Open in full window</a></p>
<details class="demo-evidence"><summary>Recording details and text description</summary><p>Seven Qwen3-8B workers pass information to a coordinator. The supplied bug report identifies a missing <code>save_m2m()</code> call in Django’s user creation form. Both runs add that call after saving the user. The CacheBack run finishes while the text workers are still generating reports.</p><p>The interface is reconstructed from separate recorded runs, aligned at their start. The final response and patch come from the recorded outputs. Both patches subsequently pass one new test and 87 regression tests; grading is outside the clocks. This is an individual demonstration, not an aggregate benchmark. <a href="demo/coding/evidence.json">Recorded results</a></p></details>
</div>
</article>
</div>
</section>
<section id="abstract" class="abstract-section wrap" aria-labelledby="abstract-title">
<figure class="overview-figure"><a href="https://arxiv.org/pdf/2609.32046" aria-label="Read Figure 2 in the paper"><img src="website/assets/figures/communication-overview.webp" width="1600" height="393" loading="lazy" alt="Figure 2: sending every agent's full cache exceeds the receiver's context limit. CacheBack sends selected positions and latent steps, leaving room for the receiver's prompt."></a><figcaption>Figure 2. Select what the receiver needs, instead of accumulating every sender’s context.</figcaption></figure>
<div class="tldr"><h2 id="abstract-title">TL;DR</h2><p>Agents can share <strong>internal model state</strong> instead of writing reports. Sending all of it, however, overwhelms the receiver.</p><p><strong>The receiver asks for what it needs.</strong> CacheBack uses attention to that request to select which state gets sent. Simple, robust, and <strong>training-free.</strong></p></div>
</section>
<section id="results" class="section wrap" aria-labelledby="results-title">
<h2 id="results-title">Results</h2>
<div class="paper-curves" id="paper-curves">
<div class="curves-heading"><h3>FanOutQA</h3><p id="compression-guide">Three senders read separate sources; one receiver answers. <strong>Higher is more accurate; left is faster.</strong> CacheBack points vary message size; text points vary sender size. <strong>rX keeps 1/X of the sender’s positions: r4 keeps 25%.</strong></p></div>
<div class="curve-legend" aria-label="Curve legend"><span class="rclc-emphasis">● ━ CacheBack</span><span class="text-emphasis">▲ ┄ Text communication</span><span>× Question only</span></div>
<div class="curve-grid">
<figure><img src="website/assets/figures/fanoutqa-qwen.svg" width="560" height="460" loading="lazy" alt="FanOutQA, Qwen 3 8B: CacheBack r4 reaches 55.3% strict accuracy at 192 seconds, compared with 40.7% at 612 seconds for same-size text; weaker settings are also plotted."></figure>
<figure><img src="website/assets/figures/fanoutqa-nemotron.svg" width="560" height="460" loading="lazy" alt="FanOutQA, Nemotron Nano 2 12B: CacheBack r8 reaches 50% accuracy near 102 seconds versus 38.7% near 131 seconds for same-size text. A smaller text sender is faster at lower accuracy."></figure>
</div>
<div class="chain-results" id="chain-results"><div class="curves-heading"><h3>LongBench v2 Easy</h3><p>Four agents read a long document in sequence, passing state to a final answering agent. Relative budgets (rX) grow with context; fixed budgets (32K, 64K) cap message positions. Stronger compression can reduce accuracy.</p></div>
<div class="curve-legend" aria-label="LongBench curve legend"><span class="rclc-emphasis">● ━ CacheBack · relative budget</span><span class="fixed-emphasis">■ ━ CacheBack · fixed budget</span><span class="text-emphasis">▲ ┄ Text</span><span>× Question only</span></div>
<div class="curve-grid">
<figure><img src="website/assets/figures/longbench-qwen.svg" width="560" height="460" loading="lazy" alt="LongBench v2 Easy, Qwen 3 8B: both relative and fixed CacheBack budgets include settings faster and more accurate than same-size text. Stronger compression eventually lowers accuracy."></figure>
<figure><img src="website/assets/figures/longbench-nemotron.svg" width="560" height="460" loading="lazy" alt="LongBench v2 Easy, Nemotron Nano 2 12B: CacheBack r8 reaches 48% accuracy near 133 seconds, while fixed-budget settings show a different tradeoff; smaller text senders can be faster."></figure>
</div>
</div>
<p class="curve-caption">50 concurrent tasks on 8 H100s; accuracy averaged over three receiver draws. Completion includes queueing. <a href="https://arxiv.org/pdf/2609.32046">Full setup and results in the paper.</a></p>
</div>
</section>
<section id="booking-demo" class="section wrap" aria-label="Interactive booking demo">
<div class="recorded-demo">
<div class="demo-replay-link"><a class="text-link" href="demo/index.html" target="_blank" rel="noopener noreferrer">Open full window <span aria-hidden="true">↗</span></a></div>
<div class="demo-window"><iframe id="flagship-demo" src="demo/index.html?v=fit-3" title="Recorded CacheBack and text booking relay comparison, with playback controls" loading="lazy" sandbox="allow-scripts allow-same-origin" referrerpolicy="no-referrer"></iframe></div>
</div>
</section>
<section class="code-section" id="code" aria-labelledby="code-title"><div class="wrap code-layout"><div><h2 id="code-title">Use CacheBack</h2><p>Install <code>rclc</code>, bind your agents, and pass the receiver’s request.</p><a class="button primary" href="https://github.com/agentcacheback/cacheback">Code and documentation</a><p class="code-note">Local Qwen 3 weights, using Hugging Face or vLLM.<br>Hosted chat APIs do not expose the required state.</p></div><div class="code-card"><div class="code-bar"><span>Python</span><button class="copy-button" data-copy="quickstart" type="button" aria-label="Copy code"><svg class="copy-icon" aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"><rect x="8" y="8" width="12" height="13" rx="2"/><path d="M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3"/></svg><span class="copy-feedback" aria-hidden="true">Copied</span></button></div><pre><code id="quickstart"><span class="code-keyword">import</span> rclc
sender = rclc.<span class="code-function">bind</span>(
model, tokenizer,
messages=sender_history, backend=<span class="code-string">"hf"</span>,
)
receiver = rclc.<span class="code-function">bind</span>(
model, tokenizer,
messages=receiver_history, backend=<span class="code-string">"hf"</span>,
)
<span class="code-focus"><span class="code-keyword">await</span> rclc.<span class="code-function">transfer</span>(
sender, receiver,
<span class="code-string">"Who owns the Cedar booking?"</span>,
)</span>
inputs = receiver.<span class="code-function">pop</span>()</code></pre><p class="snippet-note">Model, tokenizer, and histories loaded; run in an async function or notebook. <a href="https://github.com/agentcacheback/cacheback/blob/main/examples/quickstart.py">Runnable quickstart</a></p></div></div></section>
<section id="paper" class="section wrap paper-section" aria-labelledby="paper-title"><div><p class="eyebrow">THE PAPER</p><h2 id="paper-title">Receiver-Conditioned Latent Communication gives 94% CacheBack</h2><p>Maximillian Rossi, Prajwal Raghunath, Haoqing Xuan, Yusen Zhang, and Eugene Wu.</p><div class="hero-actions"><a class="button primary" href="https://arxiv.org/pdf/2609.32046">Read the PDF</a><a class="text-link" href="https://github.com/agentcacheback/cacheback/tree/paper">Reproduce the paper</a></div></div><div class="citation" id="citation"><h3>Cite this work</h3><button class="copy-button" data-copy="bibtex" type="button" aria-label="Copy citation"><svg class="copy-icon" aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"><rect x="8" y="8" width="12" height="13" rx="2"/><path d="M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3"/></svg><span class="copy-feedback" aria-hidden="true">Copied</span></button><pre><code id="bibtex">@misc{rossi2026cacheback,
title = {Receiver-Conditioned Latent Communication
gives 94\% CacheBack},
author = {Rossi, Maximillian and Raghunath, Prajwal
and Xuan, Haoqing and Zhang, Yusen
and Wu, Eugene},
year = {2026},
eprint = {2609.32046},
archivePrefix = {arXiv},
primaryClass = {cs.AI},
url = {https://arxiv.org/abs/2609.32046}
}</code></pre></div></section>
</main>
<footer class="site-footer wrap"><a class="brand" href="#">CacheBack</a><span>Receiver-conditioned communication · 2026</span><a href="https://github.com/agentcacheback/cacheback">Code & reproducibility</a></footer>
<div id="copy-status" class="sr-only" role="status"></div>
</body>
</html>