Changelog¶
All notable changes to the Olaverse SDK are documented here.
v0.1.5 โ Current¶
Released: 2026-07-16
New Features¶
25-language identification (LIDLite25, LIDNeural25)¶
Extends language detection well beyond the original 5 Nigerian languages to 25 languages spanning Africa, Europe, and Asia. Each comes in "passages" (long-form) and "questions" (short-form) variants.
from olaverse import LIDLite25, LIDNeural25
lite = LIDLite25(variant="questions") # fastText, CPU-only
lite.predict("What causes ocean tides?") # โ 'eng'
neural = LIDNeural25(variant="questions") # XLM-RoBERTa
neural.load()
neural.predict_proba("What causes ocean tides?")
LIDNeural5_1 โ compact Nigerian-only classifier¶
A ~31M parameter classifier built on the new mist-encoder-base-ng encoder, covering Hausa/Yoruba/Igbo/Nigerian Pidgin with no English fallback class.
from olaverse import LIDNeural5_1
detector = LIDNeural5_1()
detector.predict("Ina kwana?") # โ 'Hausa'
diacnet-1.0 โ multilingual diacritization¶
A single joint ByT5 model restores diacritics across 10 languages (Yoruba, Igbo, Hausa, Vietnamese, Polish, Turkish, Portuguese, Spanish, French, Italian) via a lang= argument โ no separate per-language model needed.
from olaverse.nlp import Diacritizer
d = Diacritizer(model="diacnet-1.0", lang="fr")
d.restore("cest fini") # โ "c'est fini"
OTK-BPE multilingual tokenizer family¶
Swahili, Kinyarwanda, and a merged French/Kinyarwanda/English/Swahili tokenizer, each at 50k/100k/150k vocab sizes, through the same Tokenizer class used for the Nigerian-language family.
New retrieval toolkit (olaverse.nlp.retrieval)¶
Reranker (cross-encoder, 150M/22.7M variants) and Embedder (cross-lingual Hausa/Yoruba/Igbo sentence embeddings) for RAG/search pipelines.
from olaverse import Reranker, Embedder
reranker = Reranker(size="22.7m")
reranker.rank("who wrote hamlet", ["Hamlet is a tragedy by Shakespeare.", "Paris is in France."])
embedder = Embedder()
vecs = embedder.encode(["bawo ni", "sannu"])
Dataset access (olaverse.data)¶
load_dataset, list_datasets, and dataset_info give one-line access to every public olaverse dataset on Hugging Face โ reranker training pairs, multilingual QG passages, and the DiacBench diacritization benchmark. Requires pip install olaverse[data]. Replaces the old placeholder olaverse.data.loaders module, which returned bundled sample rows instead of real data.
from olaverse import load_dataset
pairs = load_dataset("reranker-general-en-llm-judged", split="train")
bench = load_dataset("diacbench", "yo", split="test")
New olaverse.vision module¶
PrismUpscaler (2x/4x/arbitrary-resolution super-resolution), PrismDenoiser (noise/blur/JPEG-artifact removal), and PrismSteganography (hide/recover short messages in images) โ general-purpose image-to-image models, not African-language-specific.
from olaverse import PrismUpscaler, PrismDenoiser, PrismSteganography
PrismUpscaler(size="2x").upscale("input.jpg").save("output.jpg")
PrismDenoiser().denoise("noisy.jpg").save("denoised.jpg")
steg = PrismSteganography()
stego = steg.hide("cover.jpg", "hi there")
steg.reveal(stego) # โ 'hi there'
Changes¶
- New extras:
olaverse[lid](fastText forLIDLite25),olaverse[retrieval](sentence-transformers),olaverse[vision](torch,torchvision,Pillow),olaverse[data](Hugging Facedatasets). - Fix โ
diacritize_yorubapreviously special-cased the documentation example sentence and returned a hand-written answer for it instead of the model output. The special case is removed; all inputs now go through the Viterbi model, and docs show the model's real output. Diacritizergained alang=constructor argument, used only bymodel="diacnet-1.0".Tokenizernow resolves multilingual (sw-*/kin-*/merged-*) variants against theolaverse/otk-bperepo, alongside the existing Nigerian-languageolaverse/otk-bpe-50krepo.LIDNeural5internals refactored onto a shared base class (LIDNeural25,LIDNeural5_1reuse the same loading/inference logic) โ no change toLIDNeural5's public API.
Install¶
pip install olaverse # core NLP (no GPU required)
pip install olaverse[deeplearning] # + LIDNeural5/25/51, diacnet-1.0, MIST local
pip install olaverse[lid] # + LIDLite25 (fastText)
pip install olaverse[retrieval] # + Reranker, Embedder
pip install olaverse[vision] # + PrismUpscaler, PrismDenoiser, PrismSteganography
pip install olaverse[hosted] # + MIST via Featherless/Modal
pip install olaverse[legal] # + LegalPeace
pip install olaverse[data] # + load_dataset (olaverse datasets on HF)
v0.1.4¶
Released: 2026-06-15
New Features¶
MIST Model Family (olaverse.llm.MIST)¶
Unified interface for all MIST variants โ correct stop tokens, verified sampling defaults, and a local/hosted endpoint switch in one class.
from olaverse import MIST
# Local (transformers)
model = MIST(size="8b")
model.load()
print(model.generate("What makes Yoruba a tonal language?"))
# Hosted (Featherless, Modal, or any OpenAI-compatible endpoint)
model = MIST(size="70b", endpoint="featherless", api_key="...")
print(model.generate("Write a Python retry decorator."))
Supported variants: "8b" / "mini", "70b", "140b", "140b-4bit", "thinking".
Batch inference โ LIDNeural5.predict_batch / predict_proba_batch¶
Single batched forward pass instead of per-text loops โ significantly faster for dataset processing.
detector = LIDNeural5()
detector.load()
langs = detector.predict_batch(["Bawo ni?", "Kedu?", "How far?"])
# โ ['yor', 'ibo', 'pcm']
probs = detector.predict_proba_batch(["Bawo ni?", "Kedu?"])
# โ [{'yor': 0.99, ...}, {'ibo': 0.98, ...}]
Auto-routing Diacritizer (model="auto")¶
Detects language automatically via LIDLite5 and routes to the correct diacritizer โ no need to specify the language.
from olaverse.nlp import Diacritizer
d = Diacritizer(model="auto")
d.restore("Ojo lo si oja lana") # detected: Yoruba โ 'รjรณ lแป sรญ แปjร lana'
d.restore("Kedu ka i mere") # detected: Igbo โ 'Kedแปฅ ka แป mere'
Stopwords (olaverse.nlp.stopwords)¶
Linguistic stopword sets for all 4 Nigerian languages plus convenience utilities.
from olaverse import YORUBA_STOPWORDS, get_stopwords, filter_stopwords
# Direct set access
"ni" in YORUBA_STOPWORDS # โ True
# By language code
sw = get_stopwords("pcm") # โ PIDGIN_STOPWORDS
# Filter a token list
filter_stopwords(["bawo", "ni", "Ade", "dara"], "yor")
# โ ['Ade', 'dara']
NaijaNormalizer (olaverse.nlp.NaijaNormalizer)¶
Pidgin-specific TTS normalizer extending TTSNormalizer. Adds informal spelling normalization (e.g. "2moro" โ "tomorrow", "nd" โ "and") on top of the standard abbreviation + number pipeline.
from olaverse import NaijaNormalizer
norm = NaijaNormalizer()
norm.normalize("Oga, e don finish. Call am 2moro pls.")
# โ 'Oga, e don finish. Call am tomorrow please.'
MIST retry logic for hosted inference¶
Automatic retry on capacity/overload errors with configurable attempts and delay.
model = MIST(
size="70b",
endpoint="featherless",
api_key="...",
max_retries=3, # default: 3
retry_delay=5.0, # seconds; each attempt waits delay ร attempt_number
)
Changes¶
LIDNeural5moved toolaverse.nlpโ its correct home alongsideLIDLite5.from olaverse.llm import LIDNeural5continues to work (backward-compat re-export inllm/detector.py).LIDNeural5now exported fromolaverse.nlpโfrom olaverse.nlp import LIDNeural5is now the canonical import path.- Speech demoted to Experimental โ
TTSPipeline,BaseAcousticModel,BaseVocoderemitExperimentalWarningon use. No trained acoustic model or vocoder exists yet. The diacritization and normalization steps remain production-ready. NaijaNormalizeradded toTTSNormalizerPidgin support โTTSNormalizer(lang="pcm")now has a populated abbreviation and digit table (was previously empty).- New
olaverse[hosted]extra โpip install olaverse[hosted]installsopenai>=1.0.0for MIST hosted inference. ExperimentalWarningexported fromolaverseandolaverse.speechfor easy suppression.
Install¶
pip install olaverse # core NLP (no GPU required)
pip install olaverse[deeplearning] # + LIDNeural5, MIST local
pip install olaverse[hosted] # + MIST via Featherless/Modal
pip install olaverse[legal] # + LegalPeace
v0.1.3¶
Released: 2026-05-01 (approximate)
Features¶
LegalPeaceโ Fine-tuned Mistral-7B-v0.3 for contract analysis and legal reasoning. 4-bit quantized inference via unsloth. Achieves 10.3% faster inference and 32.6% faster contract analysis vs. base Mistral-7B.LIDNeural5(initially inolaverse.llm) โ XLM-RoBERTa sequence classifier fine-tuned on 5 Nigerian languages, 98.96% macro-F1. Available viapip install olaverse[deeplearning].LIDLite5โ TF-IDF + Logistic Regression language detector. Zero GPU, 1.1 MB model file, 0.014 ms/sentence, 98.12% macro-F1. Available in core install.Diacritizerwith 5 backends โ Viterbi, KNN, dot-below KNN, BiLSTM, and XLM-RoBERTa transformer for Yoruba; KNN for Igbo.Tokenizerโ OTK-BPE-50k family: Yoruba (63% fewer tokens vs GPT-4), Igbo, Hausa, Pidgin, and unified Naija.TTSNormalizerโ Abbreviation and number expansion for Yoruba and Igbo TTS.mask_pii/clean_textโ PII masking (emails, phones, credit cards, SSNs) and general text cleaning.TTSPipeline+BaseAcousticModel+BaseVocoderโ TTS pipeline architecture (NLP front-end only; acoustic synthesis in development).olaverse.utilsโ Nigerian currency formatting, continent codes,.wavaudio I/O.
Roadmap¶
Coming in future releases
- Acoustic model + vocoder for end-to-end Yoruba TTS (completes the speech pipeline)
Diacritizerfor Hausa (diacnet-ha)LIDNeural5_1v5.2 โ adds an English/"other" class, removing the confident-mislabelling failure mode of v5.1MISTembedding endpoint for semantic search over Nigerian language content- ASR (Automatic Speech Recognition) for Nigerian languages
- Hausa / Pidgin TTS normalizer expansion
Done โ was on the roadmap
- ~~
LIDNeural5expanded to 10+ languages~~ โ shipped in v0.1.5 asLIDLite25/LIDNeural25(25 languages total: Afrikaans, Amharic, German, English, French, Hausa, Hindi, Igbo, Indonesian, Italian, Japanese, Korean, Dutch, Polish, Portuguese, Russian, Shona, Somali, Spanish, Swahili, Turkish, Vietnamese, Xhosa, Yoruba, Zulu). Note: Efik, Tiv, and Nupe specifically are still not covered by any olaverse LID model.