Route, flag and score tickets, chats and records with calibrated probabilities, in English and eight African languages, from one self-hosted model instead of a chain of LLM calls.
Every inbound message triggers the same handful of decisions: which team owns it, is it a refund request, is it fraud, how urgent is it. Teams usually ask a large hosted model each question separately, parse free text back into labels, and pay for every token.
The answers come back without a usable sense of confidence, so there is no clean way to automate the sure cases and send only the unsure ones to a person. For African-language customers, accuracy usually drops further still.
Pass the message, ticket or record as plain text or JSON, and any number of typed questions: choice (pick one of named options), noul (yes/no) and score (an ordered scale). Instructions and options can be in English or the customer’s language.
PurpleMIST-Flash-1.0PurpleMIST scores each option directly instead of generating text, so all questions about a state are answered together and options can change per request. Flash matches DeepSeek-V4-Pro accuracy at 7.9B parameters: 0.720 on LocalLLaMA/typed-decisions in English and 0.668 vs 0.669 on African Typed Decisions.
PurpleMIST-Flash-1.0Each answer comes with calibrated probabilities (ECE 0.049 on African languages), so a single threshold separates decisions you can act on automatically from the ones worth a human look.
Run Flash on one 24 GB GPU for African languages and top accuracy, or Mini at 1.9B for high-volume English. Both share the same request shape and HTTP server, so switching is a one-line change.
PurpleMIST-Mini-1.0The Olaverse SDK wraps the models with sane defaults. If you would rather not add a dependency, the second tab is the same pipeline in plain transformers.
import os, sys
from huggingface_hub import hf_hub_download
repo = "olaverse/PurpleMIST-Flash-1.0"
sys.path.insert(0, os.path.dirname(hf_hub_download(repo, "purplemist.py")))
from purplemist import Decider
d = Decider.from_pretrained(repo, device="cuda")
QUESTIONS = {
"team": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "payments, charges and refunds",
"delivery": "orders in transit", "technical": "app or account problems"}},
"refund": {"type": "noul", "instructions": "The customer is asking for money back."},
}
def triage(message):
a = d.decide({"message": message}, QUESTIONS)
team = a["team"]["choice"]
confident = a["team"]["probabilities"][team] >= 0.9
return {"queue": team if confident else "human-review",
"refund_likely": a["refund"]["noul"] >= 0.5}The languages PurpleMIST was trained and benchmarked on.
PurpleMIST-Flash-1.0 leads DeepSeek-V4-Pro on Pidgin, Somali, Swahili and isiZulu. For African languages, use Flash; Mini is tuned for English.
Every figure on this page comes from the published model cards. Download the weights and check us.
Detect the language of support tickets, chat messages, queries, and documents across 608 languages, built African-first and accurate on the short text real products see.
/ ML engineeringGenerate verified (query, passage) pairs from your own corpus in 25 languages, and fine-tune retrievers and rerankers on data that matches your domain.
The weights are open, so you can build it yourself this afternoon. If you would rather we tuned it to your domain, evaluated it properly, and handed it over, tell us what you are working on.