Spaces:
Running on Zero
Running on Zero
The arms fitted on the final mini-beatrix-3 core, the lookup arm's versions, and the four control twins of 2s. On mini-beatrix-3's final checkpoint (step 245,674, still opening bare) the arm list now holds the arm sets (stages 1-4, stages 1-8, the caption set, the research sets; two seeds each), served one row per set with a box per arm so any subset runs; the sixteen solo arms; and every version of the lookup arm (softmax attention after blocks 2, 6, 12 and 20, born at zero), mounted through amoe 0.2.12 from the arm's own tensors, which are read from the checkpoint by range request when no arm-only file exists. The lookup rows get recall prompts in the Completion tab and an activity line per site; the set rows get each member stage's prompts. The run's own stage programs (the checkpoints to step 148,000) use the same member switch. New crafts: mini-beatrix-2s-control (the original softmax twin) and its re-runs -attn-fp16-r10k (still training), -attn-fp16 and -bf16 (stopped), decoded in fp32. Pin: amoe-lora 5c934cf -> 9b1942d (v0.2.12); geolip-alephllm unchanged.
Browse files- README.md +27 -4
- app.py +780 -111
- arm_mount.py +88 -5
- arms_catalog.json +1818 -2
- requirements.txt +1 -1
README.md
CHANGED
|
@@ -9,7 +9,7 @@ python_version: '3.12'
|
|
| 9 |
app_file: app.py
|
| 10 |
pinned: false
|
| 11 |
license: mit
|
| 12 |
-
short_description:
|
| 13 |
models:
|
| 14 |
- AbstractPhil/mini-beatrix-2.5s
|
| 15 |
- AbstractPhil/mini-beatrix-3
|
|
@@ -19,8 +19,9 @@ models:
|
|
| 19 |
# Beatrix — AlephLLM chat
|
| 20 |
|
| 21 |
Three generations of the same byte-level architecture, served side by
|
| 22 |
-
side, newest first
|
| 23 |
-
|
|
|
|
| 24 |
|
| 25 |
**mini-beatrix-3** — 376M parameters over 32 blocks: the same governed
|
| 26 |
full-splat hub, deeper, and the Space's default. Its mission is
|
|
@@ -34,7 +35,22 @@ own stage; the run detached them at step 148,000, partway through the
|
|
| 34 |
fourth stage, and finished on the core alone. Pick a checkpoint that
|
| 35 |
carries them (a stage close before that point, or 148,000 itself, the
|
| 36 |
last with all four) and they open all on, each switchable exactly; every
|
| 37 |
-
later checkpoint
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
|
| 39 |
**Take it home — mini-beatrix-3.** The final weights, as
|
| 40 |
[mini-beatrix-3](https://huggingface.co/AbstractPhil/mini-beatrix-3):
|
|
@@ -73,6 +89,13 @@ m.mount_arm("pair"); m.say("...") # an arm — detach_arm() puts it back
|
|
| 73 |
The library served here is the wider surface, refuted and control rows
|
| 74 |
included; the package is the settled subset.
|
| 75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
**mini-beatrix-1** — 112.5M parameters, pretrained on 15.3 billion raw
|
| 77 |
bytes, serving with a **library of detachable arms**: small aleph
|
| 78 |
adapters (3.2M–5.3M parameters), each trained on one exact frozen core.
|
|
|
|
| 9 |
app_file: app.py
|
| 10 |
pinned: false
|
| 11 |
license: mit
|
| 12 |
+
short_description: Byte-level AlephLLM crafts, their arms, and 2s's twins
|
| 13 |
models:
|
| 14 |
- AbstractPhil/mini-beatrix-2.5s
|
| 15 |
- AbstractPhil/mini-beatrix-3
|
|
|
|
| 19 |
# Beatrix — AlephLLM chat
|
| 20 |
|
| 21 |
Three generations of the same byte-level architecture, served side by
|
| 22 |
+
side, newest first, and four control twins of 2s that run ordinary
|
| 23 |
+
softmax attention where 2s runs the splat. Pick the **Craft** first;
|
| 24 |
+
everything below it follows.
|
| 25 |
|
| 26 |
**mini-beatrix-3** — 376M parameters over 32 blocks: the same governed
|
| 27 |
full-splat hub, deeper, and the Space's default. Its mission is
|
|
|
|
| 35 |
fourth stage, and finished on the core alone. Pick a checkpoint that
|
| 36 |
carries them (a stage close before that point, or 148,000 itself, the
|
| 37 |
last with all four) and they open all on, each switchable exactly; every
|
| 38 |
+
later checkpoint is the core alone.
|
| 39 |
+
|
| 40 |
+
**Arms fitted on the final core.** The final checkpoint opens bare and
|
| 41 |
+
lists the arms fitted on it afterwards, with the core frozen:
|
| 42 |
+
|
| 43 |
+
- **Arm sets** — one 13.7M arm per curriculum stage, on together (stages
|
| 44 |
+
1–4, stages 1–8, and an experimental set adding an arm for image
|
| 45 |
+
captions; two seeds each, plus research sets). A box per arm switches
|
| 46 |
+
any subset off; a switched-off arm removes exactly its own write.
|
| 47 |
+
- **Solo arms** — each stage's arm trained alone, two seeds.
|
| 48 |
+
- **The lookup arm** — ordinary softmax attention after blocks 2, 6, 12
|
| 49 |
+
and 20, born at zero, so off is the core bit for bit. It fetches a
|
| 50 |
+
value planted far back in a long text, where the core alone forgets it
|
| 51 |
+
within a few hundred bytes. Every version is listed, with recall
|
| 52 |
+
prompts in the Completion tab to run with the arm on and with *Core
|
| 53 |
+
only*.
|
| 54 |
|
| 55 |
**Take it home — mini-beatrix-3.** The final weights, as
|
| 56 |
[mini-beatrix-3](https://huggingface.co/AbstractPhil/mini-beatrix-3):
|
|
|
|
| 89 |
The library served here is the wider surface, refuted and control rows
|
| 90 |
included; the package is the settled subset.
|
| 91 |
|
| 92 |
+
**The 2s control twins** — 2s's recipe and data with softmax attention
|
| 93 |
+
in all 20 blocks: the original twin (it destabilized under the recipe
|
| 94 |
+
tuned for the splat and closed at 2.88 bits per byte against 2s's 1.11),
|
| 95 |
+
two precision re-runs from its step 16,000 (stopped), and a re-run from
|
| 96 |
+
its step 10,000 with fp32 attention around fp16 flash, stable and still
|
| 97 |
+
training. No arms; decoded in fp32.
|
| 98 |
+
|
| 99 |
**mini-beatrix-1** — 112.5M parameters, pretrained on 15.3 billion raw
|
| 100 |
bytes, serving with a **library of detachable arms**: small aleph
|
| 101 |
adapters (3.2M–5.3M parameters), each trained on one exact frozen core.
|
app.py
CHANGED
|
@@ -29,9 +29,20 @@ own config, its own byte format, and its own arm library:
|
|
| 29 |
148,000 and finished on the core alone, so the
|
| 30 |
checkpoints from 92,000 to 148,000 ship their arms and
|
| 31 |
the Space serves them together as a program
|
| 32 |
-
(arm_mount "program": all live as trained, or any
|
| 33 |
-
switched off exactly), while every later
|
| 34 |
-
the final one included, is the core alone.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
| 36 |
Crafts are discovered from the repo at boot: a craft with no manifest or
|
| 37 |
no checkpoint is skipped, and one that starts shipping appears on its
|
|
@@ -128,10 +139,50 @@ GEN_BUDGET_S = 95.0
|
|
| 128 |
# chat plus a 3.2M arm that makes it chat, removable bit-for-bit.
|
| 129 |
# Listed newest first; if the default ever fails to load, the next one
|
| 130 |
# down serves instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
CRAFTS = [
|
| 132 |
{"name": "mini-beatrix-3", "fmt": "specials", "wants_arms": True,
|
| 133 |
"stage_arms": True, "fp32": True},
|
| 134 |
{"name": "mini-beatrix-2s", "fmt": "specials", "wants_arms": True},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
{"name": "mini-beatrix-1", "fmt": "v1tags", "wants_arms": True},
|
| 136 |
]
|
| 137 |
DEFAULT_CRAFT = "mini-beatrix-3" # the newest completed mission leads
|
|
@@ -255,7 +306,9 @@ EXHIBIT_STEP = {"mini-beatrix-1": 88508}
|
|
| 255 |
# as a BEFORE/AFTER pair across the chat anneal — 57,607 continues
|
| 256 |
# documents, 61,422 answers — and that contrast is the clearest thing
|
| 257 |
# the run produced, so the earlier half stays one click away.
|
| 258 |
-
ALWAYS_OFFER = {"mini-beatrix-2s": [57607]
|
|
|
|
|
|
|
| 259 |
# default arm for the craft's DEFAULT step only — scoped so it can never
|
| 260 |
# displace another checkpoint's own chat arm. day1/poly is a BEHAVIOR arm
|
| 261 |
# on a single-turn Q&A frame: Chat therefore sends one question at a time
|
|
@@ -352,8 +405,11 @@ def load_arm_index(files, craft):
|
|
| 352 |
|
| 353 |
def _arm_files(arm):
|
| 354 |
"""The hub files one arm row mounts: its own checkpoint, or a stack's
|
| 355 |
-
or a stage program's members (neither has a file of its own)
|
|
|
|
| 356 |
m = arm.get("mount") or {}
|
|
|
|
|
|
|
| 357 |
return (list(m["members"]) if m.get("type") in ("stack", "program")
|
| 358 |
else [arm["path"]])
|
| 359 |
|
|
@@ -384,7 +440,15 @@ STAGE_TEACHES = {
|
|
| 384 |
"tryfail": "trying, checking, finding the error, fixing it",
|
| 385 |
"mixed": "a review spiral over every earlier stage",
|
| 386 |
"register": "definitions, and one fact said several ways",
|
|
|
|
|
|
|
| 387 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 388 |
# completion prompts in each stage's own training format, cut just before
|
| 389 |
# the part the stage teaches
|
| 390 |
STAGE_PROBES = {
|
|
@@ -415,6 +479,9 @@ STAGE_PROBES = {
|
|
| 415 |
"register": [
|
| 416 |
"Plainly: the rain filled the barrel by morning. Formally:",
|
| 417 |
"The word 'fragile' means"],
|
|
|
|
|
|
|
|
|
|
| 418 |
}
|
| 419 |
# general text none of the stages is about: where every arm should be
|
| 420 |
# quiet (the activity line after a reply shows whether it is)
|
|
@@ -444,11 +511,10 @@ def load_stage_programs(files, craft):
|
|
| 444 |
"""{step: [row, ...]} for a craft whose arms are co-trained stage arms.
|
| 445 |
|
| 446 |
Every step with at least one arm file gets the PROGRAM row — all of
|
| 447 |
-
that step's arms live, the model as the run trained it.
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
|
| 451 |
-
renormalizes)."""
|
| 452 |
members = {}
|
| 453 |
for f in files:
|
| 454 |
if not f.startswith(f"{craft}/arms/"):
|
|
@@ -463,25 +529,133 @@ def load_stage_programs(files, craft):
|
|
| 463 |
names = [n for _, n, _ in ms]
|
| 464 |
paths = [p for _, _, p in ms]
|
| 465 |
words = ", ".join(_stage_word(n) for n in names)
|
| 466 |
-
|
| 467 |
craft, step, names, paths, names, "",
|
| 468 |
-
f"Stage arms
|
| 469 |
if len(names) > 1 else
|
| 470 |
-
f"Stage arm {names[0]},
|
| 471 |
-
if len(names) > 1:
|
| 472 |
-
for n in names:
|
| 473 |
-
rows.append(_program_row(
|
| 474 |
-
craft, step, names, paths, [n], f"#only={n}",
|
| 475 |
-
f"Only {n} live (the other {len(names) - 1} off)"))
|
| 476 |
-
for n in names:
|
| 477 |
-
rows.append(_program_row(
|
| 478 |
-
craft, step, names, paths,
|
| 479 |
-
[x for x in names if x != n], f"#without={n}",
|
| 480 |
-
f"All live except {n}"))
|
| 481 |
-
by_step[step] = rows
|
| 482 |
return by_step
|
| 483 |
|
| 484 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 485 |
def load_reports(files, craft):
|
| 486 |
"""{step: report} for every stage-close report the run has shipped
|
| 487 |
(<craft>/reports/v3/<phase>_step<N>.json). A stage close is where the
|
|
@@ -579,6 +753,30 @@ def _mount(c, arm, step):
|
|
| 579 |
the handle, or None when any file fails provenance. Adapter geometry
|
| 580 |
is read from each file's own tensors (the library holds more than one
|
| 581 |
shape), so nothing is assumed from a default spec."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 582 |
local = []
|
| 583 |
for p in _arm_files(arm):
|
| 584 |
t0 = time.time()
|
|
@@ -695,12 +893,29 @@ class Craft:
|
|
| 695 |
if ph.get("status") == "active"), None)
|
| 696 |
self.stage_arms = bool(spec.get("stage_arms"))
|
| 697 |
self.fp32 = bool(spec.get("fp32"))
|
|
|
|
| 698 |
self.reports = (load_reports(files, self.name) if self.stage_arms
|
| 699 |
else {})
|
| 700 |
self.arms = (load_stage_programs(files, self.name)
|
| 701 |
if self.stage_arms else
|
| 702 |
load_arm_index(files, self.name) if spec["wants_arms"]
|
| 703 |
else {})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 704 |
self._chat_ok = { # per CHECKPOINT, not craft
|
| 705 |
s: bool(self.frame_trained and self._chat_from is not None
|
| 706 |
and int(m.get("tokens") or 0) > self._chat_from)
|
|
@@ -714,8 +929,8 @@ class Craft:
|
|
| 714 |
# (the run detached them there and finished on the core alone):
|
| 715 |
# the last step that ships arms, so later cores are labelled as
|
| 716 |
# the core alone rather than as "before the stage arms"
|
| 717 |
-
self.arm_last = (max(self.
|
| 718 |
-
else None)
|
| 719 |
self.arm_by_path = {a["path"]: a
|
| 720 |
for arms in self.arms.values() for a in arms}
|
| 721 |
|
|
@@ -807,10 +1022,12 @@ class Craft:
|
|
| 807 |
step = int(step)
|
| 808 |
arms = self.arms.get(step, [])
|
| 809 |
if self.stage_arms:
|
| 810 |
-
# the run's own model at
|
| 811 |
-
# stage arms (they trained together), so
|
|
|
|
|
|
|
| 812 |
for a in arms:
|
| 813 |
-
if a.get("
|
| 814 |
return a["path"]
|
| 815 |
return CORE_ONLY
|
| 816 |
if step == getattr(self, "step", None):
|
|
@@ -869,11 +1086,16 @@ class Craft:
|
|
| 869 |
else "pre-chat (documents only)")
|
| 870 |
n_chat = sum(a["kind"] == "chat" for a in arms)
|
| 871 |
if self.stage_arms:
|
| 872 |
-
|
|
|
|
|
|
|
| 873 |
if step in self.reports:
|
| 874 |
bits.append(f"close of {self.reports[step].get('tag')}")
|
| 875 |
bits.append(("stage arms: " + ", ".join(
|
| 876 |
_stage_word(n) for n in names)) if names
|
|
|
|
|
|
|
|
|
|
| 877 |
else "core alone (arms detached)"
|
| 878 |
if self.arm_last and step > self.arm_last
|
| 879 |
else "before the stage arms")
|
|
@@ -893,13 +1115,18 @@ class Craft:
|
|
| 893 |
arms = (f"{len(self.arm_by_path)} arms" if self.arm_by_path
|
| 894 |
else "no arms yet")
|
| 895 |
if self.stage_arms:
|
| 896 |
-
|
| 897 |
-
k = len(
|
| 898 |
arms = ("no stage arms yet" if not k else
|
| 899 |
f"{k} stage arm{'s' if k != 1 else ''} trained with it"
|
| 900 |
if self.arm_last >= max(self.cores) else
|
| 901 |
f"{k} stage arm{'s' if k != 1 else ''} to step "
|
| 902 |
f"{self.arm_last:,}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 903 |
if self.fmt == "specials":
|
| 904 |
state = ("in training" if self.active_phase
|
| 905 |
else "training complete")
|
|
@@ -957,9 +1184,27 @@ def _resolve_arm(c, arm_path, step):
|
|
| 957 |
return arm if (arm and arm["step"] == int(step)) else None
|
| 958 |
|
| 959 |
|
| 960 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 961 |
"""Make the live model BE (craft, step, arm). arm_path is "" for
|
| 962 |
-
core-only
|
|
|
|
| 963 |
from the parent's packed state, so a non-default selection re-applies
|
| 964 |
per request (weights come from the local hub cache — no
|
| 965 |
re-download). Returns a provenance dict."""
|
|
@@ -1001,36 +1246,115 @@ def _select(craft, step, arm_path):
|
|
| 1001 |
c.handle = _mount(c, arm, step) # provenance, every switch
|
| 1002 |
if c.handle is not None:
|
| 1003 |
c.loaded["mount"] = want_mount
|
|
|
|
| 1004 |
if arm is not None and c.handle is not None:
|
| 1005 |
-
if arm.get("
|
| 1006 |
-
|
| 1007 |
-
|
| 1008 |
-
|
| 1009 |
-
|
| 1010 |
-
|
| 1011 |
-
|
| 1012 |
-
|
|
|
|
|
|
|
| 1013 |
c.loaded["arm_path"] = want # commit only now
|
|
|
|
| 1014 |
arm_on = arm is not None and c.handle is not None
|
| 1015 |
fp32 = c.fp32 or (arm_on and (arm.get("decode") or {}).get("precision")
|
| 1016 |
== "fp32")
|
| 1017 |
prov = {"craft": c.name, "checkpoint_step": step,
|
| 1018 |
-
"arm": (
|
|
|
|
| 1019 |
"arm_kind": (arm["kind"] if arm_on else "core-only"),
|
| 1020 |
"precision": "fp32" if fp32 else "bf16",
|
| 1021 |
"switch_s": round(time.time() - t0, 2)}
|
| 1022 |
-
if arm_on and
|
| 1023 |
-
prov["live_arms"] = list(
|
| 1024 |
prov["stage_arms"] = list(arm["members"])
|
|
|
|
|
|
|
|
|
|
| 1025 |
return prov
|
| 1026 |
|
| 1027 |
|
| 1028 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1029 |
"""A stage program as it runs on this checkpoint: every member on or
|
| 1030 |
off (what each stage teaches, while there are few enough to fit), and,
|
| 1031 |
when this checkpoint is a stage close, the cost the trainer measured
|
| 1032 |
for each arm on general text."""
|
| 1033 |
-
|
|
|
|
|
|
|
| 1034 |
few = len(arm["members"]) <= 2
|
| 1035 |
mem = " · ".join(
|
| 1036 |
f"`{n}` {'✓ on' if n in live else '✗ off'}"
|
|
@@ -1048,17 +1372,20 @@ def _program_line(c, step, arm):
|
|
| 1048 |
lines.append("Measured by the trainer at this stage close, each "
|
| 1049 |
"arm's cost on held-out web text (bits per byte, on "
|
| 1050 |
"minus off; its bar is +0.012): " + " · ".join(cost))
|
| 1051 |
-
lines.append("
|
| 1052 |
-
"
|
| 1053 |
-
"
|
| 1054 |
-
"
|
|
|
|
| 1055 |
return " \n".join(lines)
|
| 1056 |
|
| 1057 |
|
| 1058 |
-
def status_md(craft, step, arm_path=CORE_ONLY):
|
| 1059 |
c = S(craft)
|
| 1060 |
step = _step(c, step)
|
| 1061 |
arms = c.arms.get(step, [])
|
|
|
|
|
|
|
| 1062 |
meta = c.ckpt_meta.get(step, {})
|
| 1063 |
newest = max(c.cores)
|
| 1064 |
arm = _resolve_arm(c, arm_path, step)
|
|
@@ -1071,12 +1398,23 @@ def status_md(craft, step, arm_path=CORE_ONLY):
|
|
| 1071 |
"They live on bytes UTF-8 can never produce, so "
|
| 1072 |
"nothing you type can forge them."
|
| 1073 |
+ (f" \n**Arms** all switched off — the raw core "
|
| 1074 |
-
f"({len(
|
| 1075 |
-
f"{'s' if len(
|
| 1076 |
"trained with it here)"
|
| 1077 |
-
if c.stage_arms and
|
| 1078 |
-
|
| 1079 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1080 |
elif arm:
|
| 1081 |
sp = arm.get("spec") or {}
|
| 1082 |
t = _tmpl(arm)
|
|
@@ -1116,6 +1454,8 @@ def status_md(craft, step, arm_path=CORE_ONLY):
|
|
| 1116 |
+ f" · {c.core_params/1e6:.1f}M core · ctx {c.cfg.context}"
|
| 1117 |
+ (f" · newest is {newest:,}" if step != newest else ""),
|
| 1118 |
arm_line,
|
|
|
|
|
|
|
| 1119 |
# which side of the chat anneal THIS core sits on — the mission
|
| 1120 |
# ends in a before/after pair and they are not interchangeable
|
| 1121 |
(f"**Phase:** `{c.phase_of(step)}` · "
|
|
@@ -1126,15 +1466,20 @@ def status_md(craft, step, arm_path=CORE_ONLY):
|
|
| 1126 |
if c.fmt == "specials" and c.phase_of(step) else ""),
|
| 1127 |
# a craft still in pretraining has never seen its chat frame:
|
| 1128 |
# say so rather than letting the Chat tab imply otherwise
|
| 1129 |
-
("⚠️ this
|
| 1130 |
-
|
| 1131 |
-
|
| 1132 |
-
|
| 1133 |
-
|
| 1134 |
-
|
| 1135 |
-
|
| 1136 |
-
|
| 1137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1138 |
if c.fmt == "specials" and not c.frame_trained else ""),
|
| 1139 |
# the craft finished its chat anneal but THIS checkpoint predates
|
| 1140 |
# it: the pre-chat baseline continues documents rather than
|
|
@@ -1151,7 +1496,12 @@ def status_md(craft, step, arm_path=CORE_ONLY):
|
|
| 1151 |
# mini-beatrix-3 after its arms were detached (step 148,000): say
|
| 1152 |
# why the arm picker holds only the core here (one short line: the
|
| 1153 |
# panel sits above the tabs)
|
| 1154 |
-
(f"ℹ️ the
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1155 |
f"{c.arm_last:,}. Pick {c.arm_last:,} or an earlier stage close "
|
| 1156 |
"to run them."
|
| 1157 |
if c.stage_arms and c.arm_last and step > c.arm_last else ""),
|
|
@@ -1192,10 +1542,10 @@ def status_md(craft, step, arm_path=CORE_ONLY):
|
|
| 1192 |
("ℹ️ no arm has been trained on this lineage yet — and none is "
|
| 1193 |
"needed to talk to it: the conversation frame was taught to the "
|
| 1194 |
"core itself, in the anneal that closed its mission."
|
| 1195 |
-
if not c.arm_by_path and c.chats(step) else ""),
|
| 1196 |
("ℹ️ no arm has been trained on this lineage yet — every reply "
|
| 1197 |
"here is the raw pretrained core."
|
| 1198 |
-
if not c.arm_by_path and not c.chats(step) else ""),
|
| 1199 |
]))
|
| 1200 |
|
| 1201 |
|
|
@@ -1232,13 +1582,17 @@ def _examples_of(arm):
|
|
| 1232 |
|
| 1233 |
|
| 1234 |
def _probe_prompts(arm):
|
| 1235 |
-
"""Completion prompts for a stage program
|
| 1236 |
-
training format
|
| 1237 |
-
None for any other row (the
|
| 1238 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1239 |
return None
|
| 1240 |
-
out = [p for
|
| 1241 |
-
for p in STAGE_PROBES.get(_stage_word(n), [])]
|
| 1242 |
return [[p] for p in out + OFF_STAGE_PROBES]
|
| 1243 |
|
| 1244 |
|
|
@@ -1248,6 +1602,161 @@ def _probe_update(arm, fam_examples):
|
|
| 1248 |
if probes and fam_examples else gr.update(visible=False))
|
| 1249 |
|
| 1250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1251 |
def on_arm(craft, step, arm_path, auto_decode, fam_examples):
|
| 1252 |
"""Selecting an arm re-tunes what the arm needs and shows what it
|
| 1253 |
knows: a task arm collapses to turn-end off-distribution and turns
|
|
@@ -1263,7 +1772,9 @@ def on_arm(craft, step, arm_path, auto_decode, fam_examples):
|
|
| 1263 |
gr.update(value=r) if auto_decode else gr.update(),
|
| 1264 |
gr.update(samples=_examples_of(arm)) if fam_examples
|
| 1265 |
else gr.update(),
|
| 1266 |
-
_probe_update(arm, fam_examples)
|
|
|
|
|
|
|
| 1267 |
|
| 1268 |
|
| 1269 |
def on_checkpoint(craft, step, auto_decode, fam_examples):
|
|
@@ -1394,6 +1905,11 @@ def _rep_penalty(logits, produced, penalty, n=8, window=256):
|
|
| 1394 |
|
| 1395 |
ACTIVITY_BYTES = 1024 # the text window the per-arm activity reads
|
| 1396 |
CALL_BUDGET_S = 112.0 # ZeroGPU ends the call at 120 s
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1397 |
|
| 1398 |
|
| 1399 |
@torch.no_grad()
|
|
@@ -1406,8 +1922,11 @@ def _activity(c, deadline):
|
|
| 1406 |
reply, inside the same GPU call, while the program is still attached.
|
| 1407 |
Near zero means the arm is quiet on this text."""
|
| 1408 |
h, ids = c.handle, getattr(c, "last_ids", None)
|
| 1409 |
-
if
|
| 1410 |
-
|
|
|
|
|
|
|
|
|
|
| 1411 |
return ""
|
| 1412 |
live = [n for n in h.names if h.live.get(n)]
|
| 1413 |
if not live:
|
|
@@ -1421,37 +1940,87 @@ def _activity(c, deadline):
|
|
| 1421 |
continue
|
| 1422 |
with h.masked(n):
|
| 1423 |
lb = c.model(x)[0].float().log_softmax(-1)
|
| 1424 |
-
|
| 1425 |
-
moved = float((lb.argmax(-1) != la.argmax(-1)).float().mean())
|
| 1426 |
-
# below ~1e-9 an fp32 KL between two near-identical distributions
|
| 1427 |
-
# is rounding, not a measurement: say "none measurable", not 0
|
| 1428 |
-
parts.append(f"`{n}` " + (f"{kl:.1e} nats/byte" if kl >= 1e-9 else
|
| 1429 |
-
"< 1e-9 nats/byte (none measurable)")
|
| 1430 |
-
+ f", top byte changed at {moved:.1%} of positions")
|
| 1431 |
return (f" · **arm activity** on this text (last {x.shape[1]:,} bytes, "
|
| 1432 |
"each arm switched off alone): " + " · ".join(parts))
|
| 1433 |
|
| 1434 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1435 |
@spaces.GPU(duration=120)
|
| 1436 |
def _stream(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
| 1437 |
-
ckpt_step, stop=(), stop_ids=(), guard=False, rep=1.0
|
|
|
|
| 1438 |
"""The GPU call: the reply as it streams (_generate), then, when a
|
| 1439 |
-
|
| 1440 |
-
activity on the finished text to the stats line."""
|
| 1441 |
t_call = time.time()
|
| 1442 |
last = None
|
| 1443 |
for last in _generate(craft, ids, max_new, temperature, top_p,
|
| 1444 |
use_cache, arm_path, ckpt_step, stop, stop_ids,
|
| 1445 |
-
guard, rep):
|
| 1446 |
yield last
|
| 1447 |
-
if last is not None and last[2].get("live_arms")
|
|
|
|
| 1448 |
line = _activity(S(craft), t_call + CALL_BUDGET_S)
|
| 1449 |
if line:
|
| 1450 |
yield last[0], last[1] + line, last[2]
|
| 1451 |
|
| 1452 |
|
| 1453 |
def _generate(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
| 1454 |
-
ckpt_step, stop=(), stop_ids=(), guard=False, rep=1.0
|
|
|
|
| 1455 |
"""Yields (text, stats, prov) — prov is what actually RAN, resolved
|
| 1456 |
by _select, not what the dropdowns asked for. It travels back
|
| 1457 |
through the yield because it has to cross a process boundary: the
|
|
@@ -1467,7 +2036,7 @@ def _generate(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
|
| 1467 |
tasks) and a threading.Lock would be actively unsafe under fork: one
|
| 1468 |
held by any parent thread at fork time is inherited locked with no
|
| 1469 |
owner, and the child would block forever."""
|
| 1470 |
-
prov = _select(craft, ckpt_step, arm_path)
|
| 1471 |
c = S(craft)
|
| 1472 |
model = c.model
|
| 1473 |
dev = next(model.parameters()).device
|
|
@@ -1493,10 +2062,16 @@ def _generate(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
|
| 1493 |
stop_ids = set(int(s) for s in stop_ids)
|
| 1494 |
out, t0 = [], time.time()
|
| 1495 |
deadline, budget_hit = t0 + GEN_BUDGET_S, False
|
|
|
|
|
|
|
| 1496 |
label = (f"{prov['craft']} · step {prov['checkpoint_step']:,} · "
|
| 1497 |
-
+ (("stage arms on: "
|
| 1498 |
-
|
|
|
|
|
|
|
| 1499 |
if prov.get("live_arms") is not None else
|
|
|
|
|
|
|
| 1500 |
f"arm `{prov['arm'].split('@')[0]}`" if prov["arm"]
|
| 1501 |
else "core only")
|
| 1502 |
+ (" · fp32" if prov.get("precision") == "fp32" else "")
|
|
@@ -1570,14 +2145,15 @@ def _generate(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
|
| 1570 |
# the requested byte count was honoured as far as the GPU
|
| 1571 |
# allowance allowed; the shortfall is stated, never hidden
|
| 1572 |
note = (f" …[stopped at {len(out)} of {max_new} bytes — "
|
| 1573 |
-
f"{
|
| 1574 |
+ ("" if use_cache else "; the KV cache is off, so "
|
| 1575 |
"every byte recomputes the whole context") + "]")
|
| 1576 |
yield _render(out, c.fmt) + note, stats + " · **budget**", prov
|
| 1577 |
|
| 1578 |
|
| 1579 |
def complete(craft, prompt, max_new, temperature, top_p, use_cache, arm_path,
|
| 1580 |
-
ckpt_step, guard, rep=1.0,
|
|
|
|
| 1581 |
if not prompt or not prompt.strip():
|
| 1582 |
yield "(enter a prompt)", ""
|
| 1583 |
return
|
|
@@ -1601,7 +2177,8 @@ def complete(craft, prompt, max_new, temperature, top_p, use_cache, arm_path,
|
|
| 1601 |
arm_path, step_i, stop=stops,
|
| 1602 |
stop_ids=stop_ids,
|
| 1603 |
guard=bool(guard),
|
| 1604 |
-
rep=float(rep)
|
|
|
|
| 1605 |
yield prompt + text, stats
|
| 1606 |
done = True
|
| 1607 |
finally:
|
|
@@ -1672,8 +2249,17 @@ def _specials_chat_ids(history, message, context, budget=None):
|
|
| 1672 |
errors="replace")
|
| 1673 |
|
| 1674 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1675 |
def chat(craft, message, history, max_new, temperature, top_p, use_cache,
|
| 1676 |
-
arm_path, ckpt_step, guard, rep=1.0, convo_id="",
|
| 1677 |
request: gr.Request = None):
|
| 1678 |
if not message or not message.strip():
|
| 1679 |
yield list(history or []), "", ""
|
|
@@ -1759,7 +2345,8 @@ def chat(craft, message, history, max_new, temperature, top_p, use_cache,
|
|
| 1759 |
top_p, use_cache, arm_path, step_i,
|
| 1760 |
stop=stops, stop_ids=stop_ids,
|
| 1761 |
guard=bool(guard),
|
| 1762 |
-
rep=float(rep)
|
|
|
|
| 1763 |
body = _finish_reply(text, stops)
|
| 1764 |
history[-1]["content"] = (preface + body) if body else empty
|
| 1765 |
yield history, "", stats
|
|
@@ -1782,7 +2369,9 @@ TITLE = "# Beatrix — byte-level AlephLLMs you can talk to"
|
|
| 1782 |
# Everything explanatory lives in a closed accordion for that reason.
|
| 1783 |
DESCRIPTION = """
|
| 1784 |
Three generations of the same architecture, served side by side, newest
|
| 1785 |
-
first
|
|
|
|
|
|
|
| 1786 |
|
| 1787 |
**mini-beatrix-3** — 376M parameters over 32 blocks: the same governed
|
| 1788 |
full-splat hub as 2s, deeper. Its mission is **complete** — 64.4 billion
|
|
@@ -1814,11 +2403,46 @@ pick a checkpoint that carries them: the stage closes before that point,
|
|
| 1814 |
or 148,000 itself, the last with all four. They open all on; each can
|
| 1815 |
run alone or be switched off, a switched-off arm removes exactly its own
|
| 1816 |
write, and after every run the stats line shows how far each live arm
|
| 1817 |
-
moved the predictions on that text. Every later checkpoint
|
| 1818 |
-
|
| 1819 |
-
|
| 1820 |
-
|
| 1821 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1822 |
|
| 1823 |
**mini-beatrix-2s** — 237.1M parameters, **full splat**: the signed
|
| 1824 |
address read runs in *every* block (v1 used it in three), with a
|
|
@@ -1862,6 +2486,19 @@ The library here is the wider surface — 73 rows including the refuted
|
|
| 1862 |
and control ones that exist to be disprovable. The package is the
|
| 1863 |
settled subset, carrying each arm's measured numbers with it.
|
| 1864 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1865 |
**mini-beatrix-1** — 112.5M parameters, pretrained on 15.3 billion raw
|
| 1866 |
bytes, carrying a **library of detachable arms**: small adapters
|
| 1867 |
(3.2M–5.3M parameters) each trained on one exact frozen core. Pick a
|
|
@@ -1940,7 +2577,7 @@ _C0 = STATE[CRAFT]
|
|
| 1940 |
|
| 1941 |
with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
| 1942 |
gr.Markdown(TITLE)
|
| 1943 |
-
with gr.Accordion("About Beatrix — the
|
| 1944 |
"what the arms are, what to expect", open=False):
|
| 1945 |
gr.Markdown(DESCRIPTION)
|
| 1946 |
gr.Markdown(LOG_NOTE)
|
|
@@ -1964,6 +2601,23 @@ with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
|
| 1964 |
label="Arm (adapter)", scale=4,
|
| 1965 |
allow_custom_value=True,
|
| 1966 |
interactive=bool(_C0.arm_by_path))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1967 |
with gr.Row():
|
| 1968 |
max_new = gr.Slider(16, MAX_NEW_CAP, value=192, step=16,
|
| 1969 |
label="Max new bytes")
|
|
@@ -2023,7 +2677,8 @@ with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
|
| 2023 |
# after a Clear ran together as one conversation
|
| 2024 |
convo = gr.State("")
|
| 2025 |
_chat_in = [craft_pick, msg, chatbot, max_new, temperature, top_p,
|
| 2026 |
-
use_cache, arm_pick, ckpt, guard, rep, convo
|
|
|
|
| 2027 |
_chat_out = [chatbot, msg, stats_md]
|
| 2028 |
_ev1 = msg.submit(chat, _chat_in, _chat_out)
|
| 2029 |
_ev2 = send.click(chat, _chat_in, _chat_out)
|
|
@@ -2039,6 +2694,14 @@ with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
|
| 2039 |
# max_lines pinned: unpinned textboxes auto-grow to 20 rows in
|
| 2040 |
# 6.23.1, and a streaming continuation would push the tabs out
|
| 2041 |
# of reach inside the non-scrolling iframe
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2042 |
prompt = gr.Textbox(label="Prompt", lines=4, max_lines=4,
|
| 2043 |
value="The history of mathematics begins")
|
| 2044 |
comp_out = gr.Textbox(label="Continuation (streams)", lines=12,
|
|
@@ -2059,8 +2722,9 @@ with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
|
| 2059 |
_ev3 = comp_go.click(
|
| 2060 |
complete,
|
| 2061 |
[craft_pick, prompt, max_new, temperature, top_p, use_cache,
|
| 2062 |
-
arm_pick, ckpt, guard, rep],
|
| 2063 |
[comp_out, stats_md])
|
|
|
|
| 2064 |
# ONE halt for every generator, wired after both tabs so a Stop on
|
| 2065 |
# either side reaches the run in flight. Cancelling closes the
|
| 2066 |
# generator at its yield: the bytes already streamed stay on screen,
|
|
@@ -2076,14 +2740,19 @@ with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
|
| 2076 |
# toggles say otherwise
|
| 2077 |
craft_pick.change(on_craft, [craft_pick, auto_decode, fam_examples],
|
| 2078 |
[ckpt, arm_pick, status_box, temperature, top_p, rep,
|
| 2079 |
-
ex.dataset, comp_ex.dataset
|
|
|
|
| 2080 |
ckpt.change(on_checkpoint, [craft_pick, ckpt, auto_decode, fam_examples],
|
| 2081 |
[ckpt, arm_pick, status_box, temperature, top_p, rep,
|
| 2082 |
-
ex.dataset, comp_ex.dataset])
|
| 2083 |
arm_pick.change(on_arm,
|
| 2084 |
[craft_pick, ckpt, arm_pick, auto_decode, fam_examples],
|
| 2085 |
[status_box, temperature, top_p, rep, ex.dataset,
|
| 2086 |
-
comp_ex.dataset])
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2087 |
demo.load(js=RESIZE_JS)
|
| 2088 |
|
| 2089 |
demo.launch()
|
|
|
|
| 29 |
148,000 and finished on the core alone, so the
|
| 30 |
checkpoints from 92,000 to 148,000 ship their arms and
|
| 31 |
the Space serves them together as a program
|
| 32 |
+
(arm_mount "program": all live as trained, or any
|
| 33 |
+
subset switched off exactly), while every later
|
| 34 |
+
checkpoint, the final one included, is the core alone.
|
| 35 |
+
On the FINAL core (245,674) the arms fitted afterwards
|
| 36 |
+
are listed too: the arm SETS (several arms trained
|
| 37 |
+
switched on together; any subset can be switched on),
|
| 38 |
+
the solo arms, and every version of the LOOKUP ARM (a
|
| 39 |
+
zero-born softmax attention arm after blocks 2, 6, 12
|
| 40 |
+
and 20; amoe.arms.lookup), its tensors read from each
|
| 41 |
+
version's checkpoint by range request.
|
| 42 |
+
the 2s twins 257.6M · mini-beatrix-2s's recipe and data with softmax
|
| 43 |
+
attention in every block where 2s has the splat hub:
|
| 44 |
+
the original control twin and its re-runs from earlier
|
| 45 |
+
weights. No arms; decoded in fp32.
|
| 46 |
|
| 47 |
Crafts are discovered from the repo at boot: a craft with no manifest or
|
| 48 |
no checkpoint is skipped, and one that starts shipping appears on its
|
|
|
|
| 139 |
# chat plus a 3.2M arm that makes it chat, removable bit-for-bit.
|
| 140 |
# Listed newest first; if the default ever fails to load, the next one
|
| 141 |
# down serves instead.
|
| 142 |
+
# The 2s TWINS (`twin`): the pre-registered control of 2s — its recipe and
|
| 143 |
+
# data with softmax attention in all 20 blocks where 2s has the splat hub —
|
| 144 |
+
# and its re-runs from earlier weights. No arms. Decoded in fp32 (`fp32`):
|
| 145 |
+
# the re-runs trained their attention block in fp32 around fp16 flash, and
|
| 146 |
+
# bf16 decoding would serve a coarser model than the one that trained.
|
| 147 |
+
# `twin` carries (the short label for the craft title, the panel line).
|
| 148 |
CRAFTS = [
|
| 149 |
{"name": "mini-beatrix-3", "fmt": "specials", "wants_arms": True,
|
| 150 |
"stage_arms": True, "fp32": True},
|
| 151 |
{"name": "mini-beatrix-2s", "fmt": "specials", "wants_arms": True},
|
| 152 |
+
{"name": "mini-beatrix-2s-control-attn-fp16-r10k", "fmt": "specials",
|
| 153 |
+
"wants_arms": False, "fp32": True, "twin": (
|
| 154 |
+
"re-run from step 10,000, fp16 attention · still training",
|
| 155 |
+
"ℹ️ **the 2s twin, re-run and stable** — the twin re-run from its "
|
| 156 |
+
"step-10,000 weights with its attention block computed in fp32 "
|
| 157 |
+
"around fp16 flash attention, retracing 2s's curriculum. It has "
|
| 158 |
+
"stayed stable, and on each of the six stage-boundary texts reached "
|
| 159 |
+
"so far it reads fewer bits per byte than 2s (one run, one seed). "
|
| 160 |
+
"It is still training; the Space lists what had shipped when it "
|
| 161 |
+
"last started.")},
|
| 162 |
+
{"name": "mini-beatrix-2s-control", "fmt": "specials",
|
| 163 |
+
"wants_arms": False, "fp32": True, "twin": (
|
| 164 |
+
"the original control twin · training complete",
|
| 165 |
+
"ℹ️ **a control** — mini-beatrix-2s's recipe and data with softmax "
|
| 166 |
+
"attention in all 20 blocks where 2s has the splat hub. It ran the "
|
| 167 |
+
"whole mission in bf16, and under the recipe tuned for the splat "
|
| 168 |
+
"its training destabilized from step 17,600 (the gradient norm past "
|
| 169 |
+
"its clip on 813 of the last 824 logged steps); it closed at 2.88 "
|
| 170 |
+
"bits per byte on held-out text against 2s's 1.11. Steps 10,000 and "
|
| 171 |
+
"16,000 are the weights its re-runs started from.")},
|
| 172 |
+
{"name": "mini-beatrix-2s-control-attn-fp16", "fmt": "specials",
|
| 173 |
+
"wants_arms": False, "fp32": True, "twin": (
|
| 174 |
+
"re-run from step 16,000, fp16 attention · stopped",
|
| 175 |
+
"ℹ️ **a precision test** — the twin re-run from its step-16,000 "
|
| 176 |
+
"weights (before it destabilized) with its attention block computed "
|
| 177 |
+
"in fp32 around fp16 flash attention. Stopped at step 18,251, in "
|
| 178 |
+
"web-text pretraining.")},
|
| 179 |
+
{"name": "mini-beatrix-2s-control-bf16", "fmt": "specials",
|
| 180 |
+
"wants_arms": False, "fp32": True, "twin": (
|
| 181 |
+
"re-run from step 16,000, bf16 · stopped",
|
| 182 |
+
"ℹ️ **the precision test's control** — the twin re-run from its "
|
| 183 |
+
"step-16,000 weights with fresh optimizer states and the bf16 "
|
| 184 |
+
"attention it first ran with. Stopped at step 18,323, in web-text "
|
| 185 |
+
"pretraining.")},
|
| 186 |
{"name": "mini-beatrix-1", "fmt": "v1tags", "wants_arms": True},
|
| 187 |
]
|
| 188 |
DEFAULT_CRAFT = "mini-beatrix-3" # the newest completed mission leads
|
|
|
|
| 306 |
# as a BEFORE/AFTER pair across the chat anneal — 57,607 continues
|
| 307 |
# documents, 61,422 answers — and that contrast is the clearest thing
|
| 308 |
# the run produced, so the earlier half stays one click away.
|
| 309 |
+
ALWAYS_OFFER = {"mini-beatrix-2s": [57607],
|
| 310 |
+
# the weights the twin's re-runs started from
|
| 311 |
+
"mini-beatrix-2s-control": [10000, 16000]}
|
| 312 |
# default arm for the craft's DEFAULT step only — scoped so it can never
|
| 313 |
# displace another checkpoint's own chat arm. day1/poly is a BEHAVIOR arm
|
| 314 |
# on a single-turn Q&A frame: Chat therefore sends one question at a time
|
|
|
|
| 405 |
|
| 406 |
def _arm_files(arm):
|
| 407 |
"""The hub files one arm row mounts: its own checkpoint, or a stack's
|
| 408 |
+
or a stage program's members (neither has a file of its own), or the
|
| 409 |
+
checkpoint a lookup arm's tensors are read from."""
|
| 410 |
m = arm.get("mount") or {}
|
| 411 |
+
if m.get("type") == "lookup":
|
| 412 |
+
return [m.get("arm_file") or m["source"]]
|
| 413 |
return (list(m["members"]) if m.get("type") in ("stack", "program")
|
| 414 |
else [arm["path"]])
|
| 415 |
|
|
|
|
| 440 |
"tryfail": "trying, checking, finding the error, fixing it",
|
| 441 |
"mixed": "a review spiral over every earlier stage",
|
| 442 |
"register": "definitions, and one fact said several ways",
|
| 443 |
+
"caption": "image captions in a labelled frame (tags, caption, short, "
|
| 444 |
+
"attributes, scene, photo, structure, medium, long, rating)",
|
| 445 |
}
|
| 446 |
+
# the member switch's labels (stage number, then what the stage is about)
|
| 447 |
+
MEMBER_LABEL = {"perspective": "1 perspective", "concept": "2 concepts",
|
| 448 |
+
"rules": "3 rule chains", "arith": "4 arithmetic",
|
| 449 |
+
"causal": "5 cause and effect", "tryfail": "6 try-fail-revise",
|
| 450 |
+
"mixed": "7 mixed", "register": "8 register",
|
| 451 |
+
"caption": "9 captions"}
|
| 452 |
# completion prompts in each stage's own training format, cut just before
|
| 453 |
# the part the stage teaches
|
| 454 |
STAGE_PROBES = {
|
|
|
|
| 479 |
"register": [
|
| 480 |
"Plainly: the rain filled the barrel by morning. Formally:",
|
| 481 |
"The word 'fragile' means"],
|
| 482 |
+
"caption": [
|
| 483 |
+
"caption: a red bicycle leaning against a brick wall on a rainy "
|
| 484 |
+
"street\nshort:"],
|
| 485 |
}
|
| 486 |
# general text none of the stages is about: where every arm should be
|
| 487 |
# quiet (the activity line after a reply shows whether it is)
|
|
|
|
| 511 |
"""{step: [row, ...]} for a craft whose arms are co-trained stage arms.
|
| 512 |
|
| 513 |
Every step with at least one arm file gets the PROGRAM row — all of
|
| 514 |
+
that step's arms live, the model as the run trained it. Which members
|
| 515 |
+
run is the member switch's choice (any subset; a switched-off arm
|
| 516 |
+
passes its input through unchanged and nothing renormalizes), so one
|
| 517 |
+
row per program replaces the old only-this / all-but-this rows."""
|
|
|
|
| 518 |
members = {}
|
| 519 |
for f in files:
|
| 520 |
if not f.startswith(f"{craft}/arms/"):
|
|
|
|
| 529 |
names = [n for _, n, _ in ms]
|
| 530 |
paths = [p for _, _, p in ms]
|
| 531 |
words = ", ".join(_stage_word(n) for n in names)
|
| 532 |
+
by_step[step] = [_program_row(
|
| 533 |
craft, step, names, paths, names, "",
|
| 534 |
+
f"Stage arms trained with this core ({words})"
|
| 535 |
if len(names) > 1 else
|
| 536 |
+
f"Stage arm {names[0]}, trained with this core")]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 537 |
return by_step
|
| 538 |
|
| 539 |
|
| 540 |
+
# ------------------------------------------- arms fitted on the final core
|
| 541 |
+
# After the mission, arms were fitted on mini-beatrix-3's FINAL core with
|
| 542 |
+
# the core frozen: arm SETS (several arms trained switched on together;
|
| 543 |
+
# mounted as a program, any subset switchable), SOLO arms (one at a time)
|
| 544 |
+
# and the LOOKUP ARM (zero-born softmax attention after chosen blocks). The
|
| 545 |
+
# sets and solos come from arms_catalog.json (built from the training
|
| 546 |
+
# results by mb25/build_v3_space_catalog.py); the lookup arm's versions are
|
| 547 |
+
# found in the repo listing at boot, so a version that ships later appears
|
| 548 |
+
# after a restart with nothing rebuilt.
|
| 549 |
+
LOOKUP_RE = re.compile(r"^(mini-beatrix-3-la[\w.-]*)/checkpoints/"
|
| 550 |
+
r"step_(\d+)\.safetensors$")
|
| 551 |
+
LOOKUP_CACHE = os.environ.get("BEATRIX_LOOKUP_CACHE", "/tmp/beatrix-lookup")
|
| 552 |
+
|
| 553 |
+
|
| 554 |
+
def load_lookup_rows(files, craft, core_step, core_cfg):
|
| 555 |
+
"""One row per checkpoint of every lookup-arm craft whose manifest
|
| 556 |
+
chain (init_from, step by step) starts from THIS craft's core at
|
| 557 |
+
core_step and whose trunk config equals the core's (the arm trained
|
| 558 |
+
with the trunk frozen, so every version mounts on that one core). The
|
| 559 |
+
row mounts only the arm: its tensors are read from the checkpoint by
|
| 560 |
+
range request (or from an arm-only file when one shipped)."""
|
| 561 |
+
spec = (CATALOG.get(craft) or {}).get("lookup") or {}
|
| 562 |
+
found = {}
|
| 563 |
+
for f in files:
|
| 564 |
+
m = LOOKUP_RE.match(f)
|
| 565 |
+
if m:
|
| 566 |
+
found.setdefault(m.group(1), []).append(int(m.group(2)))
|
| 567 |
+
mans = {}
|
| 568 |
+
for lc in found:
|
| 569 |
+
try:
|
| 570 |
+
mans[lc] = json.load(open(hf_hub_download(
|
| 571 |
+
REPO, f"{lc}/manifest.json"), encoding="utf-8"))
|
| 572 |
+
except Exception as e:
|
| 573 |
+
print(f"[boot] lookup arm {lc}: manifest unreadable "
|
| 574 |
+
f"({type(e).__name__}) — not offered", flush=True)
|
| 575 |
+
|
| 576 |
+
def root(lc, seen=()):
|
| 577 |
+
src = ((mans.get(lc) or {}).get("init_from") or {}).get("source", "")
|
| 578 |
+
m = re.search(r"([^/]+)/checkpoints/step_(\d+)\.safetensors$", src)
|
| 579 |
+
if not m:
|
| 580 |
+
return None
|
| 581 |
+
parent, st = m.group(1), int(m.group(2))
|
| 582 |
+
if parent == craft:
|
| 583 |
+
return st
|
| 584 |
+
if parent in seen or parent not in mans:
|
| 585 |
+
return None
|
| 586 |
+
return root(parent, seen + (lc,))
|
| 587 |
+
|
| 588 |
+
rows = []
|
| 589 |
+
for lc, steps in sorted(found.items()):
|
| 590 |
+
man = mans.get(lc)
|
| 591 |
+
if not man:
|
| 592 |
+
continue
|
| 593 |
+
mc = man.get("model_config") or {}
|
| 594 |
+
trunk_ok = all(mc.get(k) == v for k, v in core_cfg.items()
|
| 595 |
+
if k != "name")
|
| 596 |
+
if root(lc) != core_step or not trunk_ok or not mc.get(
|
| 597 |
+
"lookup_arm_sites"):
|
| 598 |
+
print(f"[boot] lookup arm {lc}: not chained to {craft} @"
|
| 599 |
+
f"{core_step:,} with the same trunk — not offered",
|
| 600 |
+
flush=True)
|
| 601 |
+
continue
|
| 602 |
+
sites = [int(s) for s in mc["lookup_arm_sites"]]
|
| 603 |
+
depth = int(mc.get("lookup_arm_depth") or 1)
|
| 604 |
+
d = int(mc["d_model"])
|
| 605 |
+
per_layer = 4 * d * d + 4 * d # qkv + o (4d²), the q/k gains (2d), the norm (2d)
|
| 606 |
+
info = (spec.get("crafts") or {}).get(lc) or {}
|
| 607 |
+
reads = (spec.get("reads") or {}).get(lc) or {}
|
| 608 |
+
tail = lc[len(craft) + 1:]
|
| 609 |
+
arm_only = {}
|
| 610 |
+
for f in files:
|
| 611 |
+
m = re.match(rf"^{re.escape(lc)}/lookup_arm/lookup_arm_step_"
|
| 612 |
+
rf"(\d+)\.safetensors$", f)
|
| 613 |
+
if m:
|
| 614 |
+
arm_only[int(m.group(1))] = f
|
| 615 |
+
for st in sorted(steps, reverse=True):
|
| 616 |
+
rd = reads.get(str(st)) or {}
|
| 617 |
+
fetch = rd.get("fetch_2048")
|
| 618 |
+
path = f"{lc}/checkpoints/step_{st:08d}.safetensors"
|
| 619 |
+
rows.append({
|
| 620 |
+
"path": path, "step": core_step, "name": f"{tail}@{st}",
|
| 621 |
+
"group": "lookup arm", "kind": "lookup", "family": "lookup",
|
| 622 |
+
"title": (f"Lookup arm · {info.get('short', tail)} · step "
|
| 623 |
+
f"{st:,} · "
|
| 624 |
+
+ (f"fetch from 2,048 bytes back {fetch:.2f}"
|
| 625 |
+
if fetch is not None else "not read yet")
|
| 626 |
+
+ (f" · {depth} layers a site" if depth > 1 else "")),
|
| 627 |
+
"what": info.get("what") or tail,
|
| 628 |
+
"lookup_craft": lc, "lookup_step": st, "reads": rd,
|
| 629 |
+
"sites": sites, "depth": depth,
|
| 630 |
+
"params": depth * len(sites) * per_layer,
|
| 631 |
+
"mount": {"type": "lookup", "source": path,
|
| 632 |
+
"arm_file": arm_only.get(st),
|
| 633 |
+
"name": f"{tail}@{st}"},
|
| 634 |
+
"template": None,
|
| 635 |
+
"decode": {"temperature": 0.0, "top_p": 1.0, "rep": 1.0,
|
| 636 |
+
"precision": "fp32",
|
| 637 |
+
"why": "the arm's reads are greedy"},
|
| 638 |
+
# after the packaged sets; newest craft first, newest step
|
| 639 |
+
"rank": 3.5 + 0.01 * info.get("order", 9) + 1e-9 * (
|
| 640 |
+
10 ** 7 - st)})
|
| 641 |
+
return rows
|
| 642 |
+
|
| 643 |
+
|
| 644 |
+
def load_final_core_rows(files, craft, core_step, core_cfg):
|
| 645 |
+
"""The catalog's rows for the final core (sets and solos, each listed
|
| 646 |
+
only when every file it mounts is on the hub) and the lookup rows."""
|
| 647 |
+
present = set(files)
|
| 648 |
+
rows = [dict(r) for r in ((CATALOG.get(craft) or {}).get("rows") or [])
|
| 649 |
+
if int(r.get("step", -1)) == core_step]
|
| 650 |
+
kept = [r for r in rows if all(p in present for p in _arm_files(r))]
|
| 651 |
+
if len(kept) < len(rows):
|
| 652 |
+
print(f"[boot] {craft}: {len(rows) - len(kept)} catalog arm(s) have no "
|
| 653 |
+
"file on the hub — not offered", flush=True)
|
| 654 |
+
kept += load_lookup_rows(files, craft, core_step, core_cfg)
|
| 655 |
+
kept.sort(key=lambda r: (r.get("rank", 99), r.get("title", "")))
|
| 656 |
+
return kept
|
| 657 |
+
|
| 658 |
+
|
| 659 |
def load_reports(files, craft):
|
| 660 |
"""{step: report} for every stage-close report the run has shipped
|
| 661 |
(<craft>/reports/v3/<phase>_step<N>.json). A stage close is where the
|
|
|
|
| 753 |
the handle, or None when any file fails provenance. Adapter geometry
|
| 754 |
is read from each file's own tensors (the library holds more than one
|
| 755 |
shape), so nothing is assumed from a default spec."""
|
| 756 |
+
m = arm.get("mount") or {}
|
| 757 |
+
if m.get("type") == "lookup":
|
| 758 |
+
# provenance was settled at boot (the version's manifest chain from
|
| 759 |
+
# this exact core, the same trunk config) and _resolve_arm pins the
|
| 760 |
+
# row to the core's step; only the arm's own tensors are fetched
|
| 761 |
+
t0 = time.time()
|
| 762 |
+
try:
|
| 763 |
+
f = (hf_hub_download(REPO, m["arm_file"]) if m.get("arm_file")
|
| 764 |
+
else arm_mount.fetch_lookup_tensors(REPO, m["source"],
|
| 765 |
+
LOOKUP_CACHE))
|
| 766 |
+
except Exception as e:
|
| 767 |
+
print(f"[arms] refusing lookup arm {arm['name']}: its tensors "
|
| 768 |
+
f"could not be read ({type(e).__name__}: {str(e)[:200]})",
|
| 769 |
+
flush=True)
|
| 770 |
+
return None
|
| 771 |
+
print(f"[arms] {c.name} @{int(step):,}: lookup arm {arm['name']} ready "
|
| 772 |
+
f"({os.path.getsize(f) / 1e6:.1f} MB, {time.time() - t0:.1f}s)",
|
| 773 |
+
flush=True)
|
| 774 |
+
h = arm_mount.mount(c.model, {"type": "lookup", "name": arm["name"]}, f)
|
| 775 |
+
print(f"[arms] {c.name} @{int(step):,}: lookup arm {arm['name']} "
|
| 776 |
+
f"mounted (blocks {', '.join(map(str, h.sites))}, "
|
| 777 |
+
f"{h.spec.depth} layer{'s' if h.spec.depth > 1 else ''} a site, "
|
| 778 |
+
f"{h.n_params() / 1e6:.1f}M)", flush=True)
|
| 779 |
+
return h
|
| 780 |
local = []
|
| 781 |
for p in _arm_files(arm):
|
| 782 |
t0 = time.time()
|
|
|
|
| 893 |
if ph.get("status") == "active"), None)
|
| 894 |
self.stage_arms = bool(spec.get("stage_arms"))
|
| 895 |
self.fp32 = bool(spec.get("fp32"))
|
| 896 |
+
self.twin = spec.get("twin") # (title label, panel line) or None
|
| 897 |
self.reports = (load_reports(files, self.name) if self.stage_arms
|
| 898 |
else {})
|
| 899 |
self.arms = (load_stage_programs(files, self.name)
|
| 900 |
if self.stage_arms else
|
| 901 |
load_arm_index(files, self.name) if spec["wants_arms"]
|
| 902 |
else {})
|
| 903 |
+
# the run's own stage programs end at step 148,000; the arms fitted
|
| 904 |
+
# afterwards on the FINAL core join that step's list (and only it)
|
| 905 |
+
self.mission_steps = set(self.arms) if self.stage_arms else set()
|
| 906 |
+
self.final_rows = 0
|
| 907 |
+
if self.stage_arms:
|
| 908 |
+
final = max(self.cores)
|
| 909 |
+
extra = load_final_core_rows(files, self.name, final,
|
| 910 |
+
dict(manifest["model_config"]))
|
| 911 |
+
self.arms.setdefault(final, []).extend(extra)
|
| 912 |
+
self.final_rows = len(extra)
|
| 913 |
+
if extra:
|
| 914 |
+
print(f"[boot] {self.name} @{final:,}: "
|
| 915 |
+
f"{sum(r['kind'] == 'arm-set' for r in extra)} arm sets, "
|
| 916 |
+
f"{sum(r['kind'] == 'solo' for r in extra)} solo arms, "
|
| 917 |
+
f"{sum(r['kind'] == 'lookup' for r in extra)} lookup arm "
|
| 918 |
+
"versions fitted on the final core", flush=True)
|
| 919 |
self._chat_ok = { # per CHECKPOINT, not craft
|
| 920 |
s: bool(self.frame_trained and self._chat_from is not None
|
| 921 |
and int(m.get("tokens") or 0) > self._chat_from)
|
|
|
|
| 929 |
# (the run detached them there and finished on the core alone):
|
| 930 |
# the last step that ships arms, so later cores are labelled as
|
| 931 |
# the core alone rather than as "before the stage arms"
|
| 932 |
+
self.arm_last = (max(self.mission_steps)
|
| 933 |
+
if self.stage_arms and self.mission_steps else None)
|
| 934 |
self.arm_by_path = {a["path"]: a
|
| 935 |
for arms in self.arms.values() for a in arms}
|
| 936 |
|
|
|
|
| 1022 |
step = int(step)
|
| 1023 |
arms = self.arms.get(step, [])
|
| 1024 |
if self.stage_arms:
|
| 1025 |
+
# the run's own model at an armed checkpoint is the core WITH its
|
| 1026 |
+
# stage arms (they trained together), so they open live; the
|
| 1027 |
+
# final core was released bare, and the arms fitted on it
|
| 1028 |
+
# afterwards are listed, not opened
|
| 1029 |
for a in arms:
|
| 1030 |
+
if a.get("kind") == "stage-program":
|
| 1031 |
return a["path"]
|
| 1032 |
return CORE_ONLY
|
| 1033 |
if step == getattr(self, "step", None):
|
|
|
|
| 1086 |
else "pre-chat (documents only)")
|
| 1087 |
n_chat = sum(a["kind"] == "chat" for a in arms)
|
| 1088 |
if self.stage_arms:
|
| 1089 |
+
prog = [a for a in arms if a.get("kind") == "stage-program"]
|
| 1090 |
+
names = prog[0]["members"] if prog else []
|
| 1091 |
+
extra = len(arms) - len(prog)
|
| 1092 |
if step in self.reports:
|
| 1093 |
bits.append(f"close of {self.reports[step].get('tag')}")
|
| 1094 |
bits.append(("stage arms: " + ", ".join(
|
| 1095 |
_stage_word(n) for n in names)) if names
|
| 1096 |
+
else "arm sets, solo arms and the lookup arm "
|
| 1097 |
+
"fitted on it afterwards"
|
| 1098 |
+
if extra
|
| 1099 |
else "core alone (arms detached)"
|
| 1100 |
if self.arm_last and step > self.arm_last
|
| 1101 |
else "before the stage arms")
|
|
|
|
| 1115 |
arms = (f"{len(self.arm_by_path)} arms" if self.arm_by_path
|
| 1116 |
else "no arms yet")
|
| 1117 |
if self.stage_arms:
|
| 1118 |
+
last = self.arms.get(self.arm_last, []) if self.arm_last else []
|
| 1119 |
+
k = len(last[0]["members"]) if last else 0
|
| 1120 |
arms = ("no stage arms yet" if not k else
|
| 1121 |
f"{k} stage arm{'s' if k != 1 else ''} trained with it"
|
| 1122 |
if self.arm_last >= max(self.cores) else
|
| 1123 |
f"{k} stage arm{'s' if k != 1 else ''} to step "
|
| 1124 |
f"{self.arm_last:,}")
|
| 1125 |
+
if self.final_rows:
|
| 1126 |
+
arms += " · arm sets and the lookup arm on the final core"
|
| 1127 |
+
if self.twin:
|
| 1128 |
+
return (f"{self.name} · {n} · softmax twin of 2s · "
|
| 1129 |
+
f"{self.twin[0]}")
|
| 1130 |
if self.fmt == "specials":
|
| 1131 |
state = ("in training" if self.active_phase
|
| 1132 |
else "training complete")
|
|
|
|
| 1184 |
return arm if (arm and arm["step"] == int(step)) else None
|
| 1185 |
|
| 1186 |
|
| 1187 |
+
def _live_set(arm, live):
|
| 1188 |
+
"""Which members of a program row run: the member switch's choice
|
| 1189 |
+
(a list; an empty list switches every member off) or, when the caller
|
| 1190 |
+
sent none, the row's own default (every member on)."""
|
| 1191 |
+
members = list(arm.get("members") or [])
|
| 1192 |
+
if live is None:
|
| 1193 |
+
return list(arm.get("live") or members)
|
| 1194 |
+
want = set(live)
|
| 1195 |
+
# a non-empty choice naming none of this row's members is left over
|
| 1196 |
+
# from another row (a send that raced the switch's refresh): it gets
|
| 1197 |
+
# the row's default, never "all off" by accident. An EMPTY choice is
|
| 1198 |
+
# the visitor unticking every box and means exactly that.
|
| 1199 |
+
if want and not want & set(members):
|
| 1200 |
+
return list(arm.get("live") or members)
|
| 1201 |
+
return [n for n in members if n in want]
|
| 1202 |
+
|
| 1203 |
+
|
| 1204 |
+
def _select(craft, step, arm_path, live=None):
|
| 1205 |
"""Make the live model BE (craft, step, arm). arm_path is "" for
|
| 1206 |
+
core-only; `live` is the member switch's choice for a program row.
|
| 1207 |
+
Runs inside the ZeroGPU worker, where each call starts
|
| 1208 |
from the parent's packed state, so a non-default selection re-applies
|
| 1209 |
per request (weights come from the local hub cache — no
|
| 1210 |
re-download). Returns a provenance dict."""
|
|
|
|
| 1246 |
c.handle = _mount(c, arm, step) # provenance, every switch
|
| 1247 |
if c.handle is not None:
|
| 1248 |
c.loaded["mount"] = want_mount
|
| 1249 |
+
on = None
|
| 1250 |
if arm is not None and c.handle is not None:
|
| 1251 |
+
if arm.get("members"): # a program row: the switch
|
| 1252 |
+
on = _live_set(arm, live)
|
| 1253 |
+
c.handle.set_live(on)
|
| 1254 |
+
if (c.loaded["arm_path"] != want
|
| 1255 |
+
or c.loaded.get("live") != on):
|
| 1256 |
+
print(f"[arms] {c.name} @{step:,}: on "
|
| 1257 |
+
+ (", ".join(on) or "none")
|
| 1258 |
+
+ (f" · off {', '.join(n for n in arm['members'] if n not in on)}"
|
| 1259 |
+
if len(on) < len(arm["members"]) else ""),
|
| 1260 |
+
flush=True)
|
| 1261 |
c.loaded["arm_path"] = want # commit only now
|
| 1262 |
+
c.loaded["live"] = on
|
| 1263 |
arm_on = arm is not None and c.handle is not None
|
| 1264 |
fp32 = c.fp32 or (arm_on and (arm.get("decode") or {}).get("precision")
|
| 1265 |
== "fp32")
|
| 1266 |
prov = {"craft": c.name, "checkpoint_step": step,
|
| 1267 |
+
"arm": ((arm.get("name") if arm.get("kind") in ("lookup", "arm-set")
|
| 1268 |
+
else want.split("/")[-1]) if arm_on else None),
|
| 1269 |
"arm_kind": (arm["kind"] if arm_on else "core-only"),
|
| 1270 |
"precision": "fp32" if fp32 else "bf16",
|
| 1271 |
"switch_s": round(time.time() - t0, 2)}
|
| 1272 |
+
if arm_on and on is not None:
|
| 1273 |
+
prov["live_arms"] = list(on)
|
| 1274 |
prov["stage_arms"] = list(arm["members"])
|
| 1275 |
+
if arm_on and arm.get("kind") == "lookup":
|
| 1276 |
+
prov["lookup_sites"] = list(arm["sites"])
|
| 1277 |
+
prov["lookup_version"] = f"{arm['lookup_craft']}@{arm['lookup_step']}"
|
| 1278 |
return prov
|
| 1279 |
|
| 1280 |
|
| 1281 |
+
def _f3(x):
|
| 1282 |
+
s = f"{x:.3f}"
|
| 1283 |
+
return s[1:] if s.startswith("0.") else s
|
| 1284 |
+
|
| 1285 |
+
|
| 1286 |
+
def _set_line(arm, live):
|
| 1287 |
+
"""An arm set fitted on the final core: which members run, what the set
|
| 1288 |
+
is, and what was measured for it (each member's own stage text with
|
| 1289 |
+
every arm off, with the whole set on, and with that member alone; the
|
| 1290 |
+
set's cost on held-out web text)."""
|
| 1291 |
+
on = set(live)
|
| 1292 |
+
reads = arm.get("reads") or {}
|
| 1293 |
+
mem = " · ".join(f"`{_stage_word(n)}` {'✓' if n in on else '✗'}"
|
| 1294 |
+
for n in arm["members"])
|
| 1295 |
+
meas = " · ".join(
|
| 1296 |
+
f"{_stage_word(n)} {_f3(r['off'])}→{_f3(r['on'])}"
|
| 1297 |
+
+ (f" (alone {_f3(r['alone'])})" if r.get("alone") is not None else "")
|
| 1298 |
+
for n, r in reads.items() if r.get("off") is not None
|
| 1299 |
+
and r.get("on") is not None)
|
| 1300 |
+
return " \n".join(filter(None, [
|
| 1301 |
+
f"**Arm set** · {arm['name']} · {len(arm['members'])} arms, "
|
| 1302 |
+
f"{arm['params'] / 1e6:.1f}M · {arm.get('status', '')} · fitted on "
|
| 1303 |
+
f"THIS core with the core frozen — " + mem,
|
| 1304 |
+
arm.get("what", ""),
|
| 1305 |
+
("Measured, each arm's own stage text in bits per byte, every arm "
|
| 1306 |
+
"off → the set on (that arm alone): " + meas
|
| 1307 |
+
+ (f" · held-out web text with the set on {arm['web']:+.4f}"
|
| 1308 |
+
if arm.get("web") is not None else "")) if meas else "",
|
| 1309 |
+
"Tick and untick arms below to run any subset: a switched-off arm "
|
| 1310 |
+
"removes exactly its own write, nothing renormalizes. Decoded greedy "
|
| 1311 |
+
"in fp32 as measured; the Completion tab has prompts in each stage's "
|
| 1312 |
+
"own format."]))
|
| 1313 |
+
|
| 1314 |
+
|
| 1315 |
+
def _solo_line(arm):
|
| 1316 |
+
return " \n".join(filter(None, [
|
| 1317 |
+
f"**Solo arm** · {arm['title'].split(' · ', 1)[1]} · "
|
| 1318 |
+
f"{arm['params'] / 1e6:.1f}M · {arm.get('status', '')}",
|
| 1319 |
+
arm.get("what", ""),
|
| 1320 |
+
f"Measured: {arm['score']} (bits per byte)" if arm.get("score") else "",
|
| 1321 |
+
"Decoded greedy in fp32 as measured; the Completion tab has prompts "
|
| 1322 |
+
"in its stage's own format."]))
|
| 1323 |
+
|
| 1324 |
+
|
| 1325 |
+
def _lookup_line(c, arm):
|
| 1326 |
+
rd = arm.get("reads") or {}
|
| 1327 |
+
bare = ((CATALOG.get(c.name) or {}).get("lookup") or {}).get("bare") or {}
|
| 1328 |
+
fet = " · ".join(f"{k.split('_')[1]} bytes back {rd[k]:.2f}"
|
| 1329 |
+
for k in ("fetch_1024", "fetch_2048", "fetch_3072",
|
| 1330 |
+
"fetch_3400") if rd.get(k) is not None)
|
| 1331 |
+
return " \n".join(filter(None, [
|
| 1332 |
+
f"**Lookup arm** · version `{arm['lookup_craft']}` step "
|
| 1333 |
+
f"{arm['lookup_step']:,} · softmax attention after blocks "
|
| 1334 |
+
+ ", ".join(map(str, arm["sites"]))
|
| 1335 |
+
+ (f", {arm['depth']} layers a site" if arm.get("depth", 1) > 1 else "")
|
| 1336 |
+
+ f" · {arm['params'] / 1e6:.1f}M · born at zero and trained with THIS "
|
| 1337 |
+
"core frozen, so switching it off gives the core back bit for bit",
|
| 1338 |
+
"This version: " + arm.get("what", ""),
|
| 1339 |
+
("Measured, the planted value's first byte fetched from: " + fet
|
| 1340 |
+
+ (f" (the core alone: {bare.get('fetch_1024', 0):.2f} / "
|
| 1341 |
+
f"{bare.get('fetch_2048', 0):.2f} at 1,024 / 2,048)" if bare else ""))
|
| 1342 |
+
if fet else "Not read yet.",
|
| 1343 |
+
"Its write is concentrated where a question asks for a value planted "
|
| 1344 |
+
"earlier. Try the recall prompts in the Completion tab with the arm "
|
| 1345 |
+
"on and with Core only. Decoded greedy in fp32; after a run the "
|
| 1346 |
+
"activity line shows how far the whole arm, and each site alone, "
|
| 1347 |
+
"moved the predictions on that text."]))
|
| 1348 |
+
|
| 1349 |
+
|
| 1350 |
+
def _program_line(c, step, arm, live=None):
|
| 1351 |
"""A stage program as it runs on this checkpoint: every member on or
|
| 1352 |
off (what each stage teaches, while there are few enough to fit), and,
|
| 1353 |
when this checkpoint is a stage close, the cost the trainer measured
|
| 1354 |
for each arm on general text."""
|
| 1355 |
+
if arm.get("kind") == "arm-set":
|
| 1356 |
+
return _set_line(arm, _live_set(arm, live))
|
| 1357 |
+
live = set(_live_set(arm, live))
|
| 1358 |
few = len(arm["members"]) <= 2
|
| 1359 |
mem = " · ".join(
|
| 1360 |
f"`{n}` {'✓ on' if n in live else '✗ off'}"
|
|
|
|
| 1372 |
lines.append("Measured by the trainer at this stage close, each "
|
| 1373 |
"arm's cost on held-out web text (bits per byte, on "
|
| 1374 |
"minus off; its bar is +0.012): " + " · ".join(cost))
|
| 1375 |
+
lines.append("Tick and untick arms below to run any subset: switching an "
|
| 1376 |
+
"arm off removes exactly its write; the core and the other "
|
| 1377 |
+
"arms are untouched. Decoded in fp32. After each run the "
|
| 1378 |
+
"stats line shows how far each live arm moved the "
|
| 1379 |
+
"predictions on that text.")
|
| 1380 |
return " \n".join(lines)
|
| 1381 |
|
| 1382 |
|
| 1383 |
+
def status_md(craft, step, arm_path=CORE_ONLY, live=None):
|
| 1384 |
c = S(craft)
|
| 1385 |
step = _step(c, step)
|
| 1386 |
arms = c.arms.get(step, [])
|
| 1387 |
+
prog = [a for a in arms if a.get("kind") == "stage-program"]
|
| 1388 |
+
extra = [a for a in arms if a.get("kind") in ("arm-set", "solo", "lookup")]
|
| 1389 |
meta = c.ckpt_meta.get(step, {})
|
| 1390 |
newest = max(c.cores)
|
| 1391 |
arm = _resolve_arm(c, arm_path, step)
|
|
|
|
| 1398 |
"They live on bytes UTF-8 can never produce, so "
|
| 1399 |
"nothing you type can forge them."
|
| 1400 |
+ (f" \n**Arms** all switched off — the raw core "
|
| 1401 |
+
f"({len(prog[0]['members'])} stage arm"
|
| 1402 |
+
f"{'s' if len(prog[0]['members']) != 1 else ''} "
|
| 1403 |
"trained with it here)"
|
| 1404 |
+
if c.stage_arms and prog else "")
|
| 1405 |
+
+ (f" \n**Arms** none attached — the final core alone. "
|
| 1406 |
+
f"Fitted on it afterwards and listed under *Arm*: "
|
| 1407 |
+
f"{sum(a['kind'] == 'arm-set' for a in extra)} arm "
|
| 1408 |
+
f"sets, {sum(a['kind'] == 'solo' for a in extra)} solo "
|
| 1409 |
+
f"arms, {sum(a['kind'] == 'lookup' for a in extra)} "
|
| 1410 |
+
"versions of the lookup arm"
|
| 1411 |
+
if c.stage_arms and extra else ""))
|
| 1412 |
+
elif arm and arm.get("members"):
|
| 1413 |
+
arm_line = _program_line(c, step, arm, live)
|
| 1414 |
+
elif arm and arm.get("kind") == "solo":
|
| 1415 |
+
arm_line = _solo_line(arm)
|
| 1416 |
+
elif arm and arm.get("kind") == "lookup":
|
| 1417 |
+
arm_line = _lookup_line(c, arm)
|
| 1418 |
elif arm:
|
| 1419 |
sp = arm.get("spec") or {}
|
| 1420 |
t = _tmpl(arm)
|
|
|
|
| 1454 |
+ f" · {c.core_params/1e6:.1f}M core · ctx {c.cfg.context}"
|
| 1455 |
+ (f" · newest is {newest:,}" if step != newest else ""),
|
| 1456 |
arm_line,
|
| 1457 |
+
# a 2s twin says what it is (a control, which re-run, its state)
|
| 1458 |
+
(c.twin[1] if c.twin else ""),
|
| 1459 |
# which side of the chat anneal THIS core sits on — the mission
|
| 1460 |
# ends in a before/after pair and they are not interchangeable
|
| 1461 |
(f"**Phase:** `{c.phase_of(step)}` · "
|
|
|
|
| 1466 |
if c.fmt == "specials" and c.phase_of(step) else ""),
|
| 1467 |
# a craft still in pretraining has never seen its chat frame:
|
| 1468 |
# say so rather than letting the Chat tab imply otherwise
|
| 1469 |
+
(("⚠️ this run **stopped before** the anneal that teaches the "
|
| 1470 |
+
f"conversation frame (it ended in phase `{c.active_phase}`, "
|
| 1471 |
+
f"{c.tokens_seen/1e9:.2f}B bytes) — Chat will read as "
|
| 1472 |
+
"off-distribution. **Completion** is the honest view."
|
| 1473 |
+
if c.twin and "stopped" in c.twin[0] else
|
| 1474 |
+
"⚠️ this craft is **still training** (phase "
|
| 1475 |
+
f"`{c.active_phase}`, {c.tokens_seen/1e9:.2f}B bytes) and has not "
|
| 1476 |
+
"reached the anneal that teaches its conversation frame — Chat "
|
| 1477 |
+
"will read as off-distribution. **Completion** is the honest "
|
| 1478 |
+
"view of what she can do today."
|
| 1479 |
+
+ (f" Checkpoints and progress were read when this Space started"
|
| 1480 |
+
f", from a manifest written {c.updated_utc}; the run has moved "
|
| 1481 |
+
"on since, and a restart picks up what it shipped."
|
| 1482 |
+
if c.updated_utc else ""))
|
| 1483 |
if c.fmt == "specials" and not c.frame_trained else ""),
|
| 1484 |
# the craft finished its chat anneal but THIS checkpoint predates
|
| 1485 |
# it: the pre-chat baseline continues documents rather than
|
|
|
|
| 1496 |
# mini-beatrix-3 after its arms were detached (step 148,000): say
|
| 1497 |
# why the arm picker holds only the core here (one short line: the
|
| 1498 |
# panel sits above the tabs)
|
| 1499 |
+
(f"ℹ️ the run's own stage arms were detached at step "
|
| 1500 |
+
f"{c.arm_last:,} (pick {c.arm_last:,} or an earlier stage close to "
|
| 1501 |
+
"run them); the arms in the list here were fitted on this final "
|
| 1502 |
+
"core afterwards, with the core frozen."
|
| 1503 |
+
if c.stage_arms and c.arm_last and step > c.arm_last and extra else
|
| 1504 |
+
f"ℹ️ the core alone: its stage arms were detached at step "
|
| 1505 |
f"{c.arm_last:,}. Pick {c.arm_last:,} or an earlier stage close "
|
| 1506 |
"to run them."
|
| 1507 |
if c.stage_arms and c.arm_last and step > c.arm_last else ""),
|
|
|
|
| 1542 |
("ℹ️ no arm has been trained on this lineage yet — and none is "
|
| 1543 |
"needed to talk to it: the conversation frame was taught to the "
|
| 1544 |
"core itself, in the anneal that closed its mission."
|
| 1545 |
+
if not c.arm_by_path and c.chats(step) and not c.twin else ""),
|
| 1546 |
("ℹ️ no arm has been trained on this lineage yet — every reply "
|
| 1547 |
"here is the raw pretrained core."
|
| 1548 |
+
if not c.arm_by_path and not c.chats(step) and not c.twin else ""),
|
| 1549 |
]))
|
| 1550 |
|
| 1551 |
|
|
|
|
| 1582 |
|
| 1583 |
|
| 1584 |
def _probe_prompts(arm):
|
| 1585 |
+
"""Completion prompts for a stage program or arm set (each member
|
| 1586 |
+
stage's own training format) or a solo arm (its stage's), then general
|
| 1587 |
+
text where every arm should stay quiet. None for any other row (the
|
| 1588 |
+
prompt list is then hidden)."""
|
| 1589 |
+
if not arm:
|
| 1590 |
+
return None
|
| 1591 |
+
words = ([_stage_word(n) for n in arm["members"]] if arm.get("members")
|
| 1592 |
+
else [arm["probe_stage"]] if arm.get("probe_stage") else None)
|
| 1593 |
+
if not words:
|
| 1594 |
return None
|
| 1595 |
+
out = [p for w in words for p in STAGE_PROBES.get(w, [])]
|
|
|
|
| 1596 |
return [[p] for p in out + OFF_STAGE_PROBES]
|
| 1597 |
|
| 1598 |
|
|
|
|
| 1602 |
if probes and fam_examples else gr.update(visible=False))
|
| 1603 |
|
| 1604 |
|
| 1605 |
+
# Recall prompts for the lookup arm, in its training phrasing (the deep
|
| 1606 |
+
# renderer's single record, updated record and lockers): a value planted
|
| 1607 |
+
# after the first sentences, ordinary text, then the record's sentence
|
| 1608 |
+
# again, cut just before the value. The filler is plain prose written for
|
| 1609 |
+
# this page. Greedy decoding: the next bytes should be the planted value.
|
| 1610 |
+
_FILL = (
|
| 1611 |
+
"The ferry left the north landing a little after seven, as it did on "
|
| 1612 |
+
"most mornings in the dry season. The river was low and brown, and the "
|
| 1613 |
+
"pilot kept to the deep channel near the eastern bank, where the water "
|
| 1614 |
+
"moved faster and the sandbars could not reach. On the deck a few "
|
| 1615 |
+
"traders sat beside their baskets of onions and dried fish, and a boy "
|
| 1616 |
+
"sold tea from a dented kettle balanced on a charcoal stove. Nobody "
|
| 1617 |
+
"spoke much in the first hour. The light came up slowly behind the "
|
| 1618 |
+
"hills, turning the haze from grey to a pale gold, and the birds that "
|
| 1619 |
+
"lived in the reeds rose in loose flocks as the boat passed. At the "
|
| 1620 |
+
"bend below the old mill the pilot sounded the horn twice, the signal "
|
| 1621 |
+
"for the farms on the far side that the ferry would stop on its way "
|
| 1622 |
+
"back. The mill itself had not turned in years. Its wheel was rusted "
|
| 1623 |
+
"in place and a fig tree grew from the roof of the grinding room, its "
|
| 1624 |
+
"roots working down through the cracked plaster toward the water. "
|
| 1625 |
+
"Some of the older passengers remembered when the mill had ground "
|
| 1626 |
+
"wheat for three villages, and they talked about the long lines of "
|
| 1627 |
+
"carts that used to wait on the road in the harvest weeks. The traders "
|
| 1628 |
+
"were more interested in the price of diesel, which had risen again, "
|
| 1629 |
+
"and in whether the new bridge upstream would ever be finished. "
|
| 1630 |
+
"Everyone had an opinion about the bridge. It had been promised for "
|
| 1631 |
+
"twelve years, and twice the pylons had been started and then left to "
|
| 1632 |
+
"stand in the current like the legs of some patient wading bird. By "
|
| 1633 |
+
"the middle of the morning the wind had changed. It came from the "
|
| 1634 |
+
"south now, warm and smelling of cut grass, and it raised small waves "
|
| 1635 |
+
"that slapped against the hull. The pilot slowed the engine and let "
|
| 1636 |
+
"the boat drift for a while past the island where the fishermen kept "
|
| 1637 |
+
"their huts. Smoke rose from one of the chimneys, and a dog ran along "
|
| 1638 |
+
"the shore barking until the ferry was out of sight. The boy with the "
|
| 1639 |
+
"kettle had sold all his tea and sat on an upturned crate counting his "
|
| 1640 |
+
"coins into neat stacks. The market town came into view a little "
|
| 1641 |
+
"before noon. Its waterfront was crowded with boats of every size, "
|
| 1642 |
+
"from narrow canoes to the steel barges that carried gravel down from "
|
| 1643 |
+
"the quarries, and the ferry had to wait its turn to reach the stone "
|
| 1644 |
+
"steps of the landing. While it waited, the passengers gathered their "
|
| 1645 |
+
"things and argued gently about who would get off first. The steps "
|
| 1646 |
+
"were wet and slippery, worn smooth by a century of feet, and a man in "
|
| 1647 |
+
"a blue cap stood at the top to help people up with their loads. "
|
| 1648 |
+
"Beyond the landing the market spread across a wide square shaded by "
|
| 1649 |
+
"plane trees. There were stalls for cloth and stalls for tools, a row "
|
| 1650 |
+
"of women selling herbs and seeds from small paper packets, and at the "
|
| 1651 |
+
"far end a covered hall where the butchers worked. The noise was "
|
| 1652 |
+
"constant and cheerful. Prices were called out, refused, called again, "
|
| 1653 |
+
"and finally agreed with a handshake or a shrug. A radio somewhere "
|
| 1654 |
+
"played the same song three times in an hour. In the afternoon the "
|
| 1655 |
+
"heat settled over the square and the trading slowed. Stallholders "
|
| 1656 |
+
"dozed under their awnings, and the cats that lived around the "
|
| 1657 |
+
"butchers' hall stretched out on the cool stones by the fountain. Only "
|
| 1658 |
+
"the children kept moving, chasing each other between the tables and "
|
| 1659 |
+
"through the narrow lanes that led away from the square toward the "
|
| 1660 |
+
"older houses on the hill. The ferry would not leave again until four. "
|
| 1661 |
+
"Its crew ate lunch on the deck, bread and cheese and a few late "
|
| 1662 |
+
"plums, and talked about the season, the river and the bridge.")
|
| 1663 |
+
|
| 1664 |
+
|
| 1665 |
+
def _sentences(text, n):
|
| 1666 |
+
"""The leading whole sentences of `text` that fit in n bytes."""
|
| 1667 |
+
body = text[:max(0, n)]
|
| 1668 |
+
return body[:body.rindex(". ") + 2] if ". " in body else body
|
| 1669 |
+
|
| 1670 |
+
|
| 1671 |
+
def _recall(plant, ask, gap, later=None):
|
| 1672 |
+
"""~220 bytes of prose, the plant, about `gap` bytes of prose, the
|
| 1673 |
+
question. `later` (a second sentence of the record) goes in a third
|
| 1674 |
+
of the way through the gap: the updated-record form."""
|
| 1675 |
+
head = _sentences(_FILL, _FILL.index(". ", 200) + 2)
|
| 1676 |
+
rest = _FILL[len(head):]
|
| 1677 |
+
body = _sentences(rest, gap - len(plant))
|
| 1678 |
+
if later:
|
| 1679 |
+
first = _sentences(body, len(body) // 3)
|
| 1680 |
+
body = first + later + body[len(first):]
|
| 1681 |
+
return head + plant + body + ask
|
| 1682 |
+
|
| 1683 |
+
|
| 1684 |
+
def _back(text, value):
|
| 1685 |
+
"""How far back the answer sits: bytes from the value's (last) plant
|
| 1686 |
+
to the end of the prompt, where the reply begins."""
|
| 1687 |
+
b = text.encode()
|
| 1688 |
+
return len(b) - b.rindex(value.encode())
|
| 1689 |
+
|
| 1690 |
+
|
| 1691 |
+
def _recall_rows():
|
| 1692 |
+
rows = []
|
| 1693 |
+
for cue, value, gap in (("code", "48213", 450), ("word", "quilmet", 1050),
|
| 1694 |
+
("number", "7395021", 2100),
|
| 1695 |
+
("token", "vandrel", 3100)):
|
| 1696 |
+
t = _recall(f"The secret {cue} is {value}. ",
|
| 1697 |
+
f"The secret {cue} is ", gap)
|
| 1698 |
+
rows.append((f"the secret {cue}, planted {_back(t, value):,} bytes "
|
| 1699 |
+
f"back (the answer: {value})", t))
|
| 1700 |
+
t = _recall("The secret key is 3fa91c. ", "The secret key is ", 1600,
|
| 1701 |
+
later="The secret key is now 82d04e. ")
|
| 1702 |
+
rows.append(("an updated key: the first value, then a later one "
|
| 1703 |
+
f"{_back(t, '82d04e'):,} bytes back (the answer: the later "
|
| 1704 |
+
"value, 82d04e)", t))
|
| 1705 |
+
t = _recall("Locker 4821 holds code 55370. Locker 3109 holds code 90412. "
|
| 1706 |
+
"Locker 7744 holds code 21865. Locker 1296 holds code 67093. ",
|
| 1707 |
+
"Locker 3109 holds code ", 900)
|
| 1708 |
+
rows.append(("four lockers, the asked one planted "
|
| 1709 |
+
f"{_back(t, '90412'):,} bytes back (the answer: 90412; "
|
| 1710 |
+
"telling keys apart is still open: the one-layer arm reads "
|
| 1711 |
+
"near chance here)", t))
|
| 1712 |
+
return rows
|
| 1713 |
+
|
| 1714 |
+
|
| 1715 |
+
RECALL_PROBES = _recall_rows()
|
| 1716 |
+
|
| 1717 |
+
|
| 1718 |
+
def _recall_update(arm):
|
| 1719 |
+
if arm and arm.get("kind") == "lookup":
|
| 1720 |
+
return gr.update(choices=[lab for lab, _ in RECALL_PROBES], value=None,
|
| 1721 |
+
visible=True)
|
| 1722 |
+
return gr.update(visible=False, value=None)
|
| 1723 |
+
|
| 1724 |
+
|
| 1725 |
+
def on_recall(label):
|
| 1726 |
+
"""Writes the chosen recall prompt into the Completion prompt box."""
|
| 1727 |
+
for lab, text in RECALL_PROBES:
|
| 1728 |
+
if lab == label:
|
| 1729 |
+
return text
|
| 1730 |
+
return gr.update()
|
| 1731 |
+
|
| 1732 |
+
|
| 1733 |
+
def _members_update(arm, live=None):
|
| 1734 |
+
"""The member switch: shown for a program row (a stage program or an
|
| 1735 |
+
arm set), one box per member, every box ticked when the row is picked."""
|
| 1736 |
+
if not arm or not arm.get("members"):
|
| 1737 |
+
return gr.update(choices=[], value=[], visible=False)
|
| 1738 |
+
return gr.update(
|
| 1739 |
+
choices=_member_choices(arm), value=_live_set(arm, live),
|
| 1740 |
+
label=_member_label(arm), visible=True)
|
| 1741 |
+
|
| 1742 |
+
|
| 1743 |
+
def _member_choices(arm):
|
| 1744 |
+
return [(MEMBER_LABEL.get(_stage_word(n), _stage_word(n)), n)
|
| 1745 |
+
for n in (arm or {}).get("members") or []]
|
| 1746 |
+
|
| 1747 |
+
|
| 1748 |
+
def _member_label(arm):
|
| 1749 |
+
return ("Arms in this set · untick any arm to switch it off"
|
| 1750 |
+
if (arm or {}).get("kind") == "arm-set" else
|
| 1751 |
+
"Stage arms trained with this core · untick any arm to switch "
|
| 1752 |
+
"it off")
|
| 1753 |
+
|
| 1754 |
+
|
| 1755 |
+
def on_members(craft, step, arm_path, live):
|
| 1756 |
+
"""Ticking or unticking a member re-renders the panel's member line."""
|
| 1757 |
+
return status_md(craft, step, arm_path, live)
|
| 1758 |
+
|
| 1759 |
+
|
| 1760 |
def on_arm(craft, step, arm_path, auto_decode, fam_examples):
|
| 1761 |
"""Selecting an arm re-tunes what the arm needs and shows what it
|
| 1762 |
knows: a task arm collapses to turn-end off-distribution and turns
|
|
|
|
| 1772 |
gr.update(value=r) if auto_decode else gr.update(),
|
| 1773 |
gr.update(samples=_examples_of(arm)) if fam_examples
|
| 1774 |
else gr.update(),
|
| 1775 |
+
_probe_update(arm, fam_examples),
|
| 1776 |
+
_members_update(arm),
|
| 1777 |
+
_recall_update(arm))
|
| 1778 |
|
| 1779 |
|
| 1780 |
def on_checkpoint(craft, step, auto_decode, fam_examples):
|
|
|
|
| 1905 |
|
| 1906 |
ACTIVITY_BYTES = 1024 # the text window the per-arm activity reads
|
| 1907 |
CALL_BUDGET_S = 112.0 # ZeroGPU ends the call at 120 s
|
| 1908 |
+
# the reply must end this long after the GPU call began, whatever the arm
|
| 1909 |
+
# switch before it cost: a first mount of a nine-arm set downloads ~0.5 GB,
|
| 1910 |
+
# and a reply cut by the call's own end is lost mid-stream instead of
|
| 1911 |
+
# stopping with a note
|
| 1912 |
+
CALL_GEN_END_S = 105.0
|
| 1913 |
|
| 1914 |
|
| 1915 |
@torch.no_grad()
|
|
|
|
| 1922 |
reply, inside the same GPU call, while the program is still attached.
|
| 1923 |
Near zero means the arm is quiet on this text."""
|
| 1924 |
h, ids = c.handle, getattr(c, "last_ids", None)
|
| 1925 |
+
if ids is None or ids.shape[1] < 2:
|
| 1926 |
+
return ""
|
| 1927 |
+
if _is_lookup(h):
|
| 1928 |
+
return _lookup_activity(c, h, ids, deadline)
|
| 1929 |
+
if not isinstance(h, arm_mount.ProgramHandle):
|
| 1930 |
return ""
|
| 1931 |
live = [n for n in h.names if h.live.get(n)]
|
| 1932 |
if not live:
|
|
|
|
| 1940 |
continue
|
| 1941 |
with h.masked(n):
|
| 1942 |
lb = c.model(x)[0].float().log_softmax(-1)
|
| 1943 |
+
parts.append(f"`{n}` " + _kl_text(la, lb))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1944 |
return (f" · **arm activity** on this text (last {x.shape[1]:,} bytes, "
|
| 1945 |
"each arm switched off alone): " + " · ".join(parts))
|
| 1946 |
|
| 1947 |
|
| 1948 |
+
def _kl_text(la, lb):
|
| 1949 |
+
"""KL(off || as it ran) in nats per byte and the top-byte change rate.
|
| 1950 |
+
Below ~1e-9 an fp32 KL between two near-identical distributions is
|
| 1951 |
+
rounding, not a measurement: say "none measurable", not 0."""
|
| 1952 |
+
kl = float((lb.exp() * (lb - la)).sum(-1).mean())
|
| 1953 |
+
moved = float((lb.argmax(-1) != la.argmax(-1)).float().mean())
|
| 1954 |
+
return ((f"{kl:.1e} nats/byte" if kl >= 1e-9 else
|
| 1955 |
+
"< 1e-9 nats/byte (none measurable)")
|
| 1956 |
+
+ f", top byte changed at {moved:.1%} of positions")
|
| 1957 |
+
|
| 1958 |
+
|
| 1959 |
+
def _is_lookup(h):
|
| 1960 |
+
try:
|
| 1961 |
+
from amoe.arms.lookup import LookupHandle
|
| 1962 |
+
except ImportError:
|
| 1963 |
+
return False
|
| 1964 |
+
return isinstance(h, LookupHandle)
|
| 1965 |
+
|
| 1966 |
+
|
| 1967 |
+
@torch.no_grad()
|
| 1968 |
+
def _lookup_activity(c, h, ids, deadline):
|
| 1969 |
+
"""The lookup arm's write on the text just produced: the whole arm
|
| 1970 |
+
switched off, then each site switched off alone, as KL(off || armed)
|
| 1971 |
+
per byte over the last ACTIVITY_BYTES. The arm writes where a cue
|
| 1972 |
+
asks for a value planted earlier and barely anywhere else, so on
|
| 1973 |
+
ordinary text these read near zero; on a recall prompt the write sits
|
| 1974 |
+
at the question. The arm's flags are restored even if a read fails."""
|
| 1975 |
+
x = ids[:, -ACTIVITY_BYTES:]
|
| 1976 |
+
wraps = h.wraps()
|
| 1977 |
+
la = c.model(x)[0].float().log_softmax(-1)
|
| 1978 |
+
parts = []
|
| 1979 |
+
try:
|
| 1980 |
+
for w in wraps:
|
| 1981 |
+
w.enabled = False
|
| 1982 |
+
lb = c.model(x)[0].float().log_softmax(-1)
|
| 1983 |
+
parts.append("whole arm off " + _kl_text(la, lb))
|
| 1984 |
+
finally:
|
| 1985 |
+
for w in wraps:
|
| 1986 |
+
w.enabled = True
|
| 1987 |
+
for s, w in zip(h.sites, wraps):
|
| 1988 |
+
if time.time() > deadline:
|
| 1989 |
+
parts.append(f"block {s} not read (GPU time)")
|
| 1990 |
+
continue
|
| 1991 |
+
try:
|
| 1992 |
+
w.enabled = False
|
| 1993 |
+
lb = c.model(x)[0].float().log_softmax(-1)
|
| 1994 |
+
finally:
|
| 1995 |
+
w.enabled = True
|
| 1996 |
+
parts.append(f"after block {s} off alone " + _kl_text(la, lb))
|
| 1997 |
+
return (f" · **lookup arm activity** on this text (last {x.shape[1]:,} "
|
| 1998 |
+
"bytes): " + " · ".join(parts))
|
| 1999 |
+
|
| 2000 |
+
|
| 2001 |
@spaces.GPU(duration=120)
|
| 2002 |
def _stream(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
| 2003 |
+
ckpt_step, stop=(), stop_ids=(), guard=False, rep=1.0,
|
| 2004 |
+
live=None):
|
| 2005 |
"""The GPU call: the reply as it streams (_generate), then, when a
|
| 2006 |
+
program of arms or the lookup arm ran, one more yield that adds the
|
| 2007 |
+
measured activity on the finished text to the stats line."""
|
| 2008 |
t_call = time.time()
|
| 2009 |
last = None
|
| 2010 |
for last in _generate(craft, ids, max_new, temperature, top_p,
|
| 2011 |
use_cache, arm_path, ckpt_step, stop, stop_ids,
|
| 2012 |
+
guard, rep, live, call_t0=t_call):
|
| 2013 |
yield last
|
| 2014 |
+
if last is not None and (last[2].get("live_arms")
|
| 2015 |
+
or last[2].get("lookup_sites")):
|
| 2016 |
line = _activity(S(craft), t_call + CALL_BUDGET_S)
|
| 2017 |
if line:
|
| 2018 |
yield last[0], last[1] + line, last[2]
|
| 2019 |
|
| 2020 |
|
| 2021 |
def _generate(craft, ids, max_new, temperature, top_p, use_cache, arm_path,
|
| 2022 |
+
ckpt_step, stop=(), stop_ids=(), guard=False, rep=1.0,
|
| 2023 |
+
live=None, call_t0=None):
|
| 2024 |
"""Yields (text, stats, prov) — prov is what actually RAN, resolved
|
| 2025 |
by _select, not what the dropdowns asked for. It travels back
|
| 2026 |
through the yield because it has to cross a process boundary: the
|
|
|
|
| 2036 |
tasks) and a threading.Lock would be actively unsafe under fork: one
|
| 2037 |
held by any parent thread at fork time is inherited locked with no
|
| 2038 |
owner, and the child would block forever."""
|
| 2039 |
+
prov = _select(craft, ckpt_step, arm_path, live)
|
| 2040 |
c = S(craft)
|
| 2041 |
model = c.model
|
| 2042 |
dev = next(model.parameters()).device
|
|
|
|
| 2062 |
stop_ids = set(int(s) for s in stop_ids)
|
| 2063 |
out, t0 = [], time.time()
|
| 2064 |
deadline, budget_hit = t0 + GEN_BUDGET_S, False
|
| 2065 |
+
if call_t0 is not None: # the switch above spent the same call
|
| 2066 |
+
deadline = min(deadline, call_t0 + CALL_GEN_END_S)
|
| 2067 |
label = (f"{prov['craft']} · step {prov['checkpoint_step']:,} · "
|
| 2068 |
+
+ ((("stage arms on: " if prov["arm_kind"] == "stage-program"
|
| 2069 |
+
else f"arm set `{prov['arm']}`, on: ")
|
| 2070 |
+
+ (", ".join(f"`{n}`" for n in prov["live_arms"])
|
| 2071 |
+
or "none (every member switched off)"))
|
| 2072 |
if prov.get("live_arms") is not None else
|
| 2073 |
+
f"lookup arm `{prov['lookup_version']}`"
|
| 2074 |
+
if prov.get("lookup_version") else
|
| 2075 |
f"arm `{prov['arm'].split('@')[0]}`" if prov["arm"]
|
| 2076 |
else "core only")
|
| 2077 |
+ (" · fp32" if prov.get("precision") == "fp32" else "")
|
|
|
|
| 2145 |
# the requested byte count was honoured as far as the GPU
|
| 2146 |
# allowance allowed; the shortfall is stated, never hidden
|
| 2147 |
note = (f" …[stopped at {len(out)} of {max_new} bytes — "
|
| 2148 |
+
f"{deadline - t0:.0f}s GPU budget"
|
| 2149 |
+ ("" if use_cache else "; the KV cache is off, so "
|
| 2150 |
"every byte recomputes the whole context") + "]")
|
| 2151 |
yield _render(out, c.fmt) + note, stats + " · **budget**", prov
|
| 2152 |
|
| 2153 |
|
| 2154 |
def complete(craft, prompt, max_new, temperature, top_p, use_cache, arm_path,
|
| 2155 |
+
ckpt_step, guard, rep=1.0, members=None,
|
| 2156 |
+
request: gr.Request = None):
|
| 2157 |
if not prompt or not prompt.strip():
|
| 2158 |
yield "(enter a prompt)", ""
|
| 2159 |
return
|
|
|
|
| 2177 |
arm_path, step_i, stop=stops,
|
| 2178 |
stop_ids=stop_ids,
|
| 2179 |
guard=bool(guard),
|
| 2180 |
+
rep=float(rep),
|
| 2181 |
+
live=_members_in(members)):
|
| 2182 |
yield prompt + text, stats
|
| 2183 |
done = True
|
| 2184 |
finally:
|
|
|
|
| 2249 |
errors="replace")
|
| 2250 |
|
| 2251 |
|
| 2252 |
+
def _members_in(members):
|
| 2253 |
+
"""The member switch's value as _select takes it: a list (possibly
|
| 2254 |
+
empty: every member off), or None when no switch value came with the
|
| 2255 |
+
call (an API caller), which means the row's own default."""
|
| 2256 |
+
if members is None:
|
| 2257 |
+
return None
|
| 2258 |
+
return [str(m) for m in members]
|
| 2259 |
+
|
| 2260 |
+
|
| 2261 |
def chat(craft, message, history, max_new, temperature, top_p, use_cache,
|
| 2262 |
+
arm_path, ckpt_step, guard, rep=1.0, convo_id="", members=None,
|
| 2263 |
request: gr.Request = None):
|
| 2264 |
if not message or not message.strip():
|
| 2265 |
yield list(history or []), "", ""
|
|
|
|
| 2345 |
top_p, use_cache, arm_path, step_i,
|
| 2346 |
stop=stops, stop_ids=stop_ids,
|
| 2347 |
guard=bool(guard),
|
| 2348 |
+
rep=float(rep),
|
| 2349 |
+
live=_members_in(members)):
|
| 2350 |
body = _finish_reply(text, stops)
|
| 2351 |
history[-1]["content"] = (preface + body) if body else empty
|
| 2352 |
yield history, "", stats
|
|
|
|
| 2369 |
# Everything explanatory lives in a closed accordion for that reason.
|
| 2370 |
DESCRIPTION = """
|
| 2371 |
Three generations of the same architecture, served side by side, newest
|
| 2372 |
+
first, and four control twins of 2s that run ordinary softmax attention
|
| 2373 |
+
where 2s runs the splat. Pick the **Craft** first — everything below it
|
| 2374 |
+
follows.
|
| 2375 |
|
| 2376 |
**mini-beatrix-3** — 376M parameters over 32 blocks: the same governed
|
| 2377 |
full-splat hub as 2s, deeper. Its mission is **complete** — 64.4 billion
|
|
|
|
| 2403 |
or 148,000 itself, the last with all four. They open all on; each can
|
| 2404 |
run alone or be switched off, a switched-off arm removes exactly its own
|
| 2405 |
write, and after every run the stats line shows how far each live arm
|
| 2406 |
+
moved the predictions on that text. Every later checkpoint is the core
|
| 2407 |
+
alone. The stages with arms: perspective (one event seen from different
|
| 2408 |
+
people), concept (kinds and opposites), rules (if-then chains over
|
| 2409 |
+
made-up words) and arithmetic (with the working shown).
|
| 2410 |
+
|
| 2411 |
+
**Arms fitted on the final core.** After the mission, new arms were
|
| 2412 |
+
fitted on the final core (step 245,674) with the core frozen, and that
|
| 2413 |
+
checkpoint lists them under *Arm*. It still opens bare; pick a row to
|
| 2414 |
+
attach one.
|
| 2415 |
+
|
| 2416 |
+
- **Arm sets**: one arm per curriculum stage (13.7M parameters each),
|
| 2417 |
+
on together. Picking a set shows a box for each of its arms. Untick
|
| 2418 |
+
any of them, alone or several at once, to run every subset of the set:
|
| 2419 |
+
a switched-off arm removes exactly its own write, and nothing
|
| 2420 |
+
renormalizes. The panel gives each arm's measured bits per byte on its
|
| 2421 |
+
own stage's text and the set's cost on held-out web text. Listed first
|
| 2422 |
+
are the two packaged sets (stages 1–4 and stages 1–8) and the
|
| 2423 |
+
experimental caption set (the eight plus an arm for image captions in
|
| 2424 |
+
a labelled frame), each in two seeds; the research sets after them
|
| 2425 |
+
differ in how the arms were trained together.
|
| 2426 |
+
- **Solo arms**: each stage's arm trained alone, two seeds each.
|
| 2427 |
+
- **The lookup arm**: ordinary softmax attention added after four of the
|
| 2428 |
+
core's blocks (2, 6, 12 and 20), born at zero and trained with the
|
| 2429 |
+
core frozen, so switching it off gives the core back bit for bit. The
|
| 2430 |
+
core remembers by address, and a value planted early in a long text
|
| 2431 |
+
fades from it within a few hundred bytes. The arm was trained on web
|
| 2432 |
+
text mixed with recall rows (a value planted behind text, asked for
|
| 2433 |
+
later), and every version of it is listed. Picking one shows recall
|
| 2434 |
+
prompts in the Completion tab: run one with the arm on, then with
|
| 2435 |
+
*Core only*. On the measured recall rows the core alone fetches none
|
| 2436 |
+
of the values from 1,024 bytes back; the deep-mix versions fetch the
|
| 2437 |
+
value's first byte about nine times in ten from 2,048 bytes back.
|
| 2438 |
+
Telling apart several values planted under different keys (the
|
| 2439 |
+
lockers prompt) is still open: the one-layer arm reads near chance
|
| 2440 |
+
there.
|
| 2441 |
+
|
| 2442 |
+
The packaged sets and solo arms ship with the
|
| 2443 |
+
[mini-beatrix-3](https://huggingface.co/AbstractPhil/mini-beatrix-3)
|
| 2444 |
+
package: `m.mount_arm("stages-1-8")` for a set, `m.mount_arm("solo/s3_rules")`
|
| 2445 |
+
for one solo arm, `m.detach_arm()` for the bare core again.
|
| 2446 |
|
| 2447 |
**mini-beatrix-2s** — 237.1M parameters, **full splat**: the signed
|
| 2448 |
address read runs in *every* block (v1 used it in three), with a
|
|
|
|
| 2486 |
and control ones that exist to be disprovable. The package is the
|
| 2487 |
settled subset, carrying each arm's measured numbers with it.
|
| 2488 |
|
| 2489 |
+
**The 2s control twins.** The four crafts named mini-beatrix-2s-control
|
| 2490 |
+
are 2s's own recipe and data with ordinary softmax attention in all 20
|
| 2491 |
+
blocks where 2s has the splat hub: the experiment's control. The
|
| 2492 |
+
original twin ran the whole mission in bf16. Under the recipe tuned for
|
| 2493 |
+
the splat its training destabilized from step 17,600, and it closed at
|
| 2494 |
+
2.88 bits per byte on held-out text against 2s's 1.11. Three re-runs
|
| 2495 |
+
start from its own earlier weights. Two precision tests restarted at
|
| 2496 |
+
step 16,000 and stopped near 18,300. The third restarted at step 10,000
|
| 2497 |
+
with the attention computed in fp32 around fp16 flash attention; it has
|
| 2498 |
+
stayed stable and is still training, and the Space lists what it had
|
| 2499 |
+
shipped when the Space last started. The twins carry no arms and decode
|
| 2500 |
+
in fp32.
|
| 2501 |
+
|
| 2502 |
**mini-beatrix-1** — 112.5M parameters, pretrained on 15.3 billion raw
|
| 2503 |
bytes, carrying a **library of detachable arms**: small adapters
|
| 2504 |
(3.2M–5.3M parameters) each trained on one exact frozen core. Pick a
|
|
|
|
| 2577 |
|
| 2578 |
with gr.Blocks(title="Beatrix — AlephLLM chat") as demo:
|
| 2579 |
gr.Markdown(TITLE)
|
| 2580 |
+
with gr.Accordion("About Beatrix — the crafts, how she reads text, "
|
| 2581 |
"what the arms are, what to expect", open=False):
|
| 2582 |
gr.Markdown(DESCRIPTION)
|
| 2583 |
gr.Markdown(LOG_NOTE)
|
|
|
|
| 2601 |
label="Arm (adapter)", scale=4,
|
| 2602 |
allow_custom_value=True,
|
| 2603 |
interactive=bool(_C0.arm_by_path))
|
| 2604 |
+
# the member switch: one box per arm of the picked program (a stage
|
| 2605 |
+
# program or an arm set), every box ticked when the row is picked;
|
| 2606 |
+
# hidden for every other row, so no other craft's page grows
|
| 2607 |
+
# gradio checks a submitted value against the component's choices: the
|
| 2608 |
+
# session's copy once an event has updated them, the page's own at the
|
| 2609 |
+
# start of a session (and for API callers). Hidden, the switch starts
|
| 2610 |
+
# with every member name any program row carries, so no session's
|
| 2611 |
+
# first call is refused; picking a row narrows it to that row's members.
|
| 2612 |
+
_a0 = _C0.arm_by_path.get(_C0.default_arm(STEP))
|
| 2613 |
+
_all_members = list(dict.fromkeys(
|
| 2614 |
+
n for _c in STATE.values() for _r in _c.arm_by_path.values()
|
| 2615 |
+
for n in (_r.get("members") or [])))
|
| 2616 |
+
members_pick = gr.CheckboxGroup(
|
| 2617 |
+
choices=(_member_choices(_a0) if (_a0 or {}).get("members") else
|
| 2618 |
+
_member_choices({"members": _all_members})),
|
| 2619 |
+
value=_live_set(_a0, None) if (_a0 or {}).get("members") else [],
|
| 2620 |
+
label=_member_label(_a0), visible=bool((_a0 or {}).get("members")))
|
| 2621 |
with gr.Row():
|
| 2622 |
max_new = gr.Slider(16, MAX_NEW_CAP, value=192, step=16,
|
| 2623 |
label="Max new bytes")
|
|
|
|
| 2677 |
# after a Clear ran together as one conversation
|
| 2678 |
convo = gr.State("")
|
| 2679 |
_chat_in = [craft_pick, msg, chatbot, max_new, temperature, top_p,
|
| 2680 |
+
use_cache, arm_pick, ckpt, guard, rep, convo,
|
| 2681 |
+
members_pick]
|
| 2682 |
_chat_out = [chatbot, msg, stats_md]
|
| 2683 |
_ev1 = msg.submit(chat, _chat_in, _chat_out)
|
| 2684 |
_ev2 = send.click(chat, _chat_in, _chat_out)
|
|
|
|
| 2694 |
# max_lines pinned: unpinned textboxes auto-grow to 20 rows in
|
| 2695 |
# 6.23.1, and a streaming continuation would push the tabs out
|
| 2696 |
# of reach inside the non-scrolling iframe
|
| 2697 |
+
# shown only for the lookup arm: a value planted early in a long
|
| 2698 |
+
# text, asked for at the end, in the phrasing the arm trained on
|
| 2699 |
+
recall_pick = gr.Dropdown(
|
| 2700 |
+
[lab for lab, _ in RECALL_PROBES], value=None,
|
| 2701 |
+
label="Recall prompts for the lookup arm · picking one writes "
|
| 2702 |
+
"it into the prompt box; run it with the arm on, then "
|
| 2703 |
+
"with Core only",
|
| 2704 |
+
visible=bool(_a0 and _a0.get("kind") == "lookup"))
|
| 2705 |
prompt = gr.Textbox(label="Prompt", lines=4, max_lines=4,
|
| 2706 |
value="The history of mathematics begins")
|
| 2707 |
comp_out = gr.Textbox(label="Continuation (streams)", lines=12,
|
|
|
|
| 2722 |
_ev3 = comp_go.click(
|
| 2723 |
complete,
|
| 2724 |
[craft_pick, prompt, max_new, temperature, top_p, use_cache,
|
| 2725 |
+
arm_pick, ckpt, guard, rep, members_pick],
|
| 2726 |
[comp_out, stats_md])
|
| 2727 |
+
recall_pick.input(on_recall, recall_pick, prompt)
|
| 2728 |
# ONE halt for every generator, wired after both tabs so a Stop on
|
| 2729 |
# either side reaches the run in flight. Cancelling closes the
|
| 2730 |
# generator at its yield: the bytes already streamed stay on screen,
|
|
|
|
| 2740 |
# toggles say otherwise
|
| 2741 |
craft_pick.change(on_craft, [craft_pick, auto_decode, fam_examples],
|
| 2742 |
[ckpt, arm_pick, status_box, temperature, top_p, rep,
|
| 2743 |
+
ex.dataset, comp_ex.dataset, members_pick,
|
| 2744 |
+
recall_pick])
|
| 2745 |
ckpt.change(on_checkpoint, [craft_pick, ckpt, auto_decode, fam_examples],
|
| 2746 |
[ckpt, arm_pick, status_box, temperature, top_p, rep,
|
| 2747 |
+
ex.dataset, comp_ex.dataset, members_pick, recall_pick])
|
| 2748 |
arm_pick.change(on_arm,
|
| 2749 |
[craft_pick, ckpt, arm_pick, auto_decode, fam_examples],
|
| 2750 |
[status_box, temperature, top_p, rep, ex.dataset,
|
| 2751 |
+
comp_ex.dataset, members_pick, recall_pick])
|
| 2752 |
+
# ticking a member re-renders the panel's member line; .input fires on
|
| 2753 |
+
# the visitor's own clicks only, not when on_arm refreshes the boxes
|
| 2754 |
+
members_pick.input(on_members, [craft_pick, ckpt, arm_pick, members_pick],
|
| 2755 |
+
status_box)
|
| 2756 |
demo.load(js=RESIZE_JS)
|
| 2757 |
|
| 2758 |
demo.launch()
|
arm_mount.py
CHANGED
|
@@ -20,11 +20,15 @@ Recipe types (the `mount.type` field of an arm-index row):
|
|
| 20 |
recurrent a small recurrent cell per site fed by the attention read
|
| 21 |
program a co-trained stage-arm program (mini-beatrix-3): one anchor
|
| 22 |
arm per curriculum stage, trained together with the core,
|
| 23 |
-
nested in stage order, each member switchable on its own
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
-
The relay_ema, recurrent and
|
| 26 |
-
decode steps; a fresh prefill starts that state over, and the
|
| 27 |
-
path treats every forward as a fresh context.
|
| 28 |
|
| 29 |
Trained arms and their measurements:
|
| 30 |
huggingface.co/AbstractPhil/alephllm-mini-beatrix-training
|
|
@@ -49,7 +53,7 @@ from amoe.io.checkpoint import load_anchor, load_dispatch
|
|
| 49 |
from amoe.runtime.attach import AttachHandle, _probe
|
| 50 |
|
| 51 |
MOUNT_TYPES = ("anchor", "stack", "routed", "relay_ema", "recurrent",
|
| 52 |
-
"program")
|
| 53 |
|
| 54 |
|
| 55 |
# ------------------------------------------------------------- geometry
|
|
@@ -370,11 +374,90 @@ def _mount_recurrent(model, path):
|
|
| 370 |
return attach_recurrent(model, name, RecurrentSpec(**blob["spec"]), state=blob["state"])
|
| 371 |
|
| 372 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 373 |
def mount(model, recipe: dict, path: str, member_paths=None):
|
| 374 |
"""Attach one arm recipe to the bare model. `path` is the local file of
|
| 375 |
the row's own checkpoint; `member_paths` are the local files of a
|
| 376 |
stack's members, inner first, or of a stage program's members."""
|
| 377 |
kind = (recipe or {}).get("type", "anchor")
|
|
|
|
|
|
|
| 378 |
if kind == "anchor":
|
| 379 |
return _mount_anchor(model, path)
|
| 380 |
if kind == "stack":
|
|
|
|
| 20 |
recurrent a small recurrent cell per site fed by the attention read
|
| 21 |
program a co-trained stage-arm program (mini-beatrix-3): one anchor
|
| 22 |
arm per curriculum stage, trained together with the core,
|
| 23 |
+
nested in stage order, each member switchable on its own;
|
| 24 |
+
the arm sets fitted on the finished core mount the same way
|
| 25 |
+
lookup a zero-born causal softmax-attention arm after chosen
|
| 26 |
+
blocks (amoe.arms.lookup), read from the lookup_* tensors
|
| 27 |
+
of a trainer checkpoint or of an arm-only file
|
| 28 |
|
| 29 |
+
The relay_ema, recurrent, gain and lookup recipes carry state across
|
| 30 |
+
cached decode steps; a fresh prefill starts that state over, and the
|
| 31 |
+
uncached path treats every forward as a fresh context.
|
| 32 |
|
| 33 |
Trained arms and their measurements:
|
| 34 |
huggingface.co/AbstractPhil/alephllm-mini-beatrix-training
|
|
|
|
| 53 |
from amoe.runtime.attach import AttachHandle, _probe
|
| 54 |
|
| 55 |
MOUNT_TYPES = ("anchor", "stack", "routed", "relay_ema", "recurrent",
|
| 56 |
+
"program", "lookup")
|
| 57 |
|
| 58 |
|
| 59 |
# ------------------------------------------------------------- geometry
|
|
|
|
| 374 |
return attach_recurrent(model, name, RecurrentSpec(**blob["spec"]), state=blob["state"])
|
| 375 |
|
| 376 |
|
| 377 |
+
# ------------------------------------------------------------- lookup arm
|
| 378 |
+
LOOKUP_PREFIXES = ("lookup_arms.", "lookup_norms.")
|
| 379 |
+
_ST_DTYPES = {"BF16": torch.bfloat16, "F16": torch.float16,
|
| 380 |
+
"F32": torch.float32, "F64": torch.float64}
|
| 381 |
+
|
| 382 |
+
|
| 383 |
+
def _st_tensor(meta, raw):
|
| 384 |
+
t = torch.frombuffer(bytearray(raw), dtype=_ST_DTYPES[meta["dtype"]])
|
| 385 |
+
return t.reshape(meta["shape"]).clone()
|
| 386 |
+
|
| 387 |
+
|
| 388 |
+
def fetch_lookup_tensors(repo: str, path: str, cache_dir: str) -> str:
|
| 389 |
+
"""The lookup arm's tensors out of a trainer checkpoint on the hub, by
|
| 390 |
+
HTTP range reads: the safetensors header, then only the lookup_*
|
| 391 |
+
tensors' bytes (about 34 MB of a 790 MB file per attention layer set).
|
| 392 |
+
Written once to a local safetensors file under cache_dir (atomically,
|
| 393 |
+
so two workers never read a half-written file) and reused after."""
|
| 394 |
+
import json
|
| 395 |
+
import os
|
| 396 |
+
import struct
|
| 397 |
+
import tempfile
|
| 398 |
+
|
| 399 |
+
from huggingface_hub import HfFileSystem
|
| 400 |
+
from safetensors.torch import save_file
|
| 401 |
+
|
| 402 |
+
out = os.path.join(cache_dir, path.replace("/", "__") + ".lookup.safetensors")
|
| 403 |
+
if os.path.exists(out):
|
| 404 |
+
return out
|
| 405 |
+
os.makedirs(cache_dir, exist_ok=True)
|
| 406 |
+
with HfFileSystem().open(f"{repo}/{path}", "rb") as fh:
|
| 407 |
+
n = struct.unpack("<Q", fh.read(8))[0]
|
| 408 |
+
header = json.loads(fh.read(n))
|
| 409 |
+
base = 8 + n
|
| 410 |
+
spans = sorted((header[k]["data_offsets"][0], header[k]["data_offsets"][1], k)
|
| 411 |
+
for k in header if k.startswith(LOOKUP_PREFIXES))
|
| 412 |
+
if not spans:
|
| 413 |
+
raise KeyError(f"{path}: the checkpoint carries no lookup arm")
|
| 414 |
+
lo, hi = spans[0][0], spans[-1][1]
|
| 415 |
+
tensors = {}
|
| 416 |
+
if hi - lo <= 2 * sum(e - b for b, e, _ in spans): # one read
|
| 417 |
+
fh.seek(base + lo)
|
| 418 |
+
blob = fh.read(hi - lo)
|
| 419 |
+
for b, e, k in spans:
|
| 420 |
+
tensors[k] = _st_tensor(header[k], blob[b - lo:e - lo])
|
| 421 |
+
else:
|
| 422 |
+
for b, e, k in spans:
|
| 423 |
+
fh.seek(base + b)
|
| 424 |
+
tensors[k] = _st_tensor(header[k], fh.read(e - b))
|
| 425 |
+
fd, tmp = tempfile.mkstemp(dir=cache_dir, suffix=".part")
|
| 426 |
+
os.close(fd)
|
| 427 |
+
save_file(tensors, tmp, metadata={"source": f"{repo}/{path}",
|
| 428 |
+
"keys": str(len(tensors))})
|
| 429 |
+
os.replace(tmp, out)
|
| 430 |
+
return out
|
| 431 |
+
|
| 432 |
+
|
| 433 |
+
def _mount_lookup(model, path, name="lookup"):
|
| 434 |
+
"""A lookup arm: zero-born causal softmax attention after chosen blocks,
|
| 435 |
+
each layer behind its own LayerNorm (amoe.arms.lookup). The geometry is
|
| 436 |
+
read from the keys (sites, depth, heads from the q/k gains) and checked
|
| 437 |
+
against the bound trunk; the attention runs in fp32 under autocast, as
|
| 438 |
+
it was trained. Cached decode keeps the arm's own key/value cache."""
|
| 439 |
+
from safetensors.torch import load_file
|
| 440 |
+
from amoe.arms.lookup import attach_from_alephllm, from_alephllm_state
|
| 441 |
+
sd = {k: v for k, v in load_file(path).items()
|
| 442 |
+
if k.startswith(LOOKUP_PREFIXES)}
|
| 443 |
+
_, sites, depth = from_alephllm_state(sd)
|
| 444 |
+
b = resolve(model, None)
|
| 445 |
+
n_blocks, d = len(list(b.layers(model))), b.hidden_size(model)
|
| 446 |
+
if max(sites) >= n_blocks:
|
| 447 |
+
raise ValueError(f"lookup arm sites {sites} outside a {n_blocks}-block trunk")
|
| 448 |
+
w = sd[f"lookup_arms.{sites[0]}.qkv.weight"]
|
| 449 |
+
if tuple(w.shape) != (3 * d, d):
|
| 450 |
+
raise ValueError(f"lookup arm width {tuple(w.shape)} does not fit d={d}")
|
| 451 |
+
return attach_from_alephllm(model, sd, name=name, attn_fp32=True)
|
| 452 |
+
|
| 453 |
+
|
| 454 |
def mount(model, recipe: dict, path: str, member_paths=None):
|
| 455 |
"""Attach one arm recipe to the bare model. `path` is the local file of
|
| 456 |
the row's own checkpoint; `member_paths` are the local files of a
|
| 457 |
stack's members, inner first, or of a stage program's members."""
|
| 458 |
kind = (recipe or {}).get("type", "anchor")
|
| 459 |
+
if kind == "lookup":
|
| 460 |
+
return _mount_lookup(model, path, (recipe or {}).get("name", "lookup"))
|
| 461 |
if kind == "anchor":
|
| 462 |
return _mount_anchor(model, path)
|
| 463 |
if kind == "stack":
|
arms_catalog.json
CHANGED
|
@@ -3790,6 +3790,1821 @@
|
|
| 3790 |
"default": false
|
| 3791 |
}
|
| 3792 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3793 |
}
|
| 3794 |
},
|
| 3795 |
"skipped": [
|
|
@@ -3801,5 +5616,6 @@
|
|
| 3801 |
"btx-e003-2s-EG-rnn-s1.b2a4@step61422.recurrent.pt",
|
| 3802 |
"local file not on hub"
|
| 3803 |
]
|
| 3804 |
-
]
|
| 3805 |
-
|
|
|
|
|
|
| 3790 |
"default": false
|
| 3791 |
}
|
| 3792 |
]
|
| 3793 |
+
},
|
| 3794 |
+
"mini-beatrix-3": {
|
| 3795 |
+
"rows": [
|
| 3796 |
+
{
|
| 3797 |
+
"path": "mini-beatrix-3/arm_refit/group/gXA_close8",
|
| 3798 |
+
"step": 245674,
|
| 3799 |
+
"name": "stages-1-8",
|
| 3800 |
+
"group": "arm sets",
|
| 3801 |
+
"kind": "arm-set",
|
| 3802 |
+
"family": "set",
|
| 3803 |
+
"run": "gXA",
|
| 3804 |
+
"close": 8,
|
| 3805 |
+
"title": "Arm set · stages 1–8, on together · seed A",
|
| 3806 |
+
"status": "two seeds · the packaged set",
|
| 3807 |
+
"rank": 1,
|
| 3808 |
+
"what": "The four arms of stages 1–4 held fixed and on, then a new arm for each of stages 5–8 fitted over them one after another, 4,000 steps each, each kept quiet on web text and on the other arms' stage text. Packaged as stages-1-8 in mini-beatrix-3.",
|
| 3809 |
+
"score": "stage text, arms off → set on: perspective .554→.049 · concepts .721→.110 · rules .930→.224 · arithmetic 1.234→.328 · causal .660→.043 · try-fail .673→.055 · mixed .783→.720 · register .491→.021 · web text +0.0019",
|
| 3810 |
+
"mount": {
|
| 3811 |
+
"type": "program",
|
| 3812 |
+
"members": [
|
| 3813 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s1_perspective.safetensors",
|
| 3814 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s2_concept.safetensors",
|
| 3815 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s3_rules.safetensors",
|
| 3816 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s4_arith.safetensors",
|
| 3817 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s5_causal.safetensors",
|
| 3818 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s6_tryfail.safetensors",
|
| 3819 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s7_mixed.safetensors",
|
| 3820 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXA_close8_s8_register.safetensors"
|
| 3821 |
+
]
|
| 3822 |
+
},
|
| 3823 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gXA_close8",
|
| 3824 |
+
"members": [
|
| 3825 |
+
"s1_perspective",
|
| 3826 |
+
"s2_concept",
|
| 3827 |
+
"s3_rules",
|
| 3828 |
+
"s4_arith",
|
| 3829 |
+
"s5_causal",
|
| 3830 |
+
"s6_tryfail",
|
| 3831 |
+
"s7_mixed",
|
| 3832 |
+
"s8_register"
|
| 3833 |
+
],
|
| 3834 |
+
"live": [
|
| 3835 |
+
"s1_perspective",
|
| 3836 |
+
"s2_concept",
|
| 3837 |
+
"s3_rules",
|
| 3838 |
+
"s4_arith",
|
| 3839 |
+
"s5_causal",
|
| 3840 |
+
"s6_tryfail",
|
| 3841 |
+
"s7_mixed",
|
| 3842 |
+
"s8_register"
|
| 3843 |
+
],
|
| 3844 |
+
"reads": {
|
| 3845 |
+
"s1_perspective": {
|
| 3846 |
+
"off": 0.5538333013185592,
|
| 3847 |
+
"on": 0.049211667943427066,
|
| 3848 |
+
"alone": 0.05251879489204885
|
| 3849 |
+
},
|
| 3850 |
+
"s2_concept": {
|
| 3851 |
+
"off": 0.7211839326967642,
|
| 3852 |
+
"on": 0.11045867104531781,
|
| 3853 |
+
"alone": 0.35026574371684355
|
| 3854 |
+
},
|
| 3855 |
+
"s3_rules": {
|
| 3856 |
+
"off": 0.9296131361815035,
|
| 3857 |
+
"on": 0.2237152122866791,
|
| 3858 |
+
"alone": 0.8236434891082838
|
| 3859 |
+
},
|
| 3860 |
+
"s4_arith": {
|
| 3861 |
+
"off": 1.2338748670942346,
|
| 3862 |
+
"on": 0.32794756855052143,
|
| 3863 |
+
"alone": 1.126693075548818
|
| 3864 |
+
},
|
| 3865 |
+
"s5_causal": {
|
| 3866 |
+
"off": 0.6604376826115352,
|
| 3867 |
+
"on": 0.04305856436254439,
|
| 3868 |
+
"alone": 0.09109720145841224
|
| 3869 |
+
},
|
| 3870 |
+
"s6_tryfail": {
|
| 3871 |
+
"off": 0.6728212611401647,
|
| 3872 |
+
"on": 0.05483553152977349,
|
| 3873 |
+
"alone": 0.16377145340459293
|
| 3874 |
+
},
|
| 3875 |
+
"s7_mixed": {
|
| 3876 |
+
"off": 0.7829759286650222,
|
| 3877 |
+
"on": 0.719981644980245,
|
| 3878 |
+
"alone": 0.7241658592632068
|
| 3879 |
+
},
|
| 3880 |
+
"s8_register": {
|
| 3881 |
+
"off": 0.4906504977761471,
|
| 3882 |
+
"on": 0.02118320337400121,
|
| 3883 |
+
"alone": 0.06783037737981043
|
| 3884 |
+
}
|
| 3885 |
+
},
|
| 3886 |
+
"web": 0.0018905407874407892,
|
| 3887 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 3888 |
+
"template": null,
|
| 3889 |
+
"decode": {
|
| 3890 |
+
"temperature": 0.0,
|
| 3891 |
+
"top_p": 1.0,
|
| 3892 |
+
"rep": 1.0,
|
| 3893 |
+
"precision": "fp32",
|
| 3894 |
+
"why": "the sets were measured greedy in fp32"
|
| 3895 |
+
},
|
| 3896 |
+
"params": 109543680,
|
| 3897 |
+
"sites": 32
|
| 3898 |
+
},
|
| 3899 |
+
{
|
| 3900 |
+
"path": "mini-beatrix-3/arm_refit/group/gCA_close9",
|
| 3901 |
+
"step": 245674,
|
| 3902 |
+
"name": "stages-1-8-caption",
|
| 3903 |
+
"group": "arm sets",
|
| 3904 |
+
"kind": "arm-set",
|
| 3905 |
+
"family": "set",
|
| 3906 |
+
"run": "gCA",
|
| 3907 |
+
"close": 9,
|
| 3908 |
+
"title": "Arm set · stages 1–8 + the caption arm (experimental) · seed A",
|
| 3909 |
+
"status": "two seeds · experimental",
|
| 3910 |
+
"rank": 2,
|
| 3911 |
+
"what": "The eight held fixed and on, then a ninth arm fitted over them for 4,000 steps on image captions in a labelled frame (tags, caption, short, attributes, scene, photo, structure, medium, long, rating: one label per line). A prototype for the diffusion line, not a curriculum stage.",
|
| 3912 |
+
"score": "stage text, arms off → set on: perspective .554→.050 · concepts .721→.111 · rules .930→.224 · arithmetic 1.234→.329 · causal .660→.043 · try-fail .673→.055 · mixed .783→.722 · register .491→.022 · captions 1.265→.783 · web text +0.0027",
|
| 3913 |
+
"mount": {
|
| 3914 |
+
"type": "program",
|
| 3915 |
+
"members": [
|
| 3916 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s1_perspective.safetensors",
|
| 3917 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s2_concept.safetensors",
|
| 3918 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s3_rules.safetensors",
|
| 3919 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s4_arith.safetensors",
|
| 3920 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s5_causal.safetensors",
|
| 3921 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s6_tryfail.safetensors",
|
| 3922 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s7_mixed.safetensors",
|
| 3923 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s8_register.safetensors",
|
| 3924 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCA_close9_s9_caption.safetensors"
|
| 3925 |
+
]
|
| 3926 |
+
},
|
| 3927 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gCA_close9",
|
| 3928 |
+
"members": [
|
| 3929 |
+
"s1_perspective",
|
| 3930 |
+
"s2_concept",
|
| 3931 |
+
"s3_rules",
|
| 3932 |
+
"s4_arith",
|
| 3933 |
+
"s5_causal",
|
| 3934 |
+
"s6_tryfail",
|
| 3935 |
+
"s7_mixed",
|
| 3936 |
+
"s8_register",
|
| 3937 |
+
"s9_caption"
|
| 3938 |
+
],
|
| 3939 |
+
"live": [
|
| 3940 |
+
"s1_perspective",
|
| 3941 |
+
"s2_concept",
|
| 3942 |
+
"s3_rules",
|
| 3943 |
+
"s4_arith",
|
| 3944 |
+
"s5_causal",
|
| 3945 |
+
"s6_tryfail",
|
| 3946 |
+
"s7_mixed",
|
| 3947 |
+
"s8_register",
|
| 3948 |
+
"s9_caption"
|
| 3949 |
+
],
|
| 3950 |
+
"reads": {
|
| 3951 |
+
"s1_perspective": {
|
| 3952 |
+
"off": 0.5538333013185592,
|
| 3953 |
+
"on": 0.04959379525484903,
|
| 3954 |
+
"alone": 0.05251879489204885
|
| 3955 |
+
},
|
| 3956 |
+
"s2_concept": {
|
| 3957 |
+
"off": 0.7211839326967642,
|
| 3958 |
+
"on": 0.111269350234979,
|
| 3959 |
+
"alone": 0.35026574371684355
|
| 3960 |
+
},
|
| 3961 |
+
"s3_rules": {
|
| 3962 |
+
"off": 0.9296131361815035,
|
| 3963 |
+
"on": 0.22448037384928343,
|
| 3964 |
+
"alone": 0.8236434891082838
|
| 3965 |
+
},
|
| 3966 |
+
"s4_arith": {
|
| 3967 |
+
"off": 1.2338748670942346,
|
| 3968 |
+
"on": 0.328711851389269,
|
| 3969 |
+
"alone": 1.126693075548818
|
| 3970 |
+
},
|
| 3971 |
+
"s5_causal": {
|
| 3972 |
+
"off": 0.6604376826115352,
|
| 3973 |
+
"on": 0.043431814413230005,
|
| 3974 |
+
"alone": 0.09109720145841224
|
| 3975 |
+
},
|
| 3976 |
+
"s6_tryfail": {
|
| 3977 |
+
"off": 0.6728212611401647,
|
| 3978 |
+
"on": 0.0550433322549074,
|
| 3979 |
+
"alone": 0.16377145340459293
|
| 3980 |
+
},
|
| 3981 |
+
"s7_mixed": {
|
| 3982 |
+
"off": 0.7829759286650222,
|
| 3983 |
+
"on": 0.7218170545791686,
|
| 3984 |
+
"alone": 0.7241658592632068
|
| 3985 |
+
},
|
| 3986 |
+
"s8_register": {
|
| 3987 |
+
"off": 0.4906504977761471,
|
| 3988 |
+
"on": 0.02167318429763465,
|
| 3989 |
+
"alone": 0.06783037737981043
|
| 3990 |
+
},
|
| 3991 |
+
"s9_caption": {
|
| 3992 |
+
"off": 1.2648128906514393,
|
| 3993 |
+
"on": 0.7829180887497539,
|
| 3994 |
+
"alone": 0.7850811467964025
|
| 3995 |
+
}
|
| 3996 |
+
},
|
| 3997 |
+
"web": 0.002653240848354624,
|
| 3998 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 3999 |
+
"template": null,
|
| 4000 |
+
"decode": {
|
| 4001 |
+
"temperature": 0.0,
|
| 4002 |
+
"top_p": 1.0,
|
| 4003 |
+
"rep": 1.0,
|
| 4004 |
+
"precision": "fp32",
|
| 4005 |
+
"why": "the sets were measured greedy in fp32"
|
| 4006 |
+
},
|
| 4007 |
+
"params": 123236640,
|
| 4008 |
+
"sites": 32
|
| 4009 |
+
},
|
| 4010 |
+
{
|
| 4011 |
+
"path": "mini-beatrix-3/arm_refit/group/gRA_close4",
|
| 4012 |
+
"step": 245674,
|
| 4013 |
+
"name": "stages-1-4",
|
| 4014 |
+
"group": "arm sets",
|
| 4015 |
+
"kind": "arm-set",
|
| 4016 |
+
"family": "set",
|
| 4017 |
+
"run": "gRA",
|
| 4018 |
+
"close": 4,
|
| 4019 |
+
"title": "Arm set · stages 1–4, on together · seed A",
|
| 4020 |
+
"status": "two seeds · the packaged set",
|
| 4021 |
+
"rank": 3,
|
| 4022 |
+
"what": "The arms of stages 1 and 2 from a co-trained run held fixed, then new arms for stages 3 and 4 fitted over them one after the other, 800 steps each, each kept quiet on web text and on the other arms' stage text. Packaged as stages-1-4 in mini-beatrix-3.",
|
| 4023 |
+
"score": "stage text, arms off → set on: perspective .554→.048 · concepts .721→.112 · rules .930→.224 · arithmetic 1.234→.338 · web text +0.0017",
|
| 4024 |
+
"mount": {
|
| 4025 |
+
"type": "program",
|
| 4026 |
+
"members": [
|
| 4027 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRA_close4_s1_perspective.safetensors",
|
| 4028 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRA_close4_s2_concept.safetensors",
|
| 4029 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRA_close4_s3_rules.safetensors",
|
| 4030 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRA_close4_s4_arith.safetensors"
|
| 4031 |
+
]
|
| 4032 |
+
},
|
| 4033 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gRA_close4",
|
| 4034 |
+
"members": [
|
| 4035 |
+
"s1_perspective",
|
| 4036 |
+
"s2_concept",
|
| 4037 |
+
"s3_rules",
|
| 4038 |
+
"s4_arith"
|
| 4039 |
+
],
|
| 4040 |
+
"live": [
|
| 4041 |
+
"s1_perspective",
|
| 4042 |
+
"s2_concept",
|
| 4043 |
+
"s3_rules",
|
| 4044 |
+
"s4_arith"
|
| 4045 |
+
],
|
| 4046 |
+
"reads": {
|
| 4047 |
+
"s1_perspective": {
|
| 4048 |
+
"off": 0.5538333013185592,
|
| 4049 |
+
"on": 0.04815859600255551,
|
| 4050 |
+
"alone": 0.05251879489204885
|
| 4051 |
+
},
|
| 4052 |
+
"s2_concept": {
|
| 4053 |
+
"off": 0.7211839326967642,
|
| 4054 |
+
"on": 0.1122730718885469,
|
| 4055 |
+
"alone": 0.35026574371684355
|
| 4056 |
+
},
|
| 4057 |
+
"s3_rules": {
|
| 4058 |
+
"off": 0.9296131361815035,
|
| 4059 |
+
"on": 0.22363961516270922,
|
| 4060 |
+
"alone": 0.8236434891082838
|
| 4061 |
+
},
|
| 4062 |
+
"s4_arith": {
|
| 4063 |
+
"off": 1.2338748670942346,
|
| 4064 |
+
"on": 0.33837794280053096,
|
| 4065 |
+
"alone": 1.126693075548818
|
| 4066 |
+
}
|
| 4067 |
+
},
|
| 4068 |
+
"web": 0.001714742271511971,
|
| 4069 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4070 |
+
"template": null,
|
| 4071 |
+
"decode": {
|
| 4072 |
+
"temperature": 0.0,
|
| 4073 |
+
"top_p": 1.0,
|
| 4074 |
+
"rep": 1.0,
|
| 4075 |
+
"precision": "fp32",
|
| 4076 |
+
"why": "the sets were measured greedy in fp32"
|
| 4077 |
+
},
|
| 4078 |
+
"params": 54771840,
|
| 4079 |
+
"sites": 32
|
| 4080 |
+
},
|
| 4081 |
+
{
|
| 4082 |
+
"path": "mini-beatrix-3/arm_refit/group/gXB_close8",
|
| 4083 |
+
"step": 245674,
|
| 4084 |
+
"name": "stages-1-8 (seed B)",
|
| 4085 |
+
"group": "arm sets",
|
| 4086 |
+
"kind": "arm-set",
|
| 4087 |
+
"family": "set",
|
| 4088 |
+
"run": "gXB",
|
| 4089 |
+
"close": 8,
|
| 4090 |
+
"title": "Arm set · stages 1–8, on together · seed B",
|
| 4091 |
+
"status": "two seeds",
|
| 4092 |
+
"rank": 4,
|
| 4093 |
+
"what": "The second seed of the stages 1–8 set (the arms of stages 5–8 with their own seeds and data order).",
|
| 4094 |
+
"score": "stage text, arms off → set on: perspective .554→.048 · concepts .721→.121 · rules .930→.222 · arithmetic 1.234→.327 · causal .660→.043 · try-fail .673→.054 · mixed .783→.720 · register .491→.021 · web text +0.0010",
|
| 4095 |
+
"mount": {
|
| 4096 |
+
"type": "program",
|
| 4097 |
+
"members": [
|
| 4098 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s1_perspective.safetensors",
|
| 4099 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s2_concept.safetensors",
|
| 4100 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s3_rules.safetensors",
|
| 4101 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s4_arith.safetensors",
|
| 4102 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s5_causal.safetensors",
|
| 4103 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s6_tryfail.safetensors",
|
| 4104 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s7_mixed.safetensors",
|
| 4105 |
+
"mini-beatrix-3/arm_refit/group/anchors/gXB_close8_s8_register.safetensors"
|
| 4106 |
+
]
|
| 4107 |
+
},
|
| 4108 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gXB_close8",
|
| 4109 |
+
"members": [
|
| 4110 |
+
"s1_perspective",
|
| 4111 |
+
"s2_concept",
|
| 4112 |
+
"s3_rules",
|
| 4113 |
+
"s4_arith",
|
| 4114 |
+
"s5_causal",
|
| 4115 |
+
"s6_tryfail",
|
| 4116 |
+
"s7_mixed",
|
| 4117 |
+
"s8_register"
|
| 4118 |
+
],
|
| 4119 |
+
"live": [
|
| 4120 |
+
"s1_perspective",
|
| 4121 |
+
"s2_concept",
|
| 4122 |
+
"s3_rules",
|
| 4123 |
+
"s4_arith",
|
| 4124 |
+
"s5_causal",
|
| 4125 |
+
"s6_tryfail",
|
| 4126 |
+
"s7_mixed",
|
| 4127 |
+
"s8_register"
|
| 4128 |
+
],
|
| 4129 |
+
"reads": {
|
| 4130 |
+
"s1_perspective": {
|
| 4131 |
+
"off": 0.5538333013185592,
|
| 4132 |
+
"on": 0.048373615296375044,
|
| 4133 |
+
"alone": 0.05217516482213097
|
| 4134 |
+
},
|
| 4135 |
+
"s2_concept": {
|
| 4136 |
+
"off": 0.7211839326967642,
|
| 4137 |
+
"on": 0.12122929684668586,
|
| 4138 |
+
"alone": 0.36033454325401637
|
| 4139 |
+
},
|
| 4140 |
+
"s3_rules": {
|
| 4141 |
+
"off": 0.9296131361815035,
|
| 4142 |
+
"on": 0.22223428311624405,
|
| 4143 |
+
"alone": 0.8701872076558641
|
| 4144 |
+
},
|
| 4145 |
+
"s4_arith": {
|
| 4146 |
+
"off": 1.2338748670942346,
|
| 4147 |
+
"on": 0.3266083503971684,
|
| 4148 |
+
"alone": 1.1550061816504822
|
| 4149 |
+
},
|
| 4150 |
+
"s5_causal": {
|
| 4151 |
+
"off": 0.6604376826115352,
|
| 4152 |
+
"on": 0.042796246816605044,
|
| 4153 |
+
"alone": 0.1417724646021276
|
| 4154 |
+
},
|
| 4155 |
+
"s6_tryfail": {
|
| 4156 |
+
"off": 0.6728212611401647,
|
| 4157 |
+
"on": 0.05430685618921398,
|
| 4158 |
+
"alone": 0.14373820614727262
|
| 4159 |
+
},
|
| 4160 |
+
"s7_mixed": {
|
| 4161 |
+
"off": 0.7829759286650222,
|
| 4162 |
+
"on": 0.7197570947572544,
|
| 4163 |
+
"alone": 0.7253837275330026
|
| 4164 |
+
},
|
| 4165 |
+
"s8_register": {
|
| 4166 |
+
"off": 0.4906504977761471,
|
| 4167 |
+
"on": 0.020783710349540914,
|
| 4168 |
+
"alone": 0.05160327413789158
|
| 4169 |
+
}
|
| 4170 |
+
},
|
| 4171 |
+
"web": 0.0010273276160133182,
|
| 4172 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4173 |
+
"template": null,
|
| 4174 |
+
"decode": {
|
| 4175 |
+
"temperature": 0.0,
|
| 4176 |
+
"top_p": 1.0,
|
| 4177 |
+
"rep": 1.0,
|
| 4178 |
+
"precision": "fp32",
|
| 4179 |
+
"why": "the sets were measured greedy in fp32"
|
| 4180 |
+
},
|
| 4181 |
+
"params": 109543680,
|
| 4182 |
+
"sites": 32
|
| 4183 |
+
},
|
| 4184 |
+
{
|
| 4185 |
+
"path": "mini-beatrix-3/arm_refit/group/gCB_close9",
|
| 4186 |
+
"step": 245674,
|
| 4187 |
+
"name": "stages-1-8-caption (seed B)",
|
| 4188 |
+
"group": "arm sets",
|
| 4189 |
+
"kind": "arm-set",
|
| 4190 |
+
"family": "set",
|
| 4191 |
+
"run": "gCB",
|
| 4192 |
+
"close": 9,
|
| 4193 |
+
"title": "Arm set · stages 1–8 + the caption arm · seed B",
|
| 4194 |
+
"status": "two seeds · experimental",
|
| 4195 |
+
"rank": 5,
|
| 4196 |
+
"what": "The second seed of the caption set.",
|
| 4197 |
+
"score": "stage text, arms off → set on: perspective .554→.049 · concepts .721→.122 · rules .930→.223 · arithmetic 1.234→.327 · causal .660→.043 · try-fail .673→.055 · mixed .783→.722 · register .491→.021 · captions 1.265→.779 · web text +0.0017",
|
| 4198 |
+
"mount": {
|
| 4199 |
+
"type": "program",
|
| 4200 |
+
"members": [
|
| 4201 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s1_perspective.safetensors",
|
| 4202 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s2_concept.safetensors",
|
| 4203 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s3_rules.safetensors",
|
| 4204 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s4_arith.safetensors",
|
| 4205 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s5_causal.safetensors",
|
| 4206 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s6_tryfail.safetensors",
|
| 4207 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s7_mixed.safetensors",
|
| 4208 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s8_register.safetensors",
|
| 4209 |
+
"mini-beatrix-3/arm_refit/group/anchors/gCB_close9_s9_caption.safetensors"
|
| 4210 |
+
]
|
| 4211 |
+
},
|
| 4212 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gCB_close9",
|
| 4213 |
+
"members": [
|
| 4214 |
+
"s1_perspective",
|
| 4215 |
+
"s2_concept",
|
| 4216 |
+
"s3_rules",
|
| 4217 |
+
"s4_arith",
|
| 4218 |
+
"s5_causal",
|
| 4219 |
+
"s6_tryfail",
|
| 4220 |
+
"s7_mixed",
|
| 4221 |
+
"s8_register",
|
| 4222 |
+
"s9_caption"
|
| 4223 |
+
],
|
| 4224 |
+
"live": [
|
| 4225 |
+
"s1_perspective",
|
| 4226 |
+
"s2_concept",
|
| 4227 |
+
"s3_rules",
|
| 4228 |
+
"s4_arith",
|
| 4229 |
+
"s5_causal",
|
| 4230 |
+
"s6_tryfail",
|
| 4231 |
+
"s7_mixed",
|
| 4232 |
+
"s8_register",
|
| 4233 |
+
"s9_caption"
|
| 4234 |
+
],
|
| 4235 |
+
"reads": {
|
| 4236 |
+
"s1_perspective": {
|
| 4237 |
+
"off": 0.5538333013185592,
|
| 4238 |
+
"on": 0.04877186900444792,
|
| 4239 |
+
"alone": 0.05217516482213097
|
| 4240 |
+
},
|
| 4241 |
+
"s2_concept": {
|
| 4242 |
+
"off": 0.7211839326967642,
|
| 4243 |
+
"on": 0.12184493024328064,
|
| 4244 |
+
"alone": 0.36033454325401637
|
| 4245 |
+
},
|
| 4246 |
+
"s3_rules": {
|
| 4247 |
+
"off": 0.9296131361815035,
|
| 4248 |
+
"on": 0.2225047903282199,
|
| 4249 |
+
"alone": 0.8701872076558641
|
| 4250 |
+
},
|
| 4251 |
+
"s4_arith": {
|
| 4252 |
+
"off": 1.2338748670942346,
|
| 4253 |
+
"on": 0.32716468740042043,
|
| 4254 |
+
"alone": 1.1550061816504822
|
| 4255 |
+
},
|
| 4256 |
+
"s5_causal": {
|
| 4257 |
+
"off": 0.6604376826115352,
|
| 4258 |
+
"on": 0.04308597712065818,
|
| 4259 |
+
"alone": 0.1417724646021276
|
| 4260 |
+
},
|
| 4261 |
+
"s6_tryfail": {
|
| 4262 |
+
"off": 0.6728212611401647,
|
| 4263 |
+
"on": 0.054676336729532454,
|
| 4264 |
+
"alone": 0.14373820614727262
|
| 4265 |
+
},
|
| 4266 |
+
"s7_mixed": {
|
| 4267 |
+
"off": 0.7829759286650222,
|
| 4268 |
+
"on": 0.7215182454722101,
|
| 4269 |
+
"alone": 0.7253837275330026
|
| 4270 |
+
},
|
| 4271 |
+
"s8_register": {
|
| 4272 |
+
"off": 0.4906504977761471,
|
| 4273 |
+
"on": 0.02129359624959004,
|
| 4274 |
+
"alone": 0.05160327413789158
|
| 4275 |
+
},
|
| 4276 |
+
"s9_caption": {
|
| 4277 |
+
"off": 1.2648128906514393,
|
| 4278 |
+
"on": 0.7794967841315616,
|
| 4279 |
+
"alone": 0.7818745625178125
|
| 4280 |
+
}
|
| 4281 |
+
},
|
| 4282 |
+
"web": 0.0016882354454477305,
|
| 4283 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4284 |
+
"template": null,
|
| 4285 |
+
"decode": {
|
| 4286 |
+
"temperature": 0.0,
|
| 4287 |
+
"top_p": 1.0,
|
| 4288 |
+
"rep": 1.0,
|
| 4289 |
+
"precision": "fp32",
|
| 4290 |
+
"why": "the sets were measured greedy in fp32"
|
| 4291 |
+
},
|
| 4292 |
+
"params": 123236640,
|
| 4293 |
+
"sites": 32
|
| 4294 |
+
},
|
| 4295 |
+
{
|
| 4296 |
+
"path": "mini-beatrix-3/arm_refit/group/gRB_close4",
|
| 4297 |
+
"step": 245674,
|
| 4298 |
+
"name": "stages-1-4 (seed B)",
|
| 4299 |
+
"group": "arm sets",
|
| 4300 |
+
"kind": "arm-set",
|
| 4301 |
+
"family": "set",
|
| 4302 |
+
"run": "gRB",
|
| 4303 |
+
"close": 4,
|
| 4304 |
+
"title": "Arm set · stages 1–4, on together · seed B",
|
| 4305 |
+
"status": "two seeds",
|
| 4306 |
+
"rank": 6,
|
| 4307 |
+
"what": "The second seed of the stages 1–4 set.",
|
| 4308 |
+
"score": "stage text, arms off → set on: perspective .554→.048 · concepts .721→.121 · rules .930→.222 · arithmetic 1.234→.338 · web text +0.0011",
|
| 4309 |
+
"mount": {
|
| 4310 |
+
"type": "program",
|
| 4311 |
+
"members": [
|
| 4312 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRB_close4_s1_perspective.safetensors",
|
| 4313 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRB_close4_s2_concept.safetensors",
|
| 4314 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRB_close4_s3_rules.safetensors",
|
| 4315 |
+
"mini-beatrix-3/arm_refit/group/anchors/gRB_close4_s4_arith.safetensors"
|
| 4316 |
+
]
|
| 4317 |
+
},
|
| 4318 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gRB_close4",
|
| 4319 |
+
"members": [
|
| 4320 |
+
"s1_perspective",
|
| 4321 |
+
"s2_concept",
|
| 4322 |
+
"s3_rules",
|
| 4323 |
+
"s4_arith"
|
| 4324 |
+
],
|
| 4325 |
+
"live": [
|
| 4326 |
+
"s1_perspective",
|
| 4327 |
+
"s2_concept",
|
| 4328 |
+
"s3_rules",
|
| 4329 |
+
"s4_arith"
|
| 4330 |
+
],
|
| 4331 |
+
"reads": {
|
| 4332 |
+
"s1_perspective": {
|
| 4333 |
+
"off": 0.5538333013185592,
|
| 4334 |
+
"on": 0.047862855039216154,
|
| 4335 |
+
"alone": 0.05217516482213097
|
| 4336 |
+
},
|
| 4337 |
+
"s2_concept": {
|
| 4338 |
+
"off": 0.7211839326967642,
|
| 4339 |
+
"on": 0.12117190301141822,
|
| 4340 |
+
"alone": 0.36033454325401637
|
| 4341 |
+
},
|
| 4342 |
+
"s3_rules": {
|
| 4343 |
+
"off": 0.9296131361815035,
|
| 4344 |
+
"on": 0.22223902876251628,
|
| 4345 |
+
"alone": 0.8701872076558641
|
| 4346 |
+
},
|
| 4347 |
+
"s4_arith": {
|
| 4348 |
+
"off": 1.2338748670942346,
|
| 4349 |
+
"on": 0.33787596037663836,
|
| 4350 |
+
"alone": 1.1550061816504822
|
| 4351 |
+
}
|
| 4352 |
+
},
|
| 4353 |
+
"web": 0.0011034729346828115,
|
| 4354 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4355 |
+
"template": null,
|
| 4356 |
+
"decode": {
|
| 4357 |
+
"temperature": 0.0,
|
| 4358 |
+
"top_p": 1.0,
|
| 4359 |
+
"rep": 1.0,
|
| 4360 |
+
"precision": "fp32",
|
| 4361 |
+
"why": "the sets were measured greedy in fp32"
|
| 4362 |
+
},
|
| 4363 |
+
"params": 54771840,
|
| 4364 |
+
"sites": 32
|
| 4365 |
+
},
|
| 4366 |
+
{
|
| 4367 |
+
"path": "mini-beatrix-3/arm_refit/group/gEA_close8",
|
| 4368 |
+
"step": 245674,
|
| 4369 |
+
"name": "eight from scratch",
|
| 4370 |
+
"group": "arm sets",
|
| 4371 |
+
"kind": "arm-set",
|
| 4372 |
+
"family": "set",
|
| 4373 |
+
"run": "gEA",
|
| 4374 |
+
"close": 8,
|
| 4375 |
+
"title": "Arm set · all eight fitted from scratch · seed A",
|
| 4376 |
+
"status": "two seeds · research row",
|
| 4377 |
+
"rank": 7,
|
| 4378 |
+
"what": "All eight arms fitted from scratch, frozen in turn, every arm kept quiet on every other arm's stage text from its first step, 4,000 steps per stage.",
|
| 4379 |
+
"score": "stage text, arms off → set on: perspective .554→.048 · concepts .721→.077 · rules .930→.181 · arithmetic 1.234→.267 · causal .660→.043 · try-fail .673→.055 · mixed .783→.727 · register .491→.021 · web text +0.0012",
|
| 4380 |
+
"mount": {
|
| 4381 |
+
"type": "program",
|
| 4382 |
+
"members": [
|
| 4383 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s1_perspective.safetensors",
|
| 4384 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s2_concept.safetensors",
|
| 4385 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s3_rules.safetensors",
|
| 4386 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s4_arith.safetensors",
|
| 4387 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s5_causal.safetensors",
|
| 4388 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s6_tryfail.safetensors",
|
| 4389 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s7_mixed.safetensors",
|
| 4390 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEA_close8_s8_register.safetensors"
|
| 4391 |
+
]
|
| 4392 |
+
},
|
| 4393 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gEA_close8",
|
| 4394 |
+
"members": [
|
| 4395 |
+
"s1_perspective",
|
| 4396 |
+
"s2_concept",
|
| 4397 |
+
"s3_rules",
|
| 4398 |
+
"s4_arith",
|
| 4399 |
+
"s5_causal",
|
| 4400 |
+
"s6_tryfail",
|
| 4401 |
+
"s7_mixed",
|
| 4402 |
+
"s8_register"
|
| 4403 |
+
],
|
| 4404 |
+
"live": [
|
| 4405 |
+
"s1_perspective",
|
| 4406 |
+
"s2_concept",
|
| 4407 |
+
"s3_rules",
|
| 4408 |
+
"s4_arith",
|
| 4409 |
+
"s5_causal",
|
| 4410 |
+
"s6_tryfail",
|
| 4411 |
+
"s7_mixed",
|
| 4412 |
+
"s8_register"
|
| 4413 |
+
],
|
| 4414 |
+
"reads": {
|
| 4415 |
+
"s1_perspective": {
|
| 4416 |
+
"off": 0.5538333013185592,
|
| 4417 |
+
"on": 0.04782171591578037,
|
| 4418 |
+
"alone": 0.04691673413754267
|
| 4419 |
+
},
|
| 4420 |
+
"s2_concept": {
|
| 4421 |
+
"off": 0.7211839326967642,
|
| 4422 |
+
"on": 0.07664305728712961,
|
| 4423 |
+
"alone": 0.07567364818783051
|
| 4424 |
+
},
|
| 4425 |
+
"s3_rules": {
|
| 4426 |
+
"off": 0.9296131361815035,
|
| 4427 |
+
"on": 0.1810846217122526,
|
| 4428 |
+
"alone": 0.18058990286813004
|
| 4429 |
+
},
|
| 4430 |
+
"s4_arith": {
|
| 4431 |
+
"off": 1.2338748670942346,
|
| 4432 |
+
"on": 0.26691530056799195,
|
| 4433 |
+
"alone": 0.2691548452113829
|
| 4434 |
+
},
|
| 4435 |
+
"s5_causal": {
|
| 4436 |
+
"off": 0.6604376826115352,
|
| 4437 |
+
"on": 0.04337998952399491,
|
| 4438 |
+
"alone": 0.04574753796565191
|
| 4439 |
+
},
|
| 4440 |
+
"s6_tryfail": {
|
| 4441 |
+
"off": 0.6728212611401647,
|
| 4442 |
+
"on": 0.05485438983052493,
|
| 4443 |
+
"alone": 0.07609357876388802
|
| 4444 |
+
},
|
| 4445 |
+
"s7_mixed": {
|
| 4446 |
+
"off": 0.7829759286650222,
|
| 4447 |
+
"on": 0.727499721452351,
|
| 4448 |
+
"alone": 0.7315994411963898
|
| 4449 |
+
},
|
| 4450 |
+
"s8_register": {
|
| 4451 |
+
"off": 0.4906504977761471,
|
| 4452 |
+
"on": 0.02117565444411026,
|
| 4453 |
+
"alone": 0.024590816056992
|
| 4454 |
+
}
|
| 4455 |
+
},
|
| 4456 |
+
"web": 0.0012417254881451761,
|
| 4457 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4458 |
+
"template": null,
|
| 4459 |
+
"decode": {
|
| 4460 |
+
"temperature": 0.0,
|
| 4461 |
+
"top_p": 1.0,
|
| 4462 |
+
"rep": 1.0,
|
| 4463 |
+
"precision": "fp32",
|
| 4464 |
+
"why": "the sets were measured greedy in fp32"
|
| 4465 |
+
},
|
| 4466 |
+
"params": 109543680,
|
| 4467 |
+
"sites": 32
|
| 4468 |
+
},
|
| 4469 |
+
{
|
| 4470 |
+
"path": "mini-beatrix-3/arm_refit/group/gEB_close8",
|
| 4471 |
+
"step": 245674,
|
| 4472 |
+
"name": "eight from scratch (seed B)",
|
| 4473 |
+
"group": "arm sets",
|
| 4474 |
+
"kind": "arm-set",
|
| 4475 |
+
"family": "set",
|
| 4476 |
+
"run": "gEB",
|
| 4477 |
+
"close": 8,
|
| 4478 |
+
"title": "Arm set · all eight fitted from scratch · seed B",
|
| 4479 |
+
"status": "two seeds · research row",
|
| 4480 |
+
"rank": 8,
|
| 4481 |
+
"what": "The second seed of the from-scratch eight.",
|
| 4482 |
+
"score": "stage text, arms off → set on: perspective .554→.051 · concepts .721→.076 · rules .930→.181 · arithmetic 1.234→.267 · causal .660→.044 · try-fail .673→.055 · mixed .783→.728 · register .491→.021 · web text +0.0018",
|
| 4483 |
+
"mount": {
|
| 4484 |
+
"type": "program",
|
| 4485 |
+
"members": [
|
| 4486 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s1_perspective.safetensors",
|
| 4487 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s2_concept.safetensors",
|
| 4488 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s3_rules.safetensors",
|
| 4489 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s4_arith.safetensors",
|
| 4490 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s5_causal.safetensors",
|
| 4491 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s6_tryfail.safetensors",
|
| 4492 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s7_mixed.safetensors",
|
| 4493 |
+
"mini-beatrix-3/arm_refit/group/anchors/gEB_close8_s8_register.safetensors"
|
| 4494 |
+
]
|
| 4495 |
+
},
|
| 4496 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gEB_close8",
|
| 4497 |
+
"members": [
|
| 4498 |
+
"s1_perspective",
|
| 4499 |
+
"s2_concept",
|
| 4500 |
+
"s3_rules",
|
| 4501 |
+
"s4_arith",
|
| 4502 |
+
"s5_causal",
|
| 4503 |
+
"s6_tryfail",
|
| 4504 |
+
"s7_mixed",
|
| 4505 |
+
"s8_register"
|
| 4506 |
+
],
|
| 4507 |
+
"live": [
|
| 4508 |
+
"s1_perspective",
|
| 4509 |
+
"s2_concept",
|
| 4510 |
+
"s3_rules",
|
| 4511 |
+
"s4_arith",
|
| 4512 |
+
"s5_causal",
|
| 4513 |
+
"s6_tryfail",
|
| 4514 |
+
"s7_mixed",
|
| 4515 |
+
"s8_register"
|
| 4516 |
+
],
|
| 4517 |
+
"reads": {
|
| 4518 |
+
"s1_perspective": {
|
| 4519 |
+
"off": 0.5538333013185592,
|
| 4520 |
+
"on": 0.05064719369403434,
|
| 4521 |
+
"alone": 0.05044332505661722
|
| 4522 |
+
},
|
| 4523 |
+
"s2_concept": {
|
| 4524 |
+
"off": 0.7211839326967642,
|
| 4525 |
+
"on": 0.07633792378690858,
|
| 4526 |
+
"alone": 0.07537300235990543
|
| 4527 |
+
},
|
| 4528 |
+
"s3_rules": {
|
| 4529 |
+
"off": 0.9296131361815035,
|
| 4530 |
+
"on": 0.18140732028430745,
|
| 4531 |
+
"alone": 0.18155743560983595
|
| 4532 |
+
},
|
| 4533 |
+
"s4_arith": {
|
| 4534 |
+
"off": 1.2338748670942346,
|
| 4535 |
+
"on": 0.26739326722702894,
|
| 4536 |
+
"alone": 0.26888096552711277
|
| 4537 |
+
},
|
| 4538 |
+
"s5_causal": {
|
| 4539 |
+
"off": 0.6604376826115352,
|
| 4540 |
+
"on": 0.043634570873777964,
|
| 4541 |
+
"alone": 0.04677976809492565
|
| 4542 |
+
},
|
| 4543 |
+
"s6_tryfail": {
|
| 4544 |
+
"off": 0.6728212611401647,
|
| 4545 |
+
"on": 0.055141103048308444,
|
| 4546 |
+
"alone": 0.07294846954948744
|
| 4547 |
+
},
|
| 4548 |
+
"s7_mixed": {
|
| 4549 |
+
"off": 0.7829759286650222,
|
| 4550 |
+
"on": 0.7276259943392891,
|
| 4551 |
+
"alone": 0.7293689578889162
|
| 4552 |
+
},
|
| 4553 |
+
"s8_register": {
|
| 4554 |
+
"off": 0.4906504977761471,
|
| 4555 |
+
"on": 0.021085106922045453,
|
| 4556 |
+
"alone": 0.02668958853390469
|
| 4557 |
+
}
|
| 4558 |
+
},
|
| 4559 |
+
"web": 0.0018326793743410896,
|
| 4560 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4561 |
+
"template": null,
|
| 4562 |
+
"decode": {
|
| 4563 |
+
"temperature": 0.0,
|
| 4564 |
+
"top_p": 1.0,
|
| 4565 |
+
"rep": 1.0,
|
| 4566 |
+
"precision": "fp32",
|
| 4567 |
+
"why": "the sets were measured greedy in fp32"
|
| 4568 |
+
},
|
| 4569 |
+
"params": 109543680,
|
| 4570 |
+
"sites": 32
|
| 4571 |
+
},
|
| 4572 |
+
{
|
| 4573 |
+
"path": "mini-beatrix-3/arm_refit/group/gSA_close4",
|
| 4574 |
+
"step": 245674,
|
| 4575 |
+
"name": "four, quiet on each other",
|
| 4576 |
+
"group": "arm sets",
|
| 4577 |
+
"kind": "arm-set",
|
| 4578 |
+
"family": "set",
|
| 4579 |
+
"run": "gSA",
|
| 4580 |
+
"close": 4,
|
| 4581 |
+
"title": "Arm set · four, frozen in turn, each quiet on the others' text · seed A",
|
| 4582 |
+
"status": "two seeds · research row",
|
| 4583 |
+
"rank": 9,
|
| 4584 |
+
"what": "Four arms frozen in turn, each kept quiet on every other arm's stage text from its first step, 800 steps per stage. Each arm also works alone.",
|
| 4585 |
+
"score": "stage text, arms off → set on: perspective .554→.081 · concepts .721→.120 · rules .930→.376 · arithmetic 1.234→.392 · web text +0.0020",
|
| 4586 |
+
"mount": {
|
| 4587 |
+
"type": "program",
|
| 4588 |
+
"members": [
|
| 4589 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSA_close4_s1_perspective.safetensors",
|
| 4590 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSA_close4_s2_concept.safetensors",
|
| 4591 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSA_close4_s3_rules.safetensors",
|
| 4592 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSA_close4_s4_arith.safetensors"
|
| 4593 |
+
]
|
| 4594 |
+
},
|
| 4595 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gSA_close4",
|
| 4596 |
+
"members": [
|
| 4597 |
+
"s1_perspective",
|
| 4598 |
+
"s2_concept",
|
| 4599 |
+
"s3_rules",
|
| 4600 |
+
"s4_arith"
|
| 4601 |
+
],
|
| 4602 |
+
"live": [
|
| 4603 |
+
"s1_perspective",
|
| 4604 |
+
"s2_concept",
|
| 4605 |
+
"s3_rules",
|
| 4606 |
+
"s4_arith"
|
| 4607 |
+
],
|
| 4608 |
+
"reads": {
|
| 4609 |
+
"s1_perspective": {
|
| 4610 |
+
"off": 0.5538333013185592,
|
| 4611 |
+
"on": 0.08131032448166621,
|
| 4612 |
+
"alone": 0.08115575641781772
|
| 4613 |
+
},
|
| 4614 |
+
"s2_concept": {
|
| 4615 |
+
"off": 0.7211839326967642,
|
| 4616 |
+
"on": 0.12035538312970001,
|
| 4617 |
+
"alone": 0.12445310894988028
|
| 4618 |
+
},
|
| 4619 |
+
"s3_rules": {
|
| 4620 |
+
"off": 0.9296131361815035,
|
| 4621 |
+
"on": 0.3755476824693398,
|
| 4622 |
+
"alone": 0.38051485045758343
|
| 4623 |
+
},
|
| 4624 |
+
"s4_arith": {
|
| 4625 |
+
"off": 1.2338748670942346,
|
| 4626 |
+
"on": 0.39175397043604643,
|
| 4627 |
+
"alone": 0.3967888377824649
|
| 4628 |
+
}
|
| 4629 |
+
},
|
| 4630 |
+
"web": 0.0019989758488097864,
|
| 4631 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4632 |
+
"template": null,
|
| 4633 |
+
"decode": {
|
| 4634 |
+
"temperature": 0.0,
|
| 4635 |
+
"top_p": 1.0,
|
| 4636 |
+
"rep": 1.0,
|
| 4637 |
+
"precision": "fp32",
|
| 4638 |
+
"why": "the sets were measured greedy in fp32"
|
| 4639 |
+
},
|
| 4640 |
+
"params": 54771840,
|
| 4641 |
+
"sites": 32
|
| 4642 |
+
},
|
| 4643 |
+
{
|
| 4644 |
+
"path": "mini-beatrix-3/arm_refit/group/gSB_close4",
|
| 4645 |
+
"step": 245674,
|
| 4646 |
+
"name": "four, quiet on each other (seed B)",
|
| 4647 |
+
"group": "arm sets",
|
| 4648 |
+
"kind": "arm-set",
|
| 4649 |
+
"family": "set",
|
| 4650 |
+
"run": "gSB",
|
| 4651 |
+
"close": 4,
|
| 4652 |
+
"title": "Arm set · four, frozen in turn, each quiet on the others' text · seed B",
|
| 4653 |
+
"status": "two seeds · research row",
|
| 4654 |
+
"rank": 10,
|
| 4655 |
+
"what": "The second seed.",
|
| 4656 |
+
"score": "stage text, arms off → set on: perspective .554→.080 · concepts .721→.120 · rules .930→.376 · arithmetic 1.234→.392 · web text +0.0022",
|
| 4657 |
+
"mount": {
|
| 4658 |
+
"type": "program",
|
| 4659 |
+
"members": [
|
| 4660 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSB_close4_s1_perspective.safetensors",
|
| 4661 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSB_close4_s2_concept.safetensors",
|
| 4662 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSB_close4_s3_rules.safetensors",
|
| 4663 |
+
"mini-beatrix-3/arm_refit/group/anchors/gSB_close4_s4_arith.safetensors"
|
| 4664 |
+
]
|
| 4665 |
+
},
|
| 4666 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gSB_close4",
|
| 4667 |
+
"members": [
|
| 4668 |
+
"s1_perspective",
|
| 4669 |
+
"s2_concept",
|
| 4670 |
+
"s3_rules",
|
| 4671 |
+
"s4_arith"
|
| 4672 |
+
],
|
| 4673 |
+
"live": [
|
| 4674 |
+
"s1_perspective",
|
| 4675 |
+
"s2_concept",
|
| 4676 |
+
"s3_rules",
|
| 4677 |
+
"s4_arith"
|
| 4678 |
+
],
|
| 4679 |
+
"reads": {
|
| 4680 |
+
"s1_perspective": {
|
| 4681 |
+
"off": 0.5538333013185592,
|
| 4682 |
+
"on": 0.08042484560321708,
|
| 4683 |
+
"alone": 0.08008908508319063
|
| 4684 |
+
},
|
| 4685 |
+
"s2_concept": {
|
| 4686 |
+
"off": 0.7211839326967642,
|
| 4687 |
+
"on": 0.12043002091294555,
|
| 4688 |
+
"alone": 0.1230374566007489
|
| 4689 |
+
},
|
| 4690 |
+
"s3_rules": {
|
| 4691 |
+
"off": 0.9296131361815035,
|
| 4692 |
+
"on": 0.37645924695072,
|
| 4693 |
+
"alone": 0.3801666447086225
|
| 4694 |
+
},
|
| 4695 |
+
"s4_arith": {
|
| 4696 |
+
"off": 1.2338748670942346,
|
| 4697 |
+
"on": 0.3915001025455416,
|
| 4698 |
+
"alone": 0.3959761283913549
|
| 4699 |
+
}
|
| 4700 |
+
},
|
| 4701 |
+
"web": 0.002171506694372244,
|
| 4702 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4703 |
+
"template": null,
|
| 4704 |
+
"decode": {
|
| 4705 |
+
"temperature": 0.0,
|
| 4706 |
+
"top_p": 1.0,
|
| 4707 |
+
"rep": 1.0,
|
| 4708 |
+
"precision": "fp32",
|
| 4709 |
+
"why": "the sets were measured greedy in fp32"
|
| 4710 |
+
},
|
| 4711 |
+
"params": 54771840,
|
| 4712 |
+
"sites": 32
|
| 4713 |
+
},
|
| 4714 |
+
{
|
| 4715 |
+
"path": "mini-beatrix-3/arm_refit/group/gFA_close4",
|
| 4716 |
+
"step": 245674,
|
| 4717 |
+
"name": "four, frozen in turn",
|
| 4718 |
+
"group": "arm sets",
|
| 4719 |
+
"kind": "arm-set",
|
| 4720 |
+
"family": "set",
|
| 4721 |
+
"run": "gFA",
|
| 4722 |
+
"close": 4,
|
| 4723 |
+
"title": "Arm set · four, the earlier arms frozen while the newest trains · seed A",
|
| 4724 |
+
"status": "two seeds · research row",
|
| 4725 |
+
"rank": 11,
|
| 4726 |
+
"what": "Four arms, the earlier ones held fixed while the newest trains, 800 steps per stage. Each arm works alone in part.",
|
| 4727 |
+
"score": "stage text, arms off → set on: perspective .554→.081 · concepts .721→.109 · rules .930→.358 · arithmetic 1.234→.367 · web text +0.0016",
|
| 4728 |
+
"mount": {
|
| 4729 |
+
"type": "program",
|
| 4730 |
+
"members": [
|
| 4731 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFA_close4_s1_perspective.safetensors",
|
| 4732 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFA_close4_s2_concept.safetensors",
|
| 4733 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFA_close4_s3_rules.safetensors",
|
| 4734 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFA_close4_s4_arith.safetensors"
|
| 4735 |
+
]
|
| 4736 |
+
},
|
| 4737 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gFA_close4",
|
| 4738 |
+
"members": [
|
| 4739 |
+
"s1_perspective",
|
| 4740 |
+
"s2_concept",
|
| 4741 |
+
"s3_rules",
|
| 4742 |
+
"s4_arith"
|
| 4743 |
+
],
|
| 4744 |
+
"live": [
|
| 4745 |
+
"s1_perspective",
|
| 4746 |
+
"s2_concept",
|
| 4747 |
+
"s3_rules",
|
| 4748 |
+
"s4_arith"
|
| 4749 |
+
],
|
| 4750 |
+
"reads": {
|
| 4751 |
+
"s1_perspective": {
|
| 4752 |
+
"off": 0.5538333013185592,
|
| 4753 |
+
"on": 0.08097044108066967,
|
| 4754 |
+
"alone": 0.08089993424008099
|
| 4755 |
+
},
|
| 4756 |
+
"s2_concept": {
|
| 4757 |
+
"off": 0.7211839326967642,
|
| 4758 |
+
"on": 0.10885521632867315,
|
| 4759 |
+
"alone": 0.23095238734534776
|
| 4760 |
+
},
|
| 4761 |
+
"s3_rules": {
|
| 4762 |
+
"off": 0.9296131361815035,
|
| 4763 |
+
"on": 0.357637406521258,
|
| 4764 |
+
"alone": 0.4788150924493114
|
| 4765 |
+
},
|
| 4766 |
+
"s4_arith": {
|
| 4767 |
+
"off": 1.2338748670942346,
|
| 4768 |
+
"on": 0.36695632407946416,
|
| 4769 |
+
"alone": 0.44643810080125335
|
| 4770 |
+
}
|
| 4771 |
+
},
|
| 4772 |
+
"web": 0.0016101123262932948,
|
| 4773 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4774 |
+
"template": null,
|
| 4775 |
+
"decode": {
|
| 4776 |
+
"temperature": 0.0,
|
| 4777 |
+
"top_p": 1.0,
|
| 4778 |
+
"rep": 1.0,
|
| 4779 |
+
"precision": "fp32",
|
| 4780 |
+
"why": "the sets were measured greedy in fp32"
|
| 4781 |
+
},
|
| 4782 |
+
"params": 54771840,
|
| 4783 |
+
"sites": 32
|
| 4784 |
+
},
|
| 4785 |
+
{
|
| 4786 |
+
"path": "mini-beatrix-3/arm_refit/group/gFB_close4",
|
| 4787 |
+
"step": 245674,
|
| 4788 |
+
"name": "four, frozen in turn (seed B)",
|
| 4789 |
+
"group": "arm sets",
|
| 4790 |
+
"kind": "arm-set",
|
| 4791 |
+
"family": "set",
|
| 4792 |
+
"run": "gFB",
|
| 4793 |
+
"close": 4,
|
| 4794 |
+
"title": "Arm set · four, the earlier arms frozen while the newest trains · seed B",
|
| 4795 |
+
"status": "two seeds · research row",
|
| 4796 |
+
"rank": 12,
|
| 4797 |
+
"what": "The second seed.",
|
| 4798 |
+
"score": "stage text, arms off → set on: perspective .554→.080 · concepts .721→.109 · rules .930→.356 · arithmetic 1.234→.367 · web text +0.0018",
|
| 4799 |
+
"mount": {
|
| 4800 |
+
"type": "program",
|
| 4801 |
+
"members": [
|
| 4802 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFB_close4_s1_perspective.safetensors",
|
| 4803 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFB_close4_s2_concept.safetensors",
|
| 4804 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFB_close4_s3_rules.safetensors",
|
| 4805 |
+
"mini-beatrix-3/arm_refit/group/anchors/gFB_close4_s4_arith.safetensors"
|
| 4806 |
+
]
|
| 4807 |
+
},
|
| 4808 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gFB_close4",
|
| 4809 |
+
"members": [
|
| 4810 |
+
"s1_perspective",
|
| 4811 |
+
"s2_concept",
|
| 4812 |
+
"s3_rules",
|
| 4813 |
+
"s4_arith"
|
| 4814 |
+
],
|
| 4815 |
+
"live": [
|
| 4816 |
+
"s1_perspective",
|
| 4817 |
+
"s2_concept",
|
| 4818 |
+
"s3_rules",
|
| 4819 |
+
"s4_arith"
|
| 4820 |
+
],
|
| 4821 |
+
"reads": {
|
| 4822 |
+
"s1_perspective": {
|
| 4823 |
+
"off": 0.5538333013185592,
|
| 4824 |
+
"on": 0.08034933715780154,
|
| 4825 |
+
"alone": 0.07990232670411268
|
| 4826 |
+
},
|
| 4827 |
+
"s2_concept": {
|
| 4828 |
+
"off": 0.7211839326967642,
|
| 4829 |
+
"on": 0.10922296226272392,
|
| 4830 |
+
"alone": 0.2265888059064517
|
| 4831 |
+
},
|
| 4832 |
+
"s3_rules": {
|
| 4833 |
+
"off": 0.9296131361815035,
|
| 4834 |
+
"on": 0.35550140886983106,
|
| 4835 |
+
"alone": 0.47156215410579966
|
| 4836 |
+
},
|
| 4837 |
+
"s4_arith": {
|
| 4838 |
+
"off": 1.2338748670942346,
|
| 4839 |
+
"on": 0.36746155805034963,
|
| 4840 |
+
"alone": 0.44645017720801855
|
| 4841 |
+
}
|
| 4842 |
+
},
|
| 4843 |
+
"web": 0.0017539543159086901,
|
| 4844 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4845 |
+
"template": null,
|
| 4846 |
+
"decode": {
|
| 4847 |
+
"temperature": 0.0,
|
| 4848 |
+
"top_p": 1.0,
|
| 4849 |
+
"rep": 1.0,
|
| 4850 |
+
"precision": "fp32",
|
| 4851 |
+
"why": "the sets were measured greedy in fp32"
|
| 4852 |
+
},
|
| 4853 |
+
"params": 54771840,
|
| 4854 |
+
"sites": 32
|
| 4855 |
+
},
|
| 4856 |
+
{
|
| 4857 |
+
"path": "mini-beatrix-3/arm_refit/group/gA_close4",
|
| 4858 |
+
"step": 245674,
|
| 4859 |
+
"name": "four, co-trained",
|
| 4860 |
+
"group": "arm sets",
|
| 4861 |
+
"kind": "arm-set",
|
| 4862 |
+
"family": "set",
|
| 4863 |
+
"run": "gA",
|
| 4864 |
+
"close": 4,
|
| 4865 |
+
"title": "Arm set · four, co-trained (every attached arm training) · seed A",
|
| 4866 |
+
"status": "two seeds · research row",
|
| 4867 |
+
"rank": 13,
|
| 4868 |
+
"what": "Four arms attached one stage at a time, each new arm over the earlier ones, every attached arm still training, 800 steps per stage. The set works with every arm on, but it does not divide its work one stage to an arm: the first arm keeps training under every later stage and takes up most of their text.",
|
| 4869 |
+
"score": "stage text, arms off → set on: perspective .554→.048 · concepts .721→.111 · rules .930→.310 · arithmetic 1.234→.464 · web text +0.0009",
|
| 4870 |
+
"mount": {
|
| 4871 |
+
"type": "program",
|
| 4872 |
+
"members": [
|
| 4873 |
+
"mini-beatrix-3/arm_refit/group/anchors/gA_close4_s1_perspective.safetensors",
|
| 4874 |
+
"mini-beatrix-3/arm_refit/group/anchors/gA_close4_s2_concept.safetensors",
|
| 4875 |
+
"mini-beatrix-3/arm_refit/group/anchors/gA_close4_s3_rules.safetensors",
|
| 4876 |
+
"mini-beatrix-3/arm_refit/group/anchors/gA_close4_s4_arith.safetensors"
|
| 4877 |
+
]
|
| 4878 |
+
},
|
| 4879 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gA_close4",
|
| 4880 |
+
"members": [
|
| 4881 |
+
"s1_perspective",
|
| 4882 |
+
"s2_concept",
|
| 4883 |
+
"s3_rules",
|
| 4884 |
+
"s4_arith"
|
| 4885 |
+
],
|
| 4886 |
+
"live": [
|
| 4887 |
+
"s1_perspective",
|
| 4888 |
+
"s2_concept",
|
| 4889 |
+
"s3_rules",
|
| 4890 |
+
"s4_arith"
|
| 4891 |
+
],
|
| 4892 |
+
"reads": {
|
| 4893 |
+
"s1_perspective": {
|
| 4894 |
+
"off": 0.5538333013185592,
|
| 4895 |
+
"on": 0.04810219039572311,
|
| 4896 |
+
"alone": 0.05251879489204885
|
| 4897 |
+
},
|
| 4898 |
+
"s2_concept": {
|
| 4899 |
+
"off": 0.7211839326967642,
|
| 4900 |
+
"on": 0.11126926827449693,
|
| 4901 |
+
"alone": 0.35026574371684355
|
| 4902 |
+
},
|
| 4903 |
+
"s3_rules": {
|
| 4904 |
+
"off": 0.9296131361815035,
|
| 4905 |
+
"on": 0.3101908704224312,
|
| 4906 |
+
"alone": 0.9002206024695304
|
| 4907 |
+
},
|
| 4908 |
+
"s4_arith": {
|
| 4909 |
+
"off": 1.2338748670942346,
|
| 4910 |
+
"on": 0.46378667334993046,
|
| 4911 |
+
"alone": 1.2284806419988383
|
| 4912 |
+
}
|
| 4913 |
+
},
|
| 4914 |
+
"web": 0.0009262770597157494,
|
| 4915 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4916 |
+
"template": null,
|
| 4917 |
+
"decode": {
|
| 4918 |
+
"temperature": 0.0,
|
| 4919 |
+
"top_p": 1.0,
|
| 4920 |
+
"rep": 1.0,
|
| 4921 |
+
"precision": "fp32",
|
| 4922 |
+
"why": "the sets were measured greedy in fp32"
|
| 4923 |
+
},
|
| 4924 |
+
"params": 54771840,
|
| 4925 |
+
"sites": 32
|
| 4926 |
+
},
|
| 4927 |
+
{
|
| 4928 |
+
"path": "mini-beatrix-3/arm_refit/group/gB_close4",
|
| 4929 |
+
"step": 245674,
|
| 4930 |
+
"name": "four, co-trained (seed B)",
|
| 4931 |
+
"group": "arm sets",
|
| 4932 |
+
"kind": "arm-set",
|
| 4933 |
+
"family": "set",
|
| 4934 |
+
"run": "gB",
|
| 4935 |
+
"close": 4,
|
| 4936 |
+
"title": "Arm set · four, co-trained (every attached arm training) · seed B",
|
| 4937 |
+
"status": "two seeds · research row",
|
| 4938 |
+
"rank": 14,
|
| 4939 |
+
"what": "The second seed.",
|
| 4940 |
+
"score": "stage text, arms off → set on: perspective .554→.048 · concepts .721→.121 · rules .930→.309 · arithmetic 1.234→.490 · web text +0.0008",
|
| 4941 |
+
"mount": {
|
| 4942 |
+
"type": "program",
|
| 4943 |
+
"members": [
|
| 4944 |
+
"mini-beatrix-3/arm_refit/group/anchors/gB_close4_s1_perspective.safetensors",
|
| 4945 |
+
"mini-beatrix-3/arm_refit/group/anchors/gB_close4_s2_concept.safetensors",
|
| 4946 |
+
"mini-beatrix-3/arm_refit/group/anchors/gB_close4_s3_rules.safetensors",
|
| 4947 |
+
"mini-beatrix-3/arm_refit/group/anchors/gB_close4_s4_arith.safetensors"
|
| 4948 |
+
]
|
| 4949 |
+
},
|
| 4950 |
+
"mount_key": "mini-beatrix-3/arm_refit/group/gB_close4",
|
| 4951 |
+
"members": [
|
| 4952 |
+
"s1_perspective",
|
| 4953 |
+
"s2_concept",
|
| 4954 |
+
"s3_rules",
|
| 4955 |
+
"s4_arith"
|
| 4956 |
+
],
|
| 4957 |
+
"live": [
|
| 4958 |
+
"s1_perspective",
|
| 4959 |
+
"s2_concept",
|
| 4960 |
+
"s3_rules",
|
| 4961 |
+
"s4_arith"
|
| 4962 |
+
],
|
| 4963 |
+
"reads": {
|
| 4964 |
+
"s1_perspective": {
|
| 4965 |
+
"off": 0.5538333013185592,
|
| 4966 |
+
"on": 0.04774676607807653,
|
| 4967 |
+
"alone": 0.05217516482213097
|
| 4968 |
+
},
|
| 4969 |
+
"s2_concept": {
|
| 4970 |
+
"off": 0.7211839326967642,
|
| 4971 |
+
"on": 0.12105901118088586,
|
| 4972 |
+
"alone": 0.36033454325401637
|
| 4973 |
+
},
|
| 4974 |
+
"s3_rules": {
|
| 4975 |
+
"off": 0.9296131361815035,
|
| 4976 |
+
"on": 0.30863669814056,
|
| 4977 |
+
"alone": 0.9003206963723325
|
| 4978 |
+
},
|
| 4979 |
+
"s4_arith": {
|
| 4980 |
+
"off": 1.2338748670942346,
|
| 4981 |
+
"on": 0.4896058052868545,
|
| 4982 |
+
"alone": 1.2247594533821196
|
| 4983 |
+
}
|
| 4984 |
+
},
|
| 4985 |
+
"web": 0.0008299990219795828,
|
| 4986 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 4987 |
+
"template": null,
|
| 4988 |
+
"decode": {
|
| 4989 |
+
"temperature": 0.0,
|
| 4990 |
+
"top_p": 1.0,
|
| 4991 |
+
"rep": 1.0,
|
| 4992 |
+
"precision": "fp32",
|
| 4993 |
+
"why": "the sets were measured greedy in fp32"
|
| 4994 |
+
},
|
| 4995 |
+
"params": 54771840,
|
| 4996 |
+
"sites": 32
|
| 4997 |
+
},
|
| 4998 |
+
{
|
| 4999 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s1_perspective_fresh_seed1_d20261005_step4000.safetensors",
|
| 5000 |
+
"step": 245674,
|
| 5001 |
+
"name": "solo s1_perspective seed A",
|
| 5002 |
+
"group": "solo arms",
|
| 5003 |
+
"kind": "solo",
|
| 5004 |
+
"family": "solo",
|
| 5005 |
+
"title": "Solo arm · stage 1: perspective · seed A",
|
| 5006 |
+
"status": "two seeds · one at a time · packaged",
|
| 5007 |
+
"rank": 102,
|
| 5008 |
+
"what": "one small event retold from each side: seen from a person, said to them, told about them. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5009 |
+
"score": "own stage text .554 → .047 · web text +0.0003",
|
| 5010 |
+
"probe_stage": "perspective",
|
| 5011 |
+
"mount": {
|
| 5012 |
+
"type": "anchor"
|
| 5013 |
+
},
|
| 5014 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5015 |
+
"template": null,
|
| 5016 |
+
"decode": {
|
| 5017 |
+
"temperature": 0.0,
|
| 5018 |
+
"top_p": 1.0,
|
| 5019 |
+
"rep": 1.0,
|
| 5020 |
+
"precision": "fp32",
|
| 5021 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5022 |
+
},
|
| 5023 |
+
"params": 13692960,
|
| 5024 |
+
"sites": 32
|
| 5025 |
+
},
|
| 5026 |
+
{
|
| 5027 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s1_perspective_fresh_seed101_d20261006_step4000.safetensors",
|
| 5028 |
+
"step": 245674,
|
| 5029 |
+
"name": "solo s1_perspective seed B",
|
| 5030 |
+
"group": "solo arms",
|
| 5031 |
+
"kind": "solo",
|
| 5032 |
+
"family": "solo",
|
| 5033 |
+
"title": "Solo arm · stage 1: perspective · seed B",
|
| 5034 |
+
"status": "two seeds · one at a time",
|
| 5035 |
+
"rank": 103,
|
| 5036 |
+
"what": "one small event retold from each side: seen from a person, said to them, told about them. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5037 |
+
"score": "own stage text .554 → .047 · web text +0.0003",
|
| 5038 |
+
"probe_stage": "perspective",
|
| 5039 |
+
"mount": {
|
| 5040 |
+
"type": "anchor"
|
| 5041 |
+
},
|
| 5042 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5043 |
+
"template": null,
|
| 5044 |
+
"decode": {
|
| 5045 |
+
"temperature": 0.0,
|
| 5046 |
+
"top_p": 1.0,
|
| 5047 |
+
"rep": 1.0,
|
| 5048 |
+
"precision": "fp32",
|
| 5049 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5050 |
+
},
|
| 5051 |
+
"params": 13692960,
|
| 5052 |
+
"sites": 32
|
| 5053 |
+
},
|
| 5054 |
+
{
|
| 5055 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s2_concept_fresh_seed2_d20261005_step4000.safetensors",
|
| 5056 |
+
"step": 245674,
|
| 5057 |
+
"name": "solo s2_concept seed A",
|
| 5058 |
+
"group": "solo arms",
|
| 5059 |
+
"kind": "solo",
|
| 5060 |
+
"family": "solo",
|
| 5061 |
+
"title": "Solo arm · stage 2: concepts · seed A",
|
| 5062 |
+
"status": "two seeds · one at a time · packaged",
|
| 5063 |
+
"rank": 104,
|
| 5064 |
+
"what": "kinds, properties and differences: what a thing is a kind of, what its kind can do, how two things differ. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5065 |
+
"score": "own stage text .721 → .075 · web text +0.0001",
|
| 5066 |
+
"probe_stage": "concept",
|
| 5067 |
+
"mount": {
|
| 5068 |
+
"type": "anchor"
|
| 5069 |
+
},
|
| 5070 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5071 |
+
"template": null,
|
| 5072 |
+
"decode": {
|
| 5073 |
+
"temperature": 0.0,
|
| 5074 |
+
"top_p": 1.0,
|
| 5075 |
+
"rep": 1.0,
|
| 5076 |
+
"precision": "fp32",
|
| 5077 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5078 |
+
},
|
| 5079 |
+
"params": 13692960,
|
| 5080 |
+
"sites": 32
|
| 5081 |
+
},
|
| 5082 |
+
{
|
| 5083 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s2_concept_fresh_seed102_d20261006_step4000.safetensors",
|
| 5084 |
+
"step": 245674,
|
| 5085 |
+
"name": "solo s2_concept seed B",
|
| 5086 |
+
"group": "solo arms",
|
| 5087 |
+
"kind": "solo",
|
| 5088 |
+
"family": "solo",
|
| 5089 |
+
"title": "Solo arm · stage 2: concepts · seed B",
|
| 5090 |
+
"status": "two seeds · one at a time",
|
| 5091 |
+
"rank": 105,
|
| 5092 |
+
"what": "kinds, properties and differences: what a thing is a kind of, what its kind can do, how two things differ. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5093 |
+
"score": "own stage text .721 → .075 · web text +0.0000",
|
| 5094 |
+
"probe_stage": "concept",
|
| 5095 |
+
"mount": {
|
| 5096 |
+
"type": "anchor"
|
| 5097 |
+
},
|
| 5098 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5099 |
+
"template": null,
|
| 5100 |
+
"decode": {
|
| 5101 |
+
"temperature": 0.0,
|
| 5102 |
+
"top_p": 1.0,
|
| 5103 |
+
"rep": 1.0,
|
| 5104 |
+
"precision": "fp32",
|
| 5105 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5106 |
+
},
|
| 5107 |
+
"params": 13692960,
|
| 5108 |
+
"sites": 32
|
| 5109 |
+
},
|
| 5110 |
+
{
|
| 5111 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s3_rules_fresh_seed3_d20261005_step4000.safetensors",
|
| 5112 |
+
"step": 245674,
|
| 5113 |
+
"name": "solo s3_rules seed A",
|
| 5114 |
+
"group": "solo arms",
|
| 5115 |
+
"kind": "solo",
|
| 5116 |
+
"family": "solo",
|
| 5117 |
+
"title": "Solo arm · stage 3: rule chains · seed A",
|
| 5118 |
+
"status": "two seeds · one at a time · packaged",
|
| 5119 |
+
"rank": 106,
|
| 5120 |
+
"what": "if-then rules over made-up words, followed step by step to what follows. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5121 |
+
"score": "own stage text .930 → .180 · web text +0.0003",
|
| 5122 |
+
"probe_stage": "rules",
|
| 5123 |
+
"mount": {
|
| 5124 |
+
"type": "anchor"
|
| 5125 |
+
},
|
| 5126 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5127 |
+
"template": null,
|
| 5128 |
+
"decode": {
|
| 5129 |
+
"temperature": 0.0,
|
| 5130 |
+
"top_p": 1.0,
|
| 5131 |
+
"rep": 1.0,
|
| 5132 |
+
"precision": "fp32",
|
| 5133 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5134 |
+
},
|
| 5135 |
+
"params": 13692960,
|
| 5136 |
+
"sites": 32
|
| 5137 |
+
},
|
| 5138 |
+
{
|
| 5139 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s3_rules_fresh_seed103_d20261006_step4000.safetensors",
|
| 5140 |
+
"step": 245674,
|
| 5141 |
+
"name": "solo s3_rules seed B",
|
| 5142 |
+
"group": "solo arms",
|
| 5143 |
+
"kind": "solo",
|
| 5144 |
+
"family": "solo",
|
| 5145 |
+
"title": "Solo arm · stage 3: rule chains · seed B",
|
| 5146 |
+
"status": "two seeds · one at a time",
|
| 5147 |
+
"rank": 107,
|
| 5148 |
+
"what": "if-then rules over made-up words, followed step by step to what follows. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5149 |
+
"score": "own stage text .930 → .179 · web text +0.0005",
|
| 5150 |
+
"probe_stage": "rules",
|
| 5151 |
+
"mount": {
|
| 5152 |
+
"type": "anchor"
|
| 5153 |
+
},
|
| 5154 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5155 |
+
"template": null,
|
| 5156 |
+
"decode": {
|
| 5157 |
+
"temperature": 0.0,
|
| 5158 |
+
"top_p": 1.0,
|
| 5159 |
+
"rep": 1.0,
|
| 5160 |
+
"precision": "fp32",
|
| 5161 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5162 |
+
},
|
| 5163 |
+
"params": 13692960,
|
| 5164 |
+
"sites": 32
|
| 5165 |
+
},
|
| 5166 |
+
{
|
| 5167 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s4_arith_fresh_seed4_d20261005_step4000.safetensors",
|
| 5168 |
+
"step": 245674,
|
| 5169 |
+
"name": "solo s4_arith seed A",
|
| 5170 |
+
"group": "solo arms",
|
| 5171 |
+
"kind": "solo",
|
| 5172 |
+
"family": "solo",
|
| 5173 |
+
"title": "Solo arm · stage 4: arithmetic · seed A",
|
| 5174 |
+
"status": "two seeds · one at a time · packaged",
|
| 5175 |
+
"rank": 108,
|
| 5176 |
+
"what": "small arithmetic worked out in text. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5177 |
+
"score": "own stage text 1.234 → .267 · web text +0.0002",
|
| 5178 |
+
"probe_stage": "arith",
|
| 5179 |
+
"mount": {
|
| 5180 |
+
"type": "anchor"
|
| 5181 |
+
},
|
| 5182 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5183 |
+
"template": null,
|
| 5184 |
+
"decode": {
|
| 5185 |
+
"temperature": 0.0,
|
| 5186 |
+
"top_p": 1.0,
|
| 5187 |
+
"rep": 1.0,
|
| 5188 |
+
"precision": "fp32",
|
| 5189 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5190 |
+
},
|
| 5191 |
+
"params": 13692960,
|
| 5192 |
+
"sites": 32
|
| 5193 |
+
},
|
| 5194 |
+
{
|
| 5195 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s4_arith_fresh_seed104_d20261006_step4000.safetensors",
|
| 5196 |
+
"step": 245674,
|
| 5197 |
+
"name": "solo s4_arith seed B",
|
| 5198 |
+
"group": "solo arms",
|
| 5199 |
+
"kind": "solo",
|
| 5200 |
+
"family": "solo",
|
| 5201 |
+
"title": "Solo arm · stage 4: arithmetic · seed B",
|
| 5202 |
+
"status": "two seeds · one at a time",
|
| 5203 |
+
"rank": 109,
|
| 5204 |
+
"what": "small arithmetic worked out in text. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5205 |
+
"score": "own stage text 1.234 → .267 · web text +0.0003",
|
| 5206 |
+
"probe_stage": "arith",
|
| 5207 |
+
"mount": {
|
| 5208 |
+
"type": "anchor"
|
| 5209 |
+
},
|
| 5210 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5211 |
+
"template": null,
|
| 5212 |
+
"decode": {
|
| 5213 |
+
"temperature": 0.0,
|
| 5214 |
+
"top_p": 1.0,
|
| 5215 |
+
"rep": 1.0,
|
| 5216 |
+
"precision": "fp32",
|
| 5217 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5218 |
+
},
|
| 5219 |
+
"params": 13692960,
|
| 5220 |
+
"sites": 32
|
| 5221 |
+
},
|
| 5222 |
+
{
|
| 5223 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s5_causal_fresh_seed5_d20261005_step4000.safetensors",
|
| 5224 |
+
"step": 245674,
|
| 5225 |
+
"name": "solo s5_causal seed A",
|
| 5226 |
+
"group": "solo arms",
|
| 5227 |
+
"kind": "solo",
|
| 5228 |
+
"family": "solo",
|
| 5229 |
+
"title": "Solo arm · stage 5: cause and effect · seed A",
|
| 5230 |
+
"status": "two seeds · one at a time · packaged",
|
| 5231 |
+
"rank": 110,
|
| 5232 |
+
"what": "short cause-and-effect text: what happened and why. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5233 |
+
"score": "own stage text .660 → .043 · web text +0.0006",
|
| 5234 |
+
"probe_stage": "causal",
|
| 5235 |
+
"mount": {
|
| 5236 |
+
"type": "anchor"
|
| 5237 |
+
},
|
| 5238 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5239 |
+
"template": null,
|
| 5240 |
+
"decode": {
|
| 5241 |
+
"temperature": 0.0,
|
| 5242 |
+
"top_p": 1.0,
|
| 5243 |
+
"rep": 1.0,
|
| 5244 |
+
"precision": "fp32",
|
| 5245 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5246 |
+
},
|
| 5247 |
+
"params": 13692960,
|
| 5248 |
+
"sites": 32
|
| 5249 |
+
},
|
| 5250 |
+
{
|
| 5251 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s5_causal_fresh_seed105_d20261006_step4000.safetensors",
|
| 5252 |
+
"step": 245674,
|
| 5253 |
+
"name": "solo s5_causal seed B",
|
| 5254 |
+
"group": "solo arms",
|
| 5255 |
+
"kind": "solo",
|
| 5256 |
+
"family": "solo",
|
| 5257 |
+
"title": "Solo arm · stage 5: cause and effect · seed B",
|
| 5258 |
+
"status": "two seeds · one at a time",
|
| 5259 |
+
"rank": 111,
|
| 5260 |
+
"what": "short cause-and-effect text: what happened and why. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5261 |
+
"score": "own stage text .660 → .043 · web text +0.0004",
|
| 5262 |
+
"probe_stage": "causal",
|
| 5263 |
+
"mount": {
|
| 5264 |
+
"type": "anchor"
|
| 5265 |
+
},
|
| 5266 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5267 |
+
"template": null,
|
| 5268 |
+
"decode": {
|
| 5269 |
+
"temperature": 0.0,
|
| 5270 |
+
"top_p": 1.0,
|
| 5271 |
+
"rep": 1.0,
|
| 5272 |
+
"precision": "fp32",
|
| 5273 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5274 |
+
},
|
| 5275 |
+
"params": 13692960,
|
| 5276 |
+
"sites": 32
|
| 5277 |
+
},
|
| 5278 |
+
{
|
| 5279 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s6_tryfail_fresh_seed6_d20261005_step4000.safetensors",
|
| 5280 |
+
"step": 245674,
|
| 5281 |
+
"name": "solo s6_tryfail seed A",
|
| 5282 |
+
"group": "solo arms",
|
| 5283 |
+
"kind": "solo",
|
| 5284 |
+
"family": "solo",
|
| 5285 |
+
"title": "Solo arm · stage 6: try, fail, revise · seed A",
|
| 5286 |
+
"status": "two seeds · one at a time · packaged",
|
| 5287 |
+
"rank": 112,
|
| 5288 |
+
"what": "an attempt, its failure and the revised attempt. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5289 |
+
"score": "own stage text .673 → .057 · web text +0.0003",
|
| 5290 |
+
"probe_stage": "tryfail",
|
| 5291 |
+
"mount": {
|
| 5292 |
+
"type": "anchor"
|
| 5293 |
+
},
|
| 5294 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5295 |
+
"template": null,
|
| 5296 |
+
"decode": {
|
| 5297 |
+
"temperature": 0.0,
|
| 5298 |
+
"top_p": 1.0,
|
| 5299 |
+
"rep": 1.0,
|
| 5300 |
+
"precision": "fp32",
|
| 5301 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5302 |
+
},
|
| 5303 |
+
"params": 13692960,
|
| 5304 |
+
"sites": 32
|
| 5305 |
+
},
|
| 5306 |
+
{
|
| 5307 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s6_tryfail_fresh_seed106_d20261006_step4000.safetensors",
|
| 5308 |
+
"step": 245674,
|
| 5309 |
+
"name": "solo s6_tryfail seed B",
|
| 5310 |
+
"group": "solo arms",
|
| 5311 |
+
"kind": "solo",
|
| 5312 |
+
"family": "solo",
|
| 5313 |
+
"title": "Solo arm · stage 6: try, fail, revise · seed B",
|
| 5314 |
+
"status": "two seeds · one at a time",
|
| 5315 |
+
"rank": 113,
|
| 5316 |
+
"what": "an attempt, its failure and the revised attempt. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5317 |
+
"score": "own stage text .673 → .057 · web text +0.0006",
|
| 5318 |
+
"probe_stage": "tryfail",
|
| 5319 |
+
"mount": {
|
| 5320 |
+
"type": "anchor"
|
| 5321 |
+
},
|
| 5322 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5323 |
+
"template": null,
|
| 5324 |
+
"decode": {
|
| 5325 |
+
"temperature": 0.0,
|
| 5326 |
+
"top_p": 1.0,
|
| 5327 |
+
"rep": 1.0,
|
| 5328 |
+
"precision": "fp32",
|
| 5329 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5330 |
+
},
|
| 5331 |
+
"params": 13692960,
|
| 5332 |
+
"sites": 32
|
| 5333 |
+
},
|
| 5334 |
+
{
|
| 5335 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s7_mixed_fresh_seed7_d20261005_step4000.safetensors",
|
| 5336 |
+
"step": 245674,
|
| 5337 |
+
"name": "solo s7_mixed seed A",
|
| 5338 |
+
"group": "solo arms",
|
| 5339 |
+
"kind": "solo",
|
| 5340 |
+
"family": "solo",
|
| 5341 |
+
"title": "Solo arm · stage 7: the mixed stage · seed A",
|
| 5342 |
+
"status": "two seeds · one at a time · packaged",
|
| 5343 |
+
"rank": 114,
|
| 5344 |
+
"what": "the mixed stage's diet: the earlier stages' text beside ordinary prose. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5345 |
+
"score": "own stage text .783 → .715 · web text +0.0000",
|
| 5346 |
+
"probe_stage": "mixed",
|
| 5347 |
+
"mount": {
|
| 5348 |
+
"type": "anchor"
|
| 5349 |
+
},
|
| 5350 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5351 |
+
"template": null,
|
| 5352 |
+
"decode": {
|
| 5353 |
+
"temperature": 0.0,
|
| 5354 |
+
"top_p": 1.0,
|
| 5355 |
+
"rep": 1.0,
|
| 5356 |
+
"precision": "fp32",
|
| 5357 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5358 |
+
},
|
| 5359 |
+
"params": 13692960,
|
| 5360 |
+
"sites": 32
|
| 5361 |
+
},
|
| 5362 |
+
{
|
| 5363 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s7_mixed_fresh_seed107_d20261006_step4000.safetensors",
|
| 5364 |
+
"step": 245674,
|
| 5365 |
+
"name": "solo s7_mixed seed B",
|
| 5366 |
+
"group": "solo arms",
|
| 5367 |
+
"kind": "solo",
|
| 5368 |
+
"family": "solo",
|
| 5369 |
+
"title": "Solo arm · stage 7: the mixed stage · seed B",
|
| 5370 |
+
"status": "two seeds · one at a time",
|
| 5371 |
+
"rank": 115,
|
| 5372 |
+
"what": "the mixed stage's diet: the earlier stages' text beside ordinary prose. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5373 |
+
"score": "own stage text .783 → .717 · web text +0.0002",
|
| 5374 |
+
"probe_stage": "mixed",
|
| 5375 |
+
"mount": {
|
| 5376 |
+
"type": "anchor"
|
| 5377 |
+
},
|
| 5378 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5379 |
+
"template": null,
|
| 5380 |
+
"decode": {
|
| 5381 |
+
"temperature": 0.0,
|
| 5382 |
+
"top_p": 1.0,
|
| 5383 |
+
"rep": 1.0,
|
| 5384 |
+
"precision": "fp32",
|
| 5385 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5386 |
+
},
|
| 5387 |
+
"params": 13692960,
|
| 5388 |
+
"sites": 32
|
| 5389 |
+
},
|
| 5390 |
+
{
|
| 5391 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s8_register_fresh_seed8_d20261005_step4000.safetensors",
|
| 5392 |
+
"step": 245674,
|
| 5393 |
+
"name": "solo s8_register seed A",
|
| 5394 |
+
"group": "solo arms",
|
| 5395 |
+
"kind": "solo",
|
| 5396 |
+
"family": "solo",
|
| 5397 |
+
"title": "Solo arm · stage 8: register · seed A",
|
| 5398 |
+
"status": "two seeds · one at a time · packaged",
|
| 5399 |
+
"rank": 116,
|
| 5400 |
+
"what": "the same content in different registers of speech. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5401 |
+
"score": "own stage text .491 → .021 · web text +0.0003",
|
| 5402 |
+
"probe_stage": "register",
|
| 5403 |
+
"mount": {
|
| 5404 |
+
"type": "anchor"
|
| 5405 |
+
},
|
| 5406 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5407 |
+
"template": null,
|
| 5408 |
+
"decode": {
|
| 5409 |
+
"temperature": 0.0,
|
| 5410 |
+
"top_p": 1.0,
|
| 5411 |
+
"rep": 1.0,
|
| 5412 |
+
"precision": "fp32",
|
| 5413 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5414 |
+
},
|
| 5415 |
+
"params": 13692960,
|
| 5416 |
+
"sites": 32
|
| 5417 |
+
},
|
| 5418 |
+
{
|
| 5419 |
+
"path": "mini-beatrix-3/arm_refit/solo_4000/anchors/s8_register_fresh_seed108_d20261006_step4000.safetensors",
|
| 5420 |
+
"step": 245674,
|
| 5421 |
+
"name": "solo s8_register seed B",
|
| 5422 |
+
"group": "solo arms",
|
| 5423 |
+
"kind": "solo",
|
| 5424 |
+
"family": "solo",
|
| 5425 |
+
"title": "Solo arm · stage 8: register · seed B",
|
| 5426 |
+
"status": "two seeds · one at a time",
|
| 5427 |
+
"rank": 117,
|
| 5428 |
+
"what": "the same content in different registers of speech. Trained alone on the frozen final core for 4,000 steps, kept quiet on web text; mount one solo arm at a time.",
|
| 5429 |
+
"score": "own stage text .491 → .021 · web text +0.0002",
|
| 5430 |
+
"probe_stage": "register",
|
| 5431 |
+
"mount": {
|
| 5432 |
+
"type": "anchor"
|
| 5433 |
+
},
|
| 5434 |
+
"base_model_id": "alephllm/mini-beatrix-3@step245674",
|
| 5435 |
+
"template": null,
|
| 5436 |
+
"decode": {
|
| 5437 |
+
"temperature": 0.0,
|
| 5438 |
+
"top_p": 1.0,
|
| 5439 |
+
"rep": 1.0,
|
| 5440 |
+
"precision": "fp32",
|
| 5441 |
+
"why": "the solo arms were measured greedy in fp32"
|
| 5442 |
+
},
|
| 5443 |
+
"params": 13692960,
|
| 5444 |
+
"sites": 32
|
| 5445 |
+
}
|
| 5446 |
+
],
|
| 5447 |
+
"lookup": {
|
| 5448 |
+
"core": {
|
| 5449 |
+
"craft": "mini-beatrix-3",
|
| 5450 |
+
"step": 245674
|
| 5451 |
+
},
|
| 5452 |
+
"crafts": {
|
| 5453 |
+
"mini-beatrix-3-la2-6-12-20": {
|
| 5454 |
+
"order": 5,
|
| 5455 |
+
"short": "first training",
|
| 5456 |
+
"what": "the first training: 4,000 steps from the finished core on web text mixed with far-recall rows (a value planted behind text, asked for later)"
|
| 5457 |
+
},
|
| 5458 |
+
"mini-beatrix-3-la2-6-12-20-c249k": {
|
| 5459 |
+
"order": 4,
|
| 5460 |
+
"short": "continued",
|
| 5461 |
+
"what": "the first training continued 4,000 more steps on the same mix"
|
| 5462 |
+
},
|
| 5463 |
+
"mini-beatrix-3-la2-6-12-20-deep1k": {
|
| 5464 |
+
"order": 3,
|
| 5465 |
+
"short": "deep-mix pilot",
|
| 5466 |
+
"what": "the deep-mix pilot: 1,000 steps at Adam 1e-3 on recall rows laid out to fill the window exactly (one draw in four), distances to 3,600 bytes; the reads peaked at 254,000 and slid after it"
|
| 5467 |
+
},
|
| 5468 |
+
"mini-beatrix-3-la2-6-12-20-deep-ctrl": {
|
| 5469 |
+
"order": 2,
|
| 5470 |
+
"short": "deep mix, one layer (pair control)",
|
| 5471 |
+
"what": "the deep mix at Adam 3e-4 from the pilot's 254,000, one attention layer per site: the depth pair's control"
|
| 5472 |
+
},
|
| 5473 |
+
"mini-beatrix-3-la2-6-12-20-deep-d2": {
|
| 5474 |
+
"order": 1,
|
| 5475 |
+
"short": "deep mix, two layers (pair structure arm)",
|
| 5476 |
+
"what": "the deep mix at Adam 3e-4 from the pilot's 254,000, two attention layers per site (the second born at zero): the depth pair's structure arm"
|
| 5477 |
+
}
|
| 5478 |
+
},
|
| 5479 |
+
"bare": {
|
| 5480 |
+
"fetch_1024": 0.0,
|
| 5481 |
+
"fetch_2048": 0.0,
|
| 5482 |
+
"fetch_3400": 0.0,
|
| 5483 |
+
"trials": 128
|
| 5484 |
+
},
|
| 5485 |
+
"reads": {
|
| 5486 |
+
"mini-beatrix-3-la2-6-12-20": {
|
| 5487 |
+
"246000": {
|
| 5488 |
+
"fetch_1024": 0.0078125,
|
| 5489 |
+
"fetch_2048": 0.0,
|
| 5490 |
+
"fetch_3400": 0.0,
|
| 5491 |
+
"trials": 128,
|
| 5492 |
+
"instrument": "battery"
|
| 5493 |
+
},
|
| 5494 |
+
"247000": {
|
| 5495 |
+
"fetch_1024": 0.015625,
|
| 5496 |
+
"fetch_2048": 0.0078125,
|
| 5497 |
+
"fetch_3400": 0.0,
|
| 5498 |
+
"trials": 128,
|
| 5499 |
+
"instrument": "battery"
|
| 5500 |
+
},
|
| 5501 |
+
"248000": {
|
| 5502 |
+
"fetch_1024": 0.5,
|
| 5503 |
+
"fetch_2048": 0.1875,
|
| 5504 |
+
"fetch_3400": 0.015625,
|
| 5505 |
+
"trials": 128,
|
| 5506 |
+
"instrument": "battery"
|
| 5507 |
+
},
|
| 5508 |
+
"249000": {
|
| 5509 |
+
"fetch_1024": 0.6015625,
|
| 5510 |
+
"fetch_2048": 0.359375,
|
| 5511 |
+
"fetch_3400": 0.109375,
|
| 5512 |
+
"trials": 128,
|
| 5513 |
+
"instrument": "battery"
|
| 5514 |
+
},
|
| 5515 |
+
"249674": {
|
| 5516 |
+
"fetch_1024": 0.6171875,
|
| 5517 |
+
"fetch_2048": 0.3359375,
|
| 5518 |
+
"fetch_3400": 0.1171875,
|
| 5519 |
+
"trials": 128,
|
| 5520 |
+
"instrument": "battery"
|
| 5521 |
+
}
|
| 5522 |
+
},
|
| 5523 |
+
"mini-beatrix-3-la2-6-12-20-c249k": {
|
| 5524 |
+
"250000": {
|
| 5525 |
+
"fetch_1024": 0.625,
|
| 5526 |
+
"fetch_2048": 0.4140625,
|
| 5527 |
+
"fetch_3400": 0.125,
|
| 5528 |
+
"trials": 128,
|
| 5529 |
+
"instrument": "battery"
|
| 5530 |
+
},
|
| 5531 |
+
"251000": {
|
| 5532 |
+
"fetch_1024": 0.7265625,
|
| 5533 |
+
"fetch_2048": 0.5,
|
| 5534 |
+
"fetch_3400": 0.1640625,
|
| 5535 |
+
"trials": 128,
|
| 5536 |
+
"instrument": "battery"
|
| 5537 |
+
},
|
| 5538 |
+
"252000": {
|
| 5539 |
+
"fetch_1024": 0.8203125,
|
| 5540 |
+
"fetch_2048": 0.5390625,
|
| 5541 |
+
"fetch_3400": 0.203125,
|
| 5542 |
+
"trials": 128,
|
| 5543 |
+
"instrument": "battery"
|
| 5544 |
+
},
|
| 5545 |
+
"253000": {
|
| 5546 |
+
"fetch_1024": 0.734375,
|
| 5547 |
+
"fetch_2048": 0.4609375,
|
| 5548 |
+
"fetch_3400": 0.171875,
|
| 5549 |
+
"trials": 128,
|
| 5550 |
+
"instrument": "battery"
|
| 5551 |
+
},
|
| 5552 |
+
"253674": {
|
| 5553 |
+
"fetch_1024": 0.875,
|
| 5554 |
+
"fetch_2048": 0.59375,
|
| 5555 |
+
"fetch_3072": 0.3671875,
|
| 5556 |
+
"fetch_3400": 0.265625,
|
| 5557 |
+
"trials": 128,
|
| 5558 |
+
"instrument": "curve"
|
| 5559 |
+
}
|
| 5560 |
+
},
|
| 5561 |
+
"mini-beatrix-3-la2-6-12-20-deep1k": {
|
| 5562 |
+
"253750": {
|
| 5563 |
+
"fetch_1024": 0.9296875,
|
| 5564 |
+
"fetch_2048": 0.8671875,
|
| 5565 |
+
"fetch_3072": 0.6484375,
|
| 5566 |
+
"fetch_3400": 0.5703125,
|
| 5567 |
+
"trials": 128,
|
| 5568 |
+
"instrument": "curve"
|
| 5569 |
+
},
|
| 5570 |
+
"254000": {
|
| 5571 |
+
"fetch_1024": 0.9765625,
|
| 5572 |
+
"fetch_2048": 0.9375,
|
| 5573 |
+
"fetch_3072": 0.8515625,
|
| 5574 |
+
"fetch_3400": 0.8359375,
|
| 5575 |
+
"trials": 128,
|
| 5576 |
+
"instrument": "curve"
|
| 5577 |
+
},
|
| 5578 |
+
"254500": {
|
| 5579 |
+
"fetch_1024": 0.890625,
|
| 5580 |
+
"fetch_2048": 0.890625,
|
| 5581 |
+
"fetch_3072": 0.765625,
|
| 5582 |
+
"fetch_3400": 0.75,
|
| 5583 |
+
"trials": 128,
|
| 5584 |
+
"instrument": "curve"
|
| 5585 |
+
},
|
| 5586 |
+
"254674": {
|
| 5587 |
+
"fetch_1024": 0.8984375,
|
| 5588 |
+
"fetch_2048": 0.875,
|
| 5589 |
+
"fetch_3072": 0.703125,
|
| 5590 |
+
"fetch_3400": 0.6796875,
|
| 5591 |
+
"trials": 128,
|
| 5592 |
+
"instrument": "curve"
|
| 5593 |
+
}
|
| 5594 |
+
},
|
| 5595 |
+
"mini-beatrix-3-la2-6-12-20-deep-ctrl": {
|
| 5596 |
+
"255000": {
|
| 5597 |
+
"fetch_1024": 0.9609375,
|
| 5598 |
+
"fetch_2048": 0.9453125,
|
| 5599 |
+
"fetch_3072": 0.90625,
|
| 5600 |
+
"fetch_3400": 0.7734375,
|
| 5601 |
+
"trials": 128,
|
| 5602 |
+
"instrument": "curve"
|
| 5603 |
+
}
|
| 5604 |
+
}
|
| 5605 |
+
},
|
| 5606 |
+
"instrument": "the planted value's first byte, fetched from the given distance back (128 planted trials per gap; the dense curve where read, the byte battery otherwise)"
|
| 5607 |
+
}
|
| 5608 |
}
|
| 5609 |
},
|
| 5610 |
"skipped": [
|
|
|
|
| 5616 |
"btx-e003-2s-EG-rnn-s1.b2a4@step61422.recurrent.pt",
|
| 5617 |
"local file not on hub"
|
| 5618 |
]
|
| 5619 |
+
],
|
| 5620 |
+
"generated_v3": "2026-10-11 22:51 UTC"
|
| 5621 |
+
}
|
requirements.txt
CHANGED
|
@@ -4,4 +4,4 @@ safetensors>=0.4
|
|
| 4 |
huggingface_hub>=0.24
|
| 5 |
numpy
|
| 6 |
geolip-alephllm @ git+https://github.com/AbstractEyes/alephllm@c6fff9fa3a9423a18d522635d8f2c666093d64c6
|
| 7 |
-
amoe-lora @ git+https://github.com/AbstractEyes/amoe-lora@
|
|
|
|
| 4 |
huggingface_hub>=0.24
|
| 5 |
numpy
|
| 6 |
geolip-alephllm @ git+https://github.com/AbstractEyes/alephllm@c6fff9fa3a9423a18d522635d8f2c666093d64c6
|
| 7 |
+
amoe-lora @ git+https://github.com/AbstractEyes/amoe-lora@9b1942d0ea865c0119655eb8315e73a2027a7682
|