Smart routing

The cheapest model that clears the bar.

A router is the difference between an AI platform and an AI bill. ThaiGPT+ classifies every request, scores it against what each model in the family can actually do, and sends it to the smallest one that will get it right — then checks the answer and escalates if it did not. This page is how that decision is made, and what you are allowed to force.

Four decisions, before a token is generated

1

Which model

Lite for a rewrite, Base for most things, Pro when the context does not fit, Vision when there is an image, Voice when there is audio, Reason when a human has to audit the chain.

2

Where it runs

On the device if the device can do it, in-country if it cannot, and nowhere at all if the workspace has pinned a region the request would leave.

3

How much it costs

The router knows the price of every model in baht and the balance left on the account. A cheap request is not sent to an expensive model to be safe.

4

Whether to escalate

The first answer is checked against the request. A failed check re-routes upward and says so in the response — you see that it happened, and what it cost.


What it reads

Eight signals, none of which require you to describe your request. All eight are visible in the response, so a routing decision is something you can argue with rather than something that happens to you.

task

Task class

Draft, summarise, translate, extract, classify, reason. Inferred, and overridable.

dialect

Script and dialect

Central Thai, Isan, Kam Mueang, Pak Tai, mixed Thai-English, or Thai written in Latin letters.

modality

Modality

Text, image, scanned PDF, audio. An image in the request rules out every text-only model.

tokens

Context length

Measured with the Thai tokenizer, not estimated from character count — which is how foreign platforms get this wrong.

pdpa

Sensitivity

A Thai national ID, a patient record, a tax number. Detected locally; it pins the route before the request is sent anywhere.

network

Connectivity

Offline, data-saver, or full. The router degrades the model rather than the answer.

baht

Budget

Remaining prepaid baht, and the per-request ceiling the account set.

ttft

Latency requirement

A voice reply needs a first token in under a second. A nightly batch does not.


The routing table

Illustrative. The live table is served from the platform and changes as models are added — which is the point of not naming a model in your client.

RequestRouted toWhy
“Rewrite this in polite register”ThaiLLM-Lite · on deviceShort, no retrieval, no network needed
“Summarise this 6-page circular”ThaiLLM-BaseFits the context, needs citations
“Which clauses changed across these 400 pages?”ThaiLLM-ProContext exceeds Base
[photo of a stamped form]ThaiLLM-Vision → BaseImage first, then reasoning over what was read
[voice, spoken in Isan]ThaiLLM-Voice → BaseDialect detected, transcribed, answered in the dialect it heard
“Does this procurement meet the threshold?”ThaiLLM-ReasonA person has to be able to check each step
Anything containing a national IDOn-device, or refusedWorkspace policy, enforced before transmission

A route it is allowed to refuse

Every other routing layer optimises for cost and latency. This one has a third axis, and it is the one an institution is actually buying: a workspace can declare that its requests never leave th-bkk-1, and the router will return an error rather than quietly find a model somewhere else. A refusal is a feature. It is also the only version of data residency that survives contact with a router.

409 route_forbidden · workspace pinned to th-bkk-1

The escalation ladder

Escalation is visible and billed at what it cost, not at the top model's rate. If the router was wrong, you can see that it was wrong.

ThaiLLM-Lite×1
ThaiLLM-Base×4
ThaiLLM-Pro×11
ThaiLLM-Reason×26

Each step is only taken if the previous answer fails its own check.

And you can always override it

Pass a model name and the router steps aside. Pass a policy and it obeys that instead. Routing is a default, not a cage — but the default is what 81% of calls in the pre-release actually used.

POST /v1/messages
{
  "model": "auto",                    // default: the router decides
  "route": {
    "region": "th-bkk-1",             // refuse rather than leave
    "max_baht": 0.75,                 // per-request ceiling
    "prefer": "cheapest_passing"      // or "fastest" | "best"
  }
}

// The decision comes back with the answer, every time:
// { "routed_to": "ThaiLLM-Base", "considered": ["Lite", "Base", "Pro"],
//   "reason": "context 4.1k > Lite 8k window at 0.62 confidence",
//   "escalated": false, "region": "th-bkk-1", "usage": { "baht": 0.11 } }

ໂຄງການກ່ອນເປີດຕົວ

ເລືອກວິທີເຂົ້າຮ່ວມ

ເປີດຮັບສາມກຸ່ມ. ເລືອກກຸ່ມໜຶ່ງແລ້ວ ແບບຟອມຂ້າງລຸ່ມຈະຖືກຕັ້ງໃຫ້ — ປ່ຽນໄດ້ຢູ່ບ່ອນນັ້ນ.