In developmentMoroLM-56M is a research base model, not a chatbot. Things here change often.See what changed
MoroLM

A small language model learning Moroccan Darija.

MoroLM is built from scratch: its own tokenizer, model and training code. It handles Arabic script, Arabizi, French and English, and it's designed to run on your own hardware.

It's early. The current model, v0.6, is a raw base model with 56.6M parameters. It can write recognizable Darija, but it isn't a chatbot and shouldn't be trusted for facts.

MoroLM-56M v0.6 · observed behaviorbase model

prompt

Hello, my name is

what it does

Grammatical English structure, but it falls into repeating the same idea.

EnglishRepetitive
Summarized from the project's evaluation notes, not live output. Full evaluation
56,607,232parameters
24,000token vocabulary
12,500optimizer updates
~102.4Mtoken-position exposures

Where it stands

Some parts work, some are only partly done and some don't exist yet. This is the honest version.

Custom tokenizerWorking24k SentencePiece Unigram, frozen.
56M architectureWorkingLlama-like decoder with GQA, RoPE, RMSNorm and SwiGLU.
Correct causal objectiveVerifiedAlignment smoke test plus a 500-step memorization proof.
Clean base modelv0.612,500 updates from random weights.
Held-out evaluationPartialFixed and external sets exist. A natural Darija suite is next.
GGUF runtimePipeline provenParity work exists. The v0.6 export is a future release step.
Instruction modelNot yetEarlier SFT probes predate the clean base lineage.
Production appFutureGo + llama.cpp + SQLite + streaming web UI is the target.

The pipeline

MoroLM is a full language-model pipeline, not a wrapper around a hosted model. Here is how far each stage has come.

Source auditlicense + provenance
Cleaningdedupe + quarantine
Tokenizer24k frozen Unigram
Packing512-token blocks
Pretrainingnext-token LM
Evaluationfixed + external
DonePartly doneNot started

How well it's learning

Validation loss on the fixed set fell from 7.25 to 5.22 and is flattening. A perplexity of 185 is a long way from fluent, which matches what the generations show.

5.05.56.06.57.07.50k2k5k7k10k12kUpdate 500: loss 7.2534Update 1,000: loss 6.7544Update 1,500: loss 6.4553Update 2,500: loss 6.0883Update 3,500: loss 5.8417Update 10,000: loss 5.2623Update 11,000: loss 5.2406Update 12,500: loss 5.22397.255.22 · perplexity 185.65optimizer updates

Validation loss across the v0.6 run. Losses from v0.1 to v0.5 aren't comparable, because they used the faulty objective.

Why the numbers look rough

The model saw about 102M token positions, which is one pass over a corpus of roughly 101M tokens. That's small for a 56.6M-parameter model that covers four languages and scripts.

Greedy decoding exposes repetition loops. Sampling with temperature 0.8, top-k 50 and top-p 0.9 shows a richer distribution. That doesn't make it smarter.

Read the evaluation

The bug that reset everything

Earlier checkpoints looked better by loss but still generated badly. An audit found the labels were shifted twice, once in the dataset and again in the model, so the model learned to predict two tokens ahead. v0.6 starts over from random weights with the fix.

Before: two tokens ahead

dataset: x = A B C D
dataset: y = B C D E
model shift: logits A B C vs labels C D E

A → C   B → D   C → E  ✗

After: one token ahead

dataset: x = A B C D
dataset: y = A B C D
model shift: logits A B C vs labels B C D

A → B   B → C   C → D  ✓

Read the full training history

What it can't do yet

  • Follow instructions or chat. It has no instruction tuning.
  • Give reliable facts. It hallucinates entities and answers.
  • Stay on topic from a short prompt.
  • Match its Arabic-script Darija in Latin Darija.
  • Be used for legal, medical or financial advice, or customer support.

Full limitations in the model card

What's next

  1. Natural Darija holdoutPrompts that don't look like locality or article templates.
  2. Data auditCut repeated template families and suspicious synthetic data.
  3. Base checkpoint decisionMore clean pretraining, or freeze v0.6 as the tuning parent.
  4. Instruction tuningA Darija-first assistant dataset with system, user and assistant turns.
  5. Evaluation harnessScore fluency, relevance, facts, code-switching and instruction-following separately.
  6. Verified exportGGUF builds with local latency benchmarks.

See the roadmap

Why build it

Darija is spoken every day across Morocco but is underrepresented in language-model tools, especially when Arabic and Latin scripts mix. MoroLM asks whether a compact model that runs locally can become useful for Moroccan institutions, education and private on-premise applications.

↑ ↓ to move · Enter to open · Esc to close