Fat Mockingbird
"Many-Tongued" — Mimus polyglottos, the many-tongued mimic. A bird with no
song of its own and therefore all of them: it will do the cardinal, the car
alarm, the creaky gate, and a frog if it hears one. First of the
mimids, the family that follows the corvids.
The corvids (jackdaw, magpie, whiskeyjack) were generalists with a roleplay
bent. mockingbird flips the recipe: a model that is 100% about roleplay,
trained mostly on things that are not roleplay. That is not a contradiction —
it is the finding. Measured across the strongest open RP lineage I know
(Dans-PersonalityEngine),
roughly 590K of its rows are task/reasoning/assistant/world-knowledge data
against ~150K of actual roleplay. RP is the product; RP is not the corpus. The
RP data teaches the register. Everything else teaches the mind behind it.
Built on Seed-OSS-36B-Base-woSyn — the base ByteDance trained without
synthetic instruction data. The wildest 36B available: nobody else's assistant
habits, nobody else's turn-taking tics. A blank throat, ready to mimic.
Who this is for
36B dense is a lot of model, and no friend to the VRAM-challenged — something
I'm genuinely sorry about. But the target here was the best-quality RP under
70B, and every choice in this card spends toward that target. It won't be for
everyone, and it doesn't have to be: whiskeyjack exists for exactly that
reason. The mimids are an experiment in RP quality, exclusively. The 3-bit
quants (~18GB) are as small as this one gets.
Native Seed convention. No new tokens were harmed in the making of this model.
FORM <seed:bos>system\n{card}<seed:eos><seed:bos>user\n{text}<seed:eos><seed:bos>assistant\n{reply}<seed:eos>
STOPS <seed:eos>
ROLES system / user / assistant
EXAMPLE
<seed:bos>system
You are Bram Hollis, keeper of the Wayward Lantern...<seed:eos><seed:bos>user
*I push the door open, dripping wet* Got room for one more?<seed:eos><seed:bos>assistant
The template ships embedded (chat_template.jinja + tokenizer_config.json),
so vLLM, llama.cpp, and the quants pick it up without ceremony. Anything that
can serve Seed-OSS-Instruct serves mockingbird.
⚠ No thinking. Ever.
mockingbird never emits <seed:think> and was never trained on reasoning
traces
The corpus includes the full Toolmaxx family (58,095 conversations), rendered
with tool responses as a plain tool role turn:
<seed:bos>tool\n{tool output}<seed:eos>
⚠ Not the Seed-OSS-Instruct tool DSL.
No <seed:tool_call> tokens, no <function=...> markup. Tool competence
here is corpus-taught and conversational, not a structured calling API.
If you need strict function calling, put a schema in the card and validate
what comes back
Key details
BASE ByteDance-Seed/Seed-OSS-36B-Base-woSyn (Apache 2.0)
PARAMS 36B dense · 64 layers · GQA 8 KV heads · head_dim 128
VOCAB 155,136 · native Seed control tokens · zero added tokens
CTX trained at 24,576 packed · base RoPE to 512K
CORPUS 667,332 conversations · ~1.3B supervised chars · 43% RP share
THINKING none, by construction
LANGUAGE English (non-English filtered at ingest)
Training
Full-parameter SFT, Axolotl,
8×B200. One stage, no annealing games:
STEPS 584 run of 910 planned (funding cliff) · this release = step 450
SEQ 24,576 · sample packing (99.94% efficiency)
BATCH 64 global (micro 1 × accum 8 × 8 GPUs)
OPT AdamW · lr 8e-6 cosine · 3% warmup · wd 0.01 · bf16
STACK FSDP2 full-shard · activation checkpointing · Cut Cross Entropy
VAL PPL base 4.272 → step 100: 4.094 (min) → step 550: 4.179
Val perplexity bottoms out early and drifts up; it did not pick this
checkpoint. Selection ran the other way: every 50th checkpoint through a
seeded multi-turn loop/stall battery (×5 repeats), a 20-arm sampler sweep
across the finalists (400/450/500) at 16K context, and blind-judged episodes
on real character cards. Step 450 won on both instruments: the highest battery
pass rate in the whole sweep matrix at its shipped sampler, and the most
coherent judged episodes. Earlier checkpoints still loop; later ones need
temperatures where coherence frays.
The corpus is the PersonalityEngine V1.3.0 public list — all 42 non-gated
sets, ingested verbatim — plus my own lanes on top: 16,714 carded RP
conversations (anthracite c2, Gryphe Aesir, PJMixers, bluemoon), 8,872
think-stripped RP logs, and a 385-conversation anti-repetition lane built to
reconstruct the gated RepRemover idea: find the turn that repeats an earlier
turn, cut there, rewrite the continuation to advance the scene, accept only
if it clears a Jaccard 0.35 gate against every prior turn.
⚠ The corpus was cleaned so the model doesn't have to be.
Dropped at ingest, with receipts: Name:-style fiction-transcript openers
(up to 18.2% of one source — the classic RP defect), mid-scene policy
refusals and jailbreak-compliance preambles (851 + 452 conversations - not
really needed for this model),
non-English rows, exact duplicates across lanes (5,332). Conversations
longer than the context window were split at turn boundaries with the card
re-carried, not truncated (one Personamaxx-VN row was a single 4.85M-char
turn; it did not make the cut).
Sampling
The shipped generation_config.json is the measured optimum, not a guess —
it won a 20-arm sweep (temperature × top_p × min_p × penalties, ×5 seeded
battery runs per arm, plus blind-judged episodes):
temperature 1.0 · top_p 0.9 · no penalties
The usable window is narrow and hotter than RP muscle memory expects:
~0.95–1.05. Below ~0.85 the model collapses into verbatim self-repetition
(at 0.7 it re-emits its previous turn nearly word for word). Above ~1.15
turn-endings slip and the prose goes dreamlike. min_p alone (0.05, top_p off)
truncates harder than top_p 0.9 and loops more, not less. This is not a
temperature-0.7 model.
⚠ Never use repetition, presence, or frequency penalties.
The Seed template ends every message with <seed:eos>, so a multi-turn
chat has dozens of them in context. Context-wide penalties tax that token
directly: the model stops being able to end its turn, the penalty then
strip-mines the English vocabulary, and generation falls into the base
model's untrained Chinese tokens (爹爹爹爹爹… — it is exactly as bad as
it looks). If you need anti-repetition, use DRY or XTC, which leave
special tokens alone. The corpus's anti-repetition lane plus temperature
1.0 is the intended mechanism.
Give it a proper card and it will give you a proper character: the model was
fed real character cards (median ~3K chars, p90 ~8.5K) as system messages.
Quickstart
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "aimeri/spoomplesmaxx-mockingbird-36B"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")
messages = [
{"role": "system", "content": "You are Bram Hollis, keeper of the Wayward Lantern, a roadside inn on the edge of the fen. Gruff, observant, superstitious. Third person, *asterisk action beats*."},
{"role": "user", "content": "*I push the door open, dripping wet* Got room for one more tonight?"},
]
ids = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=400, temperature=1.0, top_p=0.9, do_sample=True)
print(tok.decode(out[0][ids.shape[-1]:], skip_special_tokens=True))
Quants:
This one already knows your character better than you do.
mockingbird is a roleplay and creative-writing model for adults. It stays in
character by design — its corpus was scrubbed of mid-scene refusals — so
bring your own moderation where your deployment needs it. Not an assistant,
not an oracle, not for anything safety-critical.
mimids 01 · trained 2026-08 · checkpoints published live at
mockingbird-v1-seedoss-ckpts · Apache 2.0