Text Generation
Transformers
PEFT
English
crn
cognitive-architecture
reasoning
adapter
gemma
gemma-4
CRN
cognitive-resonance-network
parameter-efficient
parameter-efficient-finetuning
hidden-state-correction
resonance-attention
episodic-memory
llm-adapter
tiny-model
efficient-inference
cpu-training
mac-m4
open-weights
experimental
research
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", device_map="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
| license: apache-2.0 | |
| tags: | |
| - cognitive-architecture | |
| - reasoning | |
| - adapter | |
| - gemma | |
| - gemma-4 | |
| - CRN | |
| - cognitive-resonance-network | |
| - parameter-efficient | |
| - parameter-efficient-finetuning | |
| - peft | |
| - hidden-state-correction | |
| - resonance-attention | |
| - episodic-memory | |
| - llm-adapter | |
| - tiny-model | |
| - efficient-inference | |
| - cpu-training | |
| - mac-m4 | |
| - open-weights | |
| - experimental | |
| - research | |
| base_model: | |
| - google/gemma-4-E2B | |
| - google/gemma-4 | |
| library_name: transformers | |
| library_version: "4.40.0" | |
| pipeline_tag: text-generation | |
| language: | |
| - en | |
| metrics: | |
| - perplexity | |
| - accuracy | |
| keywords: | |
| - Cognitive Resonance Network | |
| - parameter-efficient fine-tuning | |
| - hidden state correction | |
| - frozen LLM adapter | |
| - resonance attention | |
| - episodic memory LLM | |
| - tiny cortex for large language models | |
| - 6.7M parameter adapter | |
| - Gemma 4 E2B | |
| - CPU-only training | |
| - in-distribution perplexity reduction | |
| - interpretable adapter ablation | |
| - implicit goal reasoning research | |
| - efficient model specialization | |
| - lightweight reasoning module | |
| - Mac Mini M4 ML experiment | |
| - open weights LLM | |
| - novel attention architecture | |
| - low-rank skill composition | |
| - reflective self-correction | |
| datasets: | |
| - legacy-tokenizer | |
| - custom | |
| thumbnail: null | |
| authors: | |
| - eulogik | |
| repo: https://github.com/eulogik/prajna | |
| hf_repo: https://huggingface.co/eulogik/prajna | |
| <!-- Badges --> | |
| | [](https://huggingface.co/eulogik/prajna) [](https://www.apache.org/licenses/LICENSE-2.0) [-green)](https://huggingface.co/eulogik/prajna) [](https://huggingface.co/google/gemma-4-E2B) [](https://huggingface.co/eulogik/prajna) [-lightgrey)](https://huggingface.co/eulogik/prajna) [](https://huggingface.co/eulogik/prajna) [](https://github.com/eulogik/prajna) | | |
| |:--| | |
| <!-- SEO / discovery --> | |
| **Prajna CRN** by [@eulogik](https://huggingface.co/eulogik) Β· | |
| Repo: [github.com/eulogik/prajna](https://github.com/eulogik/prajna) Β· | |
| Model: [huggingface.co/eulogik/prajna](https://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 | |
| ```python | |
| 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-E2B` is downloaded automatically from HuggingFace on first | |
| > load (~10 GB). Set `HF_HOME` to 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](https://huggingface.co/eulogik) Β· | |
| [GitHub](https://github.com/eulogik/prajna) Β· | |
| [Model hub](https://huggingface.co/eulogik/prajna) | |
| **Cite / reference:** | |
| ```bibtex | |
| @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](https://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. | |