加载中…
加载中…
Recipe and data: GEHIRNS/seele · Website: gehirns.pages.dev
seele-1.0-3.3B is the decision model Jeffan-4B-2010 with a quarter of its layers removed and the rest stored at 4.4 bits per weight. At an 8K context it keeps 98% of its parent's benchmark score in 56% of the GPU memory and answers 1.4× faster, with no training.
A decision model does not write text. It reads a state (a document, a conversation, a list of tools) and a multiple-choice question about it, and returns a probability for every option from one forward pass. seele-1.0-3.3B is derived from tattrongvu/Jeffan-4B-2010 (revision 937a008), which is built on Qwen/Qwen3.5-4B. It takes the same prompts and gives the same kind of answer. The changes are two:
The file is 1.70 GiB and runs in stock llama.cpp.
Capability density is ρ = −log₂(1 − score) / GiB: how many times the benchmark error rate is halved per gibibyte of GPU memory.
The trade-off: the parent at Q8_0 scores 1.04 points higher at 8K but needs 2.52 GiB more GPU memory, and it is 1.4× slower.
data/per-benchmark-8k.csv.Both models ran the public suite of the Jev Decision Index, version 0.3: 37 benchmarks in five areas, 140,178 requests.
decide.py does.Scores are chance-corrected, × 100. The small numbers under seele-1.0-3.3B compare it with the parent at Q8_0, measured on the same setup. The BF16 column is the parent's own model card, as reported (the authors' transformers engine at a 65,536-token context), not run by us. The Jev 1.14 column is TypeSafe's hosted decision model as the index reports it (snapshot of 2026-10-22), also not run by us. Its size and memory are not published, so it has no efficiency numbers.
| Baselines | Ours | |||
|---|---|---|---|---|
| Benchmark | Jev 1.14 hosted API, reported by the index | Jeffan-4B-2010 BF16 model card, reported | Jeffan-4B-2010 Q8_0 5.75 GiB at 8K | seele-1.0-3.3B 3.22 GiB at 8K |
| Efficiency at 8K context | ||||
| GPU memory (GiB) | — | — | 5.745 | 3.223 1.8× less |
| Public index (37 benchmarks) | 60.70 | 64.85 | 64.70 | 63.66 98% |
| Full index public + private tests, as the index reports it | 60.24 | 52.21 | — | — not run |
| Capability density | — | — | 0.261 | 0.453 1.7× |
| Decisions per second (one A16) | — | — | 4.7 | 6.5 1.4× |
| Latency p50 / p95 (ms) | — | — | 212 / 404 | 154 / 295 |
| Public index by context | ||||
| 1K 111,941 requests fit | — | — | 41.12 | 40.14 98% |
| 2K 127,766 requests fit | — | — | 57.02 | 55.99 98% |
| 4K 137,550 requests fit | — | — | 59.20 | 58.19 98% |
| 8K 140,147 requests fit | — | — | 64.70 | 63.66 98% |
| GPU memory by context (GiB) | ||||
| 1K | — | — | 4.391 | 1.897 2.3× less |
| 2K | — | — | 4.573 | 2.075 2.2× less |
| 4K | — | — | 4.948 | 2.442 2.0× less |
| 8K | — | — | 5.745 | 3.223 1.8× less |
| Capability density by context | ||||
| 1K | — | — | 0.174 | 0.390 2.2× |
| 2K | — | — | 0.266 | 0.571 2.1× |
| 4K | — | — | 0.261 | 0.515 2.0× |
| 8K | — | — | 0.261 | 0.453 1.7× |
| Areas at 8K context | ||||
| Knowledge | 57.1 | 49.5 | 49.40 | 46.93 |
| Language | 61.2 | 69.8 | 69.70 | 68.69 |
| Retrieval | 63.5 | 62.8 | 62.53 | 62.43 |
| Tools | 73.8 | 87.4 | 87.21 | 87.27 |
| Arts | 39.2 | 54.6 | 54.53 | 53.19 |
qwen35.attention.causal = false, so llama.cpp reads the prompt bidirectionally, as the parent requires.| Tensor group | Type | Share of parameters | bits/weight |
|---|---|---|---|
| FFN gate, up, down (all 24 layers) | IQ4_XS | 51.4% | 4.25 |
DeltaNet input projection attn_qkv (17) | Q4_K | 10.8% | 4.50 |
Gated-attention output gate attn_gate (17 DeltaNet layers) | Q4_K | 5.4% | 4.50 |
DeltaNet output projection ssm_out (17) | Q4_K | 5.4% | 4.50 |
| Full-attention q, k, output, and v in 3 of 7 layers | Q4_K | 7.4% | 4.50 |
| Full-attention v in 4 of 7 layers | Q6_K | 0.3% | 6.56 |
| Token embedding = tied output head | Q4_K | 19.2% | 4.50 |
DeltaNet gates ssm_alpha, ssm_beta | Q4_K | <0.1% | 4.50 |
| Norms, convolution, A, Δt bias | F32 | <0.1% | 32 |
| Layers 20, 21, 23–26, 28, 29 (7 DeltaNet, 1 full attention) | removed | −0.90B 21.4% of the parent | — |
| Use | Data | Licence |
|---|---|---|
| Choosing the layers (KL measurements only) | 300 ANLI dev requests and 70 MMLU-Pro validation requests | CC BY-NC 4.0; MIT |
| Importance matrix | SNLI and MultiNLI training prompts; MMLU validation (cais/mmlu) | CC BY-SA 4.0; OANC / CC BY-SA 3.0 / CC BY 3.0; MIT |
No test item from the suite was used. The ANLI and MMLU-Pro calibration requests only ranked layers, and none of their text is in the file.
llama.cpp (tested with b11550):
llama-server -m seele-1.0-3.3B.gguf -c 8192 -b 8192 -ub 8192 --parallel 1 --ctx-checkpoints 0 -ngl 99 --port 8080
Because attention is bidirectional, llama.cpp must evaluate each prompt in one piece:
-b and -ub at least as large as the longest prompt. The simplest is to set them equal to -c.--ctx-checkpoints 0. Checkpoints of the recurrent state split the prompt, and the answers change.--override-kv qwen35.attention.causal=bool:false.Then ask with decide.py. It needs pip install transformers httpx and downloads only the parent's tokenizer, no weights. It builds the parent's prompt token for token and reads the probabilities of the option codes:
from decide import decide
print(decide("Ticket #1042: the parcel arrived with the screen cracked; the customer asks for a replacement.",
"Which team should handle this ticket?", ["Billing", "Shipping damage claims", "Technical support"]))
# {'Billing': 0.0046, 'Shipping damage claims': 0.9746, 'Technical support': 0.0208}
On 100 benchmark questions, decide.py returned exactly the probabilities of the evaluation engine (largest difference 0). The parent's card gives 0.9621 for the same example in BF16.
Chat front ends and Ollama are not supported. The model is meant to be read through its option probabilities, not sampled.
llama-quantize call), the importance matrix, and the data behind every table and figure.provenance/.Apache 2.0, inherited from tattrongvu/Jeffan-4B-2010 and Qwen/Qwen3.5-4B.
LICENSE holds the licence text.NOTICE states what was changed and from what.SHA256SUMS lists the checksums of every file.