Sentence Similarity
sentence-transformers
context-curation
long-context
memory-management
conversational-ai
retrieval
llm
research-paper
Instructions to use SkyIsNotGreen/splinter-memory with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use SkyIsNotGreen/splinter-memory with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("SkyIsNotGreen/splinter-memory") sentences = [ "That is a happy person", "That is a happy dog", "That is a very happy person", "Today is a sunny day" ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4] - Notebooks
- Google Colab
- Kaggle
Update SkyIsNotGreen/splinter-memory from the HiveBench Studio
Browse files
README.md
CHANGED
|
@@ -74,13 +74,53 @@ milliseconds.
|
|
| 74 |
| Retrieval precision (sentence proxy) | near-chance past the window | ≥70% / ≥85% | **10.7%** - *the encoder ceiling* (§7) |
|
| 75 |
| Context sufficiency vs. an equal-size FIFO window | — | ≥80% of turns | **85.1%** of the fact-retrievable turns (4.4:1) |
|
| 76 |
| Routing accuracy | — | ≥80% / ≥92% | **100%** |
|
| 77 |
-
| Added per-turn latency | 0 ms | <50 / <30 ms | **≈18 ms** (3.4 ms assembly + ~15 ms scoring) |
|
| 78 |
| Peak RSS over 500 turns | — | small | **34.7 MB** |
|
| 79 |
| Pipeline Efficiency Score | ~30 | ≥65 / ≥80 | **80.0 (GREEN)** live, 73.1 on the 20-conversation evidence run |
|
| 80 |
|
| 81 |
Full protocol, per-hypothesis logic chains and falsification conditions:
|
| 82 |
§5 of the canonical paper.
|
| 83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
## Use it
|
| 85 |
|
| 86 |
Three ways, in increasing order of control:
|
|
@@ -140,13 +180,66 @@ generates → the reply is observed back into the store.
|
|
| 140 |
the time, which is enough to drive parameter tuning without a human
|
| 141 |
labelling pass.
|
| 142 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
## The evidence, hypothesis by hypothesis
|
| 144 |
|
| 145 |
| | Hypothesis | Verdict |
|
| 146 |
|---|---|---|
|
| 147 |
| P1 | Constant throughput over 500 turns | **PASS** |
|
| 148 |
| P2 | Retrieval precision ≥85% at ≥90% recall | **SPLIT** - recall PASS (90.3%), precision FAIL (the encoder ceiling) |
|
| 149 |
-
| P3 | Context sufficiency ≥80% of turns vs. an equal-size FIFO window | **PASS** (85.1%) |
|
| 150 |
| P4 | Domain-dependent decay curve (code vs. prose separate) | **PASS** (code m90 1.8 vs. prose 1.2) |
|
| 151 |
| P5 | Targeted masking | **PASS** |
|
| 152 |
| P6 | Confidence escalation | **FAIL** |
|
|
@@ -195,11 +288,118 @@ not re-derived.
|
|
| 195 |
| drift at the shipped threshold (0.6) | precision 0.08, **recall 0.96** - the topic-change test fires on almost every turn |
|
| 196 |
| drift as a *ranking* signal | **AUC 0.945** - the signal is strong; the threshold is wrong |
|
| 197 |
|
| 198 |
-
The
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
|
| 204 |
## Limits, honestly
|
| 205 |
|
|
@@ -217,6 +417,20 @@ are published as a dataset next to this card.
|
|
| 217 |
isolate conversations per store and filter refusals out of the store.
|
| 218 |
- **The decay curve is an engineering heuristic** with cognitive-science
|
| 219 |
inspiration, not a validated model of human forgetting.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 220 |
|
| 221 |
## Reproduce
|
| 222 |
|
|
@@ -225,7 +439,10 @@ are published as a dataset next to this card.
|
|
| 225 |
pytest tests/unit tests/integration -q
|
| 226 |
|
| 227 |
# the encoder sweep on your own traffic
|
| 228 |
-
python -m experiments.encoder_suite --encoders l3 l6 bge-small
|
|
|
|
|
|
|
|
|
|
| 229 |
|
| 230 |
# the cascade pilot (local model, deterministic verifiers)
|
| 231 |
open http://127.0.0.1:8765/cascade
|
|
@@ -234,6 +451,19 @@ open http://127.0.0.1:8765/cascade
|
|
| 234 |
The repository ships the run bundles, the event logs and the label files, so
|
| 235 |
a verdict can be traced back to the bytes that produced it.
|
| 236 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
## License and citation
|
| 238 |
|
| 239 |
MIT. See `LICENSE` and `CITATION.cff` in this repository.
|
|
|
|
| 74 |
| Retrieval precision (sentence proxy) | near-chance past the window | ≥70% / ≥85% | **10.7%** - *the encoder ceiling* (§7) |
|
| 75 |
| Context sufficiency vs. an equal-size FIFO window | — | ≥80% of turns | **85.1%** of the fact-retrievable turns (4.4:1) |
|
| 76 |
| Routing accuracy | — | ≥80% / ≥92% | **100%** |
|
| 77 |
+
| Added per-turn latency | 0 ms | <50 / <30 ms | **≈18 ms** on a small store (3.4 ms assembly + ~15 ms scoring) - **and it grows with the store**: 22.8 ms at 212 chunks, 156.8 ms at 1,612 (§7.4) |
|
| 78 |
| Peak RSS over 500 turns | — | small | **34.7 MB** |
|
| 79 |
| Pipeline Efficiency Score | ~30 | ≥65 / ≥80 | **80.0 (GREEN)** live, 73.1 on the 20-conversation evidence run |
|
| 80 |
|
| 81 |
Full protocol, per-hypothesis logic chains and falsification conditions:
|
| 82 |
§5 of the canonical paper.
|
| 83 |
|
| 84 |
+
### The whole protocol, refreshed on the 35B-A3B
|
| 85 |
+
|
| 86 |
+
The P1-P11 protocol re-run live against the **35B-A3B ternary** (a
|
| 87 |
+
12-conversation fixture subset), to ask whether the verdict set is a
|
| 88 |
+
property of the architecture or of the generator it was measured on:
|
| 89 |
+
|
| 90 |
+
| | verdict | the evidence |
|
| 91 |
+
|---|---|---|
|
| 92 |
+
| P1 constant throughput | **PASS** | the throughput does not decay |
|
| 93 |
+
| P2 retrieval precision | **FAIL** | the precision clause (the known encoder ceiling, §7) |
|
| 94 |
+
| P3 context sufficiency | **PASS** | the curated context against an equal-size FIFO window |
|
| 95 |
+
| P4 domain-dependent decay | **PASS** | code m90 1.8 vs prose m90 1.2 - a gap of 0.6, beyond the 0.2 band |
|
| 96 |
+
| P5 targeted masking | SKIP | a training experiment |
|
| 97 |
+
| P6 confidence escalation | **FAIL** | the escalated recall is worse (0.174 vs 0.565) |
|
| 98 |
+
| P7 auditor-human agreement | SKIP | it needs human raters (90.25% measured 2026-08-23) |
|
| 99 |
+
| P8 routing accuracy | **PASS** | 200/200 |
|
| 100 |
+
| P9 densest-duplicate retention | **PASS** | the densest chunk wins 100% of the turns |
|
| 101 |
+
| P10 drift reset | **FAIL** | the reset changes the recall by 0.0 points |
|
| 102 |
+
| P11 comb resurrection | **PASS** | the pressure regime: 100% topic-return recall against 20% without the comb |
|
| 103 |
+
|
| 104 |
+
**PASS 6/11, 2 skipped - the published verdict set, exactly.** The
|
| 105 |
+
published run (2026-08-23/24, on a 27B, on the full corpus) reported
|
| 106 |
+
P1/P3/P4/P8/P9/P11 PASS, P2/P6/P10 FAIL, P5/P7 SKIP. The same set
|
| 107 |
+
reproduces on a different model and a smaller corpus, which says the
|
| 108 |
+
protocol measures the architecture rather than the generator.
|
| 109 |
+
|
| 110 |
+
**One of the failures now has a candidate mechanism.** P10 (the drift
|
| 111 |
+
reset) measures a detector whose threshold was calibrated for a different
|
| 112 |
+
encoder (§7): forced on, it fires on 571 of 628 turns, so "the reset has
|
| 113 |
+
no effect" may be measuring a detector that fires on almost everything
|
| 114 |
+
rather than a reset that does not work. The verdict stands as measured;
|
| 115 |
+
the mechanism is now in question, which is a different claim.
|
| 116 |
+
|
| 117 |
+
**And the one result that does not carry over is P3's margin.** On the
|
| 118 |
+
27B the curated context won 115 turns outright to 26; on the 35B it is a
|
| 119 |
+
tie (§7.3). The *verdict* holds (the curated context is sufficient, and
|
| 120 |
+
at least as good on 88.4% of the turns); the *margin* does not. The
|
| 121 |
+
curation's accuracy advantage is a function of the generator - what
|
| 122 |
+
survives for a strong one is the bounded context and the cost.
|
| 123 |
+
|
| 124 |
## Use it
|
| 125 |
|
| 126 |
Three ways, in increasing order of control:
|
|
|
|
| 180 |
the time, which is enough to drive parameter tuning without a human
|
| 181 |
labelling pass.
|
| 182 |
|
| 183 |
+
## The harness that runs it, and the pipeline that manages it
|
| 184 |
+
|
| 185 |
+
The memory system is a library; the **HiveBench Studio** is the harness
|
| 186 |
+
that runs it, and it is where the management pipeline lives.
|
| 187 |
+
|
| 188 |
+
### The management pipeline
|
| 189 |
+
|
| 190 |
+
A long-horizon memory has to be *managed*: every knob that decides what
|
| 191 |
+
the model sees used to live in three different menus, and a wrong setting
|
| 192 |
+
was invisible. The Studio has one place for all of it - the **Global
|
| 193 |
+
harness controls** - and every block of it is a *baseline* that the more
|
| 194 |
+
specific thing beats:
|
| 195 |
+
|
| 196 |
+
| block | what it decides |
|
| 197 |
+
|---|---|
|
| 198 |
+
| **the encoder** | which small model does the retrieval and the memory management - you choose it, and the next conversation runs on it (no restart) |
|
| 199 |
+
| **Memory & RAG** | the curation baseline: the context window, the stale wall, the dedup and drift thresholds, the comb, the medium drone |
|
| 200 |
+
| **Quality** | the cascade's judge, repair, gate and escalation - the defaults every run starts from |
|
| 201 |
+
| **MCP** | what an external client may read and write of the memory |
|
| 202 |
+
| **Runtime** | the sampling a reply is drawn with, and the context, GPU layers and threads an engine is launched with |
|
| 203 |
+
|
| 204 |
+
The point is not tidiness. It is that **a setting which is not consulted
|
| 205 |
+
is indistinguishable from a setting which does not work**, and the only
|
| 206 |
+
way to know which one you have is to wire them and then measure.
|
| 207 |
+
|
| 208 |
+
### The harness itself
|
| 209 |
+
|
| 210 |
+
| | |
|
| 211 |
+
|---|---|
|
| 212 |
+
| the console | Home, Settings, Global, Cascade, and a "More tools" group (Agent, Engines, Local library, Providers, Hub, Inspector, Training) |
|
| 213 |
+
| the chat | Splinter mode (one curated reply) or Agent mode (the tool loop); the reply says who produced it |
|
| 214 |
+
| the launch panel | llama.cpp or Strata, per engine, from the profiles; stop closes the connection so the *engine* stops; unload gives the VRAM back and retires the orphans |
|
| 215 |
+
| the cascade console | every runner knob in one form, with the Global tab's Quality block as its starting values |
|
| 216 |
+
| the harvest | every turn (the query, the reply, the curation that was used) written to a jsonl, off by default - this is the data the encoder is trained on |
|
| 217 |
+
|
| 218 |
+
### Answer quality reporting and API escalation
|
| 219 |
+
|
| 220 |
+
The curation's effect is not only felt, it is reported. Every cascade run
|
| 221 |
+
writes a per-item report (the verdict, the detector findings, the repair
|
| 222 |
+
attempt, the ladder's resolution), a provenance manifest (the model
|
| 223 |
+
sha256, the stack, the git commit, the task-set sha, the decode
|
| 224 |
+
settings) and a generated model card; and the escalation lane harvests
|
| 225 |
+
every ladder-resolved item to `escalation.jsonl` next to the report -
|
| 226 |
+
training-side only, and read by nothing in the runtime.
|
| 227 |
+
|
| 228 |
+
The escalation ladder itself is the last stage: an answer the local
|
| 229 |
+
verifiers still flag can go to a human gate (verbose on the first
|
| 230 |
+
trigger, compact afterwards) and then to an API tier, with the served
|
| 231 |
+
answer, the cost and the reason recorded. The companion paper
|
| 232 |
+
(*The Hive Cascade*) documents the loop, the gold-free runtime contract
|
| 233 |
+
and the measured verdicts; the benchmark and the run reports are
|
| 234 |
+
published next to this card.
|
| 235 |
+
|
| 236 |
## The evidence, hypothesis by hypothesis
|
| 237 |
|
| 238 |
| | Hypothesis | Verdict |
|
| 239 |
|---|---|---|
|
| 240 |
| P1 | Constant throughput over 500 turns | **PASS** |
|
| 241 |
| P2 | Retrieval precision ≥85% at ≥90% recall | **SPLIT** - recall PASS (90.3%), precision FAIL (the encoder ceiling) |
|
| 242 |
+
| P3 | Context sufficiency ≥80% of turns vs. an equal-size FIFO window | **PASS** (85.1% on the 27B); on the 35B-A3B the answer-level result is a tie (88.4% at-least-as-good, 13 strict wins to 17) - see §7.3 |
|
| 243 |
| P4 | Domain-dependent decay curve (code vs. prose separate) | **PASS** (code m90 1.8 vs. prose 1.2) |
|
| 244 |
| P5 | Targeted masking | **PASS** |
|
| 245 |
| P6 | Confidence escalation | **FAIL** |
|
|
|
|
| 288 |
| drift at the shipped threshold (0.6) | precision 0.08, **recall 0.96** - the topic-change test fires on almost every turn |
|
| 289 |
| drift as a *ranking* signal | **AUC 0.945** - the signal is strong; the threshold is wrong |
|
| 290 |
|
| 291 |
+
### 7.1 The F1 is the wrong target, and the threshold is not the lever
|
| 292 |
+
|
| 293 |
+
The obvious conclusion - "move the thresholds to the encoder's optimum" -
|
| 294 |
+
is **falsified** by a deterministic replay of the corpus through the real
|
| 295 |
+
pipeline (50 conversations, 493 measurable turns, the P2 diagnostic's own
|
| 296 |
+
notion of a fact; `experiments/threshold_ab.py`):
|
| 297 |
+
|
| 298 |
+
| arm | dedup / drift | fact recall | context | verdict |
|
| 299 |
+
|---|---|---|---|---|
|
| 300 |
+
| shipped | 0.92 / 0.6 | **50.6%** | 159 tok | - |
|
| 301 |
+
| the dedup alone | 0.57 / 0.6 | **39.7%** | 90 tok | **falsified** |
|
| 302 |
+
| the drift alone | 0.92 / 0.77 | **50.6%** | 159 tok | **survives** |
|
| 303 |
+
|
| 304 |
+
**The duplicate test's two errors are not interchangeable.** A duplicate
|
| 305 |
+
test that fires wrongly *deletes* a chunk, and the fact inside it is gone
|
| 306 |
+
irreversibly; a duplicate test that fails to fire only leaves a redundant
|
| 307 |
+
chunk in the context, which costs budget and nothing else. F1 weights
|
| 308 |
+
them equally, so F1 points at the wrong threshold: at 0.57 the encoder
|
| 309 |
+
merges chunks that are *about* the same thing but carry *different* facts,
|
| 310 |
+
and the fact recall falls by a fifth. The shipped 0.92 is conservative
|
| 311 |
+
**for a reason** - its precision is 1.00, so it never deletes a fact - at
|
| 312 |
+
the price of catching only 5% of the redundancy.
|
| 313 |
+
|
| 314 |
+
The topic-drift test is the opposite case: it only *penalises* the
|
| 315 |
+
off-topic chunks, it never deletes them, so its recalibration is free.
|
| 316 |
+
|
| 317 |
+
**The model is the lever, not the threshold.** A small encoder tuned on
|
| 318 |
+
the harness's own traffic (17M parameters, one epoch, the dedup task
|
| 319 |
+
only, labelled with the same lexical rule) merges **six times more true
|
| 320 |
+
duplicates** at the *same* precision - and the fact recall goes *up*
|
| 321 |
+
slightly, not down:
|
| 322 |
+
|
| 323 |
+
| encoder | fact recall | the dedup's recall at 0.92 | the dedup's precision |
|
| 324 |
+
|---|---|---|---|
|
| 325 |
+
| the stock L3-v2 | 50.55% | 0.046 | 1.00 |
|
| 326 |
+
| the tuned encoder | **50.93%** | **0.292** | 1.00 |
|
| 327 |
+
|
| 328 |
+
The encoder can be improved because it improves the *ranking* of what is a
|
| 329 |
+
duplicate. The threshold cannot be lowered because lowering it moves the
|
| 330 |
+
*boundary*, and the boundary is where the distinct facts get caught.
|
| 331 |
+
|
| 332 |
+
### 7.4 The curation's cost grows with the conversation it curates
|
| 333 |
+
|
| 334 |
+
The stability run - 2,000 turns of a growing conversation, the real drone,
|
| 335 |
+
no model (`experiments.stability_500.py`):
|
| 336 |
+
|
| 337 |
+
| turns | the store | the assembled context | the curation's cost (p50) | the peak RSS |
|
| 338 |
+
|---|---|---|---|---|
|
| 339 |
+
| 250 | 212 chunks | 322 tok | 22.8 ms | 519 MB |
|
| 340 |
+
| 500 | 412 chunks | 320 tok | 37.3 ms | 564 MB |
|
| 341 |
+
| 1,000 | 812 chunks | 335 tok | 89.7 ms | 594 MB |
|
| 342 |
+
| 2,000 | 1,612 chunks | 332 tok | 156.8 ms | 667 MB |
|
| 343 |
+
|
| 344 |
+
**The context is flat and the cost is not.** The assembled context moves
|
| 345 |
+
by 10 tokens across a 7.6x range of store - the curation's promise holds
|
| 346 |
+
✓✓ - and nothing is OOM-killed over 2,000 turns ✓. But the curation's
|
| 347 |
+
per-turn cost is **linear in the store**: about 7x for 7.6x the chunks,
|
| 348 |
+
because every chunk is scored every turn.
|
| 349 |
+
|
| 350 |
+
So the memory's trade is explicit, and the published "≈18 ms added per
|
| 351 |
+
turn" is the *small-store* number: the prompt stays bounded (the
|
| 352 |
+
expensive part for the model) while the curation gets more expensive as
|
| 353 |
+
the conversation grows. The two costs trade against each other, and the
|
| 354 |
+
crossover - the point where curating costs more than the tokens it saves
|
| 355 |
+
- is a measurement the system does not yet make.
|
| 356 |
+
|
| 357 |
+
### 7.3 The curation's advantage is generator-dependent
|
| 358 |
+
|
| 359 |
+
The paired A/B - the same model, the same turns, the curated context
|
| 360 |
+
against the last-4k-token window of the same history - is the memory
|
| 361 |
+
system's headline measurement (P3). It was measured on a 27B, and it has
|
| 362 |
+
now been measured on the **35B-A3B ternary** (180 measurable turns):
|
| 363 |
+
|
| 364 |
+
| | the curated arm | the FIFO arm |
|
| 365 |
+
|---|---|---|
|
| 366 |
+
| the answer's fact recall | 81.1% | 81.7% |
|
| 367 |
+
| the context fidelity (the answer's terms sourced from its own context) | **0.241** | 0.208 |
|
| 368 |
+
| the turns where the answer is at least as good | **88.4%** (the bar: 80%) | - |
|
| 369 |
+
| the strictly-better turns | 13 | 17 |
|
| 370 |
+
| the context sufficiency (P3-style) | **97.5%** >= FIFO | - |
|
| 371 |
+
|
| 372 |
+
**On the 27B the curated arm won 115 turns outright to 26 (4.4:1). On the
|
| 373 |
+
35B it is 13 to 17** - a tie - and the answers are equal (81.1% against
|
| 374 |
+
81.7%). The "neither" bucket collapses too (145 of 175 on the 27B, 34 of
|
| 375 |
+
180 here): the 35B answers from *whatever* context it is given.
|
| 376 |
+
|
| 377 |
+
**The scoping result: the better the generator is at long context, the
|
| 378 |
+
less the curation has to add.** The FIFO window is the most recent turns
|
| 379 |
+
verbatim, and a model that uses them well does not need a curation to find
|
| 380 |
+
them. This is what Postulate 3 (the separation) implies - the curation is
|
| 381 |
+
a substitute for a *weaker* reader - and it is the first thing the
|
| 382 |
+
measurements had not tested.
|
| 383 |
+
|
| 384 |
+
**What survives.** The curated context is still sufficient on 97.5% of the
|
| 385 |
+
turns, its fidelity is ahead, and - the part the numbers above do not
|
| 386 |
+
touch - the curation is what keeps the context **bounded**: the FIFO arm
|
| 387 |
+
is 4k tokens of pure recency, and the two arms are equal *at that
|
| 388 |
+
budget*. The honest claim for a strong generator is the bounded context
|
| 389 |
+
and the cost, not the better answers.
|
| 390 |
+
|
| 391 |
+
### 7.2 What we changed, and what we did not
|
| 392 |
+
|
| 393 |
+
- The shipped configuration stays: the stock encoder at the shipped
|
| 394 |
+
thresholds, because that is the configuration the published evidence was
|
| 395 |
+
produced with.
|
| 396 |
+
- The next fine-tune weights a false merge above a missed merge
|
| 397 |
+
(precision-weighted at the operating point) instead of optimising F1 -
|
| 398 |
+
the asymmetry makes F1 the wrong target - and is measured on a held-out
|
| 399 |
+
split, because the current one was trained and measured on the same
|
| 400 |
+
traffic (a fit, not a generalisation).
|
| 401 |
+
- The full sweep, the fine-tune runs and the replay are in
|
| 402 |
+
`docs/ENCODER-NOTES.md` in the harness repository.
|
| 403 |
|
| 404 |
## Limits, honestly
|
| 405 |
|
|
|
|
| 417 |
isolate conversations per store and filter refusals out of the store.
|
| 418 |
- **The decay curve is an engineering heuristic** with cognitive-science
|
| 419 |
inspiration, not a validated model of human forgetting.
|
| 420 |
+
- **The large tier is a state, not a model.** The 176B-A6B answers at
|
| 421 |
+
60-73 tok/s warm and 3 tok/s cold, on the same engine and the same
|
| 422 |
+
request: a fresh prompt read costs 5 tok/s and a reused prefix 71, and
|
| 423 |
+
the cold phase is the OS pulling 60 GB of expert weights off the NVMe
|
| 424 |
+
(the file is 20.8% page-cached on a 30 GB box). Warm and alone it
|
| 425 |
+
answers the cascade's 28 tasks in 26.9 s an item; co-sited with the
|
| 426 |
+
small tier, in 229.7 s. A deployment that measures the large tier
|
| 427 |
+
cold, or with another engine resident, measures the box and not the
|
| 428 |
+
model. Two levers pay and the rest do not: keep it warm, and run it
|
| 429 |
+
alone. A whole-file prefetch does not - a 13 GB page cache cannot hold
|
| 430 |
+
a 60 GB file, and the kernel's `WILLNEED` left it at 0% cached for
|
| 431 |
+
80 s. The engine's resident tier (`--resident-budget-gib`) does: it
|
| 432 |
+
keeps what the VRAM cache cannot hold in ordinary RAM, and the storage
|
| 433 |
+
read on the second request falls from 1.4 GB to 146 MB.
|
| 434 |
|
| 435 |
## Reproduce
|
| 436 |
|
|
|
|
| 439 |
pytest tests/unit tests/integration -q
|
| 440 |
|
| 441 |
# the encoder sweep on your own traffic
|
| 442 |
+
python -m experiments.encoder_suite --encoders l3 l6 bge-small e5-small gte-small
|
| 443 |
+
|
| 444 |
+
# the threshold replay (deterministic: no model, no generation)
|
| 445 |
+
python -m experiments.threshold_ab
|
| 446 |
|
| 447 |
# the cascade pilot (local model, deterministic verifiers)
|
| 448 |
open http://127.0.0.1:8765/cascade
|
|
|
|
| 451 |
The repository ships the run bundles, the event logs and the label files, so
|
| 452 |
a verdict can be traced back to the bytes that produced it.
|
| 453 |
|
| 454 |
+
### The artifacts
|
| 455 |
+
|
| 456 |
+
| artifact | what it is |
|
| 457 |
+
|---|---|
|
| 458 |
+
| `SkyIsNotGreen/splinter-memory` | this paper, the figures, the license and the citation |
|
| 459 |
+
| `SkyIsNotGreen/splinter-encoder` | the tuned drone encoder, its card, its configuration and its gate results |
|
| 460 |
+
| `SkyIsNotGreen/hive-cascade` | the cascade's benchmark (a 70/30 split) and two full run reports |
|
| 461 |
+
| `SkyIsNotGreen/Scion-35B-A3B` | the ternary 35B-A3B model and its decision head |
|
| 462 |
+
| `SkyIsNotGreen/Scion-FlashNext-176B-A6B` | the ternary 176B-A6B model |
|
| 463 |
+
|
| 464 |
+
The releases are private while the results are being refreshed; they open
|
| 465 |
+
when the refreshed numbers are in.
|
| 466 |
+
|
| 467 |
## License and citation
|
| 468 |
|
| 469 |
MIT. See `LICENSE` and `CITATION.cff` in this repository.
|