Instructions to use flock-io/this-that-model-1.1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use flock-io/this-that-model-1.1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="flock-io/this-that-model-1.1")# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("flock-io/this-that-model-1.1") model = AutoModelForCausalLM.from_pretrained("flock-io/this-that-model-1.1", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- this-that-model-1.1
- What changed from 1.0
- Where 1.1 sits against models that generate tokens
- The decision type where a 1.88 B model wins outright
- Type by type, against the better of the two frontier systems
- What one decision costs
- The frozen third-party cohort
- Calibration
- What it does well, and what it does not
- Usage
- Citation
- Licence
- What changed from 1.0
this-that-model-1.1
A typed decision model. One forward pass, no decoding loop, no parser, no retry.
1.1 keeps everything 1.0 did and adds the decisions 1.0 could not make: the ones where several rules apply at once, where a policy has an exception and the exception has an exception, and where the answer is not readable from any single column of the state.
- Parameters: 1.88 B
- Architecture: Qwen3.5-style hybrid, 18 of 24 layers DeltaNet linear attention, 6 full attention
- Latency: 30.9 ms per question on a consumer GPU, zero generated tokens
- Inference code: github.com/FLock-io/this-that-model
What changed from 1.0
The architecture is identical. What changed is the training mixture: 64,028 composed-decision questions over 112 rule structures and 40 domains, and two loss terms that use pairs the generator can make and nothing else can — the same decision rendered four ways, which must be answered the same, and two policies over one state, which must not.
| 1.0 | 1.1 | ||
|---|---|---|---|
| complex decisions (1,710 questions, chance 0.258) | 0.406 | 0.775 | the capability 1.1 adds |
| spatial benchmark, 7,305 questions | 0.839 | 0.871 | |
| spatial benchmark, 2,250-question subset | 0.844 | 0.870 | |
| latency | 30.9 ms | 30.9 ms |
Where 1.1 sits against models that generate tokens
Every system on all 1,710 questions, scored the same way: one question, declared options, the answer read back, and a system that returns nothing counted wrong rather than excused.
| System | Accuracy | Generated tokens | Latency |
|---|---|---|---|
claude-opus-5 |
0.834 | ~200 | ~1000 ms |
gpt-5.6 |
0.816 | ~200 | ~1200 ms |
| this-that-model-1.1 | 0.775 | 0 | 30.9 ms |
glm-5.3 |
0.652 | ~200 | ~800 ms |
kimi-k3 |
0.522 | ~200 | ~1000 ms |
deepseek-v4.1-flash |
0.511 | ~4 | ~800 ms |
deepseek-v4-pro |
0.470 | ~4 | ~900 ms |
this-that-model-1.0 |
0.406 | 0 | 30.9 ms |
laya-typed-decisions |
0.310 | 0 | 25 ms |
| chance | 0.258 | — | — |
The benchmark is public: limberc/this-that-complex-decisions.
1.0's row is zero-shot — that benchmark did not exist when it was trained, and none of its decision types were in its mixture. The distance from 0.406 to 0.775 is the same architecture with different training data, which is the whole claim this release makes.
One row is worth more than the ranking. On knapsack_subset — choose the group of items that fits
a budget — eight of the nine systems score between 0.07 and 0.27 against a chance rate of 0.084.
This model reaches 0.678. Whatever that decision needs, it is not what model scale usually buys.
The decision type where a 1.88 B model wins outright
knapsack_subset asks for the group of items that fits a budget and maximises value. Greedy
selection fails on it about half the time. Eight of the nine systems measured land between 0.067
and 0.267 against a chance rate of 0.084; this one reaches 0.678, two and a half times the next
best and five times claude-opus-5.
Type by type, against the better of the two frontier systems
Four decision types go this model's way, two are a tie at 1.000, and three more are inside a tenth. The rest go the other way, and the two widest are worth stating plainly: judging whether a state contains enough information to decide at all (0.444 against 0.833) and iterating a cascade to its fixed point (0.678 against 0.978).
What one decision costs
Not a like-for-like axis, and the chart says so: a hosted price covers serving and margin, while ours is electricity at 80 W and $0.30/kWh for the 30.9 ms the card is busy. Read it as one order of magnitude rather than five.
The frozen third-party cohort
68 questions a third party recorded against a hosted commercial decision service, in their wording rather than ours:
| accuracy | Brier ↓ | NLL ↓ | |
|---|---|---|---|
| majority-class baseline | 0.647 | — | — |
| the hosted service | 0.765 | 0.133 | 0.403 |
| this-that-model-1.0 | 0.941 | 0.042 | 0.126 |
| this-that-model-1.1 | 1.000 | 0.003 | 0.023 |
Calibration
Where the true answer is a computed probability, so the target follows from the transition rules rather than from anyone's opinion. Lower qL2 is better; a constant predictor is the thing to beat.
| accuracy | qL2 ↓ | constant predictor | |
|---|---|---|---|
sim_event_ood |
0.720 | 0.0253 | 0.0962 |
sim_local_ood |
0.990 | 0.0203 | 0.4928 |
1.0 scored 0.0250 and 0.0096 on those two. The second is a real regression — half as sharp as it was — though still a factor of twenty-four better than predicting a constant.
What it does well, and what it does not
Measured per family, and the split is sharp enough to be worth stating:
| Reliable (≥ 0.85) | which rule governs; an exception and its exception; a scope conflict between two authorities; which fact, removed, changes the answer; a chain of filters |
| Unreliable (≈ 0.50) | weighing several numeric criteria against each other; the cheapest change that flips a decision; judging whether the state contains enough information to decide at all |
The failures are not random guessing dressed up as confidence. On the families it cannot do, its confidence when wrong is far below its confidence when right — 0.45 against 0.77 on weighted criteria — so the number it returns still separates the cases you can take from the cases you should escalate.
That stops being true off-distribution. Asked a rule structure absent from training, 1.1 scores 0.447 against a chance rate of 0.31 and its calibration error rises to 0.20: there it is confident and wrong, and the confidence will not save you. If your decisions have a shape this model has not seen, measure before you rely on it.
Usage
pip install git+https://github.com/FLock-io/this-that-model
from thisthat import TypedDecider, Question
decider = TypedDecider.from_pretrained("flock-io/this-that-model-1.1")
answer = decider.decide(
'{"bays": {"bay-a": {"free": 7, "distance_m": 40, "handling": "chilled"},'
' "bay-b": {"free": 3, "distance_m": 12, "handling": "ambient"}},'
' "policy": ["Bays without chilled handling are ineligible.",'
' "Among those eligible, take the most free positions."]}',
Question("Which bay is assigned?", ["bay-a", "bay-b", "hold in transit"]),
)
print(answer) # bay-a
print(answer.confidence) # the number is calibrated in-distribution; threshold on it
Citation
@misc{cheng2026thisthat,
title = {A typed decision model that decides in 30 ms, for a millionth of a cent},
author = {Cheng, Zehua and Dai, Wei and Sun, Jiahao},
year = {2026}
}
Licence
MIT. Adapted from decider-2b under Apache-2.0.
- Downloads last month
- 70




