Downloads · 30 days
105
29% of all-time downloads
eulogik/prajna
prajna is a text generation model from eulogik. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
Prajna CRN by @eulogik · Repo: github.com/eulogik/prajna · Model: huggingface.co/eulogik/prajna
Downloads · 30 days
105
29% of all-time downloads
All-time downloads
360
Public
Repo size
25.7 MB
Likes
3
Public
Click a slice to open those files.
.pt25.7 MB · 99%
From the Hugging Face model README
Prajna CRN by @eulogik · Repo: github.com/eulogik/prajna · Model: huggingface.co/eulogik/prajna
Open weights. A 6.7M-parameter trainable "cortex" injected into the hidden states of a frozen Gemma 4 E2B. On its training-distribution text it cuts perplexity from 106.85 → 6.02 (≈18× lower) versus the frozen base — using only 0.3% of the base's parameters, trained CPU-only on a Mac Mini M4.
Prajna is not a standalone model and not a general reasoning upgrade. It is a parameter-efficient hidden-state correction network: a small module that reads the base model's intermediate hidden states and adds a gated correction back into the residual stream. The base stays frozen; only the CRN trains. This repo ships the trained weights and the minimal loader.
| Result | Value | Scope |
|---|---|---|
| In-distribution perplexity | 106.85 → 6.02 (≈18× lower) | held-out training corpus |
| Trainable params | 6,721,432 | 0.3% of the base |
| Out-of-distribution text (bpb) | worse (~3×) | generic text |
| MMLU / BoolQ / HellaSwag | at or below frozen base | standard benchmarks |
| Implicit-goal / car-wash (reworded) | 0/8 | no generalization |
Read this carefully: the ≈18× is a corpus-compression result, not general intelligence. On text outside its training domain the same adapter increases loss, and it does not perform implicit-goal reasoning (a reworded car-wash probe scored 0/8; the widely-circulated "76% of models fail" test is not passed). We publish this openly because the architecture is the interesting part, and the honest limitations are part of the experiment.
The CRN is a small module injected at intermediate hidden states (here: Gemma layers 7, 15, 23, 31) that computes a correction from four cooperating sub-modules:
A per-injection sigmoid gate (crn_mix, learned) controls correction strength.
Because corrections are additive and gated, each injection is ablatable — we
measured that disabling injection @layer 7 alone raises in-distribution ppl from 6.02
to 13.93, while @layer 31 barely matters. This makes the method interpretable in a
way LoRA/adapters are not.
Key properties
no_grad); zero gradient flow into it.| File | Purpose |
|---|---|
dpo_final.pt | ★ Trained CRN adapter (SFT + DPO), 6,721,432 params |
memory_dpo_final.json | Trained episodic-memory state (required at inference) |
crn_components.py | Minimal loader: PrajnaStudentMultiLayer + CRN modules |
Training pipeline and data generation are private; this is an open-weights release. The loader above is sufficient to run inference.
import torch
from crn_components import PrajnaStudentMultiLayer
student = PrajnaStudentMultiLayer(
device="cpu", inject_every=8, max_length=96,
num_frequencies=8, top_k=2, num_skills=32, skill_rank=4,
num_corrections=8, mem_size=256, mem_dim=64,
)
ckpt = torch.load("dpo_final.pt", map_location="cpu", weights_only=False)
student.load_state_dict(ckpt["crn"], strict=False)
student.load_memory("memory_dpo_final.json") # required
student.eval()
tok = student.tok
ids = tok("Explain why the sky is blue.\n", return_tensors="pt").input_ids
with torch.no_grad():
out = student._collect_hidden(ids)
logits, _ = student._apply_crn(out, training=False)
print(tok.decode(logits.argmax(-1).flatten()))
The base
google/gemma-4-E2Bis downloaded automatically from HuggingFace on first load (~10 GB). SetHF_HOMEto an external disk if space is tight. Note: the wrapped model runs on CPU; MPS is not supported for this loader (a Gemma-4 embedding allocation issue).
| Stage | Steps | Loss |
|---|---|---|
| SFT | 2000 | 0.2262 |
| DPO | 500 | 1.9788 (chosen > rejected) |
Hardware: Mac Mini M4, 16 GB, CPU only.
We are publishing this as a credible, reproducible experiment — a genuinely novel parameter-efficient architecture with an honest account of where it works and where it doesn't. Contributions and critiques welcome.
Author: @eulogik · GitHub · Model hub
Cite / reference:
@misc{prajna-crn-2026,
title = {Prajna: Cognitive Resonance Network — a parameter-efficient hidden-state
correction adapter for frozen LLMs},
author = {eulogik},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/eulogik/prajna}},
note = {Open-weights release (training code private)}
}
Follow-up research (different system): a follow-up study explores retrieval-free error correction on a frozen base (CRN v2). Paper: arXiv:2609.16145. Note this paper studies a different system from the model on this page.
If you build on Prajna or reproduce the in-distribution perplexity result, a link back to huggingface.co/eulogik/prajna is appreciated. Feedback and collaborations welcome via the repo.
Weights: Apache 2.0. Loader (crn_components.py): Apache 2.0. Training code: private.