Skip to content

TensorFold 1.0.7

Choose a tag to compare

@ashhart ashhart released this 11 Oct 08:40
· 1484 commits to main since this release

TensorFold 1.0.7

  • Living Weights learns each fact into about ten new neurons inside the model's own shards, on Macs and on a GB10. Every MoE layer's shared expert gets a pocket of 64 extra neurons. A fact takes one at each of about ten layers, fired at the first row of the reply (a fact about you) or at the subject's last token where a question names it (a fact about someone or something), with outputs fitted through the model so the answers come back while near misses, free writing about the subject and other answers stay as they were. Nothing the model had is changed, no adapter is loaded, and any MLX loader reads the folder as a slightly wider model. A fact is kept only when held-out wordings bring it back and nothing else moved; otherwise it is taken out and leaves nothing behind. Documents are learned fact by fact: the model finds the facts, names the organisation on each, and keeps only those whose names, numbers and words the text holds (a list holding others is read again), then writes questions that name their subject (rewriting ones that ask for it), and leaves a question another fact answers to that fact. Builds of main from earlier on 11 October lacked this check and could learn the fact finder's own example facts from a document worded like it; teach such a folder again from its original copy. Three personal facts taught one after another each came back on both test questions on an M5 Ultra, an M3 Ultra and a GB10, with no leaks and no drift, live and after a plain restart. With thinking on, 4 of the 6 test wordings came back on a GB10. A six-fact handbook gave 3 to 6 of 6 answers across six runs. Without learned facts, replies are the same tokens as 1.0.6's and decode at the same speed on both backends; a folder with 21 facts decodes about 16% slower on a Mac. It builds on the CUDA learner and the take-out rule of #591, #599 and #632. Thanks to @ZackSample and @ThinkOffApp.
  • Living Weights learns about four times faster. A lesson's training passes hold up to 32 answers side by side, each answer's prompt runs once and later passes start after it, the neurons' input fit reads its rows in order, the backward passes of the routed experts and the scan run as tiles on both backends, and the CUDA trainer reads its weights directly (ready in about 3 s instead of 26). The learning rounds for "I like blue." take 52 s on an M3 Ultra (217 s before) and 47 s on a GB10 (200 s before). A whole fact, lesson writing included, takes about 1.5 to 2.5 minutes on an M5 Ultra or M3 Ultra and 2 to 3 minutes on a GB10, with the same recall. Packed passes equal one-at-a-time passes to the bit on CUDA; on Metal a packed pass with more rows takes the engine's prompt kernels, as long prompts do.
  • /slide draws what the model has learned in 3D: the facts as a graph around the model's 52 layers, each fact's neurons lit in its pocket, the shard files that hold them, and each lesson played live as it is written, read, fitted and checked. GET /v1/slide/graph adds each fact's neurons, round, loss and phase, and the model's layers, pockets and shards. The page loads three.js 0.169.0 from jsDelivr, pinned by an integrity hash, and falls back to the flat view (/slide?flat) without it.
  • Qwen3.8-27B on a Mac without tensor units (M1 to M4) drafts a lone request with DFlash2 again instead of text copied from its context, as 1.0.5 did, so on a fresh server greedy code decodes at 1.0.5's speed (150.7 against 1.0.5's 150.6 tok/s on an M3 Ultra, where 1.0.6 took one or two more rounds a reply), with the same tokens. That was 1.0.6's known issue. #578's shared rounds gave every stream copies, and a copied span lands less often than the drafter's tree. Requests that share a round still use copies, and TF_QWEN27_COPIES=1 turns them on for a lone request as before. On M5 Macs greedy requests are unchanged, and a lone sampled request now drafts trees too: on an M5 Max, sampled code 2% slower and sampled prose 3% faster, with the same tokens.

Behaviour changes:

  • --slide refuses a folder taught by 1.0.3 to 1.0.6, whose lessons sit in the shared experts that the pocket widens. Such a folder still serves without --slide.

Known issues:

  • Qwen3.8-27B on an M1 to M4 Mac: after drafted sampled requests on the same server, greedy code still trails 1.0.5 by about 3% (143.9 against 148.0 tok/s on an M3 Ultra; 1.0.6: 137.9), because the sampled requests' rounds feed the table of round times that greedy requests price their drafts with. Same tokens.
  • Living Weights with thinking on: on a GB10, 4 of 6 test wordings came back (one fact's two thinking wordings answered that the model has no memory of past conversations), against 6 of 6 with thinking off.
  • Long documents about one subject are still weak: 6 of 16 answers from a 21-fact handbook.
  • Facts learned from the same document can answer each other's questions: on a five-fact handbook part, 1 of 5 questions on a Mac and 2 of 5 on a GB10 got another fact's answer (the head of marketing named as the CFO). Facts taught one at a time showed no such leaks.
  • GLM-5.3-Flash on two Macs: once every free slot holds a kept prefix, an unrelated request can still land on the newest conversation's slot, because the choice counts kept prefixes rather than their age. 1.0.6's notes said 1.0.7 would pick the least recently used slot; that change is not in this release. One Mac's shared cache is not affected.
  • Qwen3.5-2B with a JSON schema: on an integer field it wants to write as a decimal, the 2B can keep adding digits until max_tokens (the grammar allows no decimal point there). Nemotron writes the same schema correctly.

Homebrew: brew upgrade tensorfold.