CoolFace
Modelpublic

iapp/openthai2.0-qwen3.8-27b

sourceHugging Faceapache-2.0updated 23d agoView on Hugging Face
11likes2.2kdownloads
Model Card

OpenThai2.0 - Opensource Thai Knowledge, Document, and Agentic AI

Release notes - v2.0.3 (1 Sep 2026) — Thai factual recall repaired: the freerecall training data carried a phantom-citation register ("บทความระบุ...") and single-shape questions; cleaned and re-drilled with model-written paraphrases. Paraphrase battery 85/104 (from 79), Thai knowledge battery 21/21, OCR-Eval-104 CER 0.084 (from 0.093), HumanEval 0.982, IFEval-TH 0.837. Known residual: some numeric facts still scatter at temperature 0.7 — use low temperature for factual queries. - v2.0.2 (31 Aug 2026) — identifies as OpenThai 2.0 (iApp Technology + AIEAT) and adds a Thai-language safety guardrail; stock chat template. Printed-OCR CER about +0.02 vs v2.0.1, other benchmarks unchanged. - v2.0.1 (30 Aug 2026) — restores closed-book Thai knowledge lost in v2.0.0 (thanks to Dr. Panutat Tejasen's ThaiEval-2026 v3). - v2.0.0 — initial release. Earlier builds: revision tags v2.0.1, v2.0.0. Per-version benchmark tables: CHANGELOGS.md.

[image]

โมเดล AI โอเพนซอร์ส ด้านความรู้ภาษาไทย เอกสารไทย และงานเอเจนต์ · เปิดตัวโดย iApp Technology ร่วมกับ สมาคมผู้ประกอบการปัญญาประดิษฐ์ประเทศไทย (AIEAT) · Apache 2.0

An open all-in-one Thai AI: reads Thai documents and handwriting at specialist level, answers with Thai knowledge in natural, explanatory Thai, leads its base model and Typhoon on agentic tool use (BFCL) — and keeps its base model's general intelligence.

🌐 Try it FREE right now — no install: [chinda3.iapp.co.th](https://chinda3.iapp.co.th) 🦙 Or one command on your own machine: [ollama.com/openthai/openthai2.0-qwen3.8-27b](https://ollama.com/openthai/openthai2.0-qwen3.8-27b)

⚡ Run it locally

bash
ollama run openthai/openthai2.0-qwen3.8-27b

Or serve the full bf16 weights with vLLM:

bash
vllm serve iapp/openthai2.0-qwen3.8-27b \
  --max-model-len 32768 --gpu-memory-utilization 0.85 \
  --max-num-seqs 128 --reasoning-parser qwen3 --trust-remote-code

One 80 GB GPU (~56 GB bf16). The LoRA adapter alone (7 GB, rank 64) is in adapter/ for serving on top of Qwen/Qwen3.8-27B with dynamic LoRA.

Available formats

FormatRepoRuns on
bf16 (this repo)iapp/openthai2.0-qwen3.8-27bvLLM / transformers · 1× 80 GB GPU
GGUF Q4KM / Q8_0 + vision mmprojiapp/openthai2.0-qwen3.8-27b-GGUFllama.cpp · CPU or consumer GPU (17 / 29 GB)
GGUF IQ2_M (2-bit, 9.8 GB, imatrix)same reporecommended 2-bit — importance-matrix calibrated (Thai+EN), passes factual sanity where plain Q2K slips; still prefer Q4K_M when it fits
MLX 4-bitiapp/openthai2.0-qwen3.8-27b-MLX-4bitApple silicon, 24 GB+ unified memory (~16 GB)
INT8 W8A8iapp/openthai2.0-qwen3.8-27b-INT8-W8A8vLLM · ~40 GB-class GPUs
NVFP4iapp/openthai2.0-qwen3.8-27b-NVFP4vLLM · NVIDIA Blackwell
Ollamaopenthai/openthai2.0-qwen3.8-27bollama run openthai/openthai2.0-qwen3.8-27b — one command, vision + thinking included

Multi-token prediction (MTP) — faster decoding, identical outputs

The checkpoint ships the Qwen3.8 MTP draft head (mtp.* tensors, text_config.mtp_num_hidden_layers: 1), so vLLM can run self-speculative decoding:

bash
vllm serve iapp/openthai2.0-qwen3.8-27b \
  --max-model-len 32768 --max-num-seqs 128 --reasoning-parser qwen3 \
  --speculative-config '{"method":"qwen3_5_mtp","num_speculative_tokens":2}' \
  --trust-remote-code

Speculative decoding is verified token-by-token by the main model, so outputs are identical with or without it — the draft head only accelerates decoding. Measured: 75.2 tok/s with MTP vs 50.1 tok/s without (+50%, single-stream, H100, identical prompts, all outputs clean). Without the flag the head is simply skipped (no overhead). Per format: GGUF exports the head as nextn layers (llama.cpp); INT8/NVFP4 keep it in bf16; the MLX build omits it (mlx-vlm has no drafter support for this architecture yet).

INT8-W8A8 / NVFP4 before 2026-08-31 had no draft head. The quantisation export dropped the mtp.* tensors while the config still advertised them, so --speculative-config ran a draft head with no weights: every draft rejected (mean acceptance length 1.00) and decoding ~1.6× slower. Found by Dr. Panutat Tejasen. The repaired repos carry the head in bf16 (model-mtp.safetensors, re:.*mtp.* in the quantisation ignore list) and were verified under vLLM speculative decoding. If your INT8/NVFP4 download predates that, re-download — or serve it without --speculative-config. bf16 weights were never affected.

Highlights

🇹🇭 Thai knowledge & instruction-following

  • Thai national exams (OpenThaiEval): 0.842 — above base (0.820), Typhoon 2.5 (0.742), Pathumma (0.660)
  • Thai instruction-following (IFEval-TH): 0.795 — above the base model (0.772) and Typhoon (0.749)
  • English instruction-following (IFEval): 0.914 — above base (0.902) · code-switching 0.985 (ties Pathumma's 0.990 within one sample)

📄 Thai documents

  • Thai handwriting: 0.261 CER vs 0.649 base — a 60% error reduction
  • Books & Royal Gazette: 0.126 vs 0.370 base — a 66% error reduction · printed docs 0.077 vs 0.103

🤖 Agentic

  • Tool use (BFCL): 0.820 overall — beats base (0.811) and Typhoon 2.5 (0.792); multi-turn agentic 0.775 vs Typhoon's 0.550 · Coding (HumanEval): 0.957 — ties Typhoon's best

⚙️ In practice

  • Answers in natural, explanatory Thai — switches to terse/JSON output on request
  • 1.5× faster decoding with the bundled MTP draft head (75 vs 50 tok/s measured)
  • Five formats — bf16 · GGUF · MLX · INT8 · NVFP4 — from a MacBook to Blackwell
  • Runs entirely inside your own infrastructure — no data leaves your organization

Benchmark results

(The tables in this section were measured on v2.0.0. For the v2.0.1 numbers see the changelog table at the top of this card.)

[image]

All numbers measured under identical serving conditions, with the same answer-unwrap scoring pass applied to every model (verified: unwrapping changes OpenThai 2.0's scores by ≤0.001 on every track — it already answers OCR prompts cleanly).

Thai knowledge & language (higher is better)

Benchmark**OpenThai 2.0** (27B)Qwen3.8-27B (base)[Typhoon 2.5](https://huggingface.co/typhoon-ai/typhoon2.5-qwen3-30b-a3b) (30B-A3B)[Pathumma think 3.0](https://huggingface.co/nectec/pathumma-thaillm-8b-think-3.0.0) (8B)
OpenThaiEval (Thai national exams)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.842</span>0.8200.7420.660
Code-switching (TH↔EN)<br><sub>0.985 vs 0.990 = one sample on n=200 — a statistical tie</sub><span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.985</span>0.8950.940<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.990</span>
HumanEval (coding)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.957</span>0.939<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.957</span>0.805
MMLU-Redux (5.7k, world knowledge)0.916<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.924</span>0.8840.762
IFEval-TH (Thai instruction-following)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.795</span>0.7720.7490.498
IFEval (EN instruction-following)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.914</span>0.9020.8460.630

Thai document & handwriting reading (CER — lower is better)

Benchmark**OpenThai 2.0** (27B)Qwen3.8-27B (base)[Typhoon-OCR 1.5](https://huggingface.co/typhoon-ai/typhoon-ocr1.5-2b) (2B)[Pathumma-vision 2.0](https://huggingface.co/nectec/Pathumma-llm-vision-2.0.0-preview) (7B)
Wikisource TH — books/gazette (n=608)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.126</span>0.3700.2710.931
DocBench — government docs (n=906)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.327</span>0.5300.5510.691
SEA-DocBench-TH (n=1,499)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.497</span>0.5590.5750.832
ThaiOCRBench (n=2,808)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.743</span>0.7500.7930.894
MTVQA-TH — scene text (n=231)0.819<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.737</span>1.0000.905
Thai handwriting — text-disjoint (n=916)0.2610.649<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.054</span>0.821
OCR-Eval-104 — printed (n=104)0.0770.103<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.014</span>0.352

Reading the comparison

All four models measured by us on the same suite, each with its own recommended prompts/parameters (Typhoon-OCR via its exact model-card protocol), so the experiment can be repeated with the linked checkpoints above. Read it honestly: Typhoon-OCR 1.5 is an excellent transcription specialist — on clean printed lines and isolated handwriting it beats every model here, including this one. It is also only a transcriber: it accepts a single fixed OCR prompt, so document Q&A and scene-text questions score at or near total error (MTVQA 1.000), and it has no knowledge or assistant ability. OpenThai 2.0 leads on books/gazette reading and on Thai knowledge and instruction-following — the only Thai open model in these tables that reads documents at specialist level and answers questions about them in the same model. Scene text (MTVQA) is its weakest reading track.

English retention: Benchmarking (previous build: 0.333 CER) on a held-out CoSyn-400K English document set. English document reading is functional but is not this model's focus; for EN-primary workloads prefer the base model.

Agentic tool use — BFCL (higher is better)

Official Berkeley Function-Calling Leaderboard harness (`bfcl-eval` 2026.3.23): 3,841 cases across 14 categories, identical OpenAI-function-calling protocol for every model (tool parser qwen3_xml for the Qwen3.8 family, hermes for Typhoon, per each family's spec).

[image]

Benchmark**OpenThai 2.0** (27B)Qwen3.8-27B (base)[Typhoon 2.5](https://huggingface.co/typhoon-ai/typhoon2.5-qwen3-30b-a3b) (30B-A3B)
BFCL overall — weighted (n=3,841)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.820</span>0.8110.792
Multi-turn agentic episodes (n=200)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.775</span>0.7500.550
Irrelevance detection — knowing when not to call a tool (n=1,124)<span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.779</span>0.7630.726

Thai-document fine-tuning did not tax tool use: OpenThai 2.0 leads every summary row, with the largest gap on multi-turn agentic episodes (+22.5 points over Typhoon 2.5). Typhoon is stronger on several single-turn AST categories; full per-category results ship in the repo (results/agentic-2026-08/).

Evaluation protocol

ModeWhat it testsSetup
Transcriptionreading accuracyimage + fixed OCR prompt, thinking disabled, raw CER vs human-verified ground truth
Knowledge (MCQ)Thai/world knowledgeOpenThaiEval / MMLU-Redux via EvalScope, temperature 0
Instruction-followingarbitrary format constraintsIFEval / IFEval-TH
Style canarykeeps the explanatory voiceverbosity ratio vs base, terse-on-request rate, OCR-preamble rate

Benchmark sets are held out from training by an n-gram leakage guard run on every corpus change. Handwriting uses a text-disjoint split: no transcription string in training appears in the test set.

Prompt templates by use case

The exact prompts our benchmark numbers were measured with. Where the template is "—", no special prompt is needed — ask naturally in Thai.

Use casePrompt templateThinking
Full-page transcription (Markdown)Extract all text from this image as Markdown.<br>- Preserve the reading order and all information on the page.<br>- Render tables as HTML <table> blocks; equations as LaTeX ($...$ inline, $$...$$ block).<br>- Keep the original language of the text (Thai stays Thai, English stays English).<br>- Return only the Markdown, no explanations.off (enable_thinking: false, image attached)
Plain-text transcriptionExtract all text from this image as plain text in natural reading order.<br>- Keep the original language of the text.<br>- No markup, no formatting symbols, no explanations — text content only.off
JSON layout extractionExtract the full content and layout of this document image as JSON with this schema:<br>`{"blocks": [{"type": "title\heading\paragraph\table\figure\list\page_number\other", "reading_order": <int>, "content": "..."}]}<br>- Return only valid JSON, no explanations.`off
Document Q&A— (image + natural Thai question)on (default)
Thai knowledge / general assistant— (plain question; leave max_tokens unset or ≥ 8k)on (default)
Terse / machine-parsed answersappend ตอบสั้นๆ or ตอบเป็น JSON เท่านั้นon
Agentic tool usestandard OpenAI tools=[...] — no prompt template neededon

What it looks like — 5 real cases

Verbatim model outputs on held-out benchmark items, same image and prompt for both models — all five use the Full-page transcription (Markdown) template above with thinking off.

Case 1 — Thai handwriting (hw_disjoint/48)

<img src="assets/cases/hwdisjoint48.jpg" alt="Case 1 source document" width="480"/>

  • Ground truth: เชียงราย
  • Qwen3.8-27B (base) — CER 1.00: 3.1.4 การจ่าย
  • OpenThai 2.0CER 0.00: เชียงราย

Case 2 — Thai handwriting (CPE-OPH) (hw_cpeoph/20)

<img src="assets/cases/hwcpeoph20.jpg" alt="Case 2 source document" width="480"/>

  • Ground truth: นครพนม
  • Qwen3.8-27B (base) — CER 1.00: ทุกตัวจริง
  • OpenThai 2.0CER 0.00: นครพนม

Case 3 — Book / Royal Gazette page (wikisource_l4/ws4_53969)

<img src="assets/cases/wikisourcel4ws4_53969.jpg" alt="Case 3 source document" width="480"/>

  • Ground truth: กองอ้ายแลไปฟ้องกับอ้ายเวียงจันท์ว่าอ้ายแลไม่เข้าด้วยอ้ายเวียงจันท์ ๆ โกรธว่าจะฆ่าอ้ายแลเสีย ครั้นอ้ายแลไปถึง พูดจาประสมประสาน อ้ายเวียงจันท์หายโกรธ จึงให้อ้ายแลนำตำรวจเวียงจันท์มากวาดครัวเมืองไชยภูมิข …
  • Qwen3.8-27B (base) — CER 1.00: ๒๕ กองอ้ายและไปฟังกองอ้ายของจนทว่า อ้ายและไม่เข้า ด้วยอ้ายของจนทๆ ใหญ่อ่ว่าจะฆ่าอ้ายและเสีย ครั้น อ้ายและไปลงพักจาประสมประสานอ้ายของจนทหายใหญ่อิ จึงให้อ้ายและนำตัวรววจของจนทมากกว่าครวเมื่องใชยภมิ ขึ้น …
  • OpenThai 2.0CER 0.01: กองอ้ายแลไปฟ้องกับอ้ายเวียงจันท์ว่า อ้ายแลไม่เข้าด้วยอ้ายเวียงจันท์ ๆ โกรธว่าจะฆ่าอ้ายแลเสีย ครั้นอ้ายแลไปถึงพูดจาประสมประสานอ้ายเวียงจันท์หายโกรธ จึงให้อ้ายแลนำตำรวจเวียงจันท์มากวาดครัวเมืองไชยภูมิขึ …

Case 4 — Government document (parliament budget) (docbench/parliament_year_60_00000903_p0181)

<img src="assets/cases/docbenchparliamentyear6000000903_p0181.jpg" alt="Case 4 source document" width="480"/>

  • Ground truth: 175 (52) ถนนสาย สค.2055 แยก ทล.35 - เมืองสมุทรสงคราม (ตอนสมุทรสงคราม) อ.เมือง จ.สมุทรสงคราม 0.753 กม. 40,021,200 บาท งบประมาณทั้งสิ้น 81,600,000 บาท ปี 2559 ตั้งงบประมาณ 21,178,800 บาท ปี 2560 ตั้งงบป …
  • Qwen3.8-27B (base) — CER 1.00: 175 (52) ถนนสาย สค.2055 แยก ทล.35 - เมืองสตูล สตูล (ตอนสตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล สตูล …
  • OpenThai 2.0CER 0.02: (52) ถนนสาย สด.2055 แยก ทล.35 - เมืองสมุทรสงคราม (ดอนสมุทรสงคราม) อ.เมือง จ.สมุทรสงคราม 0.753 กม. 40,021,200 บาท งบประมาณทั้งสิ้น 81,600,000 บาท ปี 2559 ตั้งงบประมาณ 21,178,800 บาท ปี 2560 ตั้งงบประมาณ 40,021,200 บาท …

Case 5 — Thai national exam (OpenThaiEval item 200)

คำถาม: ท่านมีความเห็นอย่างไรต่อแพทย์ที่สั่งยาจากบริษัทที่มักพาแพทย์ไปเที่ยวต่างประเทศ (ข้อสอบจริยธรรมแพทย์ ปี 65) Choice: (1) เป็นการตอบแทนเล็กน้อยมิใช่หรือ (2) ถ้ายาดีจริง ก็เป็นสิ่งที่ทําได้มิใช่หรือ (3) แพทย์คนนี้เห็นแก่ประโยชน์ส่วนตัวใช่หรือไม่ (4) หากแพทย์สั่งยาจากบริษัทนี้อีก เท่ากับว่าแพทย์สนับสนุนการกระทําในสิ่งที่ไม่ถูกต้อง ใช่หรือไม่ (5) เป็นการกระทําที่ดูถูกศักดิ์ศรีความเป็นแพทย์ใช่หรือไม่
  • Qwen3.8-27B (base): คำตอบที่ถูกต้องคือ (5) ❌
  • OpenThai 2.0: คำตอบที่ถูกต้องคือ (4)

How it was trained

Three stages of LoRA fine-tuning (r=64, α=64, all-linear) on ~143k verified rows:

  1. 1.Scale SFT teaches reading: verified transcription + explanatory document-QA over Thai handwriting, books, gazettes, and government documents (92,893 rows, 2 epochs).
  2. 2.Knowledge layer teaches Thai reasoning: grounded MCQ chain-of-thought built from Thai law/government corpora, leak-checked against evaluation questions.
  3. 3.Adherence layer teaches control: instruction rows kept only if the answer passed a programmatic constraint check (bullet counts, must-include words, JSON-only, length caps) — zero-hallucination instruction data.

Every stage used a verify-everything pipeline: answers checked against human-confirmed ground truth by n-gram containment; images the model could not read were routed away from explanatory training (anti-hallucination); malformed-Thai, scaffolding-leak, and markup filters on every row; benchmark-leakage guard on the whole corpus.

Model details

PropertyValue
Base modelQwen/Qwen3.8-27B (dense VLM, hybrid Mamba-attention)
Parameters27B
Context length262,144 tokens (max_position_embeddings); production API serves 131,072; benchmarks run at 16k
Modalityimage + text → text
LanguagesThai (primary), English
Precisionbfloat16 safetensors (~52 GB incl. MTP shard) + LoRA adapter (7 GB)
MTP draft headincluded (1 layer) — self-speculative decoding via qwen3_5_mtp
Knowledge cutoffInherited from Qwen3.8-27B — Qwen publishes no exact date for this release (≈ early 2026 per third-party tracking; model self-reports are unreliable). OpenThai fine-tuning (to Sep 2026) adds Thai skills, not world events. For anything time-sensitive, pair the model with web search.
Training stackms-swift 4.3 · LoRA r64/α64 all-linear · 3× H100
ServingvLLM ≥ 0.19 (verified), OpenAI-compatible
LicenseApache 2.0

Deployment notes (read before serving)

  • --max-num-seqs 128 is required: the hybrid architecture allocates one Mamba cache block per decode sequence; vLLM's default (1024) aborts engine startup.
  • Serve with `--reasoning-parser qwen3` and leave thinking ON for all text-only requests. Measured (QA 2026-08-24, 36 prompts/config): thinking on with max_tokens unset gives 94% usable answers and 0% reasoning leakage; sending enable_thinking:false on text-only requests degrades to 42% usable.
  • `enable_thinking:false` is for image-attached OCR/transcription requests only (measured safe there: 0% leakage across 84 image requests) — it keeps reasoning text out of transcriptions.
  • Leave `max_tokens` unset, or set it ≥ 8192. Small caps starve generation: at 1024 roughly a third of replies come back empty (finish_reason=length); unset brings this to ~6% (base model behaves the same). Budget ~3.5k output tokens per long answer.
  • Always send `repetition_penalty: 1.05` for long-form Thai generation, and trim the leading blank line some responses start with (content.lstrip()).

Recommended sampling parameters

Inherited from the base Qwen3.8-27B recommendations, with one OpenThai-specific change: repetition_penalty 1.05 in non-thinking mode (measured: prevents rare long-form Thai repetition collapse; short OCR outputs are unaffected).

ParameterThinking mode (assistant work)Non-thinking mode (image-attached OCR/extraction only)
Temperature1.00.7 — or <span class="text-xl font-bold text-blue-600 dark:text-blue-400">0.0</span> for deterministic OCR/extraction
Top-P0.950.80
Top-K2020
Repetition penalty1.0<span class="text-xl font-bold text-blue-600 dark:text-blue-400">1.05</span>
Presence penalty1.5
json
{"temperature": 0.0, "top_p": 0.8, "top_k": 20, "repetition_penalty": 1.05, "max_tokens": 8192}

All benchmark numbers in this card were measured in non-thinking mode at temperature 0.

Tested configuration: vLLM 0.19, single H100 80GB, --max-model-len 16384–32768, --gpu-memory-utilization 0.85. All benchmark numbers in this card were produced under this configuration.

Quickstart

python
import base64
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
img = base64.b64encode(open("thai_document.jpg", "rb").read()).decode()

r = client.chat.completions.create(
    model="iapp/openthai2.0-qwen3.8-27b",
    messages=[{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img}"}},
        {"type": "text", "text": "อ่านข้อความในเอกสารนี้ทั้งหมด"},
    ]}],
    temperature=0.0,
    extra_body={"repetition_penalty": 1.05,
                "chat_template_kwargs": {"enable_thinking": False}},
)
print(r.choices[0].message.content)

Ask in natural Thai and it explains; add "ตอบสั้น ๆ" or "ตอบเป็น JSON เท่านั้น" for terse or structured output.

⚠️ Give it room to generate — this is the #1 setup mistake. The model reasons before it answers, so a short context window or a small max_tokens cap gets eaten by reasoning and the reply comes back empty. Serve with --max-model-len 32768 (or more) and leave max_tokens unset, or set it ≥ 8192. Measured: max_tokens 1024 → ~33% empty replies; unset → ~6%.

Limitations (please read)

  • Structured extraction is at parity with the base model, no better. On judged ThaiOCRBench this build scores 0.568 vs the base model's 0.570 (n=2,808 — a statistical tie); the loss concentrates in table parsing, key-information extraction/mapping, and diagram VQA. It reads text better while organizing extracted data about as reliably as the base. For heavy form/table extraction pipelines, evaluate on your own documents.
  • Long free-form answers vary between generations. For reproducible outputs set temperature 0 and repetition_penalty 1.05 (our benchmark protocol); for natural prose use the sampling table below. Verify facts independently either way.
  • Terse-on-request compliance ≈ 40% (v9 canary: 42%). The model answers in an explanatory style by default; a bare "answer in one word" request is honored less than half the time. Use explicit formats ("ตอบเป็น JSON เท่านั้น") for machine-parsed outputs.
  • Scene text is the weakest reading track (previous build 0.812 vs base 0.737; this build re-benchmarking) — for photos of signs/storefronts, prefer the base model or a scene-text specialist.
  • Not evaluated for: Thai dialects, vertical/rotated text, medical or legal advice. Handwriting remains genuinely hard — 0.261 CER means roughly one character in four is still wrong on difficult samples.
  • The model can still hallucinate on illegible input.

Recommended: pair with RAG for factual and regulated domains

This model is strongest at reading, explaining, and answering over documents you give it. For tax, legal, medical, or any compliance-sensitive work, we recommend running it with retrieval-augmented generation (RAG) over authoritative sources — e.g. current statutes, official announcements, or your organization's verified knowledge base — plus human review, rather than relying on closed-book statutory recall.

For the legal domain specifically, use our purpose-built Thai legal model: `iapp/openthai2.0-legal-thaillm-nemotron-3-nano-30b-a3b`.

📣 Press & social assets

[image]

Citation

@misc{openthai2_2026,
  title  = {OpenThai 2.0: An Open Thai Knowledge and Document AI},
  author = {iApp Technology and Artificial Intelligence Entrepreneur Association of Thailand},
  year   = {2026},
  url    = {https://openthai.aieat.or.th}
}

Built by iApp Technology, launched jointly with AIEAT. Base model: Qwen/Qwen3.8-27B (Apache 2.0).

Developed by OpenThai Team (iApp Technology / AIEAT)

[image]

ผู้สนับสนุน (Sponsor)

<a href="https://siam.ai"><img src="assets/siamai-logo.png" alt="Siam AI Corporation" width="120"/></a>

ได้รับการสนับสนุน GPU NVIDIA H100 × 8 ใบ จาก บริษัท สยาม เอไอ คอร์เปอเรชั่น จำกัด — ขอขอบคุณเป็นอย่างยิ่งสำหรับการสนับสนุนโครงสร้างพื้นฐานการประมวลผลตลอดโครงการ · siam.ai

Training and evaluation for this model ran on 8× NVIDIA H100 GPUs generously provided by [Siam AI Corporation](https://siam.ai) — thank you for supporting open Thai AI.