Relieving LLMs of the Decision Load: A Hybrid Bulletin Pipeline with Jev LLM’leri Karar Yükünden Kurtarmak: Jev ile Hibrit Bir Bülten Hattı
For a while now, I’ve been working on a weekly industry bulletin at the company I work for. The idea is simple but effective: collect what comes in from news sites around the world, pick out what management needs to know that week, analyze it, and email it to the executives as a summary document. In practice, that means around 160 stories a day, nine languages, and the same question for every one of them: Does this story go into the bulletin, and if it does, how important is it? Today that question is answered by GPT-5, in other words an LLM. It reads the stories in batches of twenty-five, gives each one an importance score and, in the same call, writes a summary as well.
Every time I think about this pipeline, I get stuck in the same place: we run a whole LLM for a yes or a no. Do we really have to trust an LLM to make decisions? Who’s to say it will always return the answer I specified in the prompt? What if it hallucinates and sends back a response I didn’t want? To get rid of these doubts and fears, I also asked Jev about the 2,281 stories from the same fourteen days. The short answer: For the decision, Jev is enough, and very cheap. For the text, I still need the LLM.
Jev: a model that can’t write, in an age of AI that does
Jev is what TypeSafe calls a “System One” model. The name comes from Kahneman’s “System 1”, his term for fast, intuitive thinking (and while we’re at it, I strongly recommend his book Thinking, Fast and Slow). You give it a state and add typed questions to it, and it returns the answers along with their probabilities. The version I use, jev-1.13.0, has three question types: Noul gives the probability that a yes/no question is a yes, Choice gives one of the options you define and the probability of each, and Score gives a degree on a scale of ordered levels. That’s it. It doesn’t write summaries, it doesn’t give reasons, it doesn’t chat. The price matches: you pay only for the tokens it reads, $0.042 per million tokens. The response is free.
Asking for a decision
{
"model": "jev-1.13.0",
"state": {
"title": "« Ça arrive une fois par génération », le marché des tankers atteint un niveau hors normes et l’occasion explose",
"source": "Le Marin",
"language": "French",
"published": "2026-10-08",
"text": "[the first 1,500 characters of the story]",
"reader": "Management of a global multi-purpose port and terminal operator, reading a weekly news bulletin"
},
"questions": {
"in_scope": {
"type": "noul",
"instructions": "Is this news item in scope for the weekly bulletin of a global port and terminal operator?",
"criteria": {
"true": "A port, terminal, shipping line, cargo flow, trade lane, or the rules and infrastructure governing them is the subject of the story: cargo volumes, vessel calls, berth, yard or gate operations, concessions, port tariffs, freight rates, transport regulation, terminal equipment or port technology, port labour, investments in these, or security incidents, conflicts and sanctions that disrupt shipping routes, chokepoints or port calls.",
"false": "A maritime or logistics word merely appears, or the story changes nothing for a port or terminal operator: software unrelated to ports, shipping or logistics; medicine; wine; retail or consumer prices; sports; wildlife; naval or military procurement with no effect on commercial shipping; domestic politics without a trade measure; vendor or award marketing."
}
}
}
}
{
"model": "jev-1.13.0",
"answers": {
"in_scope": { "type": "noul", "noul": 0.89 }
}
}
(For anyone wondering what on earth a Noul is: think of it as a probabilistic take on a Bool (true/false). Instead of throwing a hard “yes” or “no” at you, Jev gives you the likelihood that the statement holds. For example, when you give it the story above and ask, “Is this story in scope for the weekly bulletin?” the answer that comes back, "noul": 0.89, says the story meets the criteria with 89% probability. Whether you count that as a “yes” is up to you.)
That’s the whole request. The state holds the story itself and its reader, because what we call “relevant” depends on the reader: a story that matters to a terminal operator can be nothing but noise to a transport company. The decision itself is one question and two criteria: what “yes” means and what “no” means. That’s where the real work is, in writing the criteria. Jev reads what you wrote, not what you meant. In the first version, the word “defence” that I had put on the “no” side was dragging down stories about maritime security. Once I narrowed military procurement to “with no effect on commercial shipping” and wrote security incidents explicitly on the “yes” side, those stories fell into place. In the same request I ask five more questions, such as importance, section, and impact; it’s all one request, one price.
Deciding with a probability
const res = await fetch('https://api.typesafe.ai/v1/systemone', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.TYPESAFE_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify(request), // the request above
});
const { answers } = await res.json();
const p = answers.in_scope.noul;
const route = p >= 0.85 ? 'auto_in' : p <= 0.15 ? 'auto_out' : 'review';
To repeat what I just said: Jev’s answer isn’t yes. It’s an 89% probability of yes. At first glance that looks like a small difference, but I think it’s the whole point. In the code, this number sends each story down one of three routes: 0.85 and above is a candidate for the bulletin, 0.15 and below is dropped, and everything in between goes to an editor. Across 2,281 stories, that means 27% are taken directly, 26% are dropped directly, and 47% are put to a human. So when Jev isn’t sure, it says so, and the code can act on that. A score that an LLM writes out as text doesn’t give you this: I can’t tell how sure a 62 is. For now I picked the thresholds myself; labeled data will tell me the right ones.
How cheap, how fast
| Jev | GPT-5 | |
|---|---|---|
| Cost per story | $0.000083 | $0.00525 |
| Weekly cost (~1,140 stories) | $0.094 | $5.99 |
| Decision for one story (p50) | 291 ms | ~156 s |
| Price | $0.042 / M input, output free | $1.25 / M input, $10 / M output |
Per story, Jev is about 63 times cheaper than GPT-5. Most of the gap comes from an interesting place: 84% of GPT-5’s bill goes not to the tokens it reads but to the tokens it writes, reasoning included. With Jev, nothing gets written, and the answer is free. Speed tells a similar story. Because GPT-5 processes stories in batches of twenty-five, a story’s decision only arrives once the whole batch is done, which typically means two and a half minutes. With Jev, every story is a separate request, and the answer usually comes back in under half a second. And that time includes the request’s round trip from Türkiye to the US. Imagine what it would be if the server were closer.
The numbers in this pipeline are small to begin with; we’re talking about the difference between roughly $6 and 9 cents a week. But if the number of stories grew a hundredfold, we’d be talking about roughly $600 versus $9 a week. That’s an enormous difference for bigger workflows, or maybe for personal hobby projects.
But is it right?
| Comparison (no human labels: agreement) | Result |
|---|---|
| Scope decision, with GPT-5 | 81% agreement |
| Importance ranking, with GPT-5 (Spearman) | 0.76 |
| Scope decision, with the keyword filter | 69% agreement |
| The 613 stories in the bulletin: Jev takes / drops directly | 71% / 3% |
Being cheap and fast means nothing on its own; the real question is whether it makes the right call. Here I have to be honest: I have no human labels. What I measured isn’t accuracy but agreement with the live system’s earlier decisions, and the LLM may be wrong too. Still, the picture is promising. Jev and GPT-5 agree on the scope decision 81% of the time, and when ranking stories by importance they largely arrive at the same order. Of the stories that made it into the bulletin, Jev takes 71% directly and drops only 3%. It also finds 76 relevant stories that the keyword filter missed. I’ll know who is right once the business unit labels a sample of 96 stories.
Where it falls short
Jev is, of course, no cure-all. These are the limits I’ve seen:
- It doesn’t generate text. For the summary, the headline, and the “why it matters” note, I still need the LLM. So Jev doesn’t stand in for the LLM; it stands in front of it.
- Accuracy may drop outside English. Its own documentation warns about this. In my data the picture is mixed, so each language has to be measured on its own. This will surely be fixed in the future. Microsoft has already announced its own decision model (Microsoft-Decision-1), and OpenAI its Decisions API, after all.
- It reads literally. A single word in a criterion can shift the result; writing the criteria is the job itself. Our prompt engineering skills come into play here, too.
Where I landed
The decision goes to Jev, the text to the LLM. When I put Jev in front of the LLM, for example by sending the LLM only the stories with a probability of 0.5 or above, the share of stories that reach the LLM drops to 54% and the weekly cost falls from $5.99 to $3.89. That comes at a price: 53 stories that made it into the bulletin in the current pipeline are left out. If I play it safer and drop only those at 0.15 or below, the savings shrink to 16% and the number of lost stories to 16. Again, the labels will tell me which trade-off is right. Despite this uncertainty, a properly built flow is certain to bring incredible savings.
Next up is running Jev in the live pipeline for a while purely as an observer, changing nothing: a ghost working in parallel. However Jev fares in this project, it’s obvious that in the future we’ll see problem-specific models like this alongside the AIs that generate text.
Bir süredir çalıştığım şirkette haftalık bir sektör bülteniyle uğraşıyorum. Fikir basit ama etkili: Dünyanın dört bir yanındaki haber sitelerinden gelenleri toplayıp yönetimin o hafta bilmesi gerekenleri seçmek, analiz etmek ve özet bir belge hâlinde yöneticilere mail aracılığıyla göndermek. Pratikte ise günde 160 civarı haber, dokuz dil ve her biri için aynı soru demek: Bu haber bültene girer mi, girerse ne kadar önemli? Bugün bu soruyu GPT-5, yani bir LLM cevaplıyor. Haberleri yirmi beşerli paketler hâlinde okuyor, her birine bir önem puanı veriyor ve aynı çağrıda bir de özet yazıyor.
Bu hattı her düşündüğümde aynı yere takılıyorum: Bir evet ya da hayır için koca bir LLM modelini çalıştırıyoruz. Karar vermek için LLM’e güvenmek zorunda mıyız? Her zaman benim prompt’ta belirttiğim cevabı döneceği ne malum, ya halüsinasyon görür de istemediğim bir response dönerse? Bu soru işaretlerinden ve korkularımdan kurtulmak için aynı on dört günün 2.281 haberini bir de Jev’e sordum. Kısa cevap şu: Karar için Jev yeterli ve çok ucuz. Metin için ise LLM’e hâlâ ihtiyacım var.
Jev: yazan yapay zekâlar çağında yazamayan bir model
Jev, TypeSafe’in “System One” dediği türden bir model. Bu ad, Kahneman’ın hızlı ve sezgisel düşünme için kullandığı “Sistem 1”den geliyor (kendisinin Hızlı ve Yavaş Düşünme kitabını da yeri gelmişken şiddetle öneririm). Ona bir state veriyorsunuz, yanına da tipi belli sorular ekliyorsunuz; o da size cevapları ve olasılıklarını dönüyor. Kullandığım jev-1.13.0’da üç soru tipi var: Noul bir evet/hayır sorusunun evet olma olasılığını, Choice tanımladığınız seçeneklerden birini ve her birinin olasılığını, Score ise sıralı seviyeler arasında bir dereceyi veriyor. Hepsi bu. Özet yazmıyor, gerekçe sunmuyor, sohbet etmiyor. Ücreti de buna göre: Yalnızca okuduğu token’lar için ödüyorsunuz, milyon token başına 0,042 dolar. Response ise ücretsiz.
Bir kararı sormak
{
"model": "jev-1.13.0",
"state": {
"title": "« Ça arrive une fois par génération », le marché des tankers atteint un niveau hors normes et l’occasion explose",
"source": "Le Marin",
"language": "French",
"published": "2026-10-08",
"text": "[haberin ilk 1.500 karakteri]",
"reader": "Management of a global multi-purpose port and terminal operator, reading a weekly news bulletin"
},
"questions": {
"in_scope": {
"type": "noul",
"instructions": "Is this news item in scope for the weekly bulletin of a global port and terminal operator?",
"criteria": {
"true": "A port, terminal, shipping line, cargo flow, trade lane, or the rules and infrastructure governing them is the subject of the story: cargo volumes, vessel calls, berth, yard or gate operations, concessions, port tariffs, freight rates, transport regulation, terminal equipment or port technology, port labour, investments in these, or security incidents, conflicts and sanctions that disrupt shipping routes, chokepoints or port calls.",
"false": "A maritime or logistics word merely appears, or the story changes nothing for a port or terminal operator: software unrelated to ports, shipping or logistics; medicine; wine; retail or consumer prices; sports; wildlife; naval or military procurement with no effect on commercial shipping; domestic politics without a trade measure; vendor or award marketing."
}
}
}
}
{
"model": "jev-1.13.0",
"answers": {
"in_scope": { "type": "noul", "noul": 0.89 }
}
}
(“Noul ne ola ki?” diyenlere: Bool (true/false) mantığının olasılıksal hâli gibi düşünebilirsiniz. Jev size kesin bir “evet” ya da “hayır” fırlatmak yerine durumun gerçekleşme ihtimalini veriyor. Örneğin yukarıdaki haber metnini verip “Bu haber haftalık bültenin kapsamına giriyor mu?” diye sorduğunuzda modelden dönen "noul": 0.89 yanıtı, haberin %89 ihtimalle kriterlere uyduğunu söylüyor. Bunu “evet” sayıp saymamak ise size kalmış.)
İstek bu kadar. State’te haberin kendisi ve okuru var, çünkü “ilgili” dediğimiz şey okura göre değişiyor: Bir terminal işletmecisi için önemli olan bir haber, bir nakliyeci için gürültüden ibaret olabilir. Kararın kendisi ise bir soru ve iki ölçüt: “Evet” ne demek, “hayır” ne demek. İşin asıl kısmı da burada, ölçütü yazarken. Jev ne yazdıysanız onu okuyor, ne demek istediğinizi değil. İlk sürümde “hayır” tarafına yazdığım “defence” kelimesi, deniz güvenliğiyle ilgili haberleri aşağı çekiyordu. Askerî alımları “ticari taşımacılığı etkilemiyorsa” diye daraltıp güvenlik olaylarını açıkça “evet” tarafına yazınca bu haberler yerine oturdu. Aynı istekte önem, bölüm ve etki gibi beş soru daha soruyorum; hepsi tek istek, tek fiyat.
Olasılıkla karar vermek
const res = await fetch('https://api.typesafe.ai/v1/systemone', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.TYPESAFE_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify(request), // yukarıdaki istek
});
const { answers } = await res.json();
const p = answers.in_scope.noul;
const route = p >= 0.85 ? 'auto_in' : p <= 0.15 ? 'auto_out' : 'review';
Biraz önce söylediğimi tekrarlıyorum: Jev’in cevabı evet değil. Evet olma olasılığı %89. İlk bakışta küçük bir fark gibi duruyor ama bütün meselenin burada olduğunu düşünüyorum. Bu sayıyı kodda üç yola ayırıyorum: 0,85 ve üstü bültene aday, 0,15 ve altı eleniyor, arada kalanlar bir editöre gidiyor. 2.281 haberde bu, haberlerin %27’sinin doğrudan alınması, %26’sının doğrudan elenmesi ve %47’sinin bir insana sorulması demek. Yani Jev emin olmadığında bunu söylüyor, kod da buna göre davranabiliyor. LLM’in metin olarak yazdığı bir puanda bu yok: 62 puanın ne kadar emin bir 62 olduğunu bilemiyorum. Eşikleri şimdilik ben seçtim; doğrusunu etiketli veri söyleyecek.
Ne kadar ucuz, ne kadar hızlı
| Jev | GPT-5 | |
|---|---|---|
| Haber başına maliyet | $0,000083 | $0,00525 |
| Haftalık maliyet (~1.140 haber) | $0,094 | $5,99 |
| Bir haberin kararı (p50) | 291 ms | ~156 sn |
| Fiyat | $0,042 / M girdi, çıktı ücretsiz | $1,25 / M girdi, $10 / M çıktı |
Haber başına bakınca Jev, GPT-5’ten yaklaşık 63 kat ucuz. Farkın çoğu ilginç bir yerden geliyor: GPT-5’in faturasının %84’ü okuduğu değil, yazdığı token’lara gidiyor, akıl yürütme de dâhil. Jev’de yazılan bir şey yok, cevap ücretsiz. Hızda da durum benzer. GPT-5 haberleri yirmi beşerli paketlerle işlediği için bir haberin kararı ancak paketin tamamı bittiğinde geliyor, bu da genelde iki buçuk dakika demek. Jev’de her haber ayrı bir istek ve cevap çoğunlukla yarım saniyeden kısa sürede dönüyor. Üstelik bu süreye Türkiye’den ABD’ye gidip gelen istek gecikmesi de dâhil. Sunucu daha yakında olsaydı ne olurdu, siz düşünün.
Bu hatta rakamlar zaten küçük; haftada yaklaşık 6 dolar ile 9 sent arasındaki farktan bahsediyoruz. Ama haber sayısı yüz katına çıksa, kabaca haftada 600 dolar ile 9 dolar arasındaki farktan bahsediyor olurduk. Bu da daha büyük iş akışları veya belki kişisel hobi projeleri için inanılmaz büyük bir fark demek.
Peki doğru mu?
| Karşılaştırma (insan etiketi yok: uyum) | Sonuç |
|---|---|
| Kapsam kararı, GPT-5 ile | %81 uyum |
| Önem sıralaması, GPT-5 ile (Spearman) | 0,76 |
| Kapsam kararı, anahtar kelime filtresiyle | %69 uyum |
| Bültene giren 613 haber: Jev’in doğrudan aldığı / elediği | %71 / %3 |
Ucuz ve hızlı olması tek başına bir şey ifade etmiyor; asıl soru doğru karar verip vermediği. Burada dürüst olmam gerek: Elimde insan etiketi yok. Ölçtüğüm şey doğruluk değil, canlı sistemin önceki kararlarıyla uyum; LLM de yanılıyor olabilir. Yine de tablo umut verici. Kapsam kararında GPT-5 ile %81 uyuşuyorlar, haberleri önemine göre sıralarken de büyük ölçüde aynı sırayı kuruyorlar. Bültene girmiş haberlerin %71’ini Jev doğrudan alıyor, yalnızca %3’ünü eliyor. Anahtar kelime filtresinin kaçırdığı 76 haberi de ilgili buluyor. Kimin haklı olduğunu ise 96 haberlik bir örneklemi iş birimi etiketleyince göreceğim.
Nerede yetmiyor
Jev elbette her derde deva değil. Gördüğüm sınırlar şunlar:
- Metin üretmiyor. Özet, başlık ve “neden önemli” notu için LLM’e hâlâ ihtiyacım var. Yani Jev LLM’in yerine değil, önüne geçiyor.
- İngilizce dışında doğruluk düşebilir. Kendi belgeleri de böyle uyarıyor. Benim verimde tablo karışık, o yüzden her dili ayrı ölçmek gerekiyor. Gelecekte bu sorun elbette düzelecektir. Şimdiden Microsoft kendi karar modelini (Microsoft-Decision-1), OpenAI da Decisions API’yi duyurdu zaten.
- Harfiyen okuyor. Ölçütteki tek bir kelime sonucu kaydırabiliyor; ölçüt yazmak işin ta kendisi. Prompt engineering hünerlerimiz burada da devreye giriyor.
Vardığım yer
Karar Jev’de, metin LLM’de. Jev’i LLM’in önüne koyduğumda, örneğin yalnızca olasılığı 0,5 ve üstü olan haberleri LLM’e gönderdiğimde, LLM’e giden haber sayısı %54’e iniyor ve haftalık maliyet 5,99 dolardan 3,89 dolara düşüyor. Bunun bir bedeli de var: Bugünkü hatta bültene girmiş 53 haber dışarıda kalıyor. Daha temkinli davranıp yalnızca 0,15 ve altını elersem tasarruf %16’ya, kaybolan haber sayısı 16’ya iniyor. Hangisinin doğru takas olduğunu yine etiketler söyleyecek. Bu belirsizliğe rağmen, akış düzgün kurulduğunda inanılmaz tasarruflar sağlayacağı kesin.
Sırada Jev’i canlı hatta bir süre yalnızca gözlemci olarak, hiçbir şeyi değiştirmeden, yani paralel çalışan bir hayalet olarak kullanmak var. Bu projede Jev’in başarısı ne olursa olsun, gelecekte metin üreten yapay zekâların yanında bu şekilde sorun-spesifik modelleri de göreceğimiz aşikâr.