Overview #
Promotheus is a weak recursive self-improvement experiment. Qwen3-4B proposes a change, researches it, trains a separate LoRA adapter, and measures the result. A stronger adapter becomes the parent for the next round.
The base model stays frozen. The loop changes adapters, data, and training recipes under a fixed controller and a locked benchmark.
The loop #
flowchart TD
A[Qwen3-4B plus current parent] --> B[Propose mutation and research]
B --> C[SearchXNG and Chrome CDP]
C --> D[Create data or training branch]
D --> E[Train Unsloth QLoRA adapter]
E --> F[Screen and evaluate]
F --> G[Locked MATH-100]
G --> H{Promote?}
H -->|Yes| I[New parent]
H -->|No| J[Keep failure evidence]
I --> B
J --> B
What exists #
- A locked MATH-100 benchmark: 100 Level-5 problems from the locked MATH-500 pool, with a recorded manifest and digest.
- A disjoint 300-problem DEV set and a 64-problem screen set.
- Verified train and mutation data, separate LoRA branches, lineage records, evaluation JSON, and model/web-research logs.
- An Unsloth QLoRA path for
Qwen/Qwen3-4B; the base remains frozen. - A localhost dashboard showing benchmark history, mutation branches, lineage, live logs, CPU, and GPU telemetry.
Results #
The frozen Hugging Face Qwen3-4B baseline scored 47/100 on MATH-100 under
the corrected math-verify-v1 grader. The original run was recorded as
38/100 by an older parser; the saved evaluations were regraded without new
model inference.
| Candidate | MATH-100 | Outcome |
|---|---|---|
| Frozen Qwen3-4B | 47/100 | Reference parent |
gen08-easy-data-mutation |
49/100 | Current promoted parent |
gen21-hard-data-mutation |
45/100 | Rejected |
gen22-hard-data-mutation-2 |
34/64 screen | DEV timed out before MATH-100 |
The current corrected comparison is 47/100 to 49/100, a gain of two percentage points. The later hard-data branches did not beat that parent: Gen21 scored 45/100, while Gen22 reached 34/64 on the screen but did not complete DEV and never reached the locked MATH-100 evaluation. These results are not evidence of a general ability jump.
How the winning mutation was found #
Qwen received DEV-only outcomes, failed examples, and a catalog of executable
training levers. It searched GitHub, arXiv, Hugging Face, and general web
sources for evidence about LoRA rank and math fine-tuning. The evidence was
indirect, so it proposed a controlled test: set lora_r to 8 while leaving the
data and solution instruction unchanged.
The controller trained and screened that branch, then tested it on MATH-100. The result was 49/100 under the corrected grader. The logs record the searches, reasoning, mutation specification, adapter, data hash, failed examples, and evaluation, so the model’s work can be inspected rather than inferred from a score alone.
Why this is weak RSI #
The model proposes and evaluates changes to its own training state, but the human-defined controller still fixes the base model, benchmark, action space, verification rules, and promotion gate. This is a bounded RSI loop implemented as autoresearch over QLoRA adapters, not autonomous self-rewriting.
Current status #
The current promoted parent is gen08-easy-data-mutation at 49/100. A
subsequent three-hour campaign attempted Gen21 and Gen22, but neither replaced
it. Gen21 completed at 45/100; Gen22 completed screening at 34/64 but timed
out during its 300-problem DEV evaluation. The controller is currently
inactive, and all prior adapters, logs, and evaluation files are preserved.
The most recent campaign ran for approximately 3 hours, from 2026-07-25 20:49 to 23:49 UTC.
Tools #
Python, PyTorch, Transformers, Datasets, Accelerate, PEFT, TRL, Unsloth,
SymPy, math-verify, Qwen3-4B, Ollama, SearchXNG, Chrome CDP, and a local
resource-monitoring dashboard.