跳到主要内容

OpenThai-SystemOne — an open Thai and English System One model you can run on a laptop

· 6 分钟阅读
Kobkrit Viriyayudhakorn
CEO @ iApp Technology

OpenThai-SystemOne, an open Thai and English System One decision model, released 20 September 2026

Tonight we are releasing OpenThai-SystemOne, an open-source Thai and English System One decision model: 0.8B parameters, Apache 2.0, weights and training recipe on Hugging Face and GitHub, and a free hosted API on api.iapp.co.th.

It does not write. It decides. Send it a state and typed questions; it returns a calibrated probability for every option of every question in one forward pass, with zero output tokens.

Model page: iapp.co.th/openmodels/openthai-systemone · Weights: huggingface.co/iapp/OpenThai-SystemOne · Code: github.com/iapp-technology/openthai-systemone · Try it: API playground

Why a model that does not generate text

Thai businesses route support tickets, moderate comments, pick the next button for an agent to press and check whether an answer is grounded, millions of times a day. Each of those is a decision among options you already know. Calling a large language model for each one is slow, costs tokens, and can answer with something that was never on the list.

A System One model answers the structured question directly. TypeSafe AI introduced the category with Jev on 15 September 2026. Five days later, here is an open one for Thai and English, with the part TypeSafe kept closed, the architecture, in the open.

What it does

You give it a state (any text or JSON) and one or more questions of three types:

TypeYou giveYou get
choiceinstructions and up to 255 named optionsbest option, a probability per option, confidence, abstain
scoreinstructions and 2 to 10 ordered levelsa probability-weighted score and per-level probabilities
noula yes/no questionP(yes)

All questions are answered in the same forward pass. Here is a Thai support ticket with three questions, and the model's measured output:

{"state": {"ticket": "โดนหักเงินซ้ำสองครั้งเมื่อวานนี้ ขอเงินคืนด่วนนะครับ โทรไปสามรอบแล้วไม่มีใครรับ"},
"questions": {
"department": {"type": "choice", "instructions": "ทีมใดควรรับผิดชอบ",
"criteria": {"billing": "การเงิน/คืนเงิน", "technical": "ระบบใช้งานไม่ได้", "sales": null}},
"frustration": {"type": "score", "instructions": "ลูกค้าหงุดหงิดแค่ไหน",
"criteria": ["ใจเย็น", "หงุดหงิดแต่สุภาพ", "โกรธมาก"]},
"refund": {"type": "noul", "instructions": "ลูกค้าขอเงินคืนอย่างชัดเจนหรือไม่"}}}
QuestionAnswerConfidence
departmentbilling (96.3%), technical 1.1%, sales 2.6%0.83
frustration1.95 of 2 (very angry 95.7%)0.82
refundP(yes) = 0.946

166 input tokens, 0 output tokens, 0.23 s round trip through our gateway.

How it works

We took the text tower of Qwen3.5-0.8B, continued pretraining on about 5B Thai tokens, and replaced the 248K-token language-model head with a 256-way decision head. Options are introduced by control tokens. Every answer position is projected onto 256 logits; slots beyond the number of options are masked, and slot 255 means "none of the above". choice takes the argmax, score is the probability-weighted level index, noul is the probability of yes. Option order is shuffled during training, so there is no position bias. The model was trained on public classification, NLI, QA and agent datasets plus synthetic Thai and English decision tasks, then calibrated.

The result runs on a laptop GPU: 154 ms per request on a MacBook M3 Max, 40 to 70 ms on an H100.

Limits, so nobody has to find them for us

  • This is version 0.1 and a 0.8B model. It is not a reasoning model.
  • It cannot emit an option you did not offer, but it can still choose the wrong one. Every answer carries a confidence; route the low ones to a larger model or a person.
  • Text only.
  • At most 255 options per choice, 2 to 10 levels per score, 64K tokens per request.

The numbers

On Bespoke Labs' public 13-subset System One benchmark, same subsets, splits, instructions and sampler as their published comparison, the 0.8B model scores 61.9 macro average. Bespoke-Nimble-9B scores 74.8, Jev 1.13.0 scores 76.0 and the raw Qwen3.5-0.8B base scores 45.4. Bold marks where the 0.8B model is ahead of the 9B.

SubsetTypenOpenThai-SystemOne 0.8BNimble-9BJev 1.13.0
aegis2noul25058.081.280.4
boolqnoul30063.786.089.7
civil_commentsnoul30078.070.381.0
helpsteer2score25042.839.034.1
massive-de-DEchoice35064.683.486.9
massive-en-USchoice35075.786.987.4
multinlichoice29985.685.382.9
pawsnoul25067.282.889.2
pubmedqachoice25053.675.677.2
squad2noul29950.280.682.9
summeval-consistencyscore14484.075.781.2
summeval-relevancescore24013.849.235.0
vitaminc-devchoice59967.176.680.1
Macro average61.974.876.0

We would rather you read the per-subset row than the average. The small model is ahead of the 9B on NLI, summary consistency, helpfulness scoring and toxicity, and clearly behind on reading-comprehension yes/no tasks (squad2 is at chance) and on summary relevance, where its score head is miscalibrated. On Thai held-out sets that were never in training it scores 86.4 on 60-way MASSIVE-th intents, 97.7 on Prachathai topics, 76.5 on XNLI-th and 77.5 on SIB-200 Thai, with calibration error at or below 0.05 on most of them, and it has two known weak spots: Wisesight sentiment (38.7) and 77-way banking77 intents (32.7). Every table, with ECE and Brier score per dataset and the before/after calibration comparison, is in the model card.

Get started

Hosted, free preview. The endpoint POST https://api.iapp.co.th/v3/store/openthai/systemone is free with any iApp API key (registration is free), capped at 1,000 decisions per day per key. Per-decision pricing will be published in October 2026. The API page has a playground with four presets, code in cURL, Python and JavaScript, and the full request and response reference. The request shape mirrors POST /v1/systemone, so code written for that API works unchanged.

Local.

pip install "git+https://github.com/iapp-technology/openthai-systemone"
OPENTHAI_SYSTEMONE_MODEL=iapp/OpenThai-SystemOne uvicorn openthai_systemone.server:app --port 8000

Everything is open under Apache 2.0: weights, training scripts, configs and the synthetic data. We would like help with GGUF and MLX conversions (the head is a plain linear layer) and with Thai and English evaluation sets we missed. Issues and pull requests on GitHub are welcome.

OpenThai-SystemOne joins OpenThai 2.0 and OpenThai 2.0 Legal in the OpenThai 2.0 family.

Thank you, Siam AI

Siam AI Corporation

Training, evaluation and the free hosted API run on NVIDIA H100 GPUs generously provided by Siam AI Corporation. Thank you for backing open Thai AI.