Skip to content

Solutions

How Olaverse components combine into production pipelines. Every snippet below runs against the current SDK.


Speech AI

Diacritics are the hardest front-end step of tonal-language TTS — without tone marks, a synthesizer cannot pick the right pitch contour.

Audio → ASR → Olaverse normalization → Diacritization → TTS
from olaverse.nlp import TTSNormalizer, Diacritizer

normalizer = TTSNormalizer(lang="yo")
diacritizer = Diacritizer(model="diacnet-yor-viterbi")

text = "Dr. Ade lo si oja lana"                 # raw ASR output / user text
normalized = normalizer.normalize(text)          # "Dọ́kítà Ade lo si oja lana"
diacritized = diacritizer.restore(normalized)    # "Dọ́kítà Adé ló sí ọjà lànà"

For Nigerian Pidgin input, NaijaNormalizer first expands informal spellings (2morotomorrow, tnxthanks) before standard normalization.


OCR Correction

Scanners and OCR engines routinely drop diacritics. Restore them as a post-processing pass:

from olaverse.nlp import Diacritizer

d = Diacritizer(model="diacnet-1.0", lang="vi")   # 10 languages available
d.restore("Toi yeu tieng Viet")

Pair with PrismDenoiser to clean scans before OCR, and DiacNet to repair the text after.


Language-aware retrieval, end to end:

from olaverse import LIDLite5, Embedder, Reranker

# 1. Detect the query language (0.014 ms — negligible overhead)
lang = LIDLite5().predict(query)

# 2. First-stage retrieval — cross-lingual embeddings for ha/yo/ig
embedder = Embedder()
query_vec = embedder.encode([query])[0]

# 3. Rerank the top-k candidates (English)
reranker = Reranker(size="22.7m")
ranked = reranker.rank(query, candidate_passages)

Diacritization also helps search normalization — index both plain and restored forms so ogun matches Ògún.


Education

Language-learning products need correctly marked text; learners can't infer tones from bare letters.

from olaverse.nlp import Diacritizer

d = Diacritizer(model="auto")   # student types without diacritics
d.restore("Ojo lo si oja lana")
# → 'Òjó lọ sí ọjà lana'  — show the corrected form

Customer Support

Route incoming messages by language before they hit an agent or a bot:

from olaverse import LIDLite5

detector = LIDLite5()

lang = detector.predict("How far, wetin dey happen?")   # → 'pcm'
# route 'pcm'/'yor'/'ibo'/'hau' to the right queue or model

predict_proba gives you a confidence score for a human-fallback threshold.


Translation Pipelines

MT systems produce better output from unambiguous input. Detect, normalize, and diacritize before translating:

from olaverse import LIDLite5, NaijaNormalizer
from olaverse.nlp import Diacritizer

text = "abeg, 2moro na Sunday"

lang = LIDLite5().predict(text)                  # 'pcm'
clean = NaijaNormalizer().normalize(text)        # 'abeg, tomorrow na Sunday'
# → feed to your MT system; for yor/ibo input, add Diacritizer(model="auto")

LLM Fine-tuning & Data Prep

Efficient tokenization plus public training data:

from olaverse import Tokenizer, load_dataset

tok = Tokenizer("yo")                            # 63% fewer tokens than GPT-4
pairs = load_dataset("marco-style-pairs-multi", split="train")   # 25 languages

Need something custom?

Custom language support, domain adaptation, and deployment help are available — see Commercial Support →.