<?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: Nandakishor M</title>
    <description>The latest articles on DEV Community by Nandakishor M (@nandakishor_m_6cc0adfde9f).</description>
    <link>https://dev.to/nandakishor_m_6cc0adfde9f</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%2F4130871%2F5eabf66b-7839-4c76-ad51-a700bdcd0e4a.jpeg</url>
      <title>DEV Community: Nandakishor M</title>
      <link>https://dev.to/nandakishor_m_6cc0adfde9f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nandakishor_m_6cc0adfde9f"/>
    <language>en</language>
    <item>
      <title>I Built Non-Autoregressive Decision Models a Year Ago. Then a Frontier Lab Called It a "Breakthrough".</title>
      <dc:creator>Nandakishor M</dc:creator>
      <pubDate>Fri, 18 Sep 2026 05:52:24 +0000</pubDate>
      <link>https://dev.to/nandakishor_m_6cc0adfde9f/i-built-non-autoregressive-decision-models-a-year-ago-then-a-frontier-lab-called-it-a-18me</link>
      <guid>https://dev.to/nandakishor_m_6cc0adfde9f/i-built-non-autoregressive-decision-models-a-year-ago-then-a-frontier-lab-called-it-a-18me</guid>
      <description>&lt;h3&gt;
  
  
  From our March 2025 arXiv paper on RL conversion trajectories to building a sub-40ms open-weight System 1 decision engine with RLCD.
&lt;/h3&gt;

&lt;p&gt;Everyone in AI right now is talking about a new kind of model: an architecture that is not auto-regressive, does not generate text, and gives lightning fast probability predictions over a structured JSON schema. &lt;/p&gt;

&lt;p&gt;Seeing the hype online feels both validating and deeply frustrating. &lt;/p&gt;

&lt;p&gt;I worked on this literally one year back in March 2025. I spent months of hard work, sweat, and sleepless nights building it, published an arXiv paper (&lt;a href="https://arxiv.org/abs/2503.23303" rel="noopener noreferrer"&gt;arXiv:2503.23303&lt;/a&gt;), released the model weights on Hugging Face (&lt;a href="https://huggingface.co/DeepMostInnovations/sales-conversion-model-reinf-learning" rel="noopener noreferrer"&gt;sales-conversion-model-reinf-learning&lt;/a&gt;), published the open dataset (&lt;a href="https://huggingface.co/datasets/DeepMostInnovations/saas-sales-conversations" rel="noopener noreferrer"&gt;saas-sales-conversations&lt;/a&gt;), built a PyPi package, and posted the whole approach on Reddit (&lt;a href="https://www.reddit.com/r/LocalLLaMA/s/6eGEwsAz43" rel="noopener noreferrer"&gt;r/LocalLLaMA post&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Then in September 2025, I published a second paper (&lt;a href="https://arxiv.org/abs/2510.01237" rel="noopener noreferrer"&gt;arXiv:2510.01237&lt;/a&gt;), laying out the exact framework for schema-based decisions guided by reinforcement learning. For anyone curious, the guiding brain in my system was always reinforcement learning, not just an embedding model or an autoregressive LLM.&lt;/p&gt;

&lt;p&gt;And then in September 2026, a well-funded frontier lab called TypeSafe AI (founded by Diogo Almeida, a co-inventor of ChatGPT at OpenAI) launched Jev. They proposed the exact same non-autoregressive decision concept as if it was a brand-new scientific breakthrough. Except they launched without technical papers, without open weights, and with zero open training datasets. &lt;/p&gt;

&lt;p&gt;My earlier model used PPO over sequence representations to output turn-by-turn conversion trajectories (probabilities from 0.0 to 1.0) in vertical sales conversations. Jev generalized parallel sampling using what they called RLCD (Reinforcement Learning for Calibrated Decisions) to output confidence distributions and schema choices horizontally, charging $0.042 per million input tokens with typical response times around 150 ms.&lt;/p&gt;

&lt;p&gt;It is incredibly frustrating when something you poured your heart into for months as an open-source researcher gets overlooked because it was built for a vertical use case, while a funded lab packages the same core idea horizontally and gets all the glory. But that is the open-source story in general 🙂.&lt;/p&gt;

&lt;p&gt;Instead of staying bitter, I decided to take everything I learned from my March 2025 and September 2025 papers, fix every architectural limitation of the old approach, and build a completely open, horizontal System 1 decision model: &lt;strong&gt;RL Agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And because we built it properly on a bidirectional encoder, our model runs in &lt;strong&gt;33 to 38 milliseconds on a GPU&lt;/strong&gt;, making it roughly 4x faster than Jev's published 150 ms latency, and it is 100% open-source.&lt;/p&gt;

&lt;p&gt;Here is the full story of how it works, the architecture, the math of RLCD with strictly proper scoring rules, and why non-autoregressive decision models are the future.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Real Problem: Why LLMs are Terrible for Decisions
&lt;/h2&gt;

&lt;p&gt;Every modern AI pipeline has a giant bottleneck: we use generative LLMs for simple reflex decisions.&lt;/p&gt;

&lt;p&gt;When a customer support ticket arrives, or an email hits your inbox, or a user submits a prompt to your API, you usually only need to answer a few simple questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which department should this go to?&lt;/li&gt;
&lt;li&gt;Is this email a phishing attack?&lt;/li&gt;
&lt;li&gt;Is this prompt trying to jailbreak the system?&lt;/li&gt;
&lt;li&gt;How urgent is this issue on a scale of 0 to 3?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Calling an 8B or 70B generative LLM for this is complete overkill. You wait 500ms to 2,000ms for tokens to stream out, spend real money on inference, and then have to write regex or JSON parsers to extract a clean label from free-form text. Worst of all, LLMs love to hallucinate and generate fake confidence. When an LLM outputs &lt;code&gt;"confidence: 0.95"&lt;/code&gt;, it is just predicting tokens that sound confident. There is zero mathematical calibration behind it.&lt;/p&gt;

&lt;p&gt;We needed a model that works like the human brain's System 1: instant, reflex decisions with honest, calibrated probabilities, taking only 30 to 40 milliseconds on standard hardware.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Three Decision Primitives
&lt;/h2&gt;

&lt;p&gt;Following the System 1 philosophy, RL Agent accepts a &lt;strong&gt;state&lt;/strong&gt; (raw text, email, ticket, or JSON document) along with one or more &lt;strong&gt;typed questions&lt;/strong&gt;, and evaluates all of them in a single, parallel forward pass.&lt;/p&gt;

&lt;p&gt;It uses three primitives:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;choice&lt;/strong&gt;: Pick one option from a dictionary of criteria. Returns the chosen label, probabilities for each candidate option, and a confidence score. (Great for department routing, intent detection, topic classification).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;score&lt;/strong&gt;: Place the state on an ordinal rubric like levels 0, 1, 2, 3. Returns an expected score value, probabilities across levels, and confidence. (Great for customer frustration, urgency, prompt harm severity).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;noul&lt;/strong&gt;: A direct boolean question returning calibrated probability P(true) from 0.0 to 1.0. (Great for detecting phishing, spam, jailbreaks, or churn risk).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because the output space is strictly probabilities and numbers, the model never generates text, cannot hallucinate, and broken JSON is physically impossible.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Model Architecture: 421M Parameters
&lt;/h2&gt;

&lt;p&gt;In my March 2025 work, I used frozen sequence embeddings combined with a separate PPO value network. It worked for turn-by-turn sales prediction, but it was not end-to-end and could not handle dynamic new questions at runtime.&lt;/p&gt;

&lt;p&gt;For RL Agent, we built a 421M-parameter end-to-end architecture with two tightly coupled components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;State (Text or JSON) + Typed Questions &amp;amp; Options
                       │
                       ▼
Prompt Construction:
[CLS] &amp;lt;type&amp;gt; question: &amp;lt;instructions&amp;gt; [SEP] [MASK] opt0 [MASK] opt1 ... [SEP] &amp;lt;state&amp;gt; [SEP]
                       │
                       ▼
┌──────────────────────────────────────────────────────────────┐
│ ENCODER: ModernBERT-large (395M, Bidirectional)              │
│ • 28 layers, hidden dim 1024, 16 heads, GeGLU MLP            │
│ • Full sequence bidirectional attention across state and opts│
└──────────────────────────────┬───────────────────────────────┘
                               │ Hidden states [L × 1024]
                               ▼
               + Question-Type Embedding (choice=0, score=1, noul=2)
                               │
┌──────────────────────────────▼───────────────────────────────┐
│ DECISION HEAD TRANSFORMER (~25.2M parameters)                │
│ • 2 TransformerEncoder layers (d=1024, 16 heads, FFN=4096)   │
│ • Pre-LayerNorm, Dropout 0.1                                 │
└──────────────┬───────────────────────────────┬───────────────┘
               │                               │
               ▼ Extract [MASK] markers        ▼ Pooled [CLS] state
┌──────────────────────────────┐ ┌─────────────────────────────┐
│ OPTION SCORER (~1.05M)       │ │ ACT / ESCALATE HEAD (~0.26M)│
│ • LayerNorm(1024)            │ │ • Input: [CLS] (1024)       │
│ • Linear(1024 -&amp;gt; 1024)       │ │   + 4 distribution stats    │
│ • GELU()                     │ │ • Linear(1028 -&amp;gt; 256)       │
│ • Linear(1024 -&amp;gt; 1)          │ │ • GELU()                    │
│ Yields 1 scalar logit per opt│ │ • Linear(256 -&amp;gt; 2)          │
└──────────────┬───────────────┘ └─────────────┬───────────────┘
               │                               │
               ▼                               ▼
       Logits ÷ Temperature           P(Act) vs P(Escalate)
         -&amp;gt; Softmax                                  
               │
               ▼
 [ Probabilities + Confidence ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ModernBERT-large Backbone
&lt;/h3&gt;

&lt;p&gt;We use &lt;strong&gt;ModernBERT-large&lt;/strong&gt; (395M parameters) as our base encoder. ModernBERT has 28 layers, hidden dimension 1024, 16 attention heads, GeGLU intermediate layers (dim 2624), and supports 8,192 tokens via rotary position embeddings (RoPE). Because it is fully bidirectional, every token attends to all parts of the state and options simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  The [MASK] Option Extraction Mechanism
&lt;/h3&gt;

&lt;p&gt;For every question, our &lt;code&gt;build_sequence&lt;/code&gt; function packs the prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;CLS&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;choice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;question:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Which&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;team&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;should&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;handle&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;`body`?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;SEP&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;MASK&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;billing:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;payments&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;MASK&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tech:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;bugs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;MASK&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;other:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;general&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;SEP&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"subject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Refund request"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I was billed twice..."&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;SEP&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each option gets a &lt;code&gt;[MASK]&lt;/code&gt; token. After passing through ModernBERT and the 2-layer decision head transformer, we use &lt;code&gt;torch.gather&lt;/code&gt; to pull the hidden states specifically at those marker positions. &lt;/p&gt;

&lt;p&gt;The Option Scorer MLP projects each 1024-dim marker state to a scalar logit. A softmax over the options belonging to that question yields the candidate probability distribution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p = softmax(z / T)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where T is a temperature fitted per question type and option count.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Act vs Escalate Head
&lt;/h3&gt;

&lt;p&gt;In real automated systems, you want to know when to trust the model and when to call a human. We added an Act/Escalate head that takes the pooled [CLS] token (1024 dim) concatenated with 4 distribution features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top probability: max(p)&lt;/li&gt;
&lt;li&gt;Top-2 margin: p_top1 - p_top2&lt;/li&gt;
&lt;li&gt;Normalized entropy: H(p) / log(K)&lt;/li&gt;
&lt;li&gt;Option budget ratio: K / 255&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This 1028-dim vector passes through a 2-layer MLP to output [P(act), P(escalate)].&lt;/p&gt;

&lt;h3&gt;
  
  
  Single Forward Pass for Multiple Questions
&lt;/h3&gt;

&lt;p&gt;If you have an email and ask 5 questions about it, all 5 sequences are collated into one batch. ModernBERT processes them all in a single forward pass in about 35 milliseconds on a GPU.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Training with RLCD: The Mathematics of Calibration
&lt;/h2&gt;

&lt;p&gt;How do you train this with reinforcement learning so the probabilities are genuinely calibrated?&lt;/p&gt;

&lt;h3&gt;
  
  
  The Trap with Normal Classification and Naive RL
&lt;/h3&gt;

&lt;p&gt;If you train a classifier with cross entropy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Loss_CE = -sum(y_k * log(p_k))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the loss can only be minimized when the winner logit approaches infinity. The model gets overconfident.&lt;/p&gt;

&lt;p&gt;And if you try standard reinforcement learning with a binary reward (+1 if correct, 0 if wrong), the expected reward is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E[R] = sum(y_k * p_k)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The policy gradient forces the highest probability toward 1.0 and all others toward 0.0. In other words, naive RL maximizes accuracy by destroying calibration. It turns your model into a confidently wrong machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strictly Proper Scoring Rules
&lt;/h3&gt;

&lt;p&gt;The foundation of RLCD (Reinforcement Learning for Calibrated Decisions) is using a strictly proper scoring rule as the reward.&lt;/p&gt;

&lt;p&gt;In decision theory, a scoring rule S(q, y) assigns a score when the model reports distribution q and the true outcome is y. It is strictly proper if and only if the expected score is uniquely maximized when q equals the true distribution p:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E_{y ~ p}[S(q, y)] &amp;lt;= E_{y ~ p}[S(p, y)], with equality if and only if q = p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This guarantees that the model receives the highest possible reward only when it reports honest probabilities.&lt;/p&gt;

&lt;p&gt;Our composite reward combines three proper scores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reward(q, y) = S_log(q, y) + 0.5 * S_sph(q, y) - 1.0 * S_rps(q, y)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  1. Logarithmic Score (S_log)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;S_log(q, y) = sum(y_k * log(max(q_k, 1e-12)))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penalizes the model heavily if it assigns low probability to the true outcome. We clamp the floor to -9.21 for numerical stability.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Spherical Score (S_sph)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;S_sph(q, y) = sum(y_k * q_k) / sqrt(sum(q_k^2))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A bounded score in [0, 1] that rewards placing probability mass on the correct class without the extreme gradient spikes of pure log-loss.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Ranked Probability Score (S_rps)
&lt;/h4&gt;

&lt;p&gt;Used for ordinal score questions (rubrics like 0, 1, 2, 3). If true urgency is level 3, guessing level 2 is much better than guessing level 0. RPS measures the squared distance between the cumulative distributions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;S_rps(q, y) = (1 / (K - 1)) * sum((CDF_q(i) - CDF_y(i))^2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Subtracting RPS from the reward teaches the model distance along a rubric.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Policy Gradient Update (REINFORCE with Group Baseline)
&lt;/h3&gt;

&lt;p&gt;We train with pure policy gradient (zero supervised cross-entropy loss):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Gaussian Exploration&lt;/strong&gt;: For each question, we sample G = 8 noisy candidate logits:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   z_noisy = z + epsilon, where epsilon ~ Normal(0, sigma^2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We project the noise vector so its sum across options is zero (epsilon - mean(epsilon)), since adding a constant to all logits cancels out in softmax. The exploration standard deviation sigma decays from 1.0 down to 0.3.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Noisy Distribution&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   q_noisy = softmax(z_noisy)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reward Evaluation&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   r_noisy = Reward(q_noisy, y)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Group Mean Advantage (GRPO style)&lt;/strong&gt;: We compute advantages relative to the group mean across the 8 samples:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Advantage = (r_noisy - mean(r)) / (std(r) + 1e-6)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Policy Loss&lt;/strong&gt;: Using the Gaussian log-probability:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Loss_policy = -mean(Advantage * log_prob(z_noisy | z))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cost-Sensitive Act Head&lt;/strong&gt;: The act head samples actions in {act, escalate} and receives rewards from a cost matrix:

&lt;ul&gt;
&lt;li&gt;Action correct: +1.0&lt;/li&gt;
&lt;li&gt;Action incorrect: -3.0&lt;/li&gt;
&lt;li&gt;Escalated: -0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Taking an automated action is profitable only when:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   P(correct) * (+1.0) + (1 - P(correct)) * (-3.0) &amp;gt; -0.5 =&amp;gt; P(correct) &amp;gt; 2.5 / 4.0 = 0.625
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The policy automatically learns to act only when confidence is above 62.5%.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Multi-Turn Trajectories with TD(lambda)
&lt;/h2&gt;

&lt;p&gt;In my March 2025 paper, we predicted sales conversion across turns using PPO. One big issue we uncovered back then was leakage: if you feed the whole conversation embedding at turn 1, the model sees future signals.&lt;/p&gt;

&lt;p&gt;In RL Agent, we solved this cleanly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversations are sliced turn-by-turn into prefixes (turn 1, turn 2, turn 3...). The model only receives context up to that turn.&lt;/li&gt;
&lt;li&gt;We apply Temporal Difference learning with Monte Carlo return targets (TD(lambda = 1.0)):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;G_T = y (terminal outcome)
G_t = (1 - lambda) * V(s_{t+1}) + lambda * G_{t+1}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With lambda = 1.0, early turns are trained directly against the real terminal outcome of the conversation, learning what early dialogue patterns genuinely lead to conversion or churn without bootstrapping from the model's own guesses.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Confidence via Normalized Entropy
&lt;/h2&gt;

&lt;p&gt;For every question, the model returns a confidence score between 0.0 and 1.0. We calculate this using normalized Shannon entropy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Confidence = 1 - (Entropy(p) / log(K))
           = 1 + sum(p_k * log(max(p_k, 1e-12))) / log(K)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where K is the number of options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the model is completely unsure, all options have probability 1/K. Entropy equals log(K), so confidence is exactly &lt;strong&gt;0.00&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If the model is completely certain, one option has probability 1.0 and entropy is 0, so confidence is &lt;strong&gt;1.00&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Dataset Pipeline: Zero Synthetic Shortcuts
&lt;/h2&gt;

&lt;p&gt;Many teams try to build these models by asking an LLM to generate synthetic training questions and labels. That is a mistake. When you train a calibration model on synthetic labels, you simply calibrate your model to the LLM's own mistakes and hallucinations.&lt;/p&gt;

&lt;p&gt;We built our training pipeline using 100% human-labeled, real-world public datasets across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Support Triage &amp;amp; Intents&lt;/strong&gt;: Real customer service conversations, banking intents, and ticket routing queues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference &amp;amp; Fact Checking&lt;/strong&gt;: Premise-hypothesis pairs, fact verification, and contradiction checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Safety&lt;/strong&gt;: Human consensus labels for toxic remarks, harassment, and severe abuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security &amp;amp; Guardrails&lt;/strong&gt;: Real jailbreak prompts and prompt injection attacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rubrics &amp;amp; Quality&lt;/strong&gt;: Multi-axis human rubric ratings for helpfulness, complexity, and correctness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Turn Trajectories&lt;/strong&gt;: SaaS sales and support interactions with verified final outcomes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To stop the model from taking shortcuts, our data pipeline dynamically shuffles option orders, paraphrases questions, alternates between raw text and nested JSON states, and injects random distractor questions.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Real-World Benchmarks: Laya vs. TypeSafe Jev
&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%2Fz8lepygpvckfgnrtgp7r.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%2Fz8lepygpvckfgnrtgp7r.png" alt=" " width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We ran extensive evaluations on our fine-tuned checkpoint across 25,424 total test questions (23,024 in-task questions and 2,400 zero-shot questions from task families never seen during training). &lt;/p&gt;

&lt;p&gt;Then we compared our numbers directly against TypeSafe Jev's public launch numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Head-to-Head Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric / Dimension&lt;/th&gt;
&lt;th&gt;TypeSafe Jev (Published)&lt;/th&gt;
&lt;th&gt;Laya (Fine-Tuned Checkpoint)&lt;/th&gt;
&lt;th&gt;Analysis / Advantage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;P50 Latency (1 Question)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~400 ms avg (70 to 500 ms, 150 ms best)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;38.4 ms&lt;/strong&gt; (p95: 42.1 ms)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Laya is ~10.4x faster on avg (4x faster than Jev best-case)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Batched Latency (10 Questions)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~1,500 ms (serial) / ~400 ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;156.0 ms&lt;/strong&gt; (p95: 158.4 ms)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Laya evaluates 10 questions in the time Jev answers 1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Batched Latency (50 Questions)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multi-second / rate-limited&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;721.4 ms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High-throughput parallel mini-batching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Benchmark Accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;67.8%&lt;/strong&gt; (across 4 production workflows)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;83.8%&lt;/strong&gt; in-task macro accuracy&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Laya achieves +16.0% higher overall accuracy&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent &amp;amp; Customer Routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~95 to 98% agreement&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;99.1% accuracy&lt;/strong&gt; (ECE: 0.009)&lt;/td&gt;
&lt;td&gt;Near-zero calibration error on routing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Moderation &amp;amp; Content Safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~92 to 95% agreement&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;96.7% accuracy&lt;/strong&gt; (ECE: 0.061)&lt;/td&gt;
&lt;td&gt;Clean safety boundary separation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference &amp;amp; Fact Verification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not separately reported&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;88.3% accuracy&lt;/strong&gt; (ECE: 0.054)&lt;/td&gt;
&lt;td&gt;Full bidirectional attention captures contradictions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instruction-Following Tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proprietary internal set&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87.8% in-task / 86.3% zero-shot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proven generalization across unseen tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Email Triage &amp;amp; Phishing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vendor custom workflow&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;73.2% accuracy&lt;/strong&gt; (ECE: 0.017)&lt;/td&gt;
&lt;td&gt;Tailored email cleaning and phishing filters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Selective Automation (@ 50% Cov)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claims human escalation&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;92.2% accuracy&lt;/strong&gt; (ECE: 0.041)&lt;/td&gt;
&lt;td&gt;Safe automated gating (confidence &amp;gt;= 0.85)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model Weights &amp;amp; Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Closed-source / proprietary API&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100% Open-source Apache 2.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full data sovereignty and transparency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.042 / 1M input tokens recurring&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.00 / self-hosted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Runs on commodity GPUs, Mac MPS, or CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Turn Trajectory Modeling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static state snapshots&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TD(lambda = 1.0) prefix modeling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Real temporal credit assignment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud-only egress&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Air-gapped / Local / On-Device&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero data egress (HIPAA/GDPR compliant)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Detailed In-Task Performance (23,024 Evaluated Questions)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task Family&lt;/th&gt;
&lt;th&gt;Questions (N)&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;ECE (Calibration)&lt;/th&gt;
&lt;th&gt;NLL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent and routing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,475&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99.1%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.009&lt;/td&gt;
&lt;td&gt;0.181&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Moderation and safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2,708&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;96.7%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.061&lt;/td&gt;
&lt;td&gt;0.153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Topic classification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;749&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93.9%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.029&lt;/td&gt;
&lt;td&gt;0.196&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Emotion and tone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,825&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90.6%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.018&lt;/td&gt;
&lt;td&gt;0.238&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference and fact checking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3,022&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;88.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.054&lt;/td&gt;
&lt;td&gt;0.340&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instruction-following tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.046&lt;/td&gt;
&lt;td&gt;0.302&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Robustness checks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;744&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;85.1%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.108&lt;/td&gt;
&lt;td&gt;1.058&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reading comprehension&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;770&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;84.7%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.083&lt;/td&gt;
&lt;td&gt;0.409&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Email triage &amp;amp; phishing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2,691&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;73.2%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.017&lt;/td&gt;
&lt;td&gt;0.595&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Search relevance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;733&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;62.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.066&lt;/td&gt;
&lt;td&gt;0.728&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Response quality scoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3,146&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;58.1%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.023&lt;/td&gt;
&lt;td&gt;1.009&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall Macro In-Task&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;23,024&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;83.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.060&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.468&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Zero-Shot Generalization (2,400 Questions Never Trained On)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task Family (Zero-Shot)&lt;/th&gt;
&lt;th&gt;Questions (N)&lt;/th&gt;
&lt;th&gt;Accuracy&lt;/th&gt;
&lt;th&gt;ECE&lt;/th&gt;
&lt;th&gt;NLL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instruction-following tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;86.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.045&lt;/td&gt;
&lt;td&gt;0.319&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Moderation and safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;79.7%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.171&lt;/td&gt;
&lt;td&gt;1.415&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Emotion and tone&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;58.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.318&lt;/td&gt;
&lt;td&gt;1.976&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sentiment and rating&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;36.2%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.291&lt;/td&gt;
&lt;td&gt;1.798&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall Macro Zero-Shot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2,400&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;65.1%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.207&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.377&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Selective Automation in Practice
&lt;/h3&gt;

&lt;p&gt;Because the model's confidence scores are calibrated using normalized entropy, you can use them directly in code to gate actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Taking all answers: &lt;strong&gt;83.8% accuracy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Answering only the top 80% most confident predictions: &lt;strong&gt;89.4% accuracy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Answering only the top 50% most confident predictions: &lt;strong&gt;92.2% accuracy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means that if you set an automated routing threshold of confidence &amp;gt;= 0.85, the model can automate roughly half of your incoming support tickets, security flags, or email triages with 92%+ precision, escalating the genuinely tricky cases to humans.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. How to Run It in Python
&lt;/h2&gt;

&lt;p&gt;You can run Laya directly with our PyPI package in one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;laya
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quickstart Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;laya&lt;/span&gt;

&lt;span class="c1"&gt;# Download and load the fine-tuned model from Hugging Face
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;laya&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;convaiinnovations/laya&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Define your input state (raw text or JSON dict)
&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user@company.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subject&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Charged twice on March invoice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hi, we were billed twice for invoice 4411. Please refund the duplicate today or we will cancel our plan.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Define your typed questions
&lt;/span&gt;&lt;span class="n"&gt;questions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;department&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Which department should handle this email?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;criteria&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;billing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invoices, payments, refunds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;technical&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bugs, outages, system errors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sales&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pricing, new contracts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;everything else&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How urgent is this request?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;criteria&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;not urgent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;soon&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;critical deadline or blocking issue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_risk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;noul&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Does the user threaten to cancel or leave?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_phishing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;noul&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Is this email a phishing or scam attempt?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Run all questions in one single forward pass (~35 ms on GPU)
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;answers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Department :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;department&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; billing (confidence: 0.94)
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Urgency    :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urgency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; 1.84 / 2.0
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Churn Risk :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;churn_risk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;noul&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; 0.892 (89.2% probability)
&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Phishing   :&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;is_phishing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;noul&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# -&amp;gt; 0.008 (0.8% probability)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Automated Gating Logic
&lt;/h3&gt;

&lt;p&gt;Because probabilities are mathematically calibrated, routing logic is simple code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;dept&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;department&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;choice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;conf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;department&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;confidence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;conf&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;route_automatically&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dept&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;send_to_human_triage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Low confidence (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  10. Links and Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hugging Face Model:&lt;/strong&gt; &lt;a href="https://huggingface.co/convaiinnovations/laya" rel="noopener noreferrer"&gt;convaiinnovations/laya&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PyPI Package:&lt;/strong&gt; &lt;a href="https://pypi.org/project/laya/" rel="noopener noreferrer"&gt;pypi.org/project/laya&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/NandhaKishorM/laya" rel="noopener noreferrer"&gt;github.com/NandhaKishorM/laya&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Interactive Space:&lt;/strong&gt; &lt;a href="https://huggingface.co/spaces/convaiinnovations/laya-demo" rel="noopener noreferrer"&gt;convaiinnovations/laya-demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It took a year of research, from our March 2025 arXiv paper to today, but the core realization remains: &lt;strong&gt;not every AI problem requires an autoregressive chatbot&lt;/strong&gt;. For high-volume classification, guardrails, routing, and triage, a 421M bidirectional decision model trained with RLCD delivers sub-40ms execution, zero hallucinations, and honest confidence scores you can actually rely on in production.&lt;/p&gt;

&lt;p&gt;And this time, it is fully open-source.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built by Nandakishor M&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
