<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kushal </title>
    <description>The latest articles on DEV Community by Kushal  (@kushal0532).</description>
    <link>https://dev.to/kushal0532</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3334761%2F7cf3b58a-8573-42b0-9be0-37970e0be24e.png</url>
      <title>DEV Community: Kushal </title>
      <link>https://dev.to/kushal0532</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kushal0532"/>
    <language>en</language>
    <item>
      <title>Jev vs small LLMs: does a model that decides beat one that writes?</title>
      <dc:creator>Kushal </dc:creator>
      <pubDate>Mon, 05 Oct 2026 10:26:14 +0000</pubDate>
      <link>https://dev.to/kushal0532/jev-vs-small-llms-does-a-model-that-decides-beat-one-that-writes-46mg</link>
      <guid>https://dev.to/kushal0532/jev-vs-small-llms-does-a-model-that-decides-beat-one-that-writes-46mg</guid>
      <description>&lt;h2&gt;
  
  
  Key findings
&lt;/h2&gt;

&lt;p&gt;Jev tied two small LLMs on accuracy, beat them on probability quality and speed but failed completely at weekday arithmetic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy is a tie.&lt;/strong&gt; On 150 CLINC questions Jev scored 0.980, gpt-oss-20b 0.963 and gpt-oss-120b 0.923. All three 95% intervals (the range a score could plausibly land in on a different batch of questions) overlap, so this sample cannot rank them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jev's probabilities are better.&lt;/strong&gt; Its Brier score (how far the probabilities it gave were from the truth, lower is better) is 0.037 against 0.071 for the 20b, about half the error. Its NLL (a penalty that punishes confident wrong answers really hard, also lower is better) is 0.064 against 0.237.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jev is 7-8x faster.&lt;/strong&gt; Median latency is 0.40 s against 2.76 s and 3.24 s even when using Groq's services whose whole schtick is faster inference. The whole Jev experiment cost about one cent ($0.0104).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jev fails on weekday questions.&lt;/strong&gt; It scored 0.13 where random guessing scores 0.14. The 120b got every blind-spot question right, the 20b 0.89, Jev 0.61.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 120b's CLINC numbers are partly a harness artifact.&lt;/strong&gt; 15 of its 300 replies failed to parse (couldn't be read as the JSON it was asked for) and were scored as random guesses. Fix this before publishing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Jev?
&lt;/h2&gt;

&lt;p&gt;Jev made huge waves in the ai community, but what exactly is it?&lt;br&gt;
Well it's a model that decides instead of writing: you give it text and a list of options, and it returns a choice plus a probability for every option, that's it!&lt;/p&gt;

&lt;p&gt;Any normal LLM is generative in nature and would answer the same question with a sentence, which your code then has to read and parse and whatnot. Jev's answer is already a typed value your code can use. TypeSafe AI, its creator, calls this class &lt;strong&gt;System One&lt;/strong&gt; models. &lt;br&gt;
The name's borrowed from Daniel Kahneman's philosophy, where System 1 does fast intuitive judgement whereas System 2 does slow deliberate reasoning.&lt;/p&gt;

&lt;p&gt;Jev was released on 15 September 2026. On OpenRouter(that's how I got access to this model) it is &lt;code&gt;typesafe/jev-1.13&lt;/code&gt;, priced at $0.042 per million input tokens with free output(It's literally so cheap that it's free because there's a set limit to how much it can output/choose).&lt;/p&gt;

&lt;p&gt;While I was reading about this model, a thought came to my mind: can a specialist that only decides beat small general-purpose LLMs at deciding? For this I conducted a very simple experiment. Speed and cost are Jev's selling points, so I also measured whether the answers hold up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The experiment
&lt;/h2&gt;

&lt;p&gt;Every model answered the same multiple-choice questions, each with 16 options (7 for the weekday questions), twice with the options shuffled differently to see if it makes a difference. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;How it was called&lt;/th&gt;
&lt;th&gt;Settings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev 1.13 (&lt;code&gt;typesafe/jev-1.13&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;OpenRouter Decisions API&lt;/td&gt;
&lt;td&gt;Native probabilities &amp;amp; no temperature setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-20b&lt;/td&gt;
&lt;td&gt;Groq, free tier&lt;/td&gt;
&lt;td&gt;Temperature 0, low reasoning effort, 400-token reply cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;Groq, free tier&lt;/td&gt;
&lt;td&gt;Same as the 20b&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Reasoning effort&lt;/em&gt;  basically controls how much hidden thinking these models can do before answering. Temperature at 0 makes it as deterministic as possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three question sets&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CLINC-150 (main).&lt;/strong&gt; 150 customer-assistant requests from the public CLINC-150 test split with out-of-scope rows removed. The model is given one 'true intent' option with 15 other incorrect ones. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blind-spot set (50 questions I built to stress it).&lt;/strong&gt; 20 arithmetic (3-digit by 2-digit multiplication), 15 letter counts (how many "s" in "mississippi"), and 15 weekday questions ("what weekday is it N days after this date", with all 7 weekdays as options).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variance set.&lt;/strong&gt; The first 20 CLINC questions, sent to Jev three identical times each, to see whether it answers the same way twice.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How each model was asked.&lt;/strong&gt; Jev received the options as its native choice format and returns probabilities directly. The LLMs got lettered options and were told to reply with JSON probabilities summing to 1. A reply that could not be read counted as a parse failure and was scored as an even guess(basically all options are given the same probability. Since we pick the one with the highest one, we pick the first option that's seen. There's basically a 1 in 16 chance the first option is correct). All models saw identical option sets and identical orderings, from a fixed random seed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 1: accuracy is a statistical tie
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fduelavank2bonkup1rya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fduelavank2bonkup1rya.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Experiment log · CLINC-150, 150 questions x 2 orderings&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;95% interval&lt;/th&gt;
&lt;th&gt;Parse failures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev 1.13&lt;/td&gt;
&lt;td&gt;0.980&lt;/td&gt;
&lt;td&gt;0.953 to 1.000&lt;/td&gt;
&lt;td&gt;0 of 300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-20b&lt;/td&gt;
&lt;td&gt;0.963&lt;/td&gt;
&lt;td&gt;0.933 to 0.990&lt;/td&gt;
&lt;td&gt;0 of 300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;0.923&lt;/td&gt;
&lt;td&gt;0.883 to 0.957&lt;/td&gt;
&lt;td&gt;15 of 300&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jev's 0.980 is the highest score, but its 95% range overlaps both LLMs'. With 150 questions, gaps of a few points are basically noise, so this sample can't truly suggest which model is more accurate.&lt;/p&gt;

&lt;p&gt;The 120b's lower score is largely caused by it's harness. Its 15 unreadable replies count as guesses. Scoring only its 285 readable replies gives roughly 0.97, in line with the other two. That is a back-of-envelope estimate, not a re-run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 2: Jev's probabilities are better
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbo6xhb3fn20n68o4fifg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbo6xhb3fn20n68o4fifg.png" alt=" " width="799" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Experiment log · CLINC-150, 300 calls per model · Brier and NLL over all 16 options, ECE with 5 bins · no confidence intervals were computed for these metrics&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Brier (0 best, 2 worst)&lt;/th&gt;
&lt;th&gt;NLL (lower is better)&lt;/th&gt;
&lt;th&gt;ECE, 5 bins (0 best)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev 1.13&lt;/td&gt;
&lt;td&gt;0.037&lt;/td&gt;
&lt;td&gt;0.064&lt;/td&gt;
&lt;td&gt;0.013&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-20b&lt;/td&gt;
&lt;td&gt;0.071&lt;/td&gt;
&lt;td&gt;0.237&lt;/td&gt;
&lt;td&gt;0.096&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;0.096&lt;/td&gt;
&lt;td&gt;0.288&lt;/td&gt;
&lt;td&gt;0.052&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Brier : Checks how far probabilities were from truth. &lt;br&gt;
NLL(Negative Log Likelihood) : Looks at probability of put on correct answer, and sees the negative log of it. For example, 0.9 on correct answer gives 0.11&lt;br&gt;
ECE(Expected Calibration Error) : Checks if the confidence matches truth. Groups calls into 5 bins based on how confident model was and then compare average confidence with actual accuracy in bin. &lt;/p&gt;

&lt;p&gt;Against the 20b, Jev's Brier score is about half (0.037 against 0.071), its NLL is 3.7 times lower, and its ECE is about 7 times lower. &lt;/p&gt;

&lt;p&gt;The 120b looks worst, but 15 parse failures are scored as even guesses, each worth a Brier of 0.94. Setting them aside, its Brier drops to about 0.052 and its NLL to about 0.157. That beats the 20b and still trails Jev. These are estimates worked back from the recorded totals, not a re-run.&lt;/p&gt;

&lt;p&gt;Two cautions. Only accuracy got a confidence interval, so treat the size of these gaps as approximate; the direction is consistent across all three metrics against the 20b, which had no parse failures. And the LLMs wrote their probabilities as text, while Jev emits them natively, which handicaps the LLMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 3: Jev is 7 to 8 times faster and cost about a cent
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0jyn41lruclfm19pjxom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0jyn41lruclfm19pjxom.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Experiment log · CLINC-150, 300 calls per model, run 30 Sep 2026 · times include network round trip&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Median (p50), s&lt;/th&gt;
&lt;th&gt;Slowest 5% (p95), s&lt;/th&gt;
&lt;th&gt;p50 vs Jev&lt;/th&gt;
&lt;th&gt;p95 vs Jev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev 1.13&lt;/td&gt;
&lt;td&gt;0.40&lt;/td&gt;
&lt;td&gt;0.74&lt;/td&gt;
&lt;td&gt;1.0x&lt;/td&gt;
&lt;td&gt;1.0x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-20b&lt;/td&gt;
&lt;td&gt;2.76&lt;/td&gt;
&lt;td&gt;3.85&lt;/td&gt;
&lt;td&gt;6.9x&lt;/td&gt;
&lt;td&gt;5.2x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gpt-oss-120b&lt;/td&gt;
&lt;td&gt;3.24&lt;/td&gt;
&lt;td&gt;4.72&lt;/td&gt;
&lt;td&gt;8.1x&lt;/td&gt;
&lt;td&gt;6.4x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jev's median call took about 0.40 s against 2.76 s for the 20b and 3.24 s for the 120b, so 6.9 and 8.1 times faster. The slow tail is far shorter too. At p95 (the time 95% of calls beat, so basically the slowest ones) Jev took 0.74 s against 3.85 s and 4.72 s.&lt;/p&gt;

&lt;p&gt;The entire Jev experiment cost about $0.0104: $0.0069 for the 300 main calls, $0.0022 for the blind-spot set and $0.0014 for the variance run. That works out to about 2.3 cents per thousand calls at this prompt size. The LLM calls ran on Groq's free tier.&lt;/p&gt;

&lt;p&gt;One caution: these times include the network. Jev was reached through OpenRouter and the LLMs through Groq, so this compares two services as I used them, not the models' raw speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 4: Jev's answers did not depend on option order
&lt;/h2&gt;

&lt;p&gt;On CLINC, shuffling the options never changed Jev's top answer, and repeating identical calls never changed it either. Flip rate is the share of questions whose top answer changed between the two orderings.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question set&lt;/th&gt;
&lt;th&gt;Jev&lt;/th&gt;
&lt;th&gt;gpt-oss-20b&lt;/th&gt;
&lt;th&gt;gpt-oss-120b&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CLINC (150 questions)&lt;/td&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;td&gt;0.007&lt;/td&gt;
&lt;td&gt;0.087&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blind-spot set (50 questions)&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;td&gt;~0.000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jev also answered identically when I sent the same 20 CLINC questions three times each (60 calls, flip rate 0.000). An independent study cited on the JEV-9B model card found Jev changes its answer on 4.3% of repeated 64-option calls, so my 16-option, 20-question check does not rule out occasional wobble.&lt;/p&gt;

&lt;p&gt;The 120b's 0.087 is 13 of 150 questions, close to its 15 parse failures. An unreadable reply becomes an even guess whose top pick simply follows the option order, so those failures probably cause most of its flips. I have not confirmed this. The check is to recompute the flip rate with failed calls excluded.&lt;/p&gt;

&lt;p&gt;On the blind-spot set the counts are tiny: 2 of 50 questions flipped for Jev and 6 of 50 for the 20b.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Jev starts showing it's weakness: weekday questions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0xlz8txdthpjnoxjufw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0xlz8txdthpjnoxjufw.png" alt=" " width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Experiment log · 50 hand-built questions (20 arithmetic, 15 letter count, 15 weekday), 2 orderings, gold answers computed, not written by hand&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Jev 1.13&lt;/th&gt;
&lt;th&gt;gpt-oss-20b&lt;/th&gt;
&lt;th&gt;gpt-oss-120b&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Overall accuracy (100 calls)&lt;/td&gt;
&lt;td&gt;0.61&lt;/td&gt;
&lt;td&gt;0.89&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arithmetic (20 items)&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;0.97&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Letter count (15 items)&lt;/td&gt;
&lt;td&gt;0.63&lt;/td&gt;
&lt;td&gt;0.73&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weekday (15 items; chance = 0.14)&lt;/td&gt;
&lt;td&gt;0.13&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brier&lt;/td&gt;
&lt;td&gt;0.422&lt;/td&gt;
&lt;td&gt;0.205&lt;/td&gt;
&lt;td&gt;0.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flip rate&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;td&gt;0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On the 50 hand-built questions Jev scored 0.61, against 0.89 for the 20b and 1.00 for the 120b. Nearly all of that gap is weekdays. Jev got 0.13 right, and guessing among 7 weekdays scores 0.14.&lt;/p&gt;

&lt;p&gt;A plausible reason, which I did not test: working out a weekday means a small calendar calculation, and Jev returns no reasoning trace while the LLMs think before they answer.&lt;/p&gt;

&lt;p&gt;Two cautions. Each category has only 15 to 20 questions (30 to 40 calls), so read the bars as warning signs, not measurements. And the arithmetic questions are multiple choice, with wrong answers within 400 of the true product. That is far easier than computing a product from scratch, so Jev's 0.95 does not show it can do arithmetic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does and doesn't show
&lt;/h2&gt;

&lt;p&gt;This was a small experiment, so here's how far I'd trust it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unequal confidence.&lt;/strong&gt; The LLMs had to write their probabilities out as text while Jev gives its own natively, so the LLMs were a bit handicapped on Brier, NLL and ECE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 120b's parse failures.&lt;/strong&gt; 15 of its 300 replies (5%) couldn't be read and got counted as even guesses, which drags down its accuracy, Brier, NLL and probably its flip rate. I didn't check why. My guess is it hit the 400-token reply cap, but that's just a hypothesis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small samples, one run.&lt;/strong&gt; About 150 questions, one seed, one run per condition. Gaps of a few points are basically noise, and Jev's and the 20b's accuracy ranges overlap. Only accuracy got confidence intervals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed-set questions.&lt;/strong&gt; The right answer is always somewhere in the 16 options. Real classification doesn't hand you that guarantee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Untuned LLMs.&lt;/strong&gt; I only tried &lt;code&gt;reasoning_effort=low&lt;/code&gt; on Groq, and Groq doesn't report a model version, so I couldn't pin it. Jev was served as the dated snapshot &lt;code&gt;typesafe/jev-1.13-20260917&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A small, artificial blind-spot set.&lt;/strong&gt; 15 to 20 questions per category, with hand-made option sets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  So, is Jev worth it?
&lt;/h2&gt;

&lt;p&gt;On this small test, Jev looks like a great fit for fast, fixed-option decisions where you need confidence you can actually trust, and a poor fit for anything that needs a calculation.&lt;/p&gt;

&lt;p&gt;It matched the LLMs on accuracy, gave better calibrated probabilities than the 20b, and answered way faster for about a cent, even against Groq, whose whole schtick is fast inference. But it sat at chance on weekday questions, so anywhere the answer has to be worked out, I'd put an LLM or plain code behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://openrouter.ai/docs/guides/community/jev-tutorial" rel="noopener noreferrer"&gt;Jev Tutorial: Make Your First Decision Call on OpenRouter&lt;/a&gt;: what Jev returns, and that it gives no reasoning trace. Opened for this draft.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://huggingface.co/autotrust/JEV-9B" rel="noopener noreferrer"&gt;autotrust/JEV-9B model card&lt;/a&gt;: the 4.3% repeat-call figure, attributed there to an independent study. Opened for this draft.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openrouter.ai/typesafe/jev-1.13" rel="noopener noreferrer"&gt;Jev 1.13 on OpenRouter&lt;/a&gt;: the $0.042 per million input tokens price. Seen in search results only; re-open and confirm before publishing.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Ai agents are kinda dangerous</title>
      <dc:creator>Kushal </dc:creator>
      <pubDate>Mon, 28 Sep 2026 06:10:51 +0000</pubDate>
      <link>https://dev.to/kushal0532/ai-agents-are-kinda-dangerous-41hk</link>
      <guid>https://dev.to/kushal0532/ai-agents-are-kinda-dangerous-41hk</guid>
      <description>&lt;p&gt;Sometime in August 2026, a single hacktivist breached 14 of the 42 organizations he targeted and walked away with 12 to 26 gigabytes of data. He found an undocumented WordPress vulnerability himself, weaponized it, and then built a searchable doxxing platform stitching together tens of millions of previously leaked records with his own fresh hauls.&lt;br&gt;
The surprising this however was that he did it alone, just one person with an AI agent doing the work that used to require a team.&lt;br&gt;
This is one of the cases present in Anthropic's September 2026 threat intelligence report, and it's the clearest illustration yet of what changes when AI agents get involved in cyberattacks, the attacks are aren't getting smarter, rather they're becoming cheaper to run at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the report actually documents
&lt;/h3&gt;

&lt;p&gt;Anthropic's report sorts observed misuse into seven primary buckets: cyber attacks, influence and misinformation, surveillance and repression, biological misuse, conventional weapons development, scams and frauds, and finally model distillation.&lt;br&gt;
What makes this report different from the usual vague "bad actors misuse AI" line is that Anthropic names them using internal tracking codes. GTG-20006 is a Russian espionage operation. GTG-50014 runs industrialized credential and data theft. GTG-10007 is a Chinese state-linked group. GTG-84006 is tied to an Iranian opposition influence network (MEK/NCRI). And GTG-50029 is the lone hacktivist.&lt;br&gt;
The main point is that a single person has the potential danger comparable to state sponsored ops and that's really scary thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  The pattern observed
&lt;/h3&gt;

&lt;p&gt;The attacks in this report mostly aren't using AI to discover new exploits.Anthropic disclosed an agent compromising a target  using well known techniques like SQL injection etc. It scanned about 9,000 targets to land one hit.&lt;br&gt;
The AI isn't out-thinking security teams like some of us have proposed. It's running known techniques fast enough, and cheaply enough, on an enormous scale.&lt;br&gt;
The speed shows up in other places too: one cloud credential escalation chain in the report ran in roughly three hours. Russian operators under 'GTG-20006' had agents "autonomously modify and rebuild flagged implants" basically every time the malware was discovered, it would rewrite itself to avoid detection all without any human intervention!.&lt;br&gt;
This is just a machine doing tedious, repetitive, previously-labor-intensive work at a pace and price point that used to gate those who could attempt it at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters for agentic ai
&lt;/h3&gt;

&lt;p&gt;Right now the ai agents are a very hot topic, use an ai to autonomously plan, adapt and execute tasks. But this report sheds some light into the hype&lt;br&gt;
Anthropic has seen that agents are capable of running milti-step intrusion chains with little to no human intervention. This is huge compared to what we were doing with ai just a few years ago!&lt;br&gt;
Then again, the agents didn't do anything new per se. They just used preexisting knowledge that we all have access to, something we all could have done before. The only difference is that the agent never gets tired. Normally we would give up after a dozen tries but the agent never has that fatigue.&lt;br&gt;
If you're building an agentic ai project and looking for a differentiating factor then you should ask yourself this. Is the agent actually smart or is the agent cheaper to run at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  What labs are (and aren't) doing about it
&lt;/h3&gt;

&lt;p&gt;Anthropic isn't safe either. Upon reviewing 141,006 eval transcripts they found that Opus 4.7(while running in a safety evaluation) exploited a fake company that collided with a real domain and ended up getting real credentials from a real prod db.&lt;br&gt;
Mythos 5 published a malicious package to PyPI which stayed live for about an hour. It was reported that 15 real systems downloaded the package&lt;br&gt;
In response to this Anthropic paused cyber evals and the affected organizations were notified withing days.&lt;br&gt;
The problem that isn't being handled is that there's no industry-wide standard for detecting this kind of misuse, there's no proper framework for labs to share threat intelligence with each other in real time, everyone is self-reporting on it's own schedule. This means the public only knows when a company decides to publish.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this means if you're shipping agents
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Take proper care of the sandbox setup and environment.&lt;/li&gt;
&lt;li&gt;Assume anything your agent publishes on the internet will be grabbed, meaning other systems will be affected if your agent messes up!&lt;/li&gt;
&lt;li&gt;Design monitoring setup for checking scale abuse too because that's the most realistic way threat approaches, rate limiting and anomaly detection will do wonders for catching these threats.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/threat-intelligence-report-september-2026" rel="noopener noreferrer"&gt;Anthropic Threat Intelligence Report, Sept 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/news/investigating-incidents-cybersecurity-evals" rel="noopener noreferrer"&gt;Investigating incidents in Anthropic's cybersecurity evals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://danielmiessler.com/blog/anthropic-misuse-report-september-2026" rel="noopener noreferrer"&gt;Daniel Miessler's summary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>agents</category>
    </item>
    <item>
      <title>One model for three jobs</title>
      <dc:creator>Kushal </dc:creator>
      <pubDate>Thu, 30 Jul 2026 17:02:01 +0000</pubDate>
      <link>https://dev.to/kushal0532/one-model-for-three-jobs-30lb</link>
      <guid>https://dev.to/kushal0532/one-model-for-three-jobs-30lb</guid>
      <description>&lt;p&gt;For sometime now I’ve been working on a fairly simple browser extension ‘UnBlur’. It scores any news article for clickbait, political leaning, and sentiment, then shows you how the same story is being covered across the spectrum. The naive way to do the classification is to have three separate judgments about the same piece of text, a clickbait classifier, a leaning classifier, a sentiment classifier, each trained and run independently.&lt;/p&gt;

&lt;p&gt;That’s not what I’ve decided on doing though, here’s why.&lt;/p&gt;

&lt;p&gt;The naive path&lt;br&gt;
Three tasks, three models: train each one against its own dataset, ship each one separately, simple. Nothing about it is exactly wrong, but it has two costs that only show up once you try to run it in prod.&lt;/p&gt;

&lt;p&gt;First, memory constraints. Loading a model isn’t free per se. Loading a ModernBERT-scale backbone from disk takes a couple of seconds, and it sits in memory for the life of the process. Three independent models means three copies of that backbone resident at once, on a CPU-only inference box(I’m using the free tier), for every request.&lt;/p&gt;

&lt;p&gt;Second, and not so obvious: the three tasks aren’t actually independent. Clickbait and political framing both live in how a headline is written, not only what it’s about. A model that’s only ever seen clickbait labels has no reason to learn anything beyond clickbait stuff like political framing etc.A human reading the same headline uses overlapping cues for both. Training three models separately throws away that overlap that could benefit accuracy.&lt;/p&gt;

&lt;p&gt;What I’m doing instead&lt;br&gt;
One shared backbone — answerdotai/ModernBERT-base — feeds three lightweight heads:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fty2xs80wu2is1nici3oc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fty2xs80wu2is1nici3oc.png" alt=" " width="799" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each head is just Dropout → Linear(768→256) → ReLU → Dropout → Linear(256→n_classes) — small enough that adding two more heads barely moves the parameter count. The expensive part, the backbone, is shared thankfully.&lt;/p&gt;

&lt;p&gt;Choosing ModernBERT was a deliberate choice. Alternating local/global attention and RoPE positional embeddings give it a 512-token efficient context window with meaningfully faster CPU inference than a standard BERT of similar size, very necessary when every /analyze call is a real-time forward pass, not a batch job.&lt;/p&gt;

&lt;p&gt;Training it without the tasks affecting each other&lt;br&gt;
Multi-task training has an obvious failure mode: if you throw all three losses at the backbone from scratch, whichever task has the most or noisiest data can end up dominating early training and drag the shared representation somewhere that hurts the others.&lt;/p&gt;

&lt;p&gt;I’ve avoided that with a two-phase schedule:&lt;/p&gt;

&lt;p&gt;Independent phase — each head is trained on its own task first, backbone included, one task at a time. This lets the backbone adapt to news text generally before any task has to share it.&lt;br&gt;
Joint phase — all three heads are then fine-tuned together, at half the learning rate, so the shared backbone updates from three loss signals at once without any single task overwriting what the others already learned.&lt;br&gt;
That ordering is the whole point: independent-then-joint gets you a backbone that’s already reasonably good at “understanding news text” before multi-task training starts asking it to serve three masters simultaneously.&lt;/p&gt;

&lt;p&gt;Turning three classifiers into a scatter chart&lt;br&gt;
One more thing falls out of this almost for free. The leaning and sentiment heads output class probabilities (left/center/right, negative/neutral/positive), but UnBlur wants continuous scores for the sidebar’s 2D bias map. Instead of taking the argmax class, it takes a weighted average over the class probabilities:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;leaning_score = −1×P(left) + 0×P(center) + 1×P(right)   →  range [−1, +1]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This preserves the ordinality that a hard classification would throw away — “slightly right” and “very right” both round to the same class under argmax, but land in different places on the scatter chart under this scoring. That chart is only meaningful because the underlying scores are continuous, which is only cheap because both heads already share a backbone that’s producing well-calibrated class probabilities from the same forward pass used for clickbait detection.&lt;/p&gt;

&lt;p&gt;The trade-off&lt;br&gt;
None of this is free. A shared backbone means the three tasks are coupled — if you want to retrain just the sentiment head on a new dataset, you’re now deciding whether to also re-run the joint phase, or accept some drift between the sentiment head and a backbone it was no longer fine-tuned alongside. Three independent models don’t have that problem; they’re trivially retrainable one at a time.&lt;/p&gt;

&lt;p&gt;For UnBlur, one backbone in memory and shared representations across genuinely related tasks was worth that coupling. If the tasks were less related, or if I cared more about retraining each one independently than about memory, three separate models would win instead.&lt;/p&gt;

</description>
      <category>nlp</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>What's semantic caching?</title>
      <dc:creator>Kushal </dc:creator>
      <pubDate>Mon, 16 Mar 2026 15:34:31 +0000</pubDate>
      <link>https://dev.to/kushal0532/whats-semantic-caching-4hon</link>
      <guid>https://dev.to/kushal0532/whats-semantic-caching-4hon</guid>
      <description>&lt;p&gt;As more applications for generative AI come, its shortcomings become more apparent. One huge problem with LLMs is how expensive each query is, for example take Gemini — Gemini 2.5 Pro charges $1.25 per million input tokens and $10 per million output tokens. Their flagship Gemini 3.1 Pro doubles that to $2 and $12 per million tokens respectively. Even a moderately active app can rack up thousands of dollars a month pretty quickly. Imagine a small customer support bot with just 500 daily users — by month two, the API bill has quietly crossed $2,000. That's not an edge case, that's just what happens when you're not caching. As a business (or a personal user) saving costs where possible and speeding up operations is a huge important factor that decides how well your product does. One way to speed up and minimise costs is to use a simple 'semantic cache'.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;A semantic cache is not too different from a traditional cache, it has the same idea behind it. Normally a traditional cache stores either LRU (Least Recently Used) or LFU (Least Frequently Used) data so that when the same query comes, it can just fetch the result stored rather than search it up again.&lt;/p&gt;

&lt;p&gt;You however cannot apply the exact same pipeline for RAG or genAI products simply because the output is not 'deterministic', i.e, it's not the same. Take these examples:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;What is the situation regarding AI in professional workplaces?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;How are AI tools affecting workplaces?&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now semantically these seem similar enough to use and we can gauge that they kinda mean the same thing, but a normal cache does not understand that. It thinks these both are different because they are not exactly the same.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qlhkrsnlnvwubed2jc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qlhkrsnlnvwubed2jc1.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's where semantic caching comes in. Rather than compare them directly, it compares the semantic meaning behind them and understands that it's kinda the same and thus we get a cache hit! We normally check how similar two documents are based on cosine similarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;This is a typical pipeline for RAG systems that use semantic caching.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xp6e6lfli9rkotyujnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xp6e6lfli9rkotyujnb.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First the documents are chopped up etc and converted to word embeddings (vectors). Ofc you store them in a vector db like &lt;a href="https://www.trychroma.com/" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt;, &lt;a href="https://faiss.ai/" rel="noopener noreferrer"&gt;FAISS&lt;/a&gt; or something of that sort which suits your use case. After the user sends a query we don't go to the db. Instead we first check with the semantic cache. It sees if the query is relevant to the cached query.&lt;/p&gt;

&lt;p&gt;Two things can happen from here:&lt;/p&gt;

&lt;p&gt;Cache hit: The query is similar enough to a cached one (above the threshold) → cached context is pulled and handed to the LLM → response is generated. Fast and cheap, no db lookup needed.&lt;/p&gt;

&lt;p&gt;Cache miss: Nothing similar in the cache → normal vector db retrieval happens → relevant chunks are fetched, response is generated, and the new query gets cached for next time. Normal speed, but the cache is now warmer.&lt;/p&gt;

&lt;p&gt;Word embeddings are compared using cosine similarity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cosine(θ) = (A · B) / (||A|| × ||B||)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's a very fast and simple method to see the angle between the direction of vectors. If similar, then they would aim in similar direction, i.e, the angle between them is low, i.e, cos of that angle is higher. Output is from 0 to 1 where 0 means not at all similar and 1 ofc means they are the exact same.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"What is the impact of AI on jobs?"&lt;/code&gt; vs &lt;code&gt;"How is AI changing employment?"&lt;/code&gt; → score of ~0.91 → cache hit&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"What is the impact of AI on jobs?"&lt;/code&gt; vs &lt;code&gt;"How do I bake sourdough bread?"&lt;/code&gt; → score of ~0.08 → cache miss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those first two are clearly the same question in spirit, and the score reflects that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Significant cost savings. By reducing the queries sent to vector dbs, you cut down on a huge portion of charges incurred.&lt;/li&gt;
&lt;li&gt;Faster response time. If you already have the cached content, you don't need to retrieve it again. This allows the system to be a whole lot faster in production.&lt;/li&gt;
&lt;li&gt;Better use of resources. Since you aren't redoing similar queries, the system is free to do more tasks, allowing you to scale better or handle more complex features.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Compared to other approaches in RAG
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Handles Semantic Similarity&lt;/th&gt;
&lt;th&gt;Cost Savings&lt;/th&gt;
&lt;th&gt;Speed Boost&lt;/th&gt;
&lt;th&gt;Setup Complexity&lt;/th&gt;
&lt;th&gt;Works for Unique Queries&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Traditional Cache&lt;/td&gt;
&lt;td&gt;No (exact match only)&lt;/td&gt;
&lt;td&gt;High (when hits)&lt;/td&gt;
&lt;td&gt;Very High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;High-volume apps with repetitive, exact queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic Cache&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Apps with overlapping but varied query patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query Rewriting&lt;/td&gt;
&lt;td&gt;Partially&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low (adds a step)&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Improving retrieval on ambiguous or poorly phrased queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Re-ranking&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;No (adds latency)&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Boosting relevance when retrieval is decent but ordering is off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hybrid Search&lt;/td&gt;
&lt;td&gt;Partially&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Complex domains needing both keyword and semantic retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chunking Optimisation&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Low–Medium&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Improving retrieval quality at the source&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see, semantic caching isn't a silver bullet. It shines when there's a decent overlap in the kinds of queries your users send. For more diverse or unique query patterns, approaches like re-ranking or hybrid search may be better suited.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cons
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;More complex to build than a traditional cache system.&lt;/li&gt;
&lt;li&gt;Higher chances of getting semantically similar chunks that may not be relevant or useful for answering the query. Think of it like asking a librarian for "books about space travel" and getting recommendations cached from a previous "books about space exploration" query — close enough on the surface. But when you follow up with "books about the health risks of space travel", the cache might still serve those same exploration books because the queries look similar, even though what you actually need is quite different.&lt;/li&gt;
&lt;li&gt;Need to balance out the threshold. A higher threshold does not yield useful chunks and a lower limit may not bring semantically similar chunks, both degrade performance of system. Important to find out the right balance.&lt;/li&gt;
&lt;li&gt;Empty cache is slow and has high latency.&lt;/li&gt;
&lt;li&gt;Not suitable when every user query is unique.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  When not to use it
&lt;/h2&gt;

&lt;p&gt;Semantic caching isn't always the right tool. Skip it if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every query your users send is unique. Think code generation, legal research, or anything highly personalised — the cache will almost never hit and you're just adding overhead.&lt;/li&gt;
&lt;li&gt;Your app is low traffic. If you're getting a handful of queries a day, there's no real benefit.&lt;/li&gt;
&lt;li&gt;Your knowledge base changes constantly. If documents are being updated all the time, you'll spend more time invalidating the cache than benefiting from it.&lt;/li&gt;
&lt;li&gt;Accuracy is non-negotiable. Cached context can be slightly off. For use cases where being slightly wrong is worse than being slow, don't cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to best utilise it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Calibrate your threshold carefully. A good starting point is somewhere between 0.85–0.90. From there, tune it based on your specific use case and monitor quality. There's no universal right answer here.&lt;/li&gt;
&lt;li&gt;Use TTL (Time To Live) values. Cached entries should expire, especially when your underlying data changes or when topics are time-sensitive. Stale cache is worse than no cache.&lt;/li&gt;
&lt;li&gt;Warm up your cache. Pre-populate it with common or anticipated queries so you're not starting completely cold in production. A cold cache gives you none of the benefits.&lt;/li&gt;
&lt;li&gt;Invalidate when your knowledge base updates. If the documents in your vector db change, cached responses based on old chunks can quietly degrade your output quality without you noticing.&lt;/li&gt;
&lt;li&gt;Monitor your hit rate. A healthy semantic cache typically sees somewhere around 30–60% hit rates. Too low and your threshold might be too strict; suspiciously high but quality is dropping means it's too loose.&lt;/li&gt;
&lt;li&gt;Think about scope — global vs user-level caching. A global cache saves the most but can serve mismatched cached results across very different user contexts. For personalised applications, a user-scoped cache might make more sense even if it's less efficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tools that already do this
&lt;/h2&gt;

&lt;p&gt;You don't have to build it from scratch. A few libraries have semantic caching built in or easily pluggable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/zilliztech/GPTCache" rel="noopener noreferrer"&gt;GPTCache&lt;/a&gt; — an open source library built specifically for caching LLM responses. Pretty flexible and worth looking at if you're rolling your own pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://python.langchain.com/docs/how_to/llm_caching/" rel="noopener noreferrer"&gt;LangChain&lt;/a&gt; — has caching layers that plug into existing chains without too much effort. Good starting point if you're already using it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://redis.io/blog/what-is-vector-similarity-search/" rel="noopener noreferrer"&gt;Redis&lt;/a&gt; — with vector similarity extensions, Redis can act as a fast semantic cache layer, especially if you're already using it in your stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Worth knowing these exist before you reinvent the wheel.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
      <category>performance</category>
    </item>
    <item>
      <title>RAG+ is kinda cool</title>
      <dc:creator>Kushal </dc:creator>
      <pubDate>Tue, 08 Jul 2025 10:34:11 +0000</pubDate>
      <link>https://dev.to/kushal0532/rag-is-kinda-cool-25f1</link>
      <guid>https://dev.to/kushal0532/rag-is-kinda-cool-25f1</guid>
      <description>&lt;p&gt;So you probably already know what &lt;strong&gt;RAG (Retrieval-Augmented Generation)&lt;/strong&gt; is. It goes and grabs relevant info and feeds it to a language model so it can answer better and yeah, that works pretty well… until it doesn’t.&lt;/p&gt;

&lt;p&gt;The catch? &lt;strong&gt;RAG is good at retrieving stuff but not really great when it comes to reasoning&lt;/strong&gt;. Like it knows things but doesn’t &lt;em&gt;apply&lt;/em&gt; them all that well. That’s exactly the issue &lt;strong&gt;RAG+&lt;/strong&gt; is built to solve and it does it in a surprisingly clean way.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Different in RAG+?
&lt;/h2&gt;

&lt;p&gt;RAG+ adds a second brain to the operation. Instead of just retrieving knowledge chunks, it builds &lt;strong&gt;two corpora&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Knowledge base&lt;/strong&gt; –  where we get our information from (textbooks, docs, etc)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Application base&lt;/strong&gt; – actual examples that &lt;em&gt;show&lt;/em&gt; how to use that knowledge (examples showing how to use math formulas)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So when it’s inference time, the model doesn’t just get “&lt;strong&gt;Formula for mean median and mode&lt;/strong&gt;”, it gets both the &lt;strong&gt;definition&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; a &lt;strong&gt;walkthrough of solving a question about it&lt;/strong&gt;. That combo lets it reason better, especially for stuff like math, law, and medicine.&lt;/p&gt;

&lt;p&gt;These application examples can be written manually or generated using another model. Either way, the model gets both the &lt;strong&gt;concept&lt;/strong&gt; and &lt;strong&gt;how to use it&lt;/strong&gt;.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modularity
&lt;/h2&gt;

&lt;p&gt;Another win: RAG+ is &lt;strong&gt;modular&lt;/strong&gt;, so you don’t need to rebuild up your current setup. Just wire in the application corpus, do some indexing work, and it slides into place.&lt;/p&gt;

&lt;p&gt;In some domains, it’s basically a &lt;strong&gt;free 3% performance uplift&lt;/strong&gt;. You know, the kind of performance boost you'd usually need a lot more compute for? Yeah, you get it just from smarter retrieval.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Types of Knowledge: Conceptual vs Procedural
&lt;/h2&gt;

&lt;p&gt;If you really think about it there are two kinds of things LLMs need to know:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Conceptual&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Procedural&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Facts and definitions&lt;/td&gt;
&lt;td&gt;How to use the facts to solve problems&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conceptual&lt;/strong&gt;: “This is heron's formula”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Procedural&lt;/strong&gt;: “Using heron's formula solve this”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RAG+ leans into this by &lt;strong&gt;pairing both&lt;/strong&gt; types of knowledge when it retrieves stuff. That way, the model isn’t just reading text, rather it’s also seeing worked out examples like how a student would learn in class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hqwu26wu0ep45z9x6xp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hqwu26wu0ep45z9x6xp.png" alt="Pic 1" width="662" height="1048"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image 1&lt;/strong&gt;: A side-by-side of conceptual vs procedural reasoning. Conceptual chunks give you facts whereas procedural chunks show you how to use them.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Application Matching (really cool)
&lt;/h2&gt;

&lt;p&gt;Instead of just slapping random examples into the prompt, RAG+ does &lt;strong&gt;application matching&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It first &lt;strong&gt;categorizes&lt;/strong&gt; both knowledge and examples (into themes/domains).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then an LLM does &lt;strong&gt;many-to-many linking&lt;/strong&gt;, matching examples to the concepts they help explain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If a good match can't be found then it just &lt;strong&gt;generates new knowledge pieces&lt;/strong&gt; on the fly to fill the gap.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This kind of thing turns the model into more of a &lt;strong&gt;polymath&lt;/strong&gt;, able to connect distant concepts like someone who can link thermodynamics to economics or something like that.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How They Ran the Experiments (and What the RAG Variants Are)
&lt;/h2&gt;

&lt;p&gt;They compared this application-augmented method on &lt;strong&gt;4 variants of RAG&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RAG (Standard)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Retrieves relevant info from a corpus and feeds it into the LLM during inference. The OG method. Simple and widely used.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GraphRAG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s like RAG but it builds &lt;strong&gt;entity-relation graphs&lt;/strong&gt; between corpus chunks. Helps capture similar ideas across multiple sources. Good for multi-hop reasoning but pretty heavy to run.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Re-rank RAG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Retrieves &lt;em&gt;k&lt;/em&gt; results, re-ranks them based on how relevant they are to the question (sometimes using another LLM), and uses the top few as context. It's like pre-filtering the prompt.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AFRAG (Answer-First RAG)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The LLM first gives a &lt;strong&gt;generic blind response&lt;/strong&gt; to the question. Based on that guess, relevant context is fetched. Then the model uses both the initial guess and new context to generate the final answer. It’s like searching for a toy blindfolded… but this time, you kinda remember how it feels. So the search becomes smarter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup Summary:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Tested on &lt;strong&gt;maths&lt;/strong&gt;, &lt;strong&gt;legal&lt;/strong&gt;, and &lt;strong&gt;medicine&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Across &lt;strong&gt;various model sizes&lt;/strong&gt;, from ~7B to 70B&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compared &lt;strong&gt;with and without&lt;/strong&gt; application augmentation&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Observation: Model Size Makes a Big Difference for Re-rank RAG
&lt;/h2&gt;

&lt;p&gt;Now here's something I noticed from the results table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With &lt;strong&gt;small models&lt;/strong&gt; like GLM4-9B and Qwen2.5-7B, &lt;strong&gt;regular RAG+ actually beats Re-rank RAG&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;But when you throw in the big bois like Qwen2.5-72B and LLaMA3-70B, &lt;strong&gt;Re-rank RAG starts dominating&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why? Well, the paper says small models kinda suck at following reranking instructions. Instead of reranking, they just start answering immediately which defeats the whole point.&lt;/p&gt;

&lt;p&gt;So yeah, &lt;strong&gt;reranking isn’t reliable on smaller models&lt;/strong&gt;, and it’s not even a prompt engineering issue. It’s just that those models don’t have the capacity for task separation like rerank-then-generate.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where They Tested This: Math, Legal, Medicine
&lt;/h2&gt;

&lt;p&gt;The authors tested RAG+ on three very different domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Math&lt;/strong&gt; – where reasoning is very procedural and examples are structured.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Legal&lt;/strong&gt; – complex language, long docs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Medical&lt;/strong&gt; – domain-specific, technical, and high-stakes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For law and medicine, they went with &lt;strong&gt;automatic generation&lt;/strong&gt; of application examples. Manually writing those would be a extremely difficult and time consuming.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Results: Does RAG+ Work?
&lt;/h2&gt;

&lt;p&gt;Yep! And sometimes outperforms by a &lt;strong&gt;lot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frne3ln7i1fr3tncq7pj4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frne3ln7i1fr3tncq7pj4.png" alt="Pic 2" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image 2&lt;/strong&gt;: A performance chart comparing three setups — examples only, standard RAG, and RAG+. RAG+ clearly comes out ahead, especially when it gets both the knowledge and its application during inference. (This is for the legal tasks dataset)&lt;/p&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GraphRAG and AFRAG&lt;/strong&gt; don’t work great with small models.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AFRAG&lt;/strong&gt; relies on the model’s initial answer. If that’s off, the follow-up steps flop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphRAG&lt;/strong&gt; needs complex reasoning to understand document connections, something small models aren’t good at.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;GraphRAG was skipped entirely for medicine&lt;/strong&gt;, because it’s so compute-hungry.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;But &lt;strong&gt;adding application examples&lt;/strong&gt; still helped GraphRAG improve on math tasks!&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Across the board, &lt;strong&gt;Re-rank RAG&lt;/strong&gt; was top-tier when models were big enough.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Also worth noting: &lt;strong&gt;the bigger the model, the more benefit it gets from the application examples&lt;/strong&gt;. Makes sense since big models have the horsepower to actually use them properly.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What If You Only Use a Big Model for Reranking?
&lt;/h2&gt;

&lt;p&gt;Now here's a move I liked, instead of letting a big model do everything, they had it just handle the &lt;strong&gt;reranking&lt;/strong&gt;, and let a &lt;strong&gt;smaller model do the actual answering&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At first that sounds pointless, right? Like if you’re already using a big model, why not let it finish the job? What makes it any different from just using a bigger model from start to end?&lt;/p&gt;

&lt;p&gt;But reranking is &lt;strong&gt;way cheaper&lt;/strong&gt; than generating. The big model’s just doing short scoring tasks  and when it picks better inputs, the small model can do a decent job answering. &lt;/p&gt;

&lt;p&gt;It’s a great &lt;strong&gt;cost/performance tradeoff&lt;/strong&gt;. Cheap inference, better results.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: What You Should Take Away
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;RAG+ improves reasoning by retrieving &lt;strong&gt;both knowledge and its application&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s modular, so you don’t have to rebuild your pipeline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Re-rank RAG only works well on &lt;strong&gt;big models&lt;/strong&gt; probably because small ones don’t follow instructions well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GraphRAG and AFRAG&lt;/strong&gt; are cool but either too costly or too fragile on small models.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Letting big models do reranking only&lt;/strong&gt; is a smart hack: better results, cheaper cost.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most importantly: &lt;strong&gt;don’t just throw examples at your model&lt;/strong&gt;, you need to give it both the facts and how to use them.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitations? Yup they exist
&lt;/h2&gt;

&lt;p&gt;Unfortunately nothing is perfect, these were the problems that persist.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Building the application dataset is expensive&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Especially in low-resource domains. And automatic generation via LLMs? Still error-prone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bad retrieval = bad matches&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If the system pulls the wrong knowledge, it might link it to the wrong example, which breaks the whole reasoning chain and leads to poorer reasoning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RAG+ doesn't fix bad retrieval&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Continuation of previous point, It depends entirely on what’s retrieved. So if your retriever’s garbage, your answer will still be garbage. It's just more logically structured garbage.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;RAG+ isn't a new revolution, It's just improving on existing tech. Yet what it does just seems so obvious that I don't understand why we didn't do it before. It helps the model to answer properly, look at examples and think kinda like us. It can also be integrated into existing stacks so there's no real harm in trying it out (provided you spend the time configuring the applications generation part). &lt;/p&gt;

&lt;p&gt;I'd love to see how it's helping you guys out!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;All of this came from a paper I read recently, I highly recommend you guys checking it out for the full details:&lt;/em&gt; &lt;a href="https://arxiv.org/abs/2506.11555" rel="noopener noreferrer"&gt;RAG+: Enhancing Retrieval-Augmented Generation with Application-Aware Reasoning&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>llm</category>
      <category>nlp</category>
    </item>
  </channel>
</rss>
