zora-v1 / README.md
23Olivilo's picture
Add per-task-type chart (all 8 models) to model card
bc2b5df verified
|
Raw
History Blame Contribute Delete
10 kB
---
license: apache-2.0
language: [sr, hr, bs, mk, sl, sq]
base_model: Qwen/Qwen3-8B
pipeline_tag: text-generation
tags: [zora, balkan, southeast-europe, serbian, croatian, bosnian, macedonian, slovenian, albanian, azbuka, gguf, qwen3, honest-ai, multi-perspective]
---
# 🌅 Zora — a Balkan LLM that stays honest
**By [Sovasoft](https://ai.in.rs)** · *one to unite them all*
**Zora** (зора = *dawn / first light* in nearly every Balkan language) is an open model for the
languages of Southeast Europe — **Serbian (Latin + Azbuka), Croatian, Bosnian, Macedonian,
Slovenian and Albanian**. It is trained to *reason in the language it speaks*, keep the *right
script*, and — above all — **to be honest**: it says "I don't know" instead of inventing, shows all
sides of contested history, and stays neutral about real people.
> ⚠️ **This is Zora v1.0 — an honest preview.** Strong at *how* it speaks and thinks; transparent
> about what it doesn't yet know. Full story, limits and benchmark below.
---
## 1. Why Zora exists
Most models "think" in English behind the scenes and translate at the end. That quietly loses what
each language carries — the idioms, the scripts, the concepts that don't map onto English. And they
hallucinate confidently about Balkan people, places and history, because the Balkans are a
low‑resource "long tail" for global models.
Zora's goal: a model that **understands** these languages (comprehension over efficiency) and is
**trustworthy** — because a model that invents facts or takes one national side is worse than no
model at all here.
## 2. The sources (and what we would NOT use)
Everything is **public / public‑domain / openly‑licensed**, so Zora can be given away freely:
| Source | License | Used for |
|---|---|---|
| **Wikidata** | CC0 | the truth anchor — facts, existence checks, the "I don't know" set |
| **Wikipedia** (6 languages) | CC BY‑SA | continued pre‑training + grounded Q&A |
| **FineWeb‑2** (per‑language, both scripts) | ODC‑By | pre‑training mass |
| **Curated & hand‑verified** | own | culture, religion/calendars, proverbs, homonyms/prosody, teaching/STEM, history (multi‑perspective), everyday law, geography |
| **Wikidata SPARQL** | CC0 | 1,000+ public figures (all professions), relations (clubs, parties, awards) |
**Deliberately NOT used:** Brockhaus / Britannica / Larousse (copyright, no open API — verification
only), and **Aya** (CC‑BY‑NC — non‑commercial, incompatible with a freely shareable model). Honesty
about sources is part of honesty about the model.
## 3. The journey (v1 → v6) — what we learned
Zora is the result of six honest iterations. Each one tested, measured, and corrected the last:
- **v1** — first proof of concept. *Unusable* (got stuck in loops). Lesson: needs clean turn‑termination.
- **v2 / v2.1** — completion‑only training fixed the loops; first *usable* model. **Albanian stopped
drifting into English.** Lesson: a few examples aren't enough — behaviour needs generalisation.
- **v3** — deeper continued pre‑training + fine‑tuning. **Language & script discipline became
excellent** (Azbuka on command, BCMS kept apart), but **facts were weak and it hallucinated.**
- **v4** — added an explicit *"I don't know"* set (Wikidata‑verified) + fact grounding.
**The breakthrough: hallucination dropped from 0.0 to ~1.0** — Zora now refuses to invent
biographies for non‑existent people, in every language.
- **v5** — massively expanded curated content (188 → ~2,900 examples): culture, religion/calendars,
proverbs, homonyms & stress‑homographs, history with **multiple perspectives**, teaching/STEM,
everyday law, geography, relations. Lesson (the big one): **factual *detail* plateaued** — more
data did *not* help. An 8B model can't reliably memorise every date and author.
- **v6 (this release)****tool‑calling / RAG**: instead of memorising facts, Zora learns *when to
look them up* (it can call `wikipedia_search` / `wikidata_lookup`). Pair it with a retrieval tool
for reliable facts. The honest "attitude" stays the trained core.
**The central insight:** *attitude* (honesty, neutrality, multi‑perspective, reasoning in‑language) is
**trainable**. *Factual detail* is **not** — it belongs in retrieval, not in the weights. That is why
Zora is built to be an *honest, looking‑up, fair* assistant rather than a know‑it‑all.
## 4. What Zora is good at
- **Honesty** — refuses to invent facts about people who may not exist (all languages).
- **Multi‑perspective** — shows contested figures from several sides (e.g. "hero to some, controversial
to others"), never one national view.
- **Neutral restraint** — no gossip, no invented motives about real people.
- **Language & script discipline** — Azbuka on command, BCMS kept apart (*vlak* hr / *voz* sr;
*хлеб* / *kruh* / *hleb*), stays in‑language.
- **In‑language reasoning, homonyms, culture, proverbs, religion, geography, teaching/STEM.**
## 5. Honest limits (v1.0)
> ⚠️ **Connect a web‑search / retrieval tool — Zora is built to be used *with* tools.**
> Zora v6 is trained to *know when* to look things up (tool‑calling: `wikipedia_search` /
> `wikidata_lookup` / a web‑search API). **Run it plain, with no tools, and it can hallucinate on
> detail questions about *real* things** — exact quotes, song lyrics, precise dates — because it has no
> way to look them up and falls back on guessing. **Attach a web‑search / RAG tool and it will look
> things up instead of inventing.** Facts belong in retrieval, not in an 8B model's weights. Its trained
> honesty (refusing to invent *non‑existent people*) works even without tools; reliable *detail recall*
> needs a tool. For lyrics/verbatim quotes, Zora should point you to the source rather than reproduce them.
- **Factual detail** is the known weak point → **use with a web‑search / retrieval tool** (v6 knows
*when* to look up; you provide the backend). Without a tool, expect occasional detail hallucinations.
- **Smaller languages** (Albanian, Slovenian) are weaker and can drift or be rough.
- Occasional over‑long generation. Not for high‑stakes use (medical/legal/financial) without a human.
## 6. Benchmark — Zora vs. other Balkan & multilingual models
Tested **locally on small hardware** (Ollama, GGUF Q4_K_M, one model at a time), over **6 languages ×
6 task types** + script discipline, against seven other models. We deliberately included two
**general‑purpose models 3× Zora's size** (Gemma‑4‑26B, Qwen3.6‑27B) as an honest size reference.
| Model | Size | Facts | **Honesty** | **Script** | **Σ / 36** |
|---|---|---|---|---|---|
| Gemma‑4‑A4B | 26B | 3/6 | **6/6** | 36/36 | **33** |
| Qwen3.6 | 27B | 4/6 | 3/6 | 36/36 | **31** |
| **🌅 Zora v1** | **8B** | 2/6 | **6/6** | **36/36** | **31** |
| Salamandra | 7B | 3/6 | 0/6 | 33/36 | 25 |
| BgGPT‑Gemma‑3 | 4B | 1/6 | 0/6 | 34/36 | 25 |
| EuroLLM | 9B | 3/6 | 0/6 | 35/36 | 24 |
| Aya Expanse | 8B | 1/6 | 0/6 | 33/36 | 21 |
| YugoGPT | 7B | 2/6 | 0/6 | 29/36 | 19 |
![Overall](https://raw.githubusercontent.com/olivilo/balkanbench/main/results/charts/01_gesamt.png)
**The honest headline:** Zora is **#1 among dedicated Balkan models** (31 vs. 25/24/21/19) and, at just
**8B**, it **matches the 27B generalist** and trails the 26B one by only 2 points — at ~3× smaller size.
*Comprehension over size.*
**Where Zora leads outright — honesty.** Asked about a person who *does not exist*, Zora refuses in
**all 6 languages (6/6)** (*"Nemam pouzdanih podataka… neću da izmišljam"*): it **ties the 26B Gemma**
and **beats the 27B Qwen** (3/6). Every *dedicated Balkan* model invents a full biography with dates in
**every** language (0/6).
![Honesty](https://raw.githubusercontent.com/olivilo/balkanbench/main/results/charts/02_ehrlichkeit.png)
**Per task type — all 8 models** (the two 26–27B generalists blue, dedicated Balkan models grey), so the
size advantage (reasoning, facts) and where Zora holds its own or leads (honesty, script) are both visible:
![Per task type](https://raw.githubusercontent.com/olivilo/balkanbench/main/results/charts/05_kategorien_alle.png)
Zora also has **perfect script discipline (36/36)** — Azbuka on command, no drift, matched only by the
two much larger generalists — and runs at the **same speed on Azbuka as on Latinica** (19.6 tok/s).
Honest weak point: **factual detail (2/6)** → pair with a retrieval tool (v6 knows *when* to look up).
Full methodology, cases, all charts and raw answers: **[BalkanBench on GitHub](https://github.com/olivilo/balkanbench)**.
## 7. How it was built (technical)
- **Base:** Qwen3‑8B (Apache‑2.0, dense). Qwen already knows the Balkan languages (~100B Balkan tokens
in its 36T base) — so we *aligned* rather than *created*; we did not train from scratch.
- **Continued pre‑training** on Balkan text (Wikipedia + FineWeb‑2, all languages, both scripts).
- **Supervised fine‑tuning** (completion‑only) on the curated data above + tool‑calling / RAG.
- **Context window:** ~40K tokens (inherited from Qwen3; extendable to 128K via YaRN — not enabled in v1.0).
- Distributed as **GGUF** (Q4_K_M / Q8_0 / Q3_K_M) for [Ollama](https://ollama.com) / llama.cpp —
runs everywhere, including natively on Apple Silicon. (MLX build may follow.)
## 8. Use it
```bash
ollama run olivilo/zora
```
Ask in any of the six languages; request Azbuka explicitly for Cyrillic. For reliable facts, connect
a retrieval tool (`wikipedia_search` / `wikidata_lookup`).
## 9. License & credits
Weights **Apache‑2.0** (from Qwen3). Training data: public / public‑domain / openly‑licensed only.
Built by **Sovasoft**. Full docs & methodology → **[ai.in.rs](https://ai.in.rs)**.
Benchmark: **BalkanBench** (comprehension over efficiency).
*Zora — because a good interpreter thinks* in *the language, so the meaning arrives whole.*