Pragya ยท EXP3 Chat

A 28.5M-parameter chat model, fine-tuned from Pragya EXP2. For testing, not for production.

Params Base Context Intelligence License

โš ๏ธ Not a product

This is a small experimental chat model. It is not aligned, factually reliable, or safe. Its replies are short and often wrong.


Summary

Base model Pragya EXP2
Fine-tuning Supervised, single-turn chat, completion-only loss
Total parameters 28.5M
Context 1024 tokens
Vocabulary 12,288 byte-level BPE
Reply end marker *end*
Intelligence Index 14.21 (base EXP2: 12.41)

What changed from EXP2

EXP2 is a base model: it continues text but has no way to signal the end of a reply. EXP3 Chat is fine-tuned on single-turn conversations, with each reply closed by the marker *end*. The model learns the marker during fine-tuning, so replies can be cut at it.

The architecture, tokenizer and weights are unchanged, apart from the fine-tuning updates.


Fine-tuning

Data HuggingFaceTB/smol-smoltalk, first 20,000 examples (15,873 kept after length filter)
Format User: <question>\nAssistant: <reply> *end*
Loss Reply tokens only (prompt tokens masked)
Loss target Next-token, shifted by one position
Epochs 1
Learning rate 1e-4, cosine decay, 38 warm-up steps
Batch 1 sequence ร— 16 gradient accumulation
Max length 512 tokens
Final training loss about 1.5 (from 2.87 at step 50)
Precision FP32

Training used batch size 1 because the model rejects padded batches. Gradient checkpointing is off, as the model does not support it.


Results

BananaMind Base Bench 1.1 (official runner)

Overall Elo 976. Raw accuracy 174/350 (49.71%), weighted accuracy 44.89%, against 25% chance.

Category EXP2 base EXP3 Chat
Language completion 92% 88%
Commonsense 56% 56%
World knowledge 56% 62%
Context tracking 30% 42%
Quantitative 18% 20%
Logical reasoning 46% 46%
Code completion 56% 34%

Context tracking and world knowledge improved. Code completion dropped by 22 points, which fits chat data containing little code.

lm-evaluation-harness (0-shot, acc_norm)

Benchmark EXP2 base EXP3 Chat Chance
HellaSwag 29.76% 29.82% 25%
ARC-Easy 31.57% 38.85% 25%
ARC-Challenge 23.98% 23.46% 25%
PIQA 61.86% 63.06% 50%
ArithMark-3 38.30% 37.80% 25%

Intelligence Index: 14.21 (base 12.41), using the same formula as before:

N(s, c) = 100 ร— (s โˆ’ c) รท (100 โˆ’ c)
Index = (N(HellaSwag, 25) + N(ARC, 25) + N(PIQA, 50) + 0.65 ร— N(ArithMark-3, 25)) รท 3.65

The ARC-Easy gain drives most of the index change. Treat the index change as suggestive until the embedding check above is resolved.

AxiomicLabs reasoning benchmarks

Benchmark EXP2 acc / acc_norm EXP3 Chat acc / acc_norm Items
LogicMark 42.74% / 42.80% 43.88% / 44.18% 5,000
Tiny Theory of Mind 35.60% / 31.85% 36.25% / 32.80% 2,000

Report acc_norm for Tiny Theory of Mind, since its card specifies length-normalised scoring.


Quick Architecture

Architecture graph for RuVI-AI/Pragya-EXP3-CHAT. Open in hfviewer ## Quick start
pip install torch transformers safetensors xformers

The model loads through transformers with remote code. Generate one prompt at a time, since padded batches are not supported.

from transformers import AutoTokenizer, AutoModelForCausalLM

repo = "RuVI-AI/Pragya-EXP3-Chat"   # or a local folder
tok = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(repo, trust_remote_code=True).to("cuda:0").eval()

def chat(question, max_new_tokens=200):
    prompt = f"User: {question.strip()}\nAssistant:"
    enc = tok(prompt, return_tensors="pt").to("cuda:0")
    out = model.generate(
        **enc,
        max_new_tokens=max_new_tokens,
        do_sample=True,
        temperature=0.7,
        top_k=12,
        top_p=0.95,
        repetition_penalty=1.3,
        no_repeat_ngram_size=3,
        stop_strings=["*end*", "User:"],
        tokenizer=tok,
        pad_token_id=tok.pad_token_id,
    )
    text = tok.decode(out[0][enc["input_ids"].shape[1]:], skip_special_tokens=True)
    return text.split("*end*")[0].split("User:")[0].strip()

print(chat("What is Internet?"))

Replies end at *end* when the model writes it. If the model doesn't write the marker, generation stops at max_new_tokens and the reply is cut at the first User:.


Sampling

These settings gave fluent replies in testing:

temperature        0.7
top_k              12
top_p              0.95
repetition_penalty 1.3
no_repeat_ngram    3

Greedy decoding repeats phrases, so use sampling.


Capabilities and limitations

It can: answer simple single-turn questions briefly, and close most replies with *end*.

It cannot: reliably answer factual questions, handle multi-turn conversations, write useful code, use context longer than 1024 tokens, or handle non-English input.

  • Small scale. Replies are short and often factually wrong.
  • Single-turn training only. Multi-turn context is not trained.
  • No safety filtering. Replies can be biased, false or toxic.
  • EOS is not learned. The end-of-sequence token is still unused. The *end* marker is the stop signal.

License

Apache 2.0. The fine-tuning data (HuggingFaceTB/smol-smoltalk) and the base model's training data carry their own licences. Check upstream terms before redistributing derivatives.


Citation

@misc{pragya-exp3-chat,
  title  = {Pragya EXP3 Chat: a 28.5M chat model fine-tuned from Pragya EXP2},
  author = {Arush},
  year   = {2026},
  note   = {Experimental checkpoint, not for production use},
  howpublished = {\url{https://huggingface.co/RuVI-AI/Pragya-EXP3-Chat}}
}
Downloads last month
-
Safetensors
Model size
28.5M params
Tensor type
I64
ยท
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for RuVI-AI/Pragya-EXP3-CHAT

Finetuned
(1)
this model