When I put a decision model to work on my X feed, every post it judged went to Jev, TypeSafe’s model, through OpenRouter. The cost was never the issue: about 3 cents for a thousand posts. What bothered me was everything else. The posts I read left my laptop, and the filter needed an API key and an OpenRouter account.
Then Ollama, which runs open models on your own computer, added decision models. Its release notes describe the new endpoint as “based on TypeSafe’s Jev API”. It launched with two open models, Tev1 from Together AI and Nimble from Bespoke Labs. Cloudflare’s Clef models followed, and Ollama’s docs say those can also judge images. A later release runs them all on Apple’s MLX framework. If the API really matched, my add-on, Xift, could ask its questions without anything leaving my laptop.
It did match. Xift sends each post with four noul questions: does it mainly fish for likes, reposts, replies or follows, is it mainly written to provoke anger, does it share little real information, and is it mainly selling something. I sent the same request to Ollama and got four probabilities back in the same shape. The only change was the address: a port on my own laptop instead of OpenRouter.
Memory was the real limit. My laptop is a MacBook Pro with an M4 chip and 16 GB of memory, which the processor and the graphics share. Tev1 comes in two sizes, 0.8 and 4 billion parameters, 1.5 and 4.4 GB to download, and both load without trouble. Clef Flash, the model that reads photos, needs 11.5 GB of graphics memory, more than macOS gives Ollama on a 16 GB Mac. Raising that limit let it load. On five photo posts I wrote for the test, it reached the same verdicts as Jev, and without the photos it missed three of them. But each post took between 9 and 78 seconds, with almost no memory left for anything else. On this laptop, local means text only.
I started where I did with Jev: posts I wrote myself, the kind my feed is full of. Of 16, eleven were noise and five were worth reading. Under the limits I had set for Jev, Jev collapsed all eleven. Tev1 4B collapsed six, Tev1 0.8B five, and Nimble, the largest text model at 9 GB, eight. None of them collapsed a post worth reading. The local models weren’t blind to the noise. They scored it lower, so it rarely reached limits measured on Jev.
That is where the design of the first version paid off. Jev only gives scores. A post collapses when any score reaches its limit, and the limits are mine, outside the model. So each model now gets its own limits, lower for the local models, and keeps its own saved scores, so one model’s numbers are never compared against another model’s limits.
Invented posts are not my feed, though. So I let a script scroll X search results on AI agents and LLMs, ten minutes for each local model. Afterwards I had all three models score the 442 posts those scrolls saw, from their text alone, each under its own limits.
| Jev | Tev1 4B | Tev1 0.8B | |
|---|---|---|---|
| Posts collapsed | 37 (8%) | 34 (8%) | 24 (5%) |
| Mostly as | Low substance, self-promotion | Self-promotion | Rage bait |
| Also collapsed by Jev | – | 13 | 2 |
| Average rage bait score | 0.08 | 0.03 | 0.29 |
| Average low substance score | 0.42 | 0.14 | 0.33 |
The rates were close. Jev collapsed 8% of the posts, Tev1 4B 8% and Tev1 0.8B 5%. The posts weren’t. Of the 37 Jev collapsed, Tev1 4B collapsed 13 and Tev1 0.8B only 2. Just one post was collapsed by all three.
Each model had its own idea of noise. Tev1 4B collapsed posts only for selling something: mostly AI-agent products, crypto projects and event plugs. Jev had given most of them between 0.5 and its limit of 0.85 for self-promotion, so those calls were easy to defend. Tev1 0.8B collapsed posts mostly as rage bait, including news and plain questions that Jev scored well under its limit. Neither caught what Jev caught most often: empty one-liners and throwaway replies, posts that call something great and say nothing else. Jev gave those 0.90 or more for low substance. The local models gave them anywhere from about 0.1 to 0.7, and none reached its limit.
This is where the meaning of a score comes in. A forecaster who says there is a 30% chance of rain is calibrated if it rains on about three in ten of those days. A calibrated decision model works the same way: of the posts it gives 0.3 for rage bait, about three in ten really are. It follows that across many posts, a calibrated model’s average score is close to the share of posts that really are what the question asks. On these 442 posts, Jev’s average rage bait score was 0.08 and Tev1 0.8B’s was 0.29. One says about one post in twelve is rage bait, the other more than one in four. They can’t both be calibrated, and the posts Tev1 0.8B collapsed suggest it is the one that overshoots on rage bait. On low substance the gap runs the other way: Jev averages 0.42 and Tev1 4B 0.14, about four posts in ten against one in seven, and there I can’t tell which is closer. Calibration is not a given for neural networks: one widely cited study found that “modern neural networks, unlike those from a decade ago, are poorly calibrated”.
In the first article I left one claim untested: that a 0.9 is right nine times in ten. I still can’t say that for any of these models. What I can say is that a 0.9 from one model is not a 0.9 from another. Two models behind the same API answer the same question on different scales, and limits measured on one don’t carry over to the other.
Speed was the other half. Over the network, Jev answered in about a third of a second. While scrolling, Tev1 0.8B took 0.75 seconds a post and kept up: on average, 1% of the posts on screen were still waiting for a verdict. Tev1 4B took 3.2 seconds, and 4 in 10 posts on screen were still waiting. A verdict that arrives after I’ve scrolled past a post leaves it open, so a slow model filters less than its scores suggest. These times say as much about my laptop as about the models. Jev runs on hardware no laptop matches, so this is not a like-for-like comparison. But a laptop is what most people would run Ollama on, and if privacy doesn’t matter to you, the cloud’s speed is a fair reason to stay there.
So on a 16 GB laptop, running locally is a trade. The model that judges well enough is too slow to keep up, and the one that keeps up judges poorly. What I get in return is real: no key, no account, and nothing I read leaves the laptop. A machine with more memory might change the speed half of that trade; I haven’t tested one. It wouldn’t change the other lesson. The shared API made switching models a one-line change, and the scores made it a new calibration.
Xift now has a Local setting next to Jev, with the setup in its README. Jev stays the default. With Local, posts go to Ollama on your own computer and nothing goes to OpenRouter. Next I want to try a model small enough to run inside Firefox itself, for people who don’t run Ollama. Ollama keeps a list of the decision models it runs; the ones here are the ones it had in October 2026.