{"slug": "thx-02-a-4-5b-open-decision-model-that-beats-27b-models-and-the-api-is-free", "title": "THX-02: a 4.5B open decision model that beats 27B models — and the API is free", "summary": "A developer released THX-02, a 4.5B-parameter open decision model under Apache-2.0 weights, runtime and server, with a free hosted API. The model returns calibrated probability distributions over user-supplied options (choice, yes/no, and ordered score questions) rather than generated text, and can run locally on a single 24 GB GPU via `pip install \"thx02[local]\"`. The developer says the model outperforms 27B models on decision tasks and uses a built-in gate to decide when step-by-step reasoning is needed, answering a sample Azerbaijani billing ticket in 126 ms.", "body_md": "Most of what AI does inside a real product is not writing essays. It is deciding.\n\nWhich team owns this ticket. Is this message phishing. Does this applicant pass the policy. What is the next action. Which of these 40 categories does this document belong to.\n\nToday teams pick between two bad options. A large chat model: slow, expensive per call, and it will happily invent a label that was never on your list. Or a narrow classifier: fast and cheap, but you retrain it for every new task, and it gives you a score you cannot explain to anyone.\n\nThere is a third path. A model built for decisions only. You send it a state — text, JSON, or up to four images — plus typed questions, and it returns a probability for every option you supplied. It does not generate prose, so it cannot produce an answer outside your list.\n\nThat model is THX-02. 4.5B parameters. Apache-2.0 weights, runtime and server. **And we are giving the API away for free.**\n\nWe built it because we needed it ourselves, and we are releasing it because a decision layer that everyone has to pay per token for is a decision layer nobody builds.\n\nThis is the part we want to lead with, because it changes who can use this.\n\n`pip install \"thx02[local]\"` puts the same model on one 24 GB GPU, and `thx02 serve` gives you the same HTTP interface on your own metal.\nFree is not a marketing word here. The weights are Apache-2.0, so the floor of what you can do without paying anyone is: run it yourself, forever.\n\n```\npip install thx02\nexport HALX_API_KEY=\"your-key\"\n```\n\nGet a key at the API docs link at the bottom of this post.\n\nHere is a real request: a customer writes in Azerbaijani that they were charged twice for the same card payment.\n\n```\nthx02 decide \\\n  --state \"Müştəri: kartımdan eyni ödəniş üçün iki dəfə pul çıxıb, 240 AZN. Sifariş #88213.\" \\\n  --choice \"billing,support,shipping,technical\" \\\n  --yesno \"Should this be refunded automatically?\"\nbilling      ████████████████████████████████  96.0%\nsupport      ██                                   2.4%\nshipping     ▏                                    0.9%\ntechnical    ▏                                    0.7%\n\nrefund: yes  ███████████████████████████████   95.8%\nrefund: no   █                                    4.2%\n\n126 ms · think=auto · 1 thought generated\n```\n\nTwo things to notice. The answer is a distribution, not a string — so you can set your own threshold and let the model abstain instead of guessing. And the model decided on its own that this one needed no step-by-step reasoning: it answered directly in 126 ms.\n\nThe same call in Python, with three question types:\n\n``` python\nfrom thx02 import Client, choice, noul, score\n\nclient = Client()\n\nresult = client.decide(\n    state=\"Müştəri: kartımdan eyni ödəniş üçün iki dəfə pul çıxıb, 240 AZN. Sifariş #88213.\",\n    questions=[\n        choice(\"team\", [\"billing\", \"support\", \"shipping\", \"technical\"]),\n        noul(\"refund\", \"Should this be refunded automatically?\"),\n        score(\"urgency\", \"How urgent is this?\", 1, 5),\n    ],\n)\n\nfor q in result.answers:\n    print(q.id, q.probabilities)\n```\n\n`choice` takes up to 255 options. `noul` is a yes/no with calibrated probabilities on both sides. `score` is an ordered scale, returned as a full distribution over the levels rather than a single number — which means you can see whether the model is confident between 3 and 4, or genuinely torn between 1 and 5.\n\nEvery answer is a full distribution. That is the whole point. A routing system that auto-acts above 0.9 and escalates below 0.6 is a system you can put in front of a customer. A system that returns `\"billing\"` and nothing else is a system you have to babysit.\n\nThe interesting engineering problem in a decision model is not \"make it smarter.\" It is \"make it smarter without making it slower and without letting it talk itself out of a correct answer.\"\n\nTHX-02 has a built-in gate:\n\nThat last step is the important one. Thinking is an additive signal, not a replacement. If the direct pass is confident and the thought disagrees, the thought loses.\n\nMedian latency stays around 80 ms with the gate active. On math word problems the thought adds about 25 points. On natural language inference, code tracing and graduate-level science it adds 4 to 6 — real, but not worth paying 10x latency for on every request, which is exactly why the gate exists.\n\nHere is a case where it fires. A policy check that requires arithmetic:\n\n```\nresult = client.decide(\n    state=\"Applicant: monthly income 4,200 AZN, existing loan payments 1,800 AZN, \"\n          \"requested new payment 600 AZN.\",\n    questions=[noul(\"dti\", \"Does this applicant pass the 50% debt-to-income policy?\")],\n    think=True,\n    return_thoughts=True,\n)\n\nprint(result.answers[0].probabilities)\nprint(result.thoughts[0])\nfail: 75.5%   pass: 24.5%\n\nthought: existing 1800 + new 600 = 2400. 2400 / 4200 = 57.1% > 50% policy limit. fail.\n```\n\nThe model did not guess. It computed, showed the arithmetic, and the probability moved because the arithmetic moved it.\n\nDecision Index 0.3, the open benchmark suite for decision models:\n\n| Model | Size | Decision Index 0.3 | \n|---|---|---|\n| **THX-02 (thinking)** | **4.5B** | **65.06** | \n| THX-02 (direct) | 4.5B | 63.83 | \n| Best 27B decision model | 27B | 62.25 | \n| Cloudflare clef | — | 61.71 | \n| Jev | — | 57.96 | \n| THX-01 | 0.3B | 11.30 | \n\nRead that table again. A 4.5B model scores above the best 27B decision model we could find, and above Jev's published index by more than seven points. On the public Decision Vision Index sets it reaches 72.19.\n\nWe also want to be precise about what those numbers are, because \"we beat X\" deserves the methodology attached:\n\nIf the independent number lands lower, we will say so in the same place we said 65.06.\n\nFive post-training stages on top of an open base model. Each one was kept only if it improved a held-out split — no stage survived on vibes.\n\nThat last point matters more than it sounds. A model trained on another model's answers inherits that model's mistakes, confidently. A model trained on executed code and solver output inherits the truth.\n\n**Hosted, free:**\n\n```\npip install thx02\nexport HALX_API_KEY=\"your-key\"\nthx02 decide --state \"...\" --choice \"a,b,c\"\n```\n\n**On your own GPU** — one 24 GB card is enough:\n\n``` python\npip install \"thx02[local]\"\npython -c \"from thx02 import THX02; THX02.load('HAL-X-AI/THX-02')\"\n```\n\n**As a server** with the same HTTP interface as the hosted API:\n\n```\npip install \"thx02[server]\"\nthx02 serve\n```\n\n**On a phone.** The client is zero-dependency and runs in Termux:\n\n```\npkg install python\npip install thx02\nexport HALX_API_KEY=\"your-key\"\nthx02 decide --state \"...\" --yesno \"Is this message spam?\"\n```\n\n**Fine-tuned to your domain.** The weights load through ms-swift like any other model of this family, and the think adapter is a separate artifact you can keep, drop or retrain.\n\nCPU inference is possible but not the point: about 0.6 s per short request on 8 x86 cores in BF16. On a GPU you are looking at 50 to 150 ms.\n\nWe would rather tell you now than have you find out in production.\n\nA decision layer sits in the middle of your product. It sees customer messages, applicant data, medical codes, transaction descriptions. For anyone in a regulated sector — banking, insurance, health, public sector — \"send it to a remote black box and hope\" is not an architecture, it is a risk.\n\nSo: Apache-2.0 weights, the think adapter, the runtime and the server. On-premise, inspectable, adaptable. Multilingual from launch, with English, Russian, Chinese, Turkish and Spanish alongside a deliberate focus on Azerbaijani, Kazakh, Uzbek and Kyrgyz — languages that most decision models treat as an afterthought, if they treat them at all.\n\nAnd free to call, because the fastest way to find out whether a decision model belongs in your product is to put one in your product this afternoon.\n\n`pip install thx02`\n`pip install \"thx02[server]\"`\nWe can't wait to see what you decide with it.\n\n**HAL-X, Baku**", "url": "https://wpnews.pro/news/thx-02-a-4-5b-open-decision-model-that-beats-27b-models-and-the-api-is-free", "canonical_source": "https://dev.to/montydrief/thx-02-a-45b-open-decision-model-that-beats-27b-models-and-the-api-is-free-233n", "published_at": "2026-11-05 19:09:13+00:00", "updated_at": "2026-11-05 19:19:32.240981+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "large-language-models", "ai-agents", "ai-tools"], "entities": ["THX-02", "Halx"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/thx-02-a-4-5b-open-decision-model-that-beats-27b-models-and-the-api-is-free", "markdown": "https://wpnews.pro/news/thx-02-a-4-5b-open-decision-model-that-beats-27b-models-and-the-api-is-free.md", "text": "https://wpnews.pro/news/thx-02-a-4-5b-open-decision-model-that-beats-27b-models-and-the-api-is-free.txt", "jsonld": "https://wpnews.pro/news/thx-02-a-4-5b-open-decision-model-that-beats-27b-models-and-the-api-is-free.jsonld"}}