SPB Git

spb/wp30_uqo

Public

WP30: analysis, router, mapper, hosted track, protocol/audit/reproduce modules, paper skeleton, core configs

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 30, 2026) parent c1d4b39 Browse files

45 changed files +9,127 −751

modified DECISIONS.md +1 −0
@@ -16,3 +16,4 @@ All times America/Toronto unless noted.
16 16 - **D-010 Exec family difficulty (dev-only decision, 2026-10-30).** With the 7-rule specification the receiver (Qwen2.5-3B) failed even with the full ticket (A1 pass rate 0 on the smoke item: it duplicated the loop instead of composing the discount rule), so the family could not discriminate between communication methods. The specification was reduced to 6 rules with two missing in the buggy code (region exclusion, tax). Hidden tests unchanged in form (5 subsets, exact float match). Datasets regenerated before any test-split evaluation.
17 17 - **D-011 Network path for E2/E6 (2026-10-30).** The laptop cannot open TCP connections to the nodes' LAN addresses (192.168.2.x; its SSH goes through Tailscale, whose ACL blocks non-SSH ports). Genuine two-node measurements therefore run **between two cluster nodes on the wired LAN**: sender/client on M3U96a (192.168.2.80), receiver worker on M3U96b (192.168.2.85). Measured link: iperf3 4 streams ≈ 940 Mbit/s (1 GbE, not 10 GbE as older notes suggested), RTT ≈ 1.2 ms. Both nodes concurrently host a CPU-light workload from another study (WP29 `claude --bare` executors); load average ≈ 1.8 on 32 cores at setup time; recorded as a limitation.
18 18 - **D-012 Learned mapper scope (Track C).** Level 2 (same family, different size): Qwen2.5-1.5B → Qwen2.5-3B share the tokenizer (token-aligned), both have 2 KV heads × 128 dims but 28 vs 36 layers → per-receiver-layer linear maps from an aligned sender layer, trained on train-split caches only (reconstruction loss; optional distillation). Level 3 (cross-family Llama-3.2-3B → Qwen2.5-3B) requires tokenizer alignment by character spans; attempted only if level 2 completes; labelled "adapted (SwaT-inspired), not a SwaT reproduction" (SwaT has no public checkpoint or licence).
19 +- **D-013 Pilot scope reduced (2026-10-30).** After 120 trials the pilot ran at ≈5 trials/min (sender generations for question-aware A4/A5 dominate, GPU shared with mapper training), projecting > 12 h for 4 092 trials. Pilot reduced to 4 documents per family and 5 questions per document (1 984 trials) via `--resume` (trial keys unchanged). Pilot timings are not used for any claim; the core campaign runs alone on the GPU.
added Makefile +10 −0
@@ -0,0 +1,10 @@
1 +.PHONY: paper reproduce-analysis test clean-paper
2 +PY=.venv/bin/python
3 +paper:
4 + cd paper && latexmk -pdf -interaction=nonstopmode -halt-on-error main.tex >/dev/null && cp main.pdf WP30_Boucher_Cache_Compression_Knowledge_Transfer.pdf && echo "paper/WP30_Boucher_Cache_Compression_Knowledge_Transfer.pdf"
5 +reproduce-analysis:
6 + $(PY) -m wp30 analyze --protocol protocol/frozen.json && $(PY) -m wp30.analysis.static_tables && $(PY) -m wp30 audit-artifacts --root .
7 +test:
8 + $(PY) -m pytest -q
9 +clean-paper:
10 + cd paper && latexmk -C >/dev/null; rm -f paper/*.bbl paper/*.run.xml
added README.md +51 −0
@@ -0,0 +1,51 @@
1 +<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca -->
2 +# 🧠 Beyond Text: Cache Compression and Knowledge Transfer in Multi-Agent Systems
3 +
4 +**UQO Working Paper No. 30** — *A Reproducible Study of Fidelity, Communication Cost, and Repeated Handoffs*
5 +
6 +> **TL;DR** — Under which task, model, cache, network and reuse conditions does each communication representation (raw text,
7 +> summaries, structured evidence, lossless codecs, learned prompt compression, native/quantized/evicted KV caches, learned cache
8 +> mappings) preserve useful information at the lowest *measured* end-to-end cost? Real experiments on Apple Silicon (MLX) with
9 +> Qwen2.5-3B / Llama-3.2-3B, genuine two-node cache transfer over a 1 GbE LAN, repeated-handoff chains with an evaluator-only
10 +> fact ledger, fan-in with conflicting evidence, a same-family learned KV mapper, hosted-API receivers, and a development-fitted router.
11 +
12 +## 📌 Status
13 +See `STATUS.md` (phase gates), `DECISIONS.md` (dated decisions), `FINAL_REPORT.md` (completion status and limitations).
14 +
15 +## 🗂 Repository layout
16 +```
17 +protocol/ hypotheses.md (registered), analysis_plan.md, frozen.json (protocol hash), run matrices
18 +literature/ sources.csv (34 verified sources), audit_group{1,2,3}.md, method_notes.md
19 +configs/ models, data, resources (budgets/timeouts), pilot/core experiment configs
20 +src/wp30/ backends (MLX), cache adapters (sparse/quantized/serialize/selection), methods (A0–A8), runner, chains, fanin,
21 + transport (two-node worker), hosted (API track), mapper (Track C), router (E8), analysis, CLI
22 +tests/ cache correctness (12), leakage (3), scoring/data (5)
23 +data/ manifests (splits, licences), generated/docs (agent-visible), generated/keys (evaluator-only), raw/longbench
24 +runs/raw per-attempt JSONL records (schema wp30-attempt-1), chains/ hop messages ; runs/logs ; runs/checkpoints (mapper, router)
25 +results/ tables/ figures/ provenance.json claim_ledger.csv
26 +paper/ LaTeX source + compiled PDF
27 +reproduction/ requirements-lock.txt, minimal.yaml, report.json
28 +```
29 +
30 +## 🚀 Quick start (analysis-only reproduction, no inference)
31 +```bash
32 +uv venv --python 3.12 .venv && source .venv/bin/activate && uv pip install -r reproduction/requirements-lock.txt && uv pip install -e .
33 +make reproduce-analysis # rebuilds results/tables and results/figures from runs/raw
34 +make paper # compiles paper/main.pdf
35 +```
36 +
37 +## 🔁 Inference reproduction (Apple Silicon, ~15 GB of checkpoints from Hugging Face `mlx-community`)
38 +```bash
39 +python -m wp30 doctor --output evidence/environment.json
40 +python -m wp30 data prepare --config configs/data.yaml && python -m wp30 data validate --manifest data/manifests/splits.json
41 +python -m wp30 models probe --config configs/models.yaml
42 +python -m pytest -q # cache correctness suite runs a real 1.5B model
43 +python -m wp30 run --config configs/core.yaml --resume
44 +python -m wp30 reproduce --profile reproduction/minimal.yaml
45 +```
46 +Two-node experiments need a second Mac with the same checkpoint revision: `python -m wp30 worker --port 9430 --model <repo>` on the
47 +receiver node, then `python scripts/e6_network.py --host <ip> ...` on the sender node. Hosted-API experiments need `ANTHROPIC_API_KEY`
48 +/ `OPENAI_API_KEY` and are capped by `configs/resources.yaml`.
49 +
50 +## 📄 Citation
51 +Boucher, S.-P. (2026). *Beyond Text: Cache Compression and Knowledge Transfer in Multi-Agent Systems*. UQO Working Paper No. 30.
added configs/chains_core.yaml +15 −0
@@ -0,0 +1,15 @@
1 +experiment_id: E4_core
2 +splits: [test]
3 +lengths: [2000, 8000]
4 +limit_docs: 20
5 +hops: [1, 2, 4, 8]
6 +budget_tokens: 512
7 +max_fetch_bytes: 1500
8 +max_lookups: 4
9 +chains:
10 + - {representation: A4, mode: closed, agents: [qwen3b]}
11 + - {representation: A5, mode: closed, agents: [qwen3b]}
12 + - {representation: A4, mode: repairable, agents: [qwen3b]}
13 + - {representation: A5, mode: repairable, agents: [qwen3b]}
14 + - {representation: A4, mode: closed, agents: [qwen3b, llama3b]}
15 + - {representation: A5, mode: closed, agents: [qwen3b, llama3b]}
added configs/chains_pilot.yaml +13 −0
@@ -0,0 +1,13 @@
1 +experiment_id: E4_pilot
2 +splits: [dev]
3 +lengths: [2000, 8000]
4 +limit_docs: 6
5 +hops: [1, 2, 4]
6 +budget_tokens: 512
7 +max_fetch_bytes: 1500
8 +max_lookups: 4
9 +chains:
10 + - {representation: A4, mode: closed, agents: [qwen3b]}
11 + - {representation: A5, mode: closed, agents: [qwen3b]}
12 + - {representation: A4, mode: repairable, agents: [qwen3b]}
13 + - {representation: A5, mode: repairable, agents: [qwen3b]}
added configs/core.yaml +35 −0
@@ -0,0 +1,35 @@
1 +# Confirmatory single-handoff campaign (E1/E2-process/E3-text). Locked test split. Fixed before any test outcome was examined.
2 +experiment_id: E1_core
3 +splits: [test]
4 +families: [synthetic, exec, public_qasper, public_2wikimqa]
5 +lengths: [2000, 8000, 16000]
6 +limit_docs_per_family: 40 # synthetic/exec test = all 40; public: first 40 test docs in manifest (hash) order
7 +max_questions_per_doc: 5 # synthetic: 5 of 15 question types per document (first five in generator order)
8 +model_pairs:
9 + - {sender: qwen3b, receiver: qwen3b}
10 + - {sender: llama3b, receiver: llama3b}
11 +generation: {max_tokens: 48, per_family: {exec: 320}}
12 +seeds: [0]
13 +conditions:
14 + - {method: A0}
15 + - {method: A1}
16 + - {method: A2, budget_tokens: 512}
17 + - {method: A3, budget_tokens: 512, access: blind}
18 + - {method: A3, budget_tokens: 512, access: aware}
19 + - {method: A4, budget_tokens: 512, access: blind}
20 + - {method: A4, budget_tokens: 512, access: aware, families: [synthetic]}
21 + - {method: A5, budget_tokens: 512, access: blind}
22 + - {method: A5, budget_tokens: 512, access: aware, families: [synthetic]}
23 + - {method: A6, budget_tokens: 512, access: blind, max_fetch_bytes: 2000, max_lookups: 6}
24 + - {method: A7, codec: zstd}
25 + - {method: A8, budget_tokens: 512, access: blind}
26 + - {method: B0}
27 + - {method: B1}
28 + - {method: B2, bits: 8}
29 + - {method: B2, bits: 4}
30 + - {method: B3, keep_frac: 0.25}
31 + - {method: B4, keep_frac: 0.25}
32 + - {method: B5, keep_frac: 0.25, access: aware}
33 + - {method: B5, keep_frac: 0.25, access: blind}
34 + - {method: B6, keep_frac: 0.25, access: aware}
35 + - {method: B9, keep_frac: 0.25, bits: 8, access: aware, policy: attention}
added configs/core_sender_alone.yaml +14 −0
@@ -0,0 +1,14 @@
1 +# Sender-alone reference for E3 (Qwen2.5-1.5B answering with full context) on the same items.
2 +experiment_id: E3_core_sender
3 +splits: [test]
4 +families: [synthetic, exec]
5 +lengths: [2000, 8000]
6 +limit_docs_per_family: null
7 +max_questions_per_doc: 8
8 +model_pairs:
9 + - {sender: qwen1b5, receiver: qwen1b5}
10 +generation: {max_tokens: 48, per_family: {exec: 320}}
11 +seeds: [0]
12 +conditions:
13 + - {method: A1}
14 + - {method: B0}
added configs/core_transfer.yaml +18 −0
@@ -0,0 +1,18 @@
1 +# Track C confirmatory: same-family size ladder Qwen2.5-1.5B -> Qwen2.5-3B (shared tokenizer). Test split, synthetic + exec.
2 +experiment_id: E3_core
3 +splits: [test]
4 +families: [synthetic, exec]
5 +lengths: [2000, 8000]
6 +limit_docs_per_family: null
7 +max_questions_per_doc: 8
8 +model_pairs:
9 + - {sender: qwen1b5, receiver: qwen3b}
10 +generation: {max_tokens: 48, per_family: {exec: 320}}
11 +seeds: [0]
12 +conditions:
13 + - {method: A1} # receiver alone, full context (reference)
14 + - {method: A4, budget_tokens: 512, access: blind} # sender-generated summary -> receiver
15 + - {method: A5, budget_tokens: 512, access: blind}
16 + - {method: C0} # identity negative control
17 + - {method: C2, mapper: runs/checkpoints/mapper_qwen1b5_to_qwen3b.npz}
18 + - {method: C3, mapper: runs/checkpoints/mapper_qwen1b5_to_qwen3b.npz, keep_frac: 0.25, access: aware}
added configs/fanin_core.yaml +9 −0
@@ -0,0 +1,9 @@
1 +experiment_id: E5_core
2 +splits: [test]
3 +lengths: [2000, 8000]
4 +limit_docs: 20
5 +fan_in: [2, 4]
6 +budget_tokens: 512
7 +sender: qwen3b
8 +aggregator: qwen3b
9 +methods: [full_context, concat_A4, merge_A5, shared_memory_A6, cache_concat_negative_control]
added configs/hosted_core.yaml +15 −0
@@ -0,0 +1,15 @@
1 +experiment_id: ED_hosted_core
2 +splits: [test]
3 +families: [synthetic, exec, public_qasper]
4 +lengths: [2000, 8000]
5 +limit_docs_per_family: 8
6 +max_questions_per_doc: 5
7 +sender: qwen3b
8 +providers: [anthropic, openai]
9 +conditions:
10 + - {method: A0}
11 + - {method: A1}
12 + - {method: A1, provider_cache: true}
13 + - {method: A4, budget_tokens: 512, access: blind}
14 + - {method: A5, budget_tokens: 512, access: blind}
15 + - {method: A6, budget_tokens: 512, access: blind, max_fetch_bytes: 2000, max_lookups: 6}
added configs/hosted_pilot.yaml +14 −0
@@ -0,0 +1,14 @@
1 +experiment_id: ED_hosted_pilot
2 +splits: [dev]
3 +families: [synthetic, exec, public_qasper]
4 +lengths: [2000, 8000]
5 +limit_docs_per_family: 2
6 +max_questions_per_doc: 5
7 +sender: qwen3b
8 +providers: [anthropic, openai]
9 +conditions:
10 + - {method: A0}
11 + - {method: A1}
12 + - {method: A1, provider_cache: true}
13 + - {method: A4, budget_tokens: 512, access: blind}
14 + - {method: A5, budget_tokens: 512, access: blind}
added configs/literature.yaml +3 −0
@@ -0,0 +1,3 @@
1 +sources_csv: literature/sources.csv
2 +audits: [literature/audit_group1.md, literature/audit_group2.md, literature/audit_group3.md]
3 +bib_out: paper/references.bib
added configs/mapper.yaml +6 −0
@@ -0,0 +1,6 @@
1 +sender: qwen1b5
2 +receiver: qwen3b
3 +families: [synthetic, exec]
4 +max_tokens_per_doc: 8192
5 +ridge: 1.0
6 +n_dev_eval: 4
modified configs/pilot.yaml +2 −2
@@ -2,8 +2,8 @@ experiment_id: E1_pilot
2 2 splits: [dev]
3 3 families: [synthetic, exec, public_qasper, public_2wikimqa]
4 4 lengths: [2000, 8000]
5 −limit_docs_per_family: 6
6 −max_questions_per_doc: 8
5 +limit_docs_per_family: 4
6 +max_questions_per_doc: 5
7 7 model_pairs:
8 8 - {sender: qwen3b, receiver: qwen3b}
9 9 - {sender: llama3b, receiver: llama3b}
added literature/method_notes.md +75 −0
@@ -0,0 +1,75 @@
1 +# WP30 method implementation notes (one entry per named method)
2 +
3 +Fidelity labels: **official** (upstream code/checkpoint run as released), **faithful_reimplementation** (algorithm re-implemented
4 +from the paper/code with the same rule and defaults), **adapted** (algorithm changed to fit our setting; differences listed),
5 +**inspired** (shares the idea, not the algorithm), **custom** (WP30 baseline with no published counterpart claimed).
6 +
7 +## A4 abstractive summary — custom
8 +Sender = same checkpoint as receiver (or the configured sender), greedy decoding, prompt `SUMMARY_SYSTEM`/`summary_user`
9 +(`src/wp30/prompts.py`), hard output cap = budget tokens. Question-blind variant never sees the question; question-aware appends it.
10 +Measured: sender input/output tokens, generation time, UTF-8 bytes of the summary; receiver tokens of the summary under its own tokenizer.
11 +
12 +## A5 structured evidence — custom
13 +Same sender/budget as A4; output = JSON {facts:[{entity, attribute, value, quote}], notes?, unknowns?}. Each quote is resolved to a
14 +character span of the source (`doc.find`); unresolved quotes are counted (`unresolved_quotes`). The receiver sees the JSON with spans
15 +(not the quotes) — values are transmitted, spans are provenance. Truncated JSON is repaired at the last complete object.
16 +
17 +## A6 references + metered retrieval — custom
18 +Message = reference index {ref, entity, attribute, span} derived from A5 with values removed. Receiver side: BM25 of the question over
19 +the labels, fetch up to `max_lookups` spans (±40/160 chars) under `max_fetch_bytes`; every fetched byte and lookup is recorded.
20 +
21 +## A7 lossless transport codec — custom (zstd level 3 / gzip 6)
22 +Compress UTF-8 text for transport, decompress at the receiver; receiver prefill unchanged. Measured codec times and bytes.
23 +
24 +## A8 LLMLingua-2 — official
25 +`llmlingua` 0.2.2, `PromptCompressor(model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank", use_llmlingua2=True, device_map="mps")`,
26 +`compress_prompt(doc, rate=budget/source_tokens, force_tokens=["\n",".",",",":","-"], drop_consecutive=True)`. Token classification is
27 +question-agnostic (question-blind by construction). The upstream paper evaluated MeetingBank/LongBench/ZeroScrolls/GSM8K/BBH with
28 +GPT-3.5/Mistral-7B receivers at 2x–5x rates; our receivers are 3B models. Backend: torch 2.15 on MPS (fp32); timing reported separately
29 +because it is a different accelerator path than MLX.
30 +
31 +## B2 packed KV quantization — custom (mlx_lm primitives)
32 +`mx.quantize(K|V, group_size=g, bits=b)` along the head dimension (per token, per group of g channels), asymmetric affine (scale + bias per
33 +group), packed into uint32 words; consumed by `quantized_scaled_dot_product_attention` (quantized execution, no dequantized dense copy).
34 +Bits ∈ {8, 4, 2}; group 64 (32 for 2-bit). Differences vs KIVI: KIVI quantizes keys per *channel* (over tokens) and values per token, with a
35 +full-precision residual window (R = 128) and CUDA kernels; our scheme is the mlx_lm layout (per-token for both). The KIVI motivation
36 +(outlier key channels) predicts exactly the Qwen2.5 failure we observe at 4 bits.
37 +
38 +## B3 sink + recent retention — inspired (StreamingLLM)
39 +Keep the first `sinks=4` positions plus the most recent positions up to the budget. StreamingLLM re-assigns positions *within the cache*
40 +(keys stored un-rotated, rotated at use with arange(kv_len)); WP30 keeps original positions (keys are stored post-RoPE in mlx_lm) and
41 +preserves the logical offset, so new tokens see a positional gap. This is a retention *pattern* test, not a StreamingLLM reproduction
42 +(and StreamingLLM makes no claim about retrieving evicted facts).
43 +
44 +## B4 random retention — custom control
45 +Uniformly random positions (seeded) at the same budget; no sinks.
46 +
47 +## B5 attention-informed selection — faithful_reimplementation (SnapKV rule)
48 +Observation window = last W prompt tokens (question-aware: the fresh query tokens; question-blind: a generic 32-token instruction);
49 +per kv-head attention of the window queries onto prefix keys (softmax, averaged over window queries and over the query heads of the
50 +GQA group), 1-D max-pooling with kernel 7 along positions, top-k per kv-head; the window itself is always retained (`window_keep=32`).
51 +Differences: SnapKV runs inside the prefill kernel (prompt phase) with window 32/64 and kernel 5–13 depending on config; we compute the
52 +window queries in a separate forward pass over a *copy* of the cache (cost recorded as `compress_ms`), so the main attention kernel
53 +remains fused. Per-head retention produces per-head index sets (the SparseKVCache gathers per head).
54 +
55 +## B6 layer-dependent (pyramid) budgets — faithful_reimplementation of the PyramidKV budget rule
56 +Budget per layer from KVCache-Factory: base = cap − window; min = base // β (β = 20); max = 2·base − min; step = (max − min)/(L − 1);
57 +budget_l = max − l·step (+ window), rescaled to preserve the total budget exactly. Selection within a layer = B5 scoring. Because retained
58 +lengths differ across layers, multi-token query prefill is executed token by token (mask-free); recorded as `sequential_query_prefill`.
59 +
60 +## B9 selection + quantization — custom composition
61 +B5 (or B3) selection first, then B2 packing of the retained tensors (order: select → quantize).
62 +
63 +## C2 linear KV mapper — custom (not SwaT)
64 +See `src/wp30/mapper.py`: per receiver layer, ridge regression from the aligned sender layer's un-rotated [K, V] (512 + bias) to the
65 +receiver's un-rotated [K, V] (512); fitted on train-split caches only; re-rotated with the receiver's RoPE. Reconstruction-only loss.
66 +SwaT trains a ~300M-parameter mapper with task/distillation terms on Granite→SmolLM; no checkpoint or licence is public (audit_group1).
67 +
68 +## C0 identity transfer — negative control
69 +Sender K/V fed as receiver cache (shapes coincide: 2 × 128). Diagnostic of "shape match ≠ compatibility".
70 +
71 +## Methods audited but not executed
72 +H2O (needs accumulated attention during prefill — would disable the fused kernel for the whole prefill), Attention Matching compaction
73 +(official code pins vLLM 0.11/CUDA; a faithful MLX re-implementation of the optimization was out of scope — see coverage table),
74 +C2C (official fuser checkpoints exist only for Qwen3 receivers, CUDA; receiver still prefills the source), LatentMAS (CUDA/vLLM, same-architecture
75 +agents), SwaT (no checkpoint, no licence).
added paper/.latexmkrc +5 −0
@@ -0,0 +1,5 @@
1 +$pdf_mode = 1;
2 +$pdflatex = 'pdflatex -interaction=nonstopmode -halt-on-error -synctex=1 %O %S';
3 +$bibtex_use = 2;
4 +$clean_ext = 'synctex.gz run.xml bbl bcf fdb_latexmk fls log aux out toc lof lot blg';
5 +@default_files = ('main.tex');
added paper/Makefile +11 −0
@@ -0,0 +1,11 @@
1 +.PHONY: all clean distclean
2 +
3 +all:
4 + latexmk
5 +
6 +clean:
7 + latexmk -c
8 +
9 +distclean:
10 + latexmk -C
11 + rm -f *.synctex.gz *.run.xml *.bbl *.bcf
added paper/main.tex +138 −0
@@ -0,0 +1,138 @@
1 +% ============================================================================
2 +% UQO Working Paper Template — Economics / Finance
3 +% ============================================================================
4 +\documentclass[12pt,letterpaper]{article}
5 +
6 +% --- Encoding & Language ---
7 +\usepackage[utf8]{inputenc}
8 +\usepackage[T1]{fontenc}
9 +\usepackage[english]{babel}
10 +
11 +% --- Page Layout ---
12 +\usepackage[
13 + letterpaper,
14 + top=1in,
15 + bottom=1in,
16 + left=1in,
17 + right=1in
18 +]{geometry}
19 +
20 +% --- Typography ---
21 +\usepackage{mathptmx} % Times-like font (text + math)
22 +\usepackage{microtype} % Improved typographic refinements
23 +\usepackage{setspace}
24 +\onehalfspacing % 1.5 line spacing
25 +
26 +% --- Math ---
27 +\usepackage{amsmath,amssymb,amsthm}
28 +
29 +% --- Tables ---
30 +\usepackage{booktabs}
31 +\usepackage{tabularx}
32 +\usepackage{multirow}
33 +\usepackage{threeparttable}
34 +\usepackage{siunitx}
35 +\sisetup{
36 + input-symbols = {()},
37 + table-format = -1.3,
38 + parse-numbers = false
39 +}
40 +
41 +% --- Figures ---
42 +\usepackage{graphicx}
43 +\usepackage{subcaption}
44 +\usepackage{float}
45 +
46 +% --- Colors & Links ---
47 +\usepackage[dvipsnames]{xcolor}
48 +\usepackage[
49 + colorlinks = true,
50 + linkcolor = NavyBlue,
51 + citecolor = NavyBlue,
52 + urlcolor = NavyBlue,
53 + breaklinks = true
54 +]{hyperref}
55 +
56 +% --- Bibliography ---
57 +\usepackage[authoryear,round,semicolon]{natbib}
58 +\bibliographystyle{aer}
59 +
60 +% --- Captions ---
61 +\usepackage[
62 + font = small,
63 + labelfont = bf,
64 + labelsep = period,
65 + justification = justified,
66 + singlelinecheck = false
67 +]{caption}
68 +
69 +% --- Headers & Footers ---
70 +\usepackage{fancyhdr}
71 +\pagestyle{fancy}
72 +\fancyhf{}
73 +\renewcommand{\headrulewidth}{0pt}
74 +\fancyfoot[C]{\thepage}
75 +
76 +% --- Section Formatting ---
77 +\usepackage{titlesec}
78 +\titleformat{\section}{\large\bfseries}{\thesection.}{0.5em}{}
79 +\titleformat{\subsection}{\normalsize\bfseries}{\thesubsection.}{0.5em}{}
80 +\titleformat{\subsubsection}{\normalsize\itshape}{\thesubsubsection.}{0.5em}{}
81 +
82 +% --- Appendix Support ---
83 +\usepackage[toc,page]{appendix}
84 +
85 +% --- Misc ---
86 +\usepackage{enumitem}
87 +\setlist{nosep,leftmargin=*}
88 +
89 +% ============================================================================
90 +% ============================================================================
91 +% METADATA
92 +% ============================================================================
93 +\usepackage{algorithm}
94 +\usepackage{algpseudocode}
95 +\usepackage{longtable}
96 +\usepackage{array}
97 +\usepackage{pdflscape}
98 +\usepackage{adjustbox}
99 +\newcommand{\WPnumber}{30}
100 +\newcommand{\WPtitle}{Beyond Text: Cache Compression and Knowledge Transfer in Multi-Agent Systems}
101 +\newcommand{\WPsubtitle}{A Reproducible Study of Fidelity, Communication Cost, and Repeated Handoffs}
102 +\newcommand{\WPdate}{October 2026}
103 +\newcommand{\WPversion}{1.0}
104 +\input{sections/abstract_text}
105 +\newcommand{\WPkeywords}{KV cache compression; cache reuse; multi-agent systems; knowledge transfer; prompt compression; structured evidence; reproducibility; Apple Silicon; MLX}
106 +\newcommand{\WPjel}{C63, C88, D83, L86, O33}
107 +\newcommand{\WPauthor}{Simon-Pierre Boucher}
108 +\newcommand{\WPaffiliation}{%
109 + Département des sciences administratives\\
110 + Université du Québec en Outaouais%
111 +}
112 +\newcommand{\WPemail}{simon-pierre.boucher@uqo.ca}
113 +\newcommand{\WPaddress}{%
114 + Gatineau -- Pavillon Alexandre-Taché\\
115 + 283, boulevard Alexandre-Taché\\
116 + Gatineau, Québec, Canada J9A 1L8%
117 +}
118 +\graphicspath{{figures/}}
119 +\newcommand{\pp}{pp.}
120 +
121 +\begin{document}
122 +\input{sections/titlepage}
123 +\tableofcontents
124 +\newpage
125 +\input{sections/introduction}
126 +\input{sections/related}
127 +\input{sections/formulation}
128 +\input{sections/methods}
129 +\input{sections/protocol}
130 +\input{sections/results}
131 +\input{sections/adaptive}
132 +\input{sections/limitations}
133 +\input{sections/reproducibility}
134 +\input{sections/conclusion}
135 +\newpage
136 +\bibliography{references}
137 +\input{appendix/appendix}
138 +\end{document}
added paper/references.bib +42 −0
@@ -0,0 +1,42 @@
1 +% Generated by `python -m wp30 sources audit` from literature/sources.csv (verified 2026-10-29) + curated core entries.
2 +
3 +@misc{alabdulkareem2026swat, title={SwaT: Cross-Family KV Cache Transfer between Language Models}, author={Alabdulkareem, Abdulrahman and Tenison, Isabel and Zhang, Jun and Zhu, Yiyang and Katz, Boris and Gutfreund, Dan}, year={2026}, eprint={2610.15095}, archivePrefix={arXiv}, note={arXiv preprint, v1 (October 2026); repository Ar-Kareem/SwaT, no released checkpoint or licence (verified 2026-10-29)}}
4 +@misc{zweiger2026compaction, title={Fast KV Compaction via Attention Matching}, author={Zweiger, Adam and Fu, Yilun and Guo, Han and Kim, Yoon}, year={2026}, eprint={2602.16284}, archivePrefix={arXiv}, note={arXiv preprint, v2 (May 2026); code adamzweiger/compaction, MIT}}
5 +@inproceedings{fu2026c2c, title={Cache-to-Cache: Direct Semantic Communication Between Large Language Models}, author={Fu, Tianyu and others}, booktitle={International Conference on Learning Representations (ICLR)}, year={2026}, note={arXiv:2510.03215; code thu-nics/C2C, Apache-2.0; fuser checkpoints nics-efc/C2C\_Fuser}}
6 +@inproceedings{zou2026latentmas, title={LatentMAS: Latent Collaboration in Multi-Agent Systems}, author={Zou, Jiaru and others}, booktitle={International Conference on Machine Learning (ICML)}, year={2026}, note={arXiv:2511.20639; code Gen-Verse/LatentMAS, Apache-2.0}}
7 +@inproceedings{liu2024kivi, title={KIVI: A Tuning-Free Asymmetric 2bit Quantization for KV Cache}, author={Liu, Zirui and Yuan, Jiayi and Jin, Hongye and Zhong, Shaochen and Xu, Zhaozhuo and Braverman, Vladimir and Chen, Beidi and Hu, Xia}, booktitle={International Conference on Machine Learning (ICML)}, year={2024}, note={arXiv:2402.02750}}
8 +@inproceedings{li2024snapkv, title={SnapKV: LLM Knows What You are Looking for Before Generation}, author={Li, Yuhong and Huang, Yingbing and Yang, Bowen and Venkitesh, Bharat and Locatelli, Acyr and Ye, Hanchen and Cai, Tianle and Lewis, Patrick and Chen, Deming}, booktitle={Advances in Neural Information Processing Systems (NeurIPS)}, year={2024}, note={arXiv:2404.14469; code FasterDecoding/SnapKV}}
9 +@misc{cai2024pyramidkv, title={PyramidKV: Dynamic KV Cache Compression based on Pyramidal Information Funneling}, author={Cai, Zefan and Zhang, Yichi and Gao, Bofei and Liu, Yuliang and Li, Yucheng and Liu, Tianyu and Lu, Keming and Xiong, Wayne and Dong, Yue and Hu, Junjie and Xiao, Wen}, year={2024}, eprint={2406.02069}, archivePrefix={arXiv}, note={v4 (May 2025); code Zefan-Cai/KVCache-Factory, MIT}}
10 +@inproceedings{zhang2023h2o, title={H$_2$O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models}, author={Zhang, Zhenyu and Sheng, Ying and Zhou, Tianyi and Chen, Tianlong and Zheng, Lianmin and Cai, Ruisi and Song, Zhao and Tian, Yuandong and R{\'e}, Christopher and Barrett, Clark and Wang, Zhangyang and Chen, Beidi}, booktitle={Advances in Neural Information Processing Systems (NeurIPS)}, year={2023}, note={arXiv:2306.14048}}
11 +@inproceedings{xiao2024streamingllm, title={Efficient Streaming Language Models with Attention Sinks}, author={Xiao, Guangxuan and Tian, Yuandong and Chen, Beidi and Han, Song and Lewis, Mike}, booktitle={International Conference on Learning Representations (ICLR)}, year={2024}, note={arXiv:2309.17453}}
12 +@inproceedings{pan2024llmlingua2, title={LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression}, author={Pan, Zhuoshi and Wu, Qianhui and Jiang, Huiqiang and Xia, Menglin and Luo, Xufang and Zhang, Jue and Lin, Qingwei and R{\"u}hle, Victor and Yang, Yuqing and Lin, Chin-Yew and Zhao, H. Vicky and Qiu, Lili and Zhang, Dongmei}, booktitle={Findings of the Association for Computational Linguistics: ACL 2024}, year={2024}, note={arXiv:2403.12968}}
13 +@inproceedings{bai2024longbench, title={LongBench: A Bilingual, Multitask Benchmark for Long Context Understanding}, author={Bai, Yushi and Lv, Xin and Zhang, Jiajie and Lyu, Hongchang and Tang, Jiankai and Huang, Zhidian and Du, Zhengxiao and Liu, Xiao and Zeng, Aohan and Hou, Lei and Dong, Yuxiao and Tang, Jie and Li, Juanzi}, booktitle={Proceedings of the 62nd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)}, pages={3119--3137}, year={2024}, doi={10.18653/v1/2024.acl-long.172}}
14 +@inproceedings{hsieh2024ruler, title={RULER: What's the Real Context Size of Your Long-Context Language Models?}, author={Hsieh, Cheng-Ping and Sun, Simeng and Kriman, Samuel and Acharya, Shantanu and Rekesh, Dima and Jia, Fei and Zhang, Yang and Ginsburg, Boris}, booktitle={First Conference on Language Modeling (COLM)}, year={2024}, note={arXiv:2404.06654}}
15 +@misc{mlxlm2026, title={mlx-lm: Run LLMs with MLX}, author={{Apple ML Explore contributors}}, year={2026}, howpublished={\url{https://github.com/ml-explore/mlx-lm}}, note={v0.32.2 (16 October 2026), MIT}}
16 +@misc{anthropic2026caching, title={Prompt caching}, author={{Anthropic}}, year={2026}, howpublished={\url{https://platform.claude.com/docs/en/build-with-claude/prompt-caching}}, note={accessed 2026-10-29}}
17 +@misc{hf2026kvcache, title={KV cache strategies}, author={{Hugging Face}}, year={2026}, howpublished={\url{https://huggingface.co/docs/transformers/en/kv_cache}}, note={Transformers v5 documentation, accessed 2026-10-29}}
18 +@misc{dasigi2021qasper, title={A Dataset of Information-Seeking Questions and Answers Anchored in Research Papers}, author={Dasigi, Pradeep and Lo, Kyle and Beltagy, Iz and Cohan, Arman and Smith, Noah A. and Gardner, Matt}, year={2021}, note={NAACL 2021; QASPER, CC BY 4.0}}
19 +@inproceedings{ho2020twowiki, title={Constructing A Multi-hop QA Dataset for Comprehensive Evaluation of Reasoning Steps}, author={Ho, Xanh and Nguyen, Anh-Khoa Duong and Sugawara, Saku and Aizawa, Akiko}, booktitle={Proceedings of the 28th International Conference on Computational Linguistics (COLING)}, year={2020}}
20 +@inproceedings{yang2018hotpotqa, title={HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering}, author={Yang, Zhilin and Qi, Peng and Zhang, Saizheng and Bengio, Yoshua and Cohen, William W. and Salakhutdinov, Ruslan and Manning, Christopher D.}, booktitle={EMNLP}, year={2018}}
21 +@misc{qwen2.5, title={Qwen2.5 Technical Report}, author={{Qwen Team}}, year={2024}, eprint={2412.15115}, archivePrefix={arXiv}}
22 +@misc{llama3, title={The Llama 3 Herd of Models}, author={{Llama Team, AI @ Meta}}, year={2024}, eprint={2407.21783}, archivePrefix={arXiv}}
23 +
24 +@misc{taekyung2026_heo2026, title={Cross-Model KV Cache Transfer in LLM Families: A Closed-Form Linear Mapping for Prefill Reuse}, author={Taekyung Heo; Rasoul Shafipour; Ritchie Zhao; Maximilian Golub; Mohammad Mahdi Kamani; Ritika Borkar; Makesh Tarun Chandran; Pantea Zardoshti; Bita Darvish Rouhani}, year={2026}, eprint={2608.03893}, archivePrefix={arXiv}, note={arXiv preprint; no venue stated; verification: arXiv export API metadata only (title/authors/dates/abstract); repo not checked}}
25 +@misc{xingyu2026_qu2026, title={CacheBridge: Efficient Cross-Model KV Cache Transfer}, author={Xingyu Qu; Siyuan Lu; Zhiyu Chen; Sheng Wang; Tao Lin}, year={2026}, eprint={2609.00891}, archivePrefix={arXiv}, note={arXiv preprint; no venue stated; verification: arXiv export API metadata only}}
26 +@misc{vincentdaniel2026_yun2026, title={Prefill-Free Cross-Family KV Cache Transfer for Heterogeneous Multi-Agent LLMs (HeteroFold)}, author={Vincent-Daniel Yun; Woosang Lim; Haneul Yoo; Sungjoo Yoo; Murali Annavaram; Sai Praneeth Karimireddy}, year={2026}, eprint={2609.32259}, archivePrefix={arXiv}, note={arXiv preprint; no venue stated; verification: arXiv export API metadata only}}
27 +@misc{yi2026_li2026, title={A Universal Context-Reuse Layer for Cross-Model KV Sharing}, author={Yi Li; Dongming Jiang; Yi Zhao; Bingzhe Li}, year={2026}, eprint={2608.30963}, archivePrefix={arXiv}, note={arXiv preprint; no venue stated; verification: arXiv export API metadata only}}
28 +@misc{xiangyu2025_shi2025, title={KVComm: Enabling Efficient LLM Communication through Selective KV Sharing}, author={Xiangyu Shi; Marco Chiesa; Gerald Q. Maguire; Dejan Kostic}, year={2025}, eprint={2510.03346}, archivePrefix={arXiv}, note={ICLR 2026 (arXiv Comments); verification: arXiv export API metadata only}}
29 +@misc{hancheng2025_ye2025, title={KVCOMM: Online Cross-context KV-cache Communication for Efficient LLM-based Multi-agent Systems}, author={Hancheng Ye; Zhengqi Gao; Mingyuan Ma; Qinsi Wang; Yuzhe Fu; Ming-Yu Chung; Yueqian Lin; Zhijian Liu; Jianyi Zhang; Danyang Zhuo; Yiran Chen}, year={2025}, eprint={2510.12872}, archivePrefix={arXiv}, note={NeurIPS 2025 (arXiv Comments); verification: arXiv export API metadata only; repo URL from arXiv Comments, not fetched}}
30 +@misc{yanwen2026_peng2026, title={StateBridge: Training-free Hidden-state Alignment for Latent Communication in LLM Multi-Agent Systems}, author={Yanwen Peng; Delvin Ce Zhang; Xi Wang; Nikolaos Aletras}, year={2026}, eprint={2608.13317}, archivePrefix={arXiv}, note={COLM 2026 (arXiv Comments; 18 pages); verification: arXiv export API metadata only}}
31 +@misc{zhuoyun2025_du2025, title={Enabling Agents to Communicate Entirely in Latent Space (Interlat)}, author={Zhuoyun Du; Runze Wang; Huiyu Bai; Zouying Cao; Xiaoyong Zhu; Yu Cheng; Bo Zheng; Wei Chen; Haochao Ying}, year={2025}, eprint={2511.09149}, archivePrefix={arXiv}, note={Accepted to ACL 2026 (arXiv Comments); verification: arXiv export API metadata only}}
32 +@misc{yuhan2024_liu2024, title={DroidSpeak: KV Cache Sharing for Cross-LLM Communication and Multi-LLM Serving}, author={Yuhan Liu; Yuyang Huang; Jiayi Yao; Shaoting Feng; Zhuohan Gu; Kuntai Du; Hanchen Li; Yihua Cheng; Junchen Jiang; Shan Lu; Madan Musuvathi; Esha Choukse}, year={2024}, eprint={2411.02820}, archivePrefix={arXiv}, note={arXiv; no venue in Comments (search snippet: NSDI 2026, unverified); verification: arXiv export API metadata only}}
33 +@misc{yingzhuo2026_liu2026, title={Beyond tokens: a unified framework for latent communication in LLM-based multi-agent systems}, author={Yingzhuo Liu}, year={2026}, eprint={2606.05711}, archivePrefix={arXiv}, note={arXiv preprint (survey); no venue stated; verification: arXiv export API metadata only}}
34 +@misc{simon2026_villani2026, title={LatentPort: Beyond KV Cache - Cross-Model Transfer of Recurrent Memory in Hybrid Language Models: A 4B-to-9B Hybrid-State Handoff Without Target Prefix Replay}, author={Simon P. Villani}, year={2026}, eprint={2609.25053}, archivePrefix={arXiv}, note={arXiv preprint (14 pages, Comments); verification: arXiv export API metadata only}}
35 +@misc{zongqian2024_li2024, title={Prompt Compression for Large Language Models: A Survey}, author={Zongqian Li, Yinhong Liu, Yixuan Su, Nigel Collier}, year={2024}, eprint={2410.12388}, archivePrefix={arXiv}, note={arXiv (Comments empty); NAACL 2025 Long per search snippet (unverified); verification: arXiv page fetched; venue from search snippet only}}
36 +@misc{yanyu2025_liu2025, title={KV Cache Compression for Inference Efficiency in LLMs: A Review}, author={Yanyu Liu, Jingying Fu, Sixiang Liu, Yitian Zou, You Fu, Jiehan Zhou, Shouhua Zhang}, year={2025}, eprint={2508.06297}, archivePrefix={arXiv}, note={arXiv preprint (Comments: 12 pages); verification: arXiv page fetched}}
37 +@misc{neusha2025_javidnia2025, title={Key, Value, Compress: A Systematic Exploration of KV Cache Compression Techniques}, author={Neusha Javidnia, Bita Darvish Rouhani, Farinaz Koushanfar}, year={2025}, eprint={2503.11816}, archivePrefix={arXiv}, note={IEEE CICC 2025 (invited; arXiv Comments); verification: arXiv page fetched}}
38 +@misc{wei2025_gao2025, title={Rethinking Key-Value Cache Compression Techniques for Large Language Model Serving}, author={Wei Gao, Xinyu Zhou, Peng Sun, Tianwei Zhang, Yonggang Wen}, year={2025}, eprint={2503.24000}, archivePrefix={arXiv}, note={MLSys 2025 (arXiv Comments); verification: arXiv page fetched}}
39 +@misc{hancheng2025_ye2025, title={KVCOMM: Online Cross-context KV-cache Communication for Efficient LLM-based Multi-agent Systems}, author={Hancheng Ye, Zhengqi Gao, Mingyuan Ma, Qinsi Wang, Yuzhe Fu, Ming-Yu Chung, Yueqian Lin, Zhijian Liu, Jianyi Zhang, Danyang Zhuo, Yiran Chen}, year={2025}, eprint={2510.12872}, archivePrefix={arXiv}, note={NeurIPS 2025 (arXiv Comments: Accepted for publication in NeurIPS2025); verification: arXiv page fetched}}
40 +@misc{zhuohang2026_bian2026, title={TokenDance: Scaling Multi-Agent LLM Serving via Collective KV Cache Sharing}, author={Zhuohang Bian, Feiyang Wu, Chengrui Zhang, Hangcheng Dong, Yun Liang, Youwei Zhuo}, year={2026}, eprint={2604.03143}, archivePrefix={arXiv}, note={arXiv preprint under review; verification: arXiv page fetched}}
41 +@misc{hyesung2026_jeon2026, title={LRAgent: Efficient KV Cache Sharing for Multi-LoRA LLM Agents}, author={Hyesung Jeon, Hyeongju Ha, Jae-Joon Kim}, year={2026}, eprint={2602.01053}, archivePrefix={arXiv}, note={ICML 2026 Poster (arXiv journal-ref); verification: arXiv page fetched}}
42 +@misc{yurui2026_chang2026, title={MemCollab: Cross-Model Memory Collaboration via Contrastive Trajectory Distillation}, author={Yurui Chang, Yiran Wu, Qingyun Wu, Lu Lin}, year={2026}, eprint={2603.23234}, archivePrefix={arXiv}, note={arXiv preprint (no venue stated); verification: arXiv page fetched}}
added paper/sections/titlepage.tex +77 −0
@@ -0,0 +1,77 @@
1 +% ============================================================================
2 +% Title Page
3 +% ============================================================================
4 +\thispagestyle{empty}
5 +
6 +\begin{center}
7 +
8 +% --- Logo ---
9 +\includegraphics[width=3.5cm]{uq_logo.jpg}
10 +
11 +\vspace{0.6cm}
12 +
13 +{\footnotesize\textsc{Université du Québec en Outaouais}}\\[0.15cm]
14 +{\footnotesize\textsc{Département des sciences administratives}}
15 +
16 +\vspace{0.8cm}
17 +
18 +{\footnotesize\textsc{Working Paper No.~\WPnumber}}
19 +
20 +\vspace{1.2cm}
21 +
22 +% --- Title ---
23 +{\LARGE\bfseries \WPtitle\par}
24 +
25 +\ifx\WPsubtitle\empty\else
26 + \vspace{0.3cm}
27 + {\large\itshape \WPsubtitle\par}
28 +\fi
29 +
30 +\vspace{1.2cm}
31 +
32 +% --- Author ---
33 +{\large \WPauthor}\\[0.3cm]
34 +{\normalsize \WPaffiliation}\\[0.15cm]
35 +{\normalsize \href{mailto:\WPemail}{\WPemail}}\\[0.15cm]
36 +{\small \WPaddress}
37 +
38 +\vspace{0.8cm}
39 +
40 +% --- Date & Version ---
41 +{\normalsize \WPdate}\\[0.1cm]
42 +{\small Version~\WPversion}
43 +
44 +\end{center}
45 +
46 +\vfill
47 +
48 +\newpage
49 +
50 +% ============================================================================
51 +% Abstract Page
52 +% ============================================================================
53 +\thispagestyle{empty}
54 +
55 +\vspace*{1cm}
56 +
57 +\noindent\rule{\textwidth}{0.4pt}
58 +\vspace{0.3cm}
59 +
60 +\noindent\textbf{Abstract}
61 +
62 +\vspace{0.15cm}
63 +
64 +\noindent\WPabstract
65 +
66 +\vspace{0.4cm}
67 +
68 +\noindent\textbf{Keywords:} \WPkeywords
69 +
70 +\vspace{0.15cm}
71 +
72 +\noindent\textbf{JEL Classification:} \WPjel
73 +
74 +\vspace{0.3cm}
75 +\noindent\rule{\textwidth}{0.4pt}
76 +
77 +\newpage
added paper/uq_logo.jpg +0 −0

Binary file not shown.

added protocol/analysis_plan.md +18 −0
@@ -0,0 +1,18 @@
1 +# WP30 statistical analysis plan (registered with the protocol freeze)
2 +
3 +- **Unit of analysis:** one (document, question, condition, model pair) trial. Documents are the independent clusters; all
4 + questions of a document are dependent observations.
5 +- **Quality endpoints:** synthetic/exec: `correct` ∈ {0,1} (exec graded by hidden tests: all-pass = 1; pass rate reported as
6 + secondary); public QA: LongBench F1 (max over reference answers) with the LongBench normalization.
7 + `quality_operational` sets failed/invalid attempts to 0 so that failures cannot vanish; conditional quality over successes is
8 + reported separately.
9 +- **Resource endpoints:** serialized payload bytes (measured), cache tensor bytes (measured), scenario latencies assembled from
10 + recorded spans: cold = build + compress/serialize + load + receiver; warm per-query = load + receiver; amortized(N) =
11 + build/N + warm; peak MLX memory (prefill and decode recorded separately).
12 +- **Uncertainty:** document-level cluster bootstrap, 2 000 replicates, percentile 95 % intervals, for means and for paired
13 + differences on identical instances. Bootstrap two-sided p-values for the registered primary family, Holm-corrected (6 tests,
14 + `protocol/hypotheses.md`). Everything else is exploratory and labelled so.
15 +- **Latency:** p50/p95 and means with sample counts; timing trials in the core run alone on the GPU (pilot timings excluded).
16 +- **Failures:** operational success rate over all scheduled trials; categories success/invalid_output/timeout/oom/incompatible/
17 + implementation_error/unavailable/budget_exhausted; retries keep both attempts.
18 +- **No test-set tuning:** prompts, budgets, selection hyper-parameters, and the router are fixed on dev before the core run.
added protocol/core_matrix_draft.csv +6561 −0
Large diff (6,561 lines) is not loaded by default to keep the page fast.Load diff
added protocol/core_transfer_matrix_draft.csv +403 −0
Large diff (403 lines) is not loaded by default to keep the page fast.Load diff
modified protocol/pilot_matrix.csv +248 −744
Large diff (1,011 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/table1_taxonomy.csv +26 −0
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/table2_models.csv +4 −0
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/table3_datasets.csv +13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added runs/raw/E1_pilot.jsonl +280 −0
Large diff (280 lines) is not loaded by default to keep the page fast.Load diff
added runs/raw/ED_hosted_pilot.jsonl +40 −0
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
modified scripts/e6_network.py +7 −1
Large diff (20 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/analysis/__init__.py +0 −0
Large diff (0 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/analysis/analyze.py +250 −0
Large diff (250 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/analysis/load.py +74 −0
Large diff (74 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/analysis/static_tables.py +61 −0
Large diff (61 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/analysis/stats.py +51 −0
Large diff (51 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/audit.py +36 −0
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/hosted_run.py +115 −0
Large diff (115 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/literature.py +52 −0
Large diff (52 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/mapper.py +152 −0
Large diff (152 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/protocol.py +26 −0
Large diff (26 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/reproduce.py +35 −0
Large diff (35 lines) is not loaded by default to keep the page fast.Load diff
added src/wp30/router.py +58 −0
Large diff (58 lines) is not loaded by default to keep the page fast.Load diff
modified src/wp30/runner.py +34 −4
Large diff (74 lines) is not loaded by default to keep the page fast.Load diff
added tests/test_scoring_and_data.py +29 −0
Large diff (30 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme