qourat ~ $

lab / decide

decide: typed decisions with honest probabilities, in our own small form

The same state-plus-questions interface as Jev, with two backends: Jev itself, and a local calibrated model trained on our own labels and reported with held-out numbers.

decide(state, questions) takes a state and typed questions — choice, score, noul — and returns answers with probabilities. Backend jev sends them to TypeSafe's model through OpenRouter. Backend local answers from one small classifier per question: character n-grams, logistic regression, isotonic calibration on a held-out fold, and a report with accuracy, Brier score and expected calibration error.

why this simple

Because the honest version of "our own Jev" today is a model we can train on a four-core server in a minute, from a few hundred labelled rows, and whose probabilities we can check. It cannot answer a question it was not trained on; Jev can. Distillation — label a corpus with Jev, fit the local model, compare — is one command, and it tells us exactly what the small model gives up.

# distil jev into the local backend python -m lab.decide.train label questions.json states.jsonl labelled.jsonl # ~$0.00002 a row python -m lab.decide.train fit questions.json labelled.jsonl lab/models/local # use either backend with the same call answers = decide(state, questions, backend="local") # or backend="jev"

the next version

An encoder model with question heads, the way laya does it: a few hundred million parameters, milliseconds a decision, on-device. We will build it when the local model has shown, on marketprice and on textduty's routing, where it falls short.

Code: lab/decide in the qourat repository.