Instructions to use schneewolflabs/Compactor-Qwen3.5-4B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use schneewolflabs/Compactor-Qwen3.5-4B with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Lazarus-Ai/ReAligned-Qwen3.5-4B") model = PeftModel.from_pretrained(base_model, "schneewolflabs/Compactor-Qwen3.5-4B") - Notebooks
- Google Colab
- Kaggle
Compactor-Qwen3.5-4B
A context-compaction summariser for egirl: given a run of agentic conversation about to be dropped, write the summary that lets the agent continue.
Meant to run as the auxiliary model β the operator keeps its slot and its context, and the summary is produced by something small, deterministic, and trained for it.
The failure it fixes
egirl compacts by dropping middle messages and replacing them with a summary. When that summary loses the task, the agent does not get confused β it invents a new task:
Interior compaction: dropped 19 middle messages, kept head + 0 tail groups
Generated summary (396 chars) from 19 messages
Sixteen web searches of real research compressed to 396 characters, after which the agent answered a question about agent-harness architecture with "Fresh project scaffolded at ~/projects/fresh_project." The request was gone from its context.
So the objective is not fluency. It is preservation: the task, the findings, the state.
Measured
45 held-out compaction windows, from transcripts that contributed no training data. Deterministic checks, no judge:
| base | + Compactor | |
|---|---|---|
has a Task: line |
0/45 (0%) | 45/45 (100%) |
| task overlap (word F1 vs reference) | 0.000 | 0.509 |
| fact recall (paths, identifiers, numbers, errors) | 0.157 | 0.661 |
| compression | 0.043 | 0.129 |
| mean output | 884 chars | 2,689 chars |
Reference summaries (GPT-5) compress to ~0.12Γ. The base compresses to 0.043Γ β it is not summarising, it is discarding: 84% of the distinctive facts are gone, and it never states the task at all.
Fact recall is the number to read. A summary can be fluent, plausible, correctly shaped, and still have the specifics sanded off β which is what a small model does by default, and what makes the agent lose the thread three turns later.
Use
model = AutoModelForImageTextToText.from_pretrained(
"Lazarus-Ai/ReAligned-Qwen3.5-4B", dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(model, "schneewolflabs/Compactor-Qwen3.5-4B")
Render prompts with enable_thinking=False β training used the pre-closed think block, and the
model answers directly rather than deliberating. Serving with thinking open puts it in a state it
never saw.
In egirl, point [local.auxiliary] at a server running this and compaction routes to it
automatically.
Training
| base | Lazarus-Ai/ReAligned-Qwen3.5-4B |
| method | SFT, LoRA r=64 Ξ±=128 dropout 0.05 |
| data | egirl-compaction-SFT β 1,059 train / 45 val |
| tokens | 9.34M |
| schedule | 1 epoch, 133 steps, lr 1e-4 cosine |
| sequence | 16,384 β an 8192 cap would have dropped 55% of rows |
| hardware | one RTX A6000, 11h44m |
Train loss 0.738 β 0.584; held-out 0.754 β 0.561, below train at every checkpoint. No memorisation, despite r=64 on 1,059 samples β which the transcript-level split makes a meaningful statement rather than an artefact.
This architecture is expensive to train. 265 s/step at 16k sequence, against 15.7 s/step for a same-size Qwen3-VL under identical batch settings β the 24 linear-attention layers have no fused kernel in transformers 5.3.0 and run a sequential scan whose cost grows with sequence length. Inference is cheap; training is not.
Limits
- One epoch, one checkpoint. No epoch-2 comparison, which has mattered elsewhere in this family: a sibling model won overall at epoch 2 while losing a specific behaviour it had at epoch 1.
- Targets are one model's judgement. GPT-5 decided what mattered in each window. Where it dropped something, this learned to drop it.
- Task overlap is 0.509, not 0.9. The task line is always present and usually about the right thing; it is not word-for-word the reference. Treat it as "states the task" rather than "states it identically".
- One operator's transcripts, 120 conversations of agentic coding. Other domains are untested.
- Downloads last month
- -