<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agentic AI | David Fernandez</title><link>https://davidferna.com/tags/agentic-ai/</link><atom:link href="https://davidferna.com/tags/agentic-ai/index.xml" rel="self" type="application/rss+xml"/><description>Agentic AI</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Mon, 01 Dec 2025 00:00:00 +0000</lastBuildDate><image><url>https://davidferna.com/media/icon_hu_7c85b1cf69ad867f.png</url><title>Agentic AI</title><link>https://davidferna.com/tags/agentic-ai/</link></image><item><title>Small Language Models on the Edge for Real-World Agentic Systems in Industry</title><link>https://davidferna.com/publications/sacair-2025/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://davidferna.com/publications/sacair-2025/</guid><description>&lt;p&gt;&lt;style&gt;
/* ── Scroll-reveal: shared across intro / benchmark / planning / results ──
Hiding is gated behind .slm-js (set below only when IntersectionObserver
exists), so content stays visible without JS and under reduced motion. */
@keyframes slm-up {
from { opacity: 0; transform: translateY(18px) }
to { opacity: 1; transform: none }
}
@keyframes slm-grow { to { transform: scaleX(1) } }
@media screen and (prefers-reduced-motion: no-preference) {
.slm-js .slm-reveal { opacity: 0 }
.slm-js .slm-reveal.slm-visible { animation: slm-up .55s ease forwards }
.slm-js .slm-reveal.slm-d1.slm-visible { animation-delay: .1s }
.slm-js .slm-reveal.slm-d2.slm-visible { animation-delay: .25s }
.slm-js .slm-reveal.slm-d3.slm-visible { animation-delay: .4s }
/* bars grow from zero when their own section scrolls into view */
.slm-js .slm-bar { transform: scaleX(0); transform-origin: left center }
.slm-js .slm-visible .slm-bar { animation: slm-grow 1s cubic-bezier(.22,1,.36,1) forwards }
}
/* ── Deliberately wide figures remain usable on touch and keyboard ── */
.slm-scroll {
overscroll-behavior-inline: contain;
scrollbar-color: rgba(129,140,248,.45) rgba(15,23,42,.45);
scrollbar-width: thin;
-webkit-overflow-scrolling: touch;
}
.slm-scroll:focus-visible {
outline: 2px solid rgba(129,140,248,.75);
outline-offset: 3px;
}
.slm-scroll::-webkit-scrollbar { height: 6px }
.slm-scroll::-webkit-scrollbar-track {
background: rgba(15,23,42,.45);
border-radius: 999px;
}
.slm-scroll::-webkit-scrollbar-thumb {
background: rgba(129,140,248,.45);
border-radius: 999px;
}
&lt;/style&gt;
&lt;script&gt;if("IntersectionObserver" in window)document.documentElement.classList.add("slm-js")&lt;/script&gt;
&lt;div class="not-prose" style="margin:0;padding:0;"&gt;
&lt;div class="pub-grid" style="display:grid;gap:1rem;margin-bottom:1.5rem;"&gt;
&lt;div style="padding:1.1rem min(1.25rem,var(--pub-panel-padding));border-radius:1rem;background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.2);"&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#ef4444;margin-bottom:.5rem;"&gt;01 &amp;nbsp;&amp;middot;&amp;nbsp; The Problem&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Large language models are hard to put to work inside a company: they cost a lot to run, they &lt;strong style="color:#e2e8f0;"&gt;send private data to the cloud&lt;/strong&gt;, and they stop working the moment the network does.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="padding:1.1rem min(1.25rem,var(--pub-panel-padding));border-radius:1rem;background:rgba(99,102,241,.06);border:1px solid rgba(99,102,241,.2);"&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#818cf8;margin-bottom:.5rem;"&gt;02 &amp;nbsp;&amp;middot;&amp;nbsp; The Approach&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Run &lt;strong style="color:#e2e8f0;"&gt;small models under 7B parameters&lt;/strong&gt; on ordinary hardware, and make up for their smaller capacity with &lt;strong style="color:#e2e8f0;"&gt;agentic architectures&lt;/strong&gt; that plan, route, and check their own work.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="padding:1.1rem min(1.25rem,var(--pub-panel-padding));border-radius:1rem;background:rgba(34,197,94,.06);border:1px solid rgba(34,197,94,.2);"&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#22c55e;margin-bottom:.5rem;"&gt;03 &amp;nbsp;&amp;middot;&amp;nbsp; The Finding&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;On commodity hardware, &lt;strong style="color:#e2e8f0;"&gt;Phi&amp;#8209;4&lt;/strong&gt; reaches C1&amp;#8209;level translation and a 0.883 summarization score, while local and in&amp;#8209;browser hosting answer &lt;strong style="color:#e2e8f0;"&gt;3&amp;ndash;4&amp;times; faster&lt;/strong&gt; than the cloud.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="paper-method" tabindex="-1" class="slm-reveal paper-section-anchor" style="margin-bottom:1.5rem;border-radius:1.25rem;border:1px solid rgba(168,85,247,.2);overflow:hidden;"&gt;
&lt;!-- header --&gt;
&lt;div style="padding:1rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(168,85,247,.12);background:linear-gradient(135deg,rgba(168,85,247,.1),rgba(59,130,246,.06));display:flex;align-items:center;gap:.75rem;"&gt;
&lt;span style="flex-shrink:0;width:2rem;height:2rem;border-radius:.625rem;background:rgba(168,85,247,.18);display:flex;align-items:center;justify-content:center;color:#c084fc;"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.8"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 6.042A8.967 8.967 0 006 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 016 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 016-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0018 18a8.967 8.967 0 00-6 2.292m0-14.25v14.25"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:#c084fc;margin-bottom:.1rem;"&gt;Contribution 1 &amp;middot; A Bias-Resistant Benchmark&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-body);color:#94a3b8;"&gt;Grading a small model is subjective, so two rival graders must agree. Role-play makes them careful; consensus curbs single-judge bias.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ multi-agent grading pipeline ═══ --&gt;
&lt;div style="padding:.9rem 1rem .6rem;border-bottom:1px solid rgba(148,163,184,.08);"&gt;
&lt;div class="slm-scroll pub-scroll" tabindex="0" role="region" aria-label="Scrollable multi-agent benchmarking diagram" style="overflow-x:auto;"&gt;
&lt;svg class="pub-diagram" viewBox="0 0 900 470" style="display:block;--pub-diagram-width:56.25rem;" xmlns="http://www.w3.org/2000/svg" font-family="system-ui,-apple-system,sans-serif" role="img" aria-label="Role-based multi-agent benchmarking framework: an exam set is handed to a Proctor agent, which sends a translation exercise to each small language model cast as a student and collects its answer. The exercise and answer are passed to two independent grader agents, Mnr. Goddard powered by GPT-4 and Mev. Vorster powered by Claude, who discuss the work and reach a consensus grade on the CEFR scale. The agreed grade and review return to the Proctor, which records a structured benchmark result of student, languages, CEFR grade, and review summary."&gt;
&lt;defs&gt;
&lt;marker id="slmHeadSlate" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" refX="7" refY="3.4" orient="auto"&gt;&lt;path d="M0,0 L8,3.4 L0,6.8 Z" fill="#64748b"/&gt;&lt;/marker&gt;
&lt;marker id="slmHeadPurple" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" refX="7" refY="3.4" orient="auto"&gt;&lt;path d="M0,0 L8,3.4 L0,6.8 Z" fill="#a855f7"/&gt;&lt;/marker&gt;
&lt;marker id="slmHeadGreen" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" refX="7" refY="3.4" orient="auto"&gt;&lt;path d="M0,0 L8,3.4 L0,6.8 Z" fill="#22c55e"/&gt;&lt;/marker&gt;
&lt;marker id="slmHeadGreenStart" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" refX="1" refY="3.4" orient="auto"&gt;&lt;path d="M8,0 L0,3.4 L8,6.8 Z" fill="#22c55e"/&gt;&lt;/marker&gt;
&lt;marker id="slmHeadAmber" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" refX="7.5" refY="3.6" orient="auto"&gt;&lt;path d="M0,0 L8.5,3.6 L0,7.2 Z" fill="#f59e0b"/&gt;&lt;/marker&gt;
&lt;/defs&gt;
&lt;!-- outer container --&gt;
&lt;rect x="6" y="6" width="888" height="458" rx="18" fill="rgba(168,85,247,.03)" stroke="rgba(168,85,247,.22)" stroke-width="1.2"/&gt;
&lt;!-- ═ Exam set (top) ═ --&gt;
&lt;g&gt;
&lt;rect x="420" y="16" width="30" height="21" rx="4" fill="rgba(59,130,246,.18)" stroke="#3b82f6" stroke-width="1.1"/&gt;
&lt;rect x="424" y="20" width="30" height="21" rx="4" fill="rgba(59,130,246,.28)" stroke="#3b82f6" stroke-width="1.1"/&gt;
&lt;rect x="428" y="24" width="30" height="21" rx="4" fill="rgba(59,130,246,.42)" stroke="#60a5fa" stroke-width="1.1"/&gt;
&lt;text x="470" y="38" font-size="10.5" font-weight="700" fill="#93c5fd" text-anchor="start"&gt;Exam set&lt;/text&gt;
&lt;text x="470" y="50" font-size="8" fill="#94a3b8" text-anchor="start"&gt;English &amp;#8594; Afrikaans&lt;/text&gt;
&lt;/g&gt;
&lt;!-- ① Exams → Proctor --&gt;
&lt;line x1="443" y1="46" x2="443" y2="175" stroke="#64748b" stroke-width="1.6" marker-end="url(#slmHeadSlate)"/&gt;
&lt;circle cx="443" cy="120" r="9" fill="rgba(30,41,59,.95)" stroke="#94a3b8" stroke-width="1.2"/&gt;
&lt;text x="443" y="123.5" font-size="9" font-weight="800" fill="#cbd5e1" text-anchor="middle"&gt;1&lt;/text&gt;
&lt;!-- ═ Proctor (hub) ═ --&gt;
&lt;rect x="352" y="178" width="184" height="132" rx="14" fill="rgba(168,85,247,.12)" stroke="#a855f7" stroke-width="1.5"/&gt;
&lt;text x="444" y="212" font-size="13" font-weight="800" fill="#c084fc" text-anchor="middle"&gt;Proctor&lt;/text&gt;
&lt;text x="444" y="230" font-size="9.5" fill="#d8b4fe" text-anchor="middle"&gt;LLM agent&lt;/text&gt;
&lt;text x="444" y="256" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;sets exercises &amp;middot; routes answers&lt;/text&gt;
&lt;text x="444" y="269" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;hides grades from students&lt;/text&gt;
&lt;text x="444" y="290" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;records final results&lt;/text&gt;
&lt;!-- ═ SLM students panel (left) ═ --&gt;
&lt;rect x="24" y="120" width="150" height="316" rx="12" fill="rgba(148,163,184,.07)" stroke="rgba(148,163,184,.3)" stroke-width="1.2"/&gt;
&lt;text x="99" y="141" font-size="11" font-weight="800" fill="#cbd5e1" text-anchor="middle"&gt;SLM &amp;ldquo;students&amp;rdquo;&lt;/text&gt;
&lt;g font-size="9" font-family="ui-monospace,monospace" fill="#e2e8f0" text-anchor="middle"&gt;
&lt;rect x="36" y="153" width="126" height="24" rx="6" fill="rgba(59,130,246,.1)" stroke="rgba(59,130,246,.3)"/&gt;&lt;text x="99" y="169"&gt;stablelm&lt;/text&gt;
&lt;rect x="36" y="183" width="126" height="24" rx="6" fill="rgba(59,130,246,.1)" stroke="rgba(59,130,246,.3)"/&gt;&lt;text x="99" y="199"&gt;tower-instruct&lt;/text&gt;
&lt;rect x="36" y="213" width="126" height="24" rx="6" fill="rgba(59,130,246,.1)" stroke="rgba(59,130,246,.3)"/&gt;&lt;text x="99" y="229"&gt;llama&amp;#8202;3.2&lt;/text&gt;
&lt;rect x="36" y="243" width="126" height="24" rx="6" fill="rgba(59,130,246,.1)" stroke="rgba(59,130,246,.3)"/&gt;&lt;text x="99" y="259"&gt;falcon3&lt;/text&gt;
&lt;rect x="36" y="273" width="126" height="24" rx="6" fill="rgba(168,85,247,.16)" stroke="rgba(168,85,247,.5)"/&gt;&lt;text x="99" y="289" fill="#e9d5ff" font-weight="700"&gt;phi-4&lt;/text&gt;
&lt;rect x="36" y="303" width="126" height="24" rx="6" fill="rgba(59,130,246,.1)" stroke="rgba(59,130,246,.3)"/&gt;&lt;text x="99" y="319"&gt;madlad-400&lt;/text&gt;
&lt;rect x="36" y="333" width="126" height="24" rx="6" fill="rgba(59,130,246,.1)" stroke="rgba(59,130,246,.3)"/&gt;&lt;text x="99" y="349"&gt;vulavula&lt;/text&gt;
&lt;/g&gt;
&lt;text x="99" y="378" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;7 open models &amp;middot; &amp;lt; 7B params&lt;/text&gt;
&lt;text x="99" y="392" font-size="8" fill="#64748b" text-anchor="middle"&gt;graded blind to the outcome&lt;/text&gt;
&lt;!-- ② Proctor → SLM (exercise) --&gt;
&lt;line x1="352" y1="224" x2="178" y2="224" stroke="#a855f7" stroke-width="1.7" marker-end="url(#slmHeadPurple)"/&gt;
&lt;circle cx="265" cy="224" r="9" fill="rgba(88,28,135,.9)" stroke="#a855f7" stroke-width="1.2"/&gt;
&lt;text x="265" y="227.5" font-size="9" font-weight="800" fill="#e9d5ff" text-anchor="middle"&gt;2&lt;/text&gt;
&lt;text x="265" y="212" font-size="8.5" fill="#c4b5fd" text-anchor="middle"&gt;exercise&lt;/text&gt;
&lt;!-- ③ SLM → Proctor (answer) --&gt;
&lt;line x1="178" y1="262" x2="350" y2="262" stroke="#64748b" stroke-width="1.6" marker-end="url(#slmHeadSlate)"/&gt;
&lt;circle cx="265" cy="262" r="9" fill="rgba(30,41,59,.95)" stroke="#94a3b8" stroke-width="1.2"/&gt;
&lt;text x="265" y="265.5" font-size="9" font-weight="800" fill="#cbd5e1" text-anchor="middle"&gt;3&lt;/text&gt;
&lt;text x="265" y="278" font-size="8.5" fill="#94a3b8" text-anchor="middle"&gt;translation&lt;/text&gt;
&lt;!-- ④ Proctor → Grader #1 (exercise + answer) --&gt;
&lt;line x1="536" y1="212" x2="694" y2="152" stroke="#a855f7" stroke-width="1.7" marker-end="url(#slmHeadPurple)"/&gt;
&lt;circle cx="615" cy="182" r="9" fill="rgba(88,28,135,.9)" stroke="#a855f7" stroke-width="1.2"/&gt;
&lt;text x="615" y="185.5" font-size="9" font-weight="800" fill="#e9d5ff" text-anchor="middle"&gt;4&lt;/text&gt;
&lt;text x="600" y="205" font-size="8" fill="#c4b5fd" text-anchor="middle"&gt;exercise + answer&lt;/text&gt;
&lt;!-- ═ Grader #1 (top right) ═ --&gt;
&lt;rect x="698" y="92" width="186" height="118" rx="13" fill="rgba(34,197,94,.09)" stroke="#22c55e" stroke-width="1.4"/&gt;
&lt;text x="791" y="120" font-size="12" font-weight="800" fill="#4ade80" text-anchor="middle"&gt;Grader #1&lt;/text&gt;
&lt;text x="791" y="140" font-size="10.5" font-weight="700" fill="#86efac" text-anchor="middle"&gt;Mnr. Goddard&lt;/text&gt;
&lt;text x="791" y="157" font-size="9.5" font-family="ui-monospace,monospace" fill="#e2e8f0" text-anchor="middle"&gt;GPT-4&lt;/text&gt;
&lt;text x="791" y="180" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;Africaans instructor role&lt;/text&gt;
&lt;text x="791" y="193" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;grades on the CEFR scale&lt;/text&gt;
&lt;!-- ⑤ Grader #1 ↔ Grader #2 (discussion / consensus) --&gt;
&lt;line x1="791" y1="212" x2="791" y2="298" stroke="#22c55e" stroke-width="1.7" stroke-dasharray="6 4" marker-start="url(#slmHeadGreenStart)" marker-end="url(#slmHeadGreen)"/&gt;
&lt;circle cx="791" cy="238" r="9" fill="rgba(20,83,45,.9)" stroke="#22c55e" stroke-width="1.3"/&gt;
&lt;text x="791" y="241.5" font-size="9" font-weight="800" fill="#86efac" text-anchor="middle"&gt;5&lt;/text&gt;
&lt;rect x="748" y="262" width="86" height="17" rx="5" fill="rgba(11,16,32,.92)"/&gt;
&lt;text x="791" y="274" font-size="8.5" font-weight="700" fill="#4ade80" text-anchor="middle"&gt;discuss &amp;#8594; agree&lt;/text&gt;
&lt;!-- ═ Grader #2 (bottom right) ═ --&gt;
&lt;rect x="698" y="300" width="186" height="118" rx="13" fill="rgba(34,197,94,.09)" stroke="#22c55e" stroke-width="1.4"/&gt;
&lt;text x="791" y="328" font-size="12" font-weight="800" fill="#4ade80" text-anchor="middle"&gt;Grader #2&lt;/text&gt;
&lt;text x="791" y="348" font-size="10.5" font-weight="700" fill="#86efac" text-anchor="middle"&gt;Mev. Vorster&lt;/text&gt;
&lt;text x="791" y="365" font-size="9.5" font-family="ui-monospace,monospace" fill="#e2e8f0" text-anchor="middle"&gt;Claude&lt;/text&gt;
&lt;text x="791" y="388" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;independent second grader&lt;/text&gt;
&lt;text x="791" y="401" font-size="8" fill="#94a3b8" text-anchor="middle"&gt;a different model, on purpose&lt;/text&gt;
&lt;!-- ⑥ Grader #2 → Proctor (grade + review) --&gt;
&lt;line x1="696" y1="350" x2="538" y2="276" stroke="#22c55e" stroke-width="1.7" marker-end="url(#slmHeadGreen)"/&gt;
&lt;circle cx="617" cy="313" r="9" fill="rgba(20,83,45,.9)" stroke="#22c55e" stroke-width="1.2"/&gt;
&lt;text x="617" y="316.5" font-size="9" font-weight="800" fill="#86efac" text-anchor="middle"&gt;6&lt;/text&gt;
&lt;text x="628" y="336" font-size="8" fill="#86efac" text-anchor="middle"&gt;grade + review&lt;/text&gt;
&lt;!-- ⑦ Proctor → Benchmark result --&gt;
&lt;line x1="444" y1="310" x2="444" y2="354" stroke="#f59e0b" stroke-width="1.7" marker-end="url(#slmHeadAmber)"/&gt;
&lt;circle cx="444" cy="332" r="9" fill="rgba(120,53,15,.9)" stroke="#f59e0b" stroke-width="1.2"/&gt;
&lt;text x="444" y="335.5" font-size="9" font-weight="800" fill="#fbbf24" text-anchor="middle"&gt;7&lt;/text&gt;
&lt;!-- ═ Benchmark result (bottom) ═ --&gt;
&lt;rect x="340" y="356" width="208" height="96" rx="12" fill="rgba(245,158,11,.08)" stroke="#f59e0b" stroke-width="1.3"/&gt;
&lt;text x="444" y="376" font-size="10.5" font-weight="800" fill="#fbbf24" text-anchor="middle"&gt;Benchmark result&lt;/text&gt;
&lt;g font-size="8.5" font-family="ui-monospace,monospace" text-anchor="start"&gt;
&lt;text x="356" y="394" fill="#94a3b8"&gt;student:&lt;/text&gt;&lt;text x="418" y="394" fill="#e2e8f0"&gt;vulavula&lt;/text&gt;
&lt;text x="356" y="408" fill="#94a3b8"&gt;target:&lt;/text&gt;&lt;text x="418" y="408" fill="#e2e8f0"&gt;Afrikaans&lt;/text&gt;
&lt;text x="356" y="422" fill="#94a3b8"&gt;grade:&lt;/text&gt;&lt;text x="418" y="422" fill="#4ade80" font-weight="700"&gt;B1 &amp;nbsp;(CEFR)&lt;/text&gt;
&lt;text x="356" y="436" fill="#94a3b8"&gt;review:&lt;/text&gt;&lt;text x="418" y="436" fill="#cbd5e1"&gt;agreed summary&lt;/text&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;p style="margin:.4rem .25rem 0;font-size:var(--pub-text-body);line-height:1.65;color:#64748b;text-align:center;"&gt;Each open model is examined as a language-learning student, then graded by two frontier models playing rival instructors who must reach a single CEFR verdict.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ═══ the loop in seven steps ═══ --&gt;
&lt;div style="padding:.9rem min(1.25rem,var(--pub-panel-padding));"&gt;
&lt;div style="font-size:var(--pub-text-label);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#c084fc;margin-bottom:.7rem;"&gt;The exam loop, step by step&lt;/div&gt;
&lt;div class="pub-grid" style="display:grid;gap:.5rem;"&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(148,163,184,.22);background:rgba(148,163,184,.04);padding:.7rem .85rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(148,163,184,.2);color:#cbd5e1;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;1&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Set the exam&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;The Proctor agent draws a translation exercise, English to Afrikaans, from a fixed exam set.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(168,85,247,.22);background:rgba(168,85,247,.04);padding:.7rem .85rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(168,85,247,.18);color:#d8b4fe;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;2&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Student answers&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Each SLM, cast as a student, returns a translation with no idea it is being scored.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(148,163,184,.22);background:rgba(148,163,184,.04);padding:.7rem .85rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(148,163,184,.2);color:#cbd5e1;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;3&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Collect the answer&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;The Proctor takes the answer back and keeps the grade hidden from the student.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(168,85,247,.22);background:rgba(168,85,247,.04);padding:.7rem .85rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(168,85,247,.18);color:#d8b4fe;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;4&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Hand to graders&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;The exercise and answer go to two grader agents, each a different frontier model.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(34,197,94,.22);background:rgba(34,197,94,.04);padding:.7rem .85rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(34,197,94,.18);color:#4ade80;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;5&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Discuss to consensus&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Goddard (GPT-4) and Vorster (Claude) debate the work and agree one CEFR grade.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(34,197,94,.22);background:rgba(34,197,94,.04);padding:.7rem .85rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(34,197,94,.18);color:#4ade80;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;6&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Return the verdict&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;The agreed grade and written review flow back to the Proctor.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(245,158,11,.22);background:rgba(245,158,11,.04);padding:.7rem .85rem;margin-top:.5rem;"&gt;
&lt;div style="display:flex;align-items:center;gap:.4rem;margin-bottom:.3rem;"&gt;&lt;span style="flex-shrink:0;width:1.15rem;height:1.15rem;border-radius:50%;background:rgba(245,158,11,.18);color:#fbbf24;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;7&lt;/span&gt;&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Record the result&lt;/span&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;The Proctor logs a structured record: student, language pair, agreed CEFR grade, and a review summary, ready to compare across all seven models.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="slm-reveal" style="margin-bottom:1.5rem;border-radius:1.25rem;border:1px solid rgba(59,130,246,.2);overflow:hidden;"&gt;
&lt;!-- header --&gt;
&lt;div style="padding:1rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(59,130,246,.12);background:linear-gradient(135deg,rgba(59,130,246,.1),rgba(99,102,241,.06));display:flex;align-items:center;gap:.75rem;"&gt;
&lt;span style="flex-shrink:0;width:2rem;height:2rem;border-radius:.625rem;background:rgba(59,130,246,.18);display:flex;align-items:center;justify-content:center;color:#60a5fa;"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.8"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M9 17.25v1.007a3 3 0 01-.879 2.122L7.5 21h9l-.621-.621A3 3 0 0115 18.257V17.25m6-12V15a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 15V5.25m18 0A2.25 2.25 0 0018.75 3H5.25A2.25 2.25 0 003 5.25m18 0V12a2.25 2.25 0 01-2.25 2.25H5.25A2.25 2.25 0 013 12V5.25"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:#60a5fa;margin-bottom:.1rem;"&gt;Contribution 2 &amp;middot; Planning a Small Model Can Follow&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-body);color:#94a3b8;"&gt;Asked to plan in one shot, a small model rambles. Split the job into three narrow steps and it stays on track.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ request → plan transformation ═══ --&gt;
&lt;div style="padding:1rem min(1.5rem,var(--pub-panel-padding)) .6rem;border-bottom:1px solid rgba(59,130,246,.08);"&gt;
&lt;div style="display:flex;align-items:center;justify-content:center;gap:.6rem;flex-wrap:wrap;font-size:var(--pub-text-small);color:#94a3b8;"&gt;
&lt;span style="border-radius:.5rem;border:1px solid rgba(148,163,184,.3);background:rgba(148,163,184,.06);padding:.35rem .7rem;color:#cbd5e1;"&gt;a messy user request&lt;/span&gt;
&lt;span style="color:#3b82f6;font-weight:800;"&gt;&amp;#8594;&lt;/span&gt;
&lt;span style="border-radius:.5rem;border:1px solid rgba(59,130,246,.35);background:rgba(59,130,246,.08);padding:.35rem .7rem;color:#93c5fd;"&gt;three-phase pipeline&lt;/span&gt;
&lt;span style="color:#3b82f6;font-weight:800;"&gt;&amp;#8594;&lt;/span&gt;
&lt;span style="border-radius:.5rem;border:1px solid rgba(34,197,94,.35);background:rgba(34,197,94,.08);padding:.35rem .7rem;color:#4ade80;"&gt;a valid, executable plan&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ the three phases ═══ --&gt;
&lt;div style="padding:1rem min(1.5rem,var(--pub-panel-padding)) 1.2rem;"&gt;
&lt;div class="pub-grid" style="display:grid;gap:.9rem;"&gt;
&lt;!-- Phase 1 --&gt;
&lt;div style="border-radius:1rem;border:1px solid rgba(59,130,246,.22);background:rgba(59,130,246,.04);overflow:hidden;"&gt;
&lt;div style="padding:.6rem .9rem;border-bottom:1px solid rgba(59,130,246,.12);display:flex;align-items:center;gap:.5rem;"&gt;
&lt;span style="flex-shrink:0;width:1.3rem;height:1.3rem;border-radius:.4rem;background:rgba(59,130,246,.18);color:#93c5fd;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;1&lt;/span&gt;
&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Subtask identification&lt;/span&gt;
&lt;/div&gt;
&lt;div style="padding:.8rem .9rem;"&gt;
&lt;div class="pub-scroll" tabindex="0" role="region" aria-label="Diagram (scroll horizontally to see more)"&gt;&lt;svg class="pub-diagram" width="100%" height="52" viewBox="0 0 200 52" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="One request splits into three subtasks." style="margin-bottom:.5rem;--pub-diagram-width:12.5rem;"&gt;
&lt;rect x="6" y="19" width="52" height="16" rx="4" fill="rgba(148,163,184,.15)" stroke="rgba(148,163,184,.4)"/&gt;&lt;text x="32" y="30.5" font-size="8" fill="#cbd5e1" text-anchor="middle" font-family="system-ui"&gt;request&lt;/text&gt;
&lt;path d="M58 27 H84" stroke="#3b82f6" stroke-width="1.3" fill="none"/&gt;
&lt;path d="M84 27 L84 8 L120 8 M84 27 H120 M84 27 L84 46 L120 46" stroke="#3b82f6" stroke-width="1.3" fill="none"/&gt;
&lt;rect x="120" y="1" width="72" height="14" rx="4" fill="rgba(59,130,246,.12)" stroke="rgba(59,130,246,.4)"/&gt;&lt;text x="156" y="11" font-size="7.5" fill="#93c5fd" text-anchor="middle" font-family="ui-monospace,monospace"&gt;subtask a&lt;/text&gt;
&lt;rect x="120" y="20" width="72" height="14" rx="4" fill="rgba(59,130,246,.12)" stroke="rgba(59,130,246,.4)"/&gt;&lt;text x="156" y="30" font-size="7.5" fill="#93c5fd" text-anchor="middle" font-family="ui-monospace,monospace"&gt;subtask b&lt;/text&gt;
&lt;rect x="120" y="39" width="72" height="14" rx="4" fill="rgba(59,130,246,.12)" stroke="rgba(59,130,246,.4)"/&gt;&lt;text x="156" y="49" font-size="7.5" fill="#93c5fd" text-anchor="middle" font-family="ui-monospace,monospace"&gt;subtask c&lt;/text&gt;
&lt;/svg&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Break the request into small, single-purpose steps, so each one is simple enough for a small model to get right.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Phase 2 --&gt;
&lt;div style="border-radius:1rem;border:1px solid rgba(99,102,241,.22);background:rgba(99,102,241,.04);overflow:hidden;"&gt;
&lt;div style="padding:.6rem .9rem;border-bottom:1px solid rgba(99,102,241,.12);display:flex;align-items:center;gap:.5rem;"&gt;
&lt;span style="flex-shrink:0;width:1.3rem;height:1.3rem;border-radius:.4rem;background:rgba(99,102,241,.18);color:#a5b4fc;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;2&lt;/span&gt;
&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Dependency reasoning&lt;/span&gt;
&lt;/div&gt;
&lt;div style="padding:.8rem .9rem;"&gt;
&lt;div class="pub-scroll" tabindex="0" role="region" aria-label="Diagram (scroll horizontally to see more)"&gt;&lt;svg class="pub-diagram" width="100%" height="52" viewBox="0 0 200 52" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Subtasks arranged into a small dependency graph." style="margin-bottom:.5rem;--pub-diagram-width:12.5rem;"&gt;
&lt;defs&gt;&lt;marker id="slmPlanHead" markerWidth="7" markerHeight="7" refX="5" refY="2.4" orient="auto"&gt;&lt;path d="M0,0 L5,2.4 L0,4.8 Z" fill="#818cf8"/&gt;&lt;/marker&gt;&lt;/defs&gt;
&lt;rect x="8" y="19" width="46" height="15" rx="4" fill="rgba(99,102,241,.14)" stroke="rgba(99,102,241,.45)"/&gt;&lt;text x="31" y="29.5" font-size="7.5" fill="#c7d2fe" text-anchor="middle" font-family="ui-monospace,monospace"&gt;a&lt;/text&gt;
&lt;rect x="140" y="3" width="46" height="15" rx="4" fill="rgba(99,102,241,.14)" stroke="rgba(99,102,241,.45)"/&gt;&lt;text x="163" y="13.5" font-size="7.5" fill="#c7d2fe" text-anchor="middle" font-family="ui-monospace,monospace"&gt;b&lt;/text&gt;
&lt;rect x="140" y="35" width="46" height="15" rx="4" fill="rgba(99,102,241,.14)" stroke="rgba(99,102,241,.45)"/&gt;&lt;text x="163" y="45.5" font-size="7.5" fill="#c7d2fe" text-anchor="middle" font-family="ui-monospace,monospace"&gt;c&lt;/text&gt;
&lt;path d="M54 24 L138 11" stroke="#818cf8" stroke-width="1.3" fill="none" marker-end="url(#slmPlanHead)"/&gt;
&lt;path d="M54 28 L138 42" stroke="#818cf8" stroke-width="1.3" fill="none" marker-end="url(#slmPlanHead)"/&gt;
&lt;/svg&gt;&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Work out the order: which steps can run now and which must wait for another step&amp;rsquo;s output first.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- Phase 3 --&gt;
&lt;div style="border-radius:1rem;border:1px solid rgba(34,197,94,.22);background:rgba(34,197,94,.04);overflow:hidden;"&gt;
&lt;div style="padding:.6rem .9rem;border-bottom:1px solid rgba(34,197,94,.12);display:flex;align-items:center;gap:.5rem;"&gt;
&lt;span style="flex-shrink:0;width:1.3rem;height:1.3rem;border-radius:.4rem;background:rgba(34,197,94,.18);color:#4ade80;font-size:var(--pub-text-label);font-weight:800;display:flex;align-items:center;justify-content:center;"&gt;3&lt;/span&gt;
&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Schema-constrained output&lt;/span&gt;
&lt;/div&gt;
&lt;div style="padding:.8rem .9rem;"&gt;
&lt;div class="pub-scroll" style="margin-bottom:.5rem;border-radius:.5rem;background:rgba(15,23,42,.55);border:1px solid rgba(34,197,94,.25);padding:.45rem .6rem;font-family:ui-monospace,monospace;font-size:var(--pub-text-small);line-height:1.5;color:#cbd5e1;overflow-x:auto;" tabindex="0" role="region" aria-label="Scrollable figure or equation"&gt;
&lt;div style="white-space:nowrap;"&gt;&lt;span style="color:#64748b;"&gt;[&lt;/span&gt;&lt;/div&gt;
&lt;div style="white-space:nowrap;"&gt;&amp;nbsp;&amp;nbsp;{ &lt;span style="color:#4ade80;"&gt;"step"&lt;/span&gt;:1, &lt;span style="color:#4ade80;"&gt;"needs"&lt;/span&gt;:[] },&lt;/div&gt;
&lt;div style="white-space:nowrap;"&gt;&amp;nbsp;&amp;nbsp;{ &lt;span style="color:#4ade80;"&gt;"step"&lt;/span&gt;:2, &lt;span style="color:#4ade80;"&gt;"needs"&lt;/span&gt;:[1] }&lt;/div&gt;
&lt;div style="white-space:nowrap;"&gt;&lt;span style="color:#64748b;"&gt;]&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Emit the plan as JSON locked to a fixed schema, so it always parses and can be run without hand-fixing.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:.85rem .1rem 0;font-size:var(--pub-text-body);line-height:1.65;color:#64748b;"&gt;Splitting reasoning from formatting is the key move: the model thinks in phases 1 and 2, then only has to fill in a rigid structure in phase 3, which is exactly where small models tend to slip.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="paper-results" tabindex="-1" class="slm-reveal paper-section-anchor" style="margin-bottom:1.5rem;border-radius:1.25rem;border:1px solid rgba(34,197,94,.2);overflow:hidden;"&gt;
&lt;!-- header --&gt;
&lt;div style="padding:1rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(34,197,94,.12);background:linear-gradient(135deg,rgba(34,197,94,.1),rgba(59,130,246,.05));display:flex;align-items:center;gap:.75rem;"&gt;
&lt;span style="flex-shrink:0;width:2rem;height:2rem;border-radius:.625rem;background:rgba(34,197,94,.18);display:flex;align-items:center;justify-content:center;color:#4ade80;"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.8"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:#4ade80;margin-bottom:.1rem;"&gt;What The Small Models Actually Did&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-body);color:#94a3b8;"&gt;Phi-4 led the field, matching advanced-level language work while running on ordinary hardware.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ headline stat band ═══ --&gt;
&lt;div style="padding:1.25rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(148,163,184,.08);"&gt;
&lt;div class="pub-grid" style="display:grid;gap:.9rem;"&gt;
&lt;div style="text-align:center;padding:.5rem;"&gt;
&lt;div style="font-size:1.9rem;font-weight:800;line-height:1;color:#4ade80;"&gt;C1&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-small);color:#94a3b8;margin-top:.35rem;line-height:1.35;"&gt;Phi-4 translation, on the CEFR scale (advanced)&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align:center;padding:.5rem;"&gt;
&lt;div style="font-size:1.9rem;font-weight:800;line-height:1;color:#4ade80;"&gt;0.883&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-small);color:#94a3b8;margin-top:.35rem;line-height:1.35;"&gt;Phi-4 summarization, G-Eval score&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align:center;padding:.5rem;"&gt;
&lt;div style="font-size:1.9rem;font-weight:800;line-height:1;color:#60a5fa;"&gt;3&amp;ndash;4&amp;times;&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-small);color:#94a3b8;margin-top:.35rem;line-height:1.35;"&gt;faster to answer than a cloud service&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align:center;padding:.5rem;"&gt;
&lt;div style="font-size:1.9rem;font-weight:800;line-height:1;color:#c084fc;"&gt;7&lt;/div&gt;
&lt;div style="font-size:var(--pub-text-small);color:#94a3b8;margin-top:.35rem;line-height:1.35;"&gt;open models under 7B params, benchmarked&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ two capabilities ═══ --&gt;
&lt;div style="padding:1.1rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(148,163,184,.08);"&gt;
&lt;div class="pub-grid" style="display:grid;gap:.9rem;"&gt;
&lt;div style="border-radius:1rem;border:1px solid rgba(34,197,94,.2);background:rgba(34,197,94,.04);padding:.9rem min(1.1rem,var(--pub-panel-padding));"&gt;
&lt;div style="display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;margin-bottom:.4rem;flex-wrap:wrap;gap:.5rem;"&gt;
&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Translation&lt;/span&gt;
&lt;span style="font-size:var(--pub-text-heading);font-family:ui-monospace,monospace;color:#4ade80;font-weight:700;"&gt;C1 &amp;middot; CEFR&lt;/span&gt;
&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;English to Afrikaans, graded by the two rival examiners. Phi-4 reached &lt;strong style="color:#e2e8f0;"&gt;C1&lt;/strong&gt;, the advanced tier a proficient human speaker sits at.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:1rem;border:1px solid rgba(34,197,94,.2);background:rgba(34,197,94,.04);padding:.9rem min(1.1rem,var(--pub-panel-padding));"&gt;
&lt;div style="display:flex;align-items:baseline;justify-content:space-between;gap:.5rem;margin-bottom:.4rem;flex-wrap:wrap;gap:.5rem;"&gt;
&lt;span style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;"&gt;Summarization&lt;/span&gt;
&lt;span style="font-size:var(--pub-text-heading);font-family:ui-monospace,monospace;color:#4ade80;font-weight:700;"&gt;0.883 &amp;middot; G-Eval&lt;/span&gt;
&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Scored with &lt;strong style="color:#e2e8f0;"&gt;G-Eval&lt;/strong&gt;, an LLM-graded quality measure on a 0 to 1 scale. Phi-4&amp;rsquo;s &lt;strong style="color:#e2e8f0;"&gt;0.883&lt;/strong&gt; is close-to-frontier work from a sub-7B model.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ latency: edge vs cloud ═══ --&gt;
&lt;div style="padding:1.1rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(148,163,184,.08);"&gt;
&lt;div style="font-size:var(--pub-text-label);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#60a5fa;margin-bottom:.7rem;"&gt;Latency &amp;middot; running on the device vs. calling the cloud&lt;/div&gt;
&lt;div style="display:flex;flex-direction:column;gap:.55rem;"&gt;
&lt;!-- cloud bar --&gt;
&lt;div style="display:flex;align-items:center;gap:.75rem;"&gt;
&lt;span style="flex-shrink:0;width:8.5rem;font-size:var(--pub-text-small);color:#94a3b8;text-align:right;"&gt;Cloud API call&lt;/span&gt;
&lt;div style="flex:1;height:1.5rem;border-radius:.4rem;background:rgba(148,163,184,.08);overflow:hidden;"&gt;
&lt;div class="slm-bar" style="height:100%;width:100%;border-radius:.4rem;background:linear-gradient(90deg,rgba(148,163,184,.35),rgba(148,163,184,.2));"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style="flex-shrink:0;width:5.5rem;font-size:var(--pub-text-small);color:#cbd5e1;font-family:ui-monospace,monospace;"&gt;baseline&lt;/span&gt;
&lt;/div&gt;
&lt;!-- edge bar --&gt;
&lt;div style="display:flex;align-items:center;gap:.75rem;"&gt;
&lt;span style="flex-shrink:0;width:8.5rem;font-size:var(--pub-text-small);color:#e2e8f0;text-align:right;font-weight:600;"&gt;On-device&lt;br&gt;&lt;span style="font-size:var(--pub-text-small);color:#94a3b8;font-weight:400;"&gt;local &amp;amp; in-browser&lt;/span&gt;&lt;/span&gt;
&lt;div style="flex:1;height:1.5rem;border-radius:.4rem;background:rgba(148,163,184,.08);overflow:hidden;"&gt;
&lt;div class="slm-bar" style="height:100%;width:28%;border-radius:.4rem;background:linear-gradient(90deg,#3b82f6,#60a5fa);"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span style="flex-shrink:0;width:5.5rem;font-size:var(--pub-text-heading);color:#60a5fa;font-family:ui-monospace,monospace;font-weight:700;"&gt;3&amp;ndash;4&amp;times; faster&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:.75rem .1rem 0;font-size:var(--pub-text-body);line-height:1.65;color:#64748b;"&gt;Hosted with &lt;strong style="color:#94a3b8;"&gt;WebLLM&lt;/strong&gt; in the browser or run locally, the models answer 3 to 4 times faster than a round trip to a cloud API, with no per-call fee and no queue.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ═══ where it runs ═══ --&gt;
&lt;div style="padding:1.1rem min(1.5rem,var(--pub-panel-padding));"&gt;
&lt;div style="font-size:var(--pub-text-label);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#4ade80;margin-bottom:.7rem;"&gt;Where this unlocks deployment&lt;/div&gt;
&lt;div class="pub-grid" style="display:grid;gap:.6rem;"&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(148,163,184,.2);background:rgba(148,163,184,.04);padding:.75rem .9rem;"&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;margin-bottom:.25rem;"&gt;Privacy-sensitive&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Prompts and documents never leave the machine, so regulated data stays in-house.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(148,163,184,.2);background:rgba(148,163,184,.04);padding:.75rem .9rem;"&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;margin-bottom:.25rem;"&gt;Bandwidth-constrained&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;No large payloads to the cloud on every call, so it works over weak or metered links.&lt;/p&gt;
&lt;/div&gt;
&lt;div style="border-radius:.8rem;border:1px solid rgba(148,163,184,.2);background:rgba(148,163,184,.04);padding:.75rem .9rem;"&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;margin-bottom:.25rem;"&gt;Air-gapped&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Runs with no internet at all, for plants and sites that are offline by design.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ Why it matters ═══ --&gt;
&lt;div id="paper-impact" tabindex="-1" class="slm-reveal paper-section-anchor" style="margin-bottom:1.5rem;border-radius:1.25rem;border:1px solid rgba(245,158,11,.22);background:linear-gradient(135deg,rgba(245,158,11,.06),rgba(168,85,247,.04));overflow:hidden;"&gt;
&lt;div style="padding:1rem min(1.5rem,var(--pub-panel-padding));border-bottom:1px solid rgba(245,158,11,.12);display:flex;align-items:center;gap:.75rem;"&gt;
&lt;span style="flex-shrink:0;width:2rem;height:2rem;border-radius:.625rem;background:rgba(245,158,11,.18);display:flex;align-items:center;justify-content:center;color:#fbbf24;"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.8"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 18v-5.25m0 0a6.01 6.01 0 001.5-.189m-1.5.189a6.01 6.01 0 01-1.5-.189m3.75 7.478a12.06 12.06 0 01-4.5 0m3.75 2.383a14.406 14.406 0 01-3 0M14.25 18v-.192c0-.983.658-1.823 1.508-2.316a7.5 7.5 0 10-7.517 0c.85.493 1.509 1.333 1.509 2.316V18"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:#fbbf24;"&gt;Why It Matters&lt;/div&gt;
&lt;/div&gt;
&lt;div class="pub-grid" style="padding:1.25rem min(1.5rem,var(--pub-panel-padding));display:grid;gap:1rem;"&gt;
&lt;div&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;margin-bottom:.4rem;"&gt;Data stays home&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Because the model runs on the device, sensitive data never crosses the network. That opens up privacy-bound and fully offline settings the cloud can&amp;rsquo;t serve.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;margin-bottom:.4rem;"&gt;Scaffolding beats size&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Agentic structure, decomposed planning and multi-agent grading, lets a sub-7B model do work that usually assumes a much larger cloud model.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style="font-size:var(--pub-text-heading);font-weight:700;color:#e2e8f0;margin-bottom:.4rem;"&gt;Judging you can trust&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#94a3b8;"&gt;Two rival graders that must agree is a reusable recipe for scoring open-ended output without leaning on a single, biased judge.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ═══ Methodology note ═══ --&gt;
&lt;div class="slm-reveal" style="border-radius:1rem;border:1px solid rgba(148,163,184,.18);background:rgba(148,163,184,.03);padding:1rem min(1.25rem,var(--pub-panel-padding));"&gt;
&lt;div style="display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;"&gt;
&lt;svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="none" viewBox="0 0 24 24" stroke="#64748b" stroke-width="1.8"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"/&gt;&lt;/svg&gt;
&lt;span style="font-size:var(--pub-text-label);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#64748b;"&gt;About this page&lt;/span&gt;
&lt;/div&gt;
&lt;p style="margin:0;font-size:var(--pub-text-body);line-height:1.65;color:#64748b;"&gt;The diagrams above redraw the paper&amp;rsquo;s benchmarking and planning framework in this site&amp;rsquo;s style; the exam-loop figure follows the appendix&amp;rsquo;s evaluation walkthrough. Seven open models under 7B parameters were graded on translation and summarization by two frontier examiners (GPT-4 and Claude) on the CEFR scale, with Phi-4 the standout. Full method, prompts, and results are in the paper and the linked appendix repository.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ═══ scroll-reveal observer ═══ --&gt;
&lt;script&gt;
(function () {
if (!("IntersectionObserver" in window)) return;
var reduce = window.matchMedia &amp;&amp; window.matchMedia("(prefers-reduced-motion: reduce)").matches;
if (reduce) return;
var els = document.querySelectorAll(".slm-reveal");
var io = new IntersectionObserver(function (entries) {
entries.forEach(function (e) {
if (e.isIntersecting) { e.target.classList.add("slm-visible"); io.unobserve(e.target); }
});
}, { threshold: 0, rootMargin: "0px 0px -8% 0px" });
els.forEach(function (el, i) {
el.classList.add("slm-d" + ((i % 3) + 1));
io.observe(el);
});
})();
&lt;/script&gt;
&lt;/p&gt;</description></item></channel></rss>