Instructions to use eulogik/prajna with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use eulogik/prajna with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="eulogik/prajna")# Load model directly from transformers import PrajnaStudentMultiLayer model = PrajnaStudentMultiLayer.from_pretrained("eulogik/prajna", dtype="auto") - PEFT
How to use eulogik/prajna with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use eulogik/prajna with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "eulogik/prajna" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "eulogik/prajna", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/eulogik/prajna
- SGLang
How to use eulogik/prajna with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "eulogik/prajna" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "eulogik/prajna", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "eulogik/prajna" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "eulogik/prajna", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use eulogik/prajna with Docker Model Runner:
docker model run hf.co/eulogik/prajna
Prajna CRN by @eulogik Β· Repo: github.com/eulogik/prajna Β· Model: huggingface.co/eulogik/prajna
π§ Prajna CRN β Cognitive Resonance Network adapter for Gemma 4 E2B
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.
What it does (honestly)
| 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.
Why the architecture is the innovation
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:
- Resonance Attention β frequency-modulated attention over hidden states using a learned spectral filter bank (interpretable "cognitive bands", top-k selected).
- Skill Composer β a library of low-rank composable skills (top-k selection).
- Reflective Loop β a latent-space self-correction operator.
- Episodic Memory β a small differentiable key-value memory with read/write gates and temporal decay, giving a persistent context channel without retraining the base.
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
- Base model is fully frozen (
no_grad); zero gradient flow into it. - Backbone-agnostic: operates on extracted hidden states.
- 0.3% trainable params; trains on CPU in ~22 h.
Files
| 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.
Quick start
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).
Training (summary)
| Stage | Steps | Loss |
|---|---|---|
| SFT | 2000 | 0.2262 |
| DPO | 500 | 1.9788 (chosen > rejected) |
Hardware: Mac Mini M4, 16 GB, CPU only.
Limitations & future work
- The released checkpoint is a domain specialist, not a general model. It overfits its training corpus and degrades out-of-distribution.
- No implicit-goal / common-sense reasoning is demonstrated (reworded car-wash probe: 0/8). The earlier "reasoning" framing was a keyword-match artifact in evaluation and has been retracted.
- Active research directions (not yet demonstrated):
- Make the correction generalize beyond the training domain.
- Validate reasoning transfer on reworded/held-out prompts.
- Scale injections and memory; explore larger bases.
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.
π Reference & author
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)}
}
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.
License
Weights: Apache 2.0. Loader (crn_components.py): Apache 2.0. Training code: private.
- Downloads last month
- 203
Model tree for eulogik/prajna
Base model
google/gemma-4-E2B