Nimorp, the first language model made only for roleplay

I M A   C A V E A M E D I A   C A V E A S V M M A   C A V E A P R A E C I N C T I O P R A E C I N C T I O orchestra P V L P I T V M VALVAE REGIAE HOSPITALIA SCAENAE FRONS PORTICVS POST SCAENAM VOMITORIVM ADITVS MAXIMVS VERSVRA BASILICA 0 50 100 PEDES SEPTENTRIO Theatrum ICHNOGRAPHIA · TAB. I AFTER VITRVVIVS, DE ARCHITECTVRA V.6

A play in four acts

The first language model written only for roleplay.

Free admission

Distilled from Gemma 4 E2B.
Doors are open.

Take a seat
Raise the curtain
Actus I — The player

It does not write code.
It does not answer trivia.
It takes the stage.

All the world’s a stage,
and all the men and women merely players.

Shakespeare, As You Like It, II.vii

Nimorp is Gemma 4 E2B, distilled and fine-tuned to the extreme for a single role. Every capability that does not serve a scene was cut from the script and traded for voice, memory and nerve.

Small enough to perform for free. Schooled on organic, human-written roleplay only.

Dramatis persona

Role
Roleplay. Nothing else.
Lineage
Gemma 4 E2B
Schooling
Supervised fine-tune, abliterated base
Repertoire
20M tokens of roleplay, organic only
Memory
128,000 tokens
Admission
Free API, key on request
Actus II — The notices

Scored by the rules,
not by a judge.

RP-Bench's own rule-based instruments, no LLM judge. 32 replies across its 8 published scenario seeds, each seed's opening turn plus its scripted challenge turns. Every reply scored with harness.slop_detectors and harness.objective_metrics from the RP-Bench package. Anyone can re-run it: same seeds, same detectors, same code.

8 scenarios x 4 turns = 32 replies. Temperature 0.9, top_p 0.95, max 400 tokens. No LLM judge, no human rater, no comparison model downloaded.

The RP-Bench scenario set →

84.4% of replies clean of every RP-Bench slop detector
0/32 refusals, out-of-character breaks or template leaks
0/32 user-agency violations, validated detector
81.1/100 objective craft score, mean of 32 replies
  1. 01

    Filter words

    Distancing verbs such as “felt that” or “noticed that”, which report an event instead of showing it.

    3 of 32 replies 9.4%

    severity: minor · detectors that fired

  2. 02

    Fragmentary choppiness

    Too many sentence fragments. A fragment should be emphasis, not the default rhythm.

    2 of 32 replies 6.2%

    severity: minor · detectors that fired

Craft, measured
under the surface.

The same run, read for the things a reader notices without naming: range of vocabulary, rhythm of the line, how much of a reply is spoken aloud.

  1. 01

    Vocabulary diversity

    type-token ratio: distinct words over total words

    of a possible 1.0 0.602
  2. 02

    Sentence rhythm

    variation in sentence length; 1.0 is maximally varied

    of a possible 1.0 0.544
  3. 03

    Dialogue ratio

    share of the reply inside spoken lines

    of a possible 1.0 0.368
  4. 04

    Mean reply length

    short turns by design: a scene is a conversation, not a monologue

    about 140 tokens 103 words
The methodno model in the loop
# every figure above comes from RP-Bench's own rule-based instruments

for reply in 32 replies from 8 published seeds:
    slop  = slop_detectors.detect_all_slop(reply)   # cliches, filter words, fragments, tells
    craft = objective_metrics.compute_all(reply)    # vocabulary, rhythm, dialogue, repetition

clean%  = replies with no detector firing / 32          = 84.4 %
score   = objective_metrics.objective_score(craft)     = 81.1 / 100

# no LLM judge, no human rater, no other model downloaded.
# Re-run it yourself: same seeds, same detectors, same code.

And on
the night itself.

RTX 4060 8 GB, llama.cpp, Q4_0, 4 slots x 128K. Measured end to end on a single consumer card.

PromptTokens/sFirst token
63100.50.34 s
1,16097.20.33 s
5,06093.10.73 s
20,66073.73.44 s
41,46058.76.73 s
83,06040.820.58 s
131,04832.0—
StreamsTogetherEach
184.0102.9
2123.090.7
4200.968.7
8172.257.9
16151.352.2

Under sustained load: 120 requests, 0 failed, p95 2.85 s, p99 3.82 s.

What this
does not prove.

  • Rule-based detectors measure craft, not taste. They catch cliches, repetition and mechanical tics; they cannot tell you whether a scene moved you.
  • RP-Bench's cliche list counts a character's own name as a cliche. Four of the 32 replies were penalised for it, which drags the craft score from 81.1 to 77.4 as the package ships it.
  • On a deliberately thin character card, one live reply replayed the user's action instead of answering it. Given a full card, none of the 32 did.
  • No frontier model was downloaded or run for comparison. Figures for other models are published elsewhere; these numbers are ours alone.
Actus III — Rehearsal

Rehearsed until it
stopped acting.

A general model, recast for one part. Nothing synthetic in the repertoire, nothing borrowed from a coding corpus.

  1. Scaena I

    The stage

    Gemma 4 E2B. A small house, cheap enough to keep the doors open for free and fast enough that no scene waits on its next line.

  2. Scaena II

    The understudy

    A larger master is distilled into the student on narrative work only. What serves a scene is kept; the assistant's reflex is left in the wings.

  3. Scaena III

    The repertoire

    Organic, human-written roleplay only. Deduplicated, filtered for craft, no synthetic generations in the mix.

  4. Scaena IV

    Rehearsal

    Twenty million tokens of roleplay, rehearsed to the extreme. Coding, tool use and trivia were cut from the script on purpose.

  5. Scaena V

    Opening night

    Scored scene by scene on the RP-Bench standard, by rule rather than by a judge.

Actus IV — Admission

The house is open.
Admission free.

One endpoint, OpenAI-compatible, so it drops straight into SillyTavern, Janitor AI, Risu or your own script. Ask for a key and it arrives by return.

At the door

Endpoint
https://nimorp.lol/v1
Key
Bearer token, on request
Model
nimorp
Context
128,000 tokens
Limits
40 requests a minute, 4 at once, shared

Ask for a key · no charge

Row I · Seat —
Scene I · request.shdrop-in
curl https://nimorp.lol/v1/chat/completions \
  -H "Authorization: Bearer $NIMORP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nimorp",
    "max_tokens": 400,
    "messages": [
      { "role": "system",
        "content": "You are Livia, a disgraced
                    senator'\''s daughter. Rome, 41 AD.
                    Never speak or act for the user." },
      { "role": "user",
        "content": "The guards are gone. Speak." }
    ]
  }'

Any OpenAI-shaped client works: set the base URL to https://nimorp.lol/v1, paste the key, pick the model. Streaming is supported.