<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>rss.livelink.threads-in-node</title>
    <link>https://techcommunity.microsoft.com/t5/microsoft-foundry/ct-p/azure-ai-foundry</link>
    <description>rss.livelink.threads-in-node</description>
    <pubDate>Fri, 07 Aug 2026 15:54:16 GMT</pubDate>
    <dc:creator>azure-ai-foundry</dc:creator>
    <dc:date>2026-08-07T15:54:16Z</dc:date>
    <item>
      <title>From Good to Great: We Put Agent Optimizer to the Test in Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/from-good-to-great-we-put-agent-optimizer-to-the-test-in/ba-p/4543982</link>
      <description>&lt;H6&gt;&lt;SPAN class="lia-text-color-20"&gt;Authors: Abi Komma,&amp;nbsp;&lt;/SPAN&gt;Charles Kim, &lt;SPAN class="lia-text-color-20"&gt;Luffy Chen, Morteza Ziyadi&lt;/SPAN&gt;&lt;/H6&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Why hand-tuning agents does not scale&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;An agent’s behavior comes mostly from its natural-language configuration: its instructions, skills, and tool descriptions. Most teams tune that configuration by hand. You write the &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;instruction&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, run some cases, read the failures, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;reword&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, and try again. The Foundry documentation&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A class="lia-external-url" href="https://aka.ms/faos-agent-optimizer-overview" target="_blank" rel="noopener"&gt;link&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;)&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; calls this the manual trial-and-error loop. It is slow, subjective, and hard to scale across many agents.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;The loop is also brittle. Unlike a code bug, a quality failure has no stack trace: the cause can sit in the instruction, a tool description, or the model. Fix one case by editing the instruction, and another that used to pass often breaks. Your evaluators tell you what is wrong, but not the one instruction that satisfies every case at once. Retraining is not the answer either, because reinforcement-learning style tuning is costly and needs many trial runs.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;a&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;gent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;ptimizer &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;works&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;Every run leaves a useful signal: a natural-language trace of the agent’s reasoning and tool calls. Reflection based optimization learns from those traces. Rather than rely on a score alone, it reads a failing run in plain language, works out why the agent scored poorly, and proposes a targeted change to the agent’s configuration, such as its instructions, skills, or tool descriptions, not just a single prompt. Methods like &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;GEPA&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://arxiv.org/abs/2507.19457" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;link&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;)&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; can match or beat reinforcement-learning tuning with far fewer trials. &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;Agent Optimizer&lt;/SPAN&gt; &lt;SPAN data-ccp-parastyle="First Paragraph"&gt;in Foundry Agent Service &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;build&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;s&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; this &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;reflecti&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;on based&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; optimization into &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;it&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;You give &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;a&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;gent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;ptimizer&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; the agent, the evaluators you already trust, and a dataset of representative cases, and it searches for a better configuration. Each round, it proposes a candidate &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;change&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; and tries it on a small batch of cases first. Only promising candidates go on to a full evaluation, which keeps the cost down. It keeps a Pareto frontier of the strongest candidates, the ones that &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;win on&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; different cases rather than a single overall &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;best, and&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; draws the next candidate from that pool. You review the leaders and their scores, then approve one or send it back for another pass. The version you approve becomes the agent’s next version, with the same model and tools. You decide what ships&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How we tested it, and what we found&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;T&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;o assess the improvements&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;w&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;e ran &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;a&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;gent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;ptimizer across six &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;prompt agents &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(standard, declarative agents)&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; that span different domains and evaluation types&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;. &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;We chose datasets with ground-truth based &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;evaluators&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; so the quality signal is objective and easy to check&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;. &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;We also included one agent&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;tax-assistant&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;with a rubric based judge to score overall response quality&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;. &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;Every run &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;used&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; the same setup&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;: &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;gpt-4o-mini&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; as the agent model&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;a stronger model as the reflector that proposed mutations&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;and optimization of the system instructions&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;. &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;Each agent was evaluated the same way before and after&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;so the delta reflects the &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;instruction&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; change &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;alone.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-background-color-22 lia-border-color-20 lia-border-style-solid" border="1" style="width: 100%; height: 466.667px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Agent&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Task&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Train / Val&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Evaluator&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Before Optimization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;After Optimization&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Delta&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;sentiment &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Classifies customer reviews as positive, negative, or neutral, including sarcasm handling.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;25 / 15 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;exact-match &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;93.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;100.0%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;+6.7%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;gsm8k-cot &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Solves grade-school math word problems and extracts the final numeric answer.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;52 / 30 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;exact-match &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;83.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;93.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;+10.0%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;facility &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Triages facility tickets into structured JSON fields for category, sentiment, and urgency.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;15 / 30 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;json-field-match &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;71.6%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;78.9%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;+7.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;retail-policy &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Applies retail policy rules to return single-turn customer service requests.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;50 / 30 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;json-field-match &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;63.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;74.6%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;+11.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;retail-tools &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Uses tool calls to resolve retail customer service scenarios with account and order data.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;50 / 25 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;json-field-match &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;61.3%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;72.9%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;+11.6%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 66.6667px;"&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;taxman-2023 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Extracts W-2 data and computes tax liability and credit eligibility for tax scenarios.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;16 / 10 &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;llm-as-judge rubric &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;75.0%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;92.5%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-right lia-border-color-20" style="height: 66.6667px;"&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;+17.5%&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335551550&amp;quot;:3,&amp;quot;335551620&amp;quot;:3,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 13.8048%" /&gt;&lt;col style="width: 29.8332%" /&gt;&lt;col style="width: 8.24583%" /&gt;&lt;col style="width: 14.1754%" /&gt;&lt;col style="width: 11.488%" /&gt;&lt;col style="width: 11.0259%" /&gt;&lt;col style="width: 11.3959%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Agent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;ptimizer&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; improved the score on every agent. The largest gains came on the agents that had the most room to improve, while an agent already close to the ceiling, such as sentiment, had less to gain. The changes it makes are readable: instead of rewording the prompt at random, it adds concrete rules that target the failure patterns in your data, and you can see exactly what changed before you approve it. The approach is not limited to text-only agents either. One agent in the set, &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;retail-tools&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;, calls tools to look up orders, accounts, and product data before it decides, and &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;a&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;gent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;ptimizer&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; improved it while it kept calling those tools during evaluation.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;These are early, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;single-seed&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; runs on small datasets, so the exact magnitudes are directional, but the gains were consistent across every agent and evaluation type. Agent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;ptimizer&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; helps most when an agent already runs on real evaluators and a dataset that reflects production cases, when fixes tend to trade one failure for another, and when you &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;maintain&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; several agents or re-tune often. It is less useful when the root cause is infrastructure, such as a tool that returns bad data, rather than the agent’s configuration, such as its instructions, tool descriptions, skills, or model.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;What&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;’s&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt; next&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;This&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; first round benchmarks prompt agents tuned on their system instruction. In the next post, we will share experiments and results on hosted agents, with larger evaluation sets and more optimization targets, including skills, tool descriptions, and model selection.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Get &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;started&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;For a full walkthrough of optimizing agents, see the Agent optimizer overview &lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/faos-agent-optimizer-overview" target="_blank" rel="noopener"&gt;link&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;, which covers both prompt and hosted agents. To optimize a prompt agent, follow the Quickstart (&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/quickstarts/quickstart-optimize-prompt-agent" target="_blank" rel="noopener"&gt;link&lt;/A&gt;). To try it on a hosted agent, install the Azure Developer CLI &lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/azd" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;link&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt; with the Foundry extension,&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; then scaffold a sample agent, deploy &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;it, and &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;optimize&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;azd ext install microsoft.foundry               # one-time: add the Foundry extension 
azd ai agent init -m &amp;lt;optimization-sample&amp;gt;      # scaffold the sample agent 
azd provision &amp;amp;&amp;amp; azd deploy                     # create resources and deploy 
azd ai agent eval generate                      # generate a dataset and evaluators 
azd ai agent optimize --max-candidates 2        # run the optimizer 
azd ai agent optimize apply --candidate &amp;lt;id&amp;gt;    # apply the winning candidate 
azd deploy                                      # redeploy the improved agent &lt;/LI-CODE&gt;
&lt;P&gt;To optimize your own agent, see Make your agent optimizer-ready &lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/faos-make-agent-optimizer-ready" target="_blank" rel="noopener"&gt;link&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;. For more agent examples, browse the foundry-samples repository&amp;nbsp;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;(&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://github.com/microsoft-foundry/foundry-samples" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;link&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Agent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;o&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;ptimizer&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; and the &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;azd&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; evaluation experience are in preview, so capabilities can change. The plans described here are work in progress, not a commitment to deliver any feature or timeline. The benchmark numbers come from internal runs on the datasets above, so your own results will vary with your agent, your data, and your evaluators. Microsoft Foundry and Azure are trademarks of the Microsoft group of companies.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Learn more&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:200,&amp;quot;335559739&amp;quot;:0}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Read agent optimizer announcement blog: &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://devblogs.microsoft.com/foundry/agent-optimizer-build2026/" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;link&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:360,&amp;quot;335559738&amp;quot;:120,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;See agent optimizer in action - view Build 2026 Observability&lt;/SPAN&gt; &lt;SPAN data-ccp-parastyle="Body Text"&gt;session: &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/build26-BRK252" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;aka.ms/build26-BRK252&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:360,&amp;quot;335559738&amp;quot;:120,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Fri, 07 Aug 2026 14:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/from-good-to-great-we-put-agent-optimizer-to-the-test-in/ba-p/4543982</guid>
      <dc:creator>abikomma</dc:creator>
      <dc:date>2026-08-07T14:00:00Z</dc:date>
    </item>
    <item>
      <title>The Hidden Reason Your Foundry Agent Can't Reach Any of Your Private (Bring-Your-Own) Resources</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/the-hidden-reason-your-foundry-agent-can-t-reach-any-of-your/ba-p/4543619</link>
      <description>&lt;P&gt;&lt;STRONG&gt;The setup&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You've built the deployment the enterprise architecture review asked for. Nothing touches the public internet.&lt;/P&gt;
&lt;P&gt;Your Microsoft Foundry resource is private — public network access disabled, a private endpoint fronting it inside your virtual network. Every resource the agent depends on is locked down the same way:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure AI Search&lt;/STRONG&gt; — private endpoint, public access off.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Storage&lt;/STRONG&gt; — private endpoint, public access off.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Cosmos DB&lt;/STRONG&gt; — private endpoint, public access off.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;An MCP server (say on Azure Functions, Container Apps or APIM)&lt;/STRONG&gt; — private, reachable only from inside the VNet.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;You've delegated a subnet for network injection, stood up Private DNS zones for the Foundry account and every data resource, kept the Foundry resource and the VNet in the same region, and configured network injection at account-creation time like the docs require. On paper, this is a textbook private standard agent setup.&lt;/P&gt;
&lt;P&gt;Then you run your first agent.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The problem: network errors everywhere&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The agent can't reach anything. And the errors look &lt;STRONG&gt;exactly &lt;/STRONG&gt;like what you'd expect from a private-networking problem — connection failures and name-resolution errors reaching Search, Storage, and Cosmos; MCP tool calls timing out. Every message points at the network.&lt;/P&gt;
&lt;P&gt;(Some of you will see the quieter version of this bug instead: no errors at all, but your Cosmos container, your blob container, and your search index stay stubbornly empty. Same root cause — hold that thought.)&lt;/P&gt;
&lt;P&gt;So, you do the natural thing. You open Network Watcher and start debugging the network.&lt;/P&gt;
&lt;P&gt;That's the trap. In the vast majority of these cases, the network is fine. The failure is happening one layer up, in a resource most people barely touch — and it &lt;STRONG&gt;presents &lt;/STRONG&gt;as a network problem because of what it does when it's misconfigured.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The layer you're probably staring at&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The network layer is the obvious suspect, and to be fair, private standard agent setup has a lot of moving parts that &lt;STRONG&gt;can &lt;/STRONG&gt;genuinely break:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Private endpoints &lt;STRONG&gt;and&lt;/STRONG&gt; Private DNS zones for the Foundry account and for each data resource, so name resolution stays inside the VNet.&lt;/LI&gt;
&lt;LI&gt;A dedicated subnet delegated to &lt;STRONG&gt;&lt;EM&gt;Microsoft.App/environments &lt;/EM&gt;&lt;/STRONG&gt;for network injection.&lt;/LI&gt;
&lt;LI&gt;Foundry resource and VNet in the same region.&lt;/LI&gt;
&lt;LI&gt;Network injection configured at account creation — it can't be added to an existing account afterward.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Here's the useful distinction, though, and it's the pivot of this whole post: &lt;STRONG&gt;not every "unreachable resource"&lt;/STRONG&gt; belongs to the same layer.&lt;/P&gt;
&lt;P&gt;The layer that's actually failing: &lt;STRONG&gt;the capability host&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A capability host is a sub-resource you configure at &lt;STRONG&gt;both&lt;/STRONG&gt; the Foundry&amp;nbsp;&lt;STRONG&gt;account&lt;/STRONG&gt; scope and the Foundry &lt;STRONG&gt;project &lt;/STRONG&gt;scope. Its entire job is to tell Agent Service where to store and process agent data — conversation history, file uploads, and vector stores. Capability hosts let you&amp;nbsp;&lt;STRONG&gt;bring your own Azure resources&lt;/STRONG&gt;&amp;nbsp;instead of using the default Microsoft-managed platform resources. This gives you:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Data sovereignty&lt;/STRONG&gt;&amp;nbsp;- Keep all agent data within your Azure subscription.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Security control&lt;/STRONG&gt;&amp;nbsp;- Use your own storage accounts, databases, and search services.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Compliance&lt;/STRONG&gt; - Meet specific regulatory or organizational requirements.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If you don't create capability hosts, Agent Service doesn't error out. It quietly uses Microsoft-managed resources for all the communications. That's a fine default for development. The moment you bring your own resources, you're in "standard agent setup," and the contract changes: you now have to declare your resources &lt;EM&gt;explicitly&lt;/EM&gt;, in &lt;EM&gt;two&lt;/EM&gt; places, through connections that resolve correctly — or things break.&lt;/P&gt;
&lt;P&gt;And here's why it masquerades as a network problem. The capability host resolves each of your resources through a &lt;STRONG&gt;connection&lt;/STRONG&gt;, and that connection has to carry enough information to bind to the right resource at runtime. Four properties matter:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; height: 175px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 21.4352%" /&gt;&lt;col style="width: 78.6575%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;Property &lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;What it must be&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;authType&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;The auth type, e.g. &lt;STRONG&gt;AAD&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;category&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;The resource type: &lt;STRONG&gt;AzureStorageAccount&lt;/STRONG&gt;, &lt;STRONG&gt;AzureCosmosDb&lt;/STRONG&gt;, or &lt;STRONG&gt;CognitiveSearch&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;target&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;The &lt;STRONG&gt;service endpoint URL&lt;/STRONG&gt; — &lt;EM&gt;not &lt;/EM&gt;the resource ID&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 35px;"&gt;&lt;td style="height: 35px;"&gt;&lt;STRONG&gt;metadata.ResourceId&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 35px;"&gt;The &lt;STRONG&gt;full Azure resource ID&lt;/STRONG&gt;&amp;nbsp;of the resource&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;If &lt;STRONG&gt;target &lt;/STRONG&gt;is wrong, or&amp;nbsp;&lt;STRONG&gt;metadata.ResourceId&lt;/STRONG&gt; is missing or malformed, the agent tries to reach the wrong endpoint — or can't resolve the resource at all. The symptom you see is a connection or resolution failure. The symptom &lt;EM&gt;&lt;STRONG&gt;looks&lt;/STRONG&gt; &lt;/EM&gt;like DNS or a private endpoint. The cause is a bad connection object. This is a&amp;nbsp;&lt;STRONG&gt;resolution&lt;/STRONG&gt;&amp;nbsp;problem wearing a **connectivity** costume.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Hidden reason #1: There is no inheritance from account to project&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This is the big one, and it's the reason most private setups fail. It's natural to assume that if you configure things at the account level — the account capability host, account-level connections — everything cascades down to the projects underneath.&lt;STRONG&gt; It doesn't&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;project-level&lt;/STRONG&gt; capability host is the only thing Agent Service reads to decide which storage, conversation, and vector store resources a project uses. There is no automatic inheritance of BYO resource configuration from the account capability host to the project. Even if your account capability host references every connection perfectly, Agent Service will &lt;STRONG&gt;not&lt;/STRONG&gt; use those resources for a project unless that project has its *own* capability host that &lt;EM&gt;explicitly &lt;/EM&gt;references them.&lt;/P&gt;
&lt;P&gt;Account-level connections&amp;nbsp;&lt;EM&gt;are&lt;/EM&gt; inherited by new projects — but a connection and a capability host are different things. Inheriting the connection only means the project can &lt;EM&gt;see&lt;/EM&gt;&amp;nbsp;it. You still have to create a project capability host that points at it.&lt;/P&gt;
&lt;P&gt;So the classic failure looks like this: you create the account capability host and your connections, maybe reference them at the account level, and stop — because it feels complete. You never created a &lt;EM&gt;project &lt;/EM&gt;capability host, or created one that doesn't reference your connections. Now Agent Service has no project-level instruction to use your resources, so it either falls back to managed defaults (the silent, empty-container variant) or fails to resolve your resource entirely (the loud, network-error variant). Either way, from your private resource's point of view, the agent never correctly reached it.&lt;/P&gt;
&lt;P&gt;The fix is the project capability host that ties it all together:&lt;/P&gt;
&lt;LI-CODE lang="http"&gt;PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/projects/{projectName}/capabilityHosts/{name}?api-version=2025-06-01

{
  "properties": {
    "capabilityHostKind": "Agents",
    "threadStorageConnections": ["my-cosmos-db-connection"],
    "vectorStoreConnections": ["my-ai-search-connection"],
    "storageConnections": ["my-storage-account-connection"],
    "aiServicesConnections": ["my-azure-openai-connection"]
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;aiServicesConnections &lt;/STRONG&gt;is optional — include it only if the project should use models from your own Azure OpenAI resource. And ordering matters: you can't create a project capability host until an account-level one already exists. Account host first, then project host.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How to diagnose this in five minutes&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Before you touch Network Watcher again, run these checks. Capability hosts are managed through the REST API today (no SDK surface yet), so this is all ARM. If required, you can use Azure Cloud Shell:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Get Access Token:&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang=""&gt;$TOKEN=$(az account get-access-token --resource https://management.azure.com --query accessToken -o tsv)&lt;/LI-CODE&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Confirm the account capability host exists:&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang=""&gt;curl -X GET "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/capabilityHosts?api-version=2025-06-01" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" | jq .&lt;/LI-CODE&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;If account capability host doesn't exit, create one:&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang=""&gt;curl -X PUT \
"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/capabilityHosts/{capabilityHostName}?api-version=2025-06-01" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
  "properties": {
    "capabilityHostKind": "Agents",
    "customerSubnet": "{subnetId}",
    "threadStorageConnections": [
      "my-cosmos-db-connection"
    ],
    "vectorStoreConnections": [
      "my-ai-search-connection"
    ],
    "storageConnections": [
      "my-storage-account-connection"
    ],
    "aiServicesConnections": [
      "my-azure-openai-connection"
    ]
  }
}'&lt;/LI-CODE&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Confirm the &lt;EM&gt;project&lt;/EM&gt; capability host exists — and references the connections you expect.&lt;/STRONG&gt; This is the one people are missing.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang=""&gt;curl -X GET "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/projects/{projectName}/capabilityHosts?api-version=2025-06-01" -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" | jq .&lt;/LI-CODE&gt;
&lt;P&gt;Look for&amp;nbsp;&lt;STRONG&gt;threadStorageConnections &lt;/STRONG&gt;(Cosmos), &lt;STRONG&gt;vectorStoreConnections &lt;/STRONG&gt;(AI Search), and &lt;STRONG&gt;storageConnections &lt;/STRONG&gt;(Storage). Empty or missing? That's your bug - the agent has no instruction to use your resources.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;If&amp;nbsp;&lt;EM&gt;project &lt;/EM&gt;capability host doesn't exit, create one:&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang=""&gt;curl -X PUT \
"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/projects/{projectName}/capabilityHosts/{capabilityHostName}?api-version=2025-06-01" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
  "properties": {
    "capabilityHostKind": "Agents",
    "threadStorageConnections": [
      "my-cosmos-db-connection"
    ],
    "vectorStoreConnections": [
      "my-ai-search-connection"
    ],
    "storageConnections": [
      "my-storage-account-connection"
    ],
    "aiServicesConnections": [
      "my-azure-openai-connection"
    ]
  }
}'&lt;/LI-CODE&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Inspect each referenced connection&lt;/STRONG&gt;. Verify&amp;nbsp;&lt;STRONG&gt;&lt;EM&gt;authTyp&lt;/EM&gt;&lt;/STRONG&gt;, &lt;STRONG&gt;&lt;EM&gt;category&lt;/EM&gt;&lt;/STRONG&gt;, &lt;STRONG&gt;target&lt;/STRONG&gt;, and especially &lt;EM&gt;&lt;STRONG&gt;metadata.ResourceId&lt;/STRONG&gt;&lt;/EM&gt;. Watch the classic swap: &lt;EM&gt;&lt;STRONG&gt;target &lt;/STRONG&gt;&lt;/EM&gt;is the endpoint URL, &lt;STRONG&gt;&lt;EM&gt;metadata.ResourceId&lt;/EM&gt;&lt;/STRONG&gt; is the ARM resource ID. Reversing them is an easy hand-authoring mistake, and it produces failures that read as network errors. A correct Storage connection looks like this:&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="json"&gt;{
  "properties": {
    "authType": "AAD",
    "category": "AzureStorageAccount",
    "target": "https://{storageAccountName}.blob.core.windows.net/",
    "metadata": {
      "ResourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}"
    }
  }
}&lt;/LI-CODE&gt;
&lt;UL&gt;
&lt;LI&gt;Run a test conversation and check where the data actually landed. Conversations should appear in your Cosmos DB, uploaded files in your Storage account, and vector data in your AI Search index and communication to private MCP server should work.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The gotchas that keep you stuck&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Even once you know the fix, a few constraints conspire to make this harder than it should be:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Capability hosts can't be updated. &lt;/STRONG&gt;Wrong connection name? You can't PATCH it — you&amp;nbsp;&lt;STRONG&gt;delete and recreate&lt;/STRONG&gt;. Build your automation around delete-then-create, not an idempotent upsert.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;One capability host per scope&lt;/STRONG&gt;. A second one with a different name at the same scope returns &lt;STRONG&gt;409 Conflict&lt;/STRONG&gt;. Same name + same config is idempotent; same name + different config returns a 400.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Deleting a capability host affects every dependent agent&lt;/STRONG&gt;. Delete the project and account hosts and your agents lose access to the files, conversations, and vector stores they were using. Treat deletion as a breaking change.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Permissions&lt;/STRONG&gt;. You need&amp;nbsp;&lt;STRONG&gt;Contributor &lt;/STRONG&gt;on the Foundry account to create capability hosts, and&amp;nbsp;&lt;STRONG&gt;User Access Administrator&lt;/STRONG&gt; or&amp;nbsp;&lt;STRONG&gt;Owner&lt;/STRONG&gt;&amp;nbsp;to grant the agent access to your Azure resources.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The mental model to take away&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Split the question in two.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Connectivity &lt;/STRONG&gt;asks: &lt;STRONG&gt;&lt;EM&gt;can the agent reach this resource?&lt;/EM&gt;&lt;/STRONG&gt; That's the network layer — private endpoints, DNS, subnet delegation, the data proxy. It owns your MCP server and any tool egress.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Resolution&lt;/STRONG&gt; asks: &lt;STRONG&gt;&lt;EM&gt;is the project even told to use this resource, and is the connection pointing at the right place? &lt;/EM&gt;&lt;/STRONG&gt;That's the capability host layer. It owns your Search, Storage, and Cosmos DB.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;They fail in completely different ways, and - this is the whole point - a resolution failure can&amp;nbsp;&lt;STRONG&gt;&lt;EM&gt;look&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;like a connectivity failure. When all of your data resources go dark at once, that's your signal it's resolution, not connectivity. No amount of DNS troubleshooting fixes a project that was never wired to your resources in the first place.&lt;/P&gt;
&lt;P&gt;Match the symptom to the layer, and you'll stop losing days to the wrong one.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A 60-second checklist&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;[] Account-level capability host exists.&lt;/P&gt;
&lt;P&gt;[] &lt;STRONG&gt;Project-level&lt;/STRONG&gt; capability host exists (the one everyone misses).&lt;/P&gt;
&lt;P&gt;[] The project capability host references your Cosmos, AI Search, and Storage connections by name.&lt;/P&gt;
&lt;P&gt;[] Each referenced connection has a valid &lt;STRONG&gt;metadata.ResourceId&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;[]&amp;nbsp;&lt;STRONG&gt;target&lt;/STRONG&gt; is the endpoint URL and &lt;STRONG&gt;metadata.ResourceId&lt;/STRONG&gt;&amp;nbsp;is the ARM resource ID — not swapped.&lt;/P&gt;
&lt;P&gt;[]&amp;nbsp;&lt;STRONG&gt;authType &lt;/STRONG&gt;and&amp;nbsp;&lt;STRONG&gt;category&lt;/STRONG&gt;&amp;nbsp;are correct for each resource type.&lt;/P&gt;
&lt;P&gt;If all of these pass and it still doesn't work — *then* go back to the network.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Further reading&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/concepts/capability-hosts" target="_blank" rel="noopener"&gt;Capability hosts for Foundry Agent Service&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/virtual-networks" target="_blank" rel="noopener"&gt;Set up private networking for Foundry Agent Service&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/concepts/networking-options" target="_blank" rel="noopener"&gt;Networking options for Foundry Agent Service&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/concepts/agents-networking-deep-dive" target="_blank" rel="noopener"&gt;Deep dive into Foundry Agent Service networking&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/concepts/standard-agent-setup" target="_blank" rel="noopener"&gt;Standard agent setup&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/model-context-protocol" target="_blank" rel="noopener"&gt;Connect to MCP server endpoints for agents&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Closing&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Private-by-default is the right posture for enterprise agents — but it moves the failure modes around. The instinct to blame the network is strong precisely because the network is where you spent all your effort. Next time your agent can't reach its private resources, resist that instinct for five minutes and check the project capability host first. More often than not, that's where the day was hiding.&lt;/P&gt;</description>
      <pubDate>Fri, 07 Aug 2026 14:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/the-hidden-reason-your-foundry-agent-can-t-reach-any-of-your/ba-p/4543619</guid>
      <dc:creator>vishal_kalal</dc:creator>
      <dc:date>2026-08-07T14:00:00Z</dc:date>
    </item>
    <item>
      <title>Cannot verify email</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/cannot-verify-email/m-p/4544998#M1516</link>
      <description>&lt;P&gt;I have put in a request for quota to deploy an OpenAI model. I was then sent a link to verify my email address - I've signed out everywhere, tried incognito windows in multiple browsers, copied the link out of the email and pasted it into a browser etc. but when I click the link to verify I always get:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;H2&gt;The request is blocked.&lt;/H2&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any ideas?!&lt;/P&gt;</description>
      <pubDate>Fri, 07 Aug 2026 09:12:49 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/cannot-verify-email/m-p/4544998#M1516</guid>
      <dc:creator>jonfrontfoot</dc:creator>
      <dc:date>2026-08-07T09:12:49Z</dc:date>
    </item>
    <item>
      <title>Microsoft Foundry's New Model Wave</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/microsoft-foundry-s-new-model-wave/ba-p/4543620</link>
      <description>&lt;H1&gt;The era of the single best model is over&lt;/H1&gt;
&lt;P&gt;Microsoft Foundry is no longer just a shelf of foundation models. It is becoming an enterprise model portfolio: frontier models for complex reasoning, cost-optimized models for scale, specialized models for documents and media, and first-party Microsoft AI models for text, image, voice, and speech. That shift changes the operating question for customers and partners.&lt;/P&gt;
&lt;P&gt;The question is not simply, “Which model is best?” It is, “Which model is best for this workload, risk profile, latency target, context size, modality, and budget?” In practice, the winning architecture is increasingly a model-routing architecture, where different workloads are routed to different models based on business value and operational constraints.&lt;/P&gt;
&lt;H1&gt;GPT-5.6: the premium Microsoft Foundry reasoning lane&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-olk-copy-source="MessageBody"&gt;GPT-5.6 (available in Microsoft Foundry), including gpt-5.6-sol, gpt-5.6-terra, and gpt-5.6-luna, is the model family many enterprises will evaluate first for their most demanding reasoning and agentic workloads.&lt;/SPAN&gt; Microsoft positions the family for advanced reasoning, coding, long-context understanding, research, cybersecurity analysis, and sophisticated enterprise workflows. The value is not only raw capability, but the broader Foundry operating model: Azure billing, Microsoft support, enterprise controls, familiar APIs, and integration with the Foundry development experience.&lt;/P&gt;
&lt;P&gt;GPT-5.6 is a strong starting point for high-value applications such as codebase analysis, contract and compliance review, complex agent planning, and long-document synthesis. The tradeoff is that premium frontier models typically require more thoughtful quota, latency, and cost planning than smaller or more specialized options.&lt;/P&gt;
&lt;H1&gt;Kimi: what it is and why it matters&lt;/H1&gt;
&lt;P&gt;Kimi is a family of models from Moonshot AI that is now available in Microsoft Foundry for coding, reasoning, and agentic software engineering scenarios. The most important model for this blog is Kimi-K2.7-Code, which Microsoft describes as a coding-focused agentic model built on Kimi-K2.6. In plain language, Kimi is not just trying to answer one prompt well. It is designed for work where an AI system needs to reason, use tools, follow instructions across a long context, and keep making progress across multiple engineering steps.&lt;/P&gt;
&lt;P&gt;That makes Kimi relevant for long-horizon coding: refactoring across a codebase, implementing a feature across multiple files, debugging a complex issue, generating tests, or helping an agent plan and execute a workflow. Microsoft’s Kimi K2.7 Code materials call out improvements in end-to-end task completion, multi-step execution, and long-context coding. Moonshot also reports that K2.7 Code reduces thinking-token usage by about 30 percent compared with K2.6, which is why Kimi is often discussed as a price-performance option rather than only a quality benchmark.&lt;/P&gt;
&lt;P&gt;For partners and customers, the practical positioning is simple: evaluate Kimi when the workload is coding-heavy, agentic, high-volume, or cost-sensitive. It may not replace GPT-5.6 or Claude for every high-stakes enterprise workflow, but it is exactly the kind of model that can lower cost or increase throughput when the task is narrower, measurable, and repeatable. Kimi is especially worth testing for developer copilots, DevOps automation, internal engineering agents, software lifecycle workflows, and partner demos where strong coding performance and cost discipline both matter.&lt;/P&gt;
&lt;H1&gt;Claude and DeepSeek: strong alternatives for agents and scale&lt;/H1&gt;
&lt;P&gt;Claude remains a trusted enterprise comparator for agentic workflows, coding, financial analysis, security operations, and long-running knowledge work. In Foundry, Claude models are available through Foundry and are often the model to benchmark next to GPT-5.6 when quality, safety posture, and enterprise readiness matter more than lowest unit cost.&lt;/P&gt;
&lt;P&gt;DeepSeek is best framed as a reasoning-at-scale option. DeepSeek-V4-Pro and related models are designed for math, scientific reasoning, coding analysis, multilingual reasoning, and large-context processing. For teams running heavy evaluation pipelines or high-throughput reasoning workloads, DeepSeek should be part of the bake-off, especially when operational scale is as important as answer quality.&lt;/P&gt;
&lt;H1&gt;Microsoft MAI: the first-party multimodal stack&lt;/H1&gt;
&lt;P&gt;The other important addition is Microsoft AI’s MAI model family. MAI expands Foundry beyond general-purpose chat into a first-party multimodal stack across reasoning, image generation and editing, voice generation, and transcription. Microsoft has announced MAI-Thinking-1 for text and reasoning, MAI-Image-2.5 and MAI-Image-2.5 Flash for image generation and image-to-image editing, MAI-Voice-2 for multilingual text-to-speech, and MAI-Transcribe-1.5 for speech-to-text.&lt;/P&gt;
&lt;P&gt;For enterprise builders, MAI matters because many AI applications are not just chatbots. A customer-facing experience may need reasoning, branded visuals, localized voice, and high-accuracy transcription in one workflow. MAI should sit in the routing matrix as the first place to look for Microsoft-first multimodal workloads, especially when the app needs tight alignment with Microsoft product experiences, Foundry deployment, and enterprise-grade governance.&lt;/P&gt;
&lt;H1&gt;Specialized models still matter&lt;/H1&gt;
&lt;P&gt;The broader Foundry catalog also includes specialized options such as Mistral for OCR and document intelligence, Llama for open-model and portability-sensitive scenarios, Grok for additional reasoning and coding evaluations, and FLUX for image generation. These models matter because not every workload should be forced through a frontier reasoning model. A cheaper specialized model can often produce a better business outcome when the task is narrow and measurable.&lt;/P&gt;
&lt;H1&gt;Recommended routing matrix&lt;/H1&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21" border="1" style="width: 99.7222%; height: 648px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Workload&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;First model to test&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Why&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Most demanding enterprise reasoning and agents&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;GPT-5.6&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;SPAN data-olk-copy-source="MessageBody"&gt;Premium Foundry reasoning lane, long context, enterprise controls&lt;/SPAN&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Enterprise coding and trusted agents&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Claude Sonnet 5&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Strong quality and enterprise fit for coding and agent workflows&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Cost-sensitive coding agents&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Kimi-K2.7-Code&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Long-horizon coding, multi-step execution, and price-performance&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;High-throughput reasoning&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;DeepSeek V4-class&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Reasoning-heavy workloads and large-scale evaluation pipelines&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Microsoft-first multimodal apps&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;MAI models&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Reasoning, image, voice, and transcription across a first-party Microsoft stack&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;OCR and document extraction&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Mistral OCR / Document AI&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Purpose-built document intelligence capabilities&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Open-model or portability-sensitive workloads&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Llama / Kimi&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Flexible evaluation path and portability options&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H1&gt;Bottom line&lt;/H1&gt;
&lt;P&gt;For most enterprises, the right answer is not model standardization. It is model routing. Benchmark real prompts, measure quality, latency, cost, safety behavior, tool-call accuracy, context handling, and operational fit, then route by task.&lt;/P&gt;
&lt;P&gt;GPT-5.6 may become the premium default for difficult reasoning; Claude may serve as a trusted enterprise comparator; Kimi may become the coding-agent value play; DeepSeek may power high-volume reasoning; MAI may become the Microsoft-first multimodal layer; and specialized models will continue to handle OCR, images, extraction, and targeted workflows. Foundry’s model wave is not just about more models. It is about giving builders enough model diversity to optimize for quality, cost, throughput, modality, and governance at the same time.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN data-olk-copy-source="MessageBody"&gt;Get Started&lt;/SPAN&gt;&lt;/H1&gt;
&lt;H5&gt;&lt;SPAN data-olk-copy-source="MessageBody"&gt;Ready to build your routing architecture?&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-olk-copy-source="MessageBody"&gt;Start with the &lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fai.azure.com%2Fcatalog%2Fmodels&amp;amp;data=05%7C02%7Cccoello%40microsoft.com%7C48df6b7a2bd24c3b84b908def1a527c3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C639213888792643053%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=CB%2BspCwlZ3%2BppXfJridQN3loZFWSRZar%2Fe%2FKxPN3Fgs%3D&amp;amp;reserved=0" target="_blank" rel="noopener" data-auth="NotApplicable" data-linkindex="3"&gt;Foundry Model Catalog&lt;/A&gt; to compare models side-by-side, or try our &lt;A href="https://learn.microsoft.com/en-us/azure/foundry/foundry-models/how-to/deploy-foundry-models" target="_blank" rel="noopener"&gt;Deploy Microsoft Foundry Models in the Foundry portal - Microsoft Foundry | Microsoft Learn&lt;/A&gt;&amp;nbsp;quickstart guide to deploy your first model in minutes.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6&gt;Additional Resources&lt;/H6&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure" target="_blank" rel="noopener"&gt;Microsoft Learn: Foundry Models sold by Azure&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/claude-models" target="_blank" rel="noopener"&gt;Microsoft Learn: Claude models in Microsoft Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/introducing-kimi-k2-7-code-in-microsoft-foundry/4532286" target="_blank" rel="noopener"&gt;Microsoft Tech Community: Introducing Kimi K2.7 Code in Microsoft Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://ai.azure.com/catalog/models/Kimi-K2.7-Code" target="_blank" rel="noopener"&gt;Microsoft Foundry Model Catalog: Kimi-K2.7-Code&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/foundry/foundry-models/tutorials/get-started-deepseek-r1" target="_blank" rel="noopener"&gt;Microsoft Learn: DeepSeek reasoning model tutorial&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/new-mai-models-in-microsoft-foundry-across-text-image-voice-and-speech/4524632" target="_blank" rel="noopener"&gt;Microsoft Tech Community: New MAI models in Microsoft Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/foundry/foundry-models/how-to/use-foundry-models-mai-image" target="_blank" rel="noopener"&gt;Microsoft Learn: Deploy and use MAI image models in Microsoft Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://microsoft.ai/news/building-a-hillclimbing-machine-launching-seven-new-mai-models/" target="_blank" rel="noopener"&gt;Microsoft AI: Building a hill-climbing machine, launching seven new MAI models&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://ai.azure.com/catalog/models" target="_blank" rel="noopener"&gt;Microsoft Foundry Model Catalog&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Thu, 06 Aug 2026 16:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/microsoft-foundry-s-new-model-wave/ba-p/4543620</guid>
      <dc:creator>Christian_Coello</dc:creator>
      <dc:date>2026-08-06T16:00:00Z</dc:date>
    </item>
    <item>
      <title>From Distillation to Reinforcement Fine-Tuning: Hill-Climbing in Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/from-distillation-to-reinforcement-fine-tuning-hill-climbing-in/ba-p/4543260</link>
      <description>&lt;P data-line="6"&gt;&lt;STRONG&gt;TL; DR:&lt;/STRONG&gt;&amp;nbsp;Hill climbing means improving the deployable model package one measured step at a time across quality, latency, and cost. SFT made this workload cheaper, but did not transfer the teacher's planning quality. Adding explicit reasoning produced the major quality gain. RFT in Microsoft Foundry then retained near-teacher quality, achieved 100% feasibility on 150 held-out scenarios, and reduced token cost from&amp;nbsp;$0.09975&amp;nbsp;to&amp;nbsp;$0.03101&amp;nbsp;per scenario.&amp;nbsp;&lt;A href="https://file+.vscode-resource.vscode-cdn.net/c%3A/Users/sansri/finetuning%20samples/supplychain-hillclimb-showcase/TECHCOMMUNITY_BLOG_DRAFT.md#the-measured-hill-climb" target="_blank" rel="noopener" data-href="#the-measured-hill-climb"&gt;Jump to the measured hill climb&lt;/A&gt;.&lt;/P&gt;
&lt;P data-line="10"&gt;&lt;STRONG&gt;What you will learn&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="12"&gt;
&lt;LI data-line="12"&gt;How to frame model customization as a measurable hill climb rather than a one-shot training decision.&lt;/LI&gt;
&lt;LI data-line="13"&gt;Where SFT and grader-based RFT differ for multi-constraint planning.&lt;/LI&gt;
&lt;LI data-line="14"&gt;How a deterministic Python grader turns business outcomes into an RFT reward.&lt;/LI&gt;
&lt;LI data-line="15"&gt;How Microsoft Foundry manages datasets, training, monitoring, checkpoints, deployment, and evaluation.&lt;/LI&gt;
&lt;LI data-line="16"&gt;What the training metrics and deployed-model comparison actually establish.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-line="18"&gt;&lt;STRONG&gt;Quick glossary&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="20"&gt;
&lt;LI data-line="20"&gt;&lt;STRONG&gt;Microsoft Foundry:&lt;/STRONG&gt;&amp;nbsp;Microsoft's platform for building, customizing, deploying, and evaluating AI applications and models.&lt;/LI&gt;
&lt;LI data-line="21"&gt;&lt;STRONG&gt;SFT (supervised fine-tuning):&lt;/STRONG&gt;&amp;nbsp;Model customization using labeled input-and-output demonstrations.&lt;/LI&gt;
&lt;LI data-line="22"&gt;&lt;STRONG&gt;RFT (reinforcement fine-tuning):&lt;/STRONG&gt;&amp;nbsp;Model customization in which sampled outputs receive rewards from a grader and the training process increases the likelihood of higher-reward behavior.&lt;/LI&gt;
&lt;LI data-line="23"&gt;&lt;STRONG&gt;Grader:&lt;/STRONG&gt;&amp;nbsp;A scoring function used during RFT. This experiment uses deterministic Python code rather than another model as the judge.&lt;/LI&gt;
&lt;LI data-line="24"&gt;&lt;STRONG&gt;Feasibility:&lt;/STRONG&gt;&amp;nbsp;Whether a complete plan satisfies schema, coverage, inventory, capacity, substitution, quantity, warehouse, shipping-mode, and expedite-budget constraints.&lt;/LI&gt;
&lt;LI data-line="25"&gt;&lt;STRONG&gt;Hill climb:&lt;/STRONG&gt; A sequence of measured model, prompt, reasoning, and fine-tuning changes that seeks a better operational package at each step.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="27"&gt;Why Hill Climb the Model Package?&lt;/H2&gt;
&lt;P data-line="29"&gt;Model selection is not a single-axis leaderboard exercise. A package that produces the highest-quality answer may be too slow or expensive for the workload. A smaller model may be economical but fail the business constraints. The useful unit of comparison is therefore the complete package:&lt;/P&gt;
&lt;P data-line="31"&gt;&lt;STRONG&gt;model + prompt + reasoning configuration + fine-tuning method&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="33"&gt;For this experiment, I evaluated every package on three dimensions:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;What was measured&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Quality&lt;/td&gt;&lt;td&gt;Feasibility plus priority-weighted service, retained margin, and shipping-cost efficiency&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Latency&lt;/td&gt;&lt;td&gt;End-to-end time to produce one coordinated plan&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cost&lt;/td&gt;&lt;td&gt;Input, output, and reasoning-token charges; fine-tuned hosting was tracked separately&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="41"&gt;The hill climb used quality as the primary objective. Only after the task was solved well did it make sense to reduce cost and latency without giving that quality back.&lt;/P&gt;
&lt;H2 data-line="43"&gt;Why Microsoft Foundry Changes the Fine-Tuning Workflow&lt;/H2&gt;
&lt;P data-line="45"&gt;Microsoft Foundry has long supported supervised fine-tuning for supported models. It now also supports reinforcement fine-tuning for supported reasoning models, including grader-based training, structured response formats, RFT-specific hyperparameters, reward monitoring, automatic validation evaluations, checkpoints, and deployment.&lt;/P&gt;
&lt;P data-line="47"&gt;This matters because RFT is more than uploading a different JSONL file. A practical workflow must:&lt;/P&gt;
&lt;OL data-line="49"&gt;
&lt;LI data-line="49"&gt;Prepare and validate training and validation datasets.&lt;/LI&gt;
&lt;LI data-line="50"&gt;Attach a grader that can score generated responses reliably.&lt;/LI&gt;
&lt;LI data-line="51"&gt;Sample candidate behavior during managed training.&lt;/LI&gt;
&lt;LI data-line="52"&gt;Run reward-based optimizer updates.&lt;/LI&gt;
&lt;LI data-line="53"&gt;Monitor training reward, validation reward, reasoning tokens, grader latency, and step duration.&lt;/LI&gt;
&lt;LI data-line="54"&gt;Produce deployable checkpoints.&lt;/LI&gt;
&lt;LI data-line="55"&gt;Deploy the customized model and evaluate it on a separate held-out test set.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="57"&gt;Foundry turns that lifecycle into a turnkey, managed workflow through its portal and APIs. In this project, GitHub Copilot agent mode in Visual Studio Code drove the workflow code-first, while Foundry supplied the managed training and model-hosting infrastructure. The datasets, grader, job payloads, deployment scripts, and evaluation artifacts remain reviewable in source control.&lt;/P&gt;
&lt;P data-line="59"&gt;Model support is method-specific. At the time of this experiment, in Microsoft Foundry, gpt-4.1-mini supported SFT and o4-mini supported RFT; the same base model was not available for both methods. The results should therefore be read as a comparison of deployable &lt;STRONG&gt;model-and-method packages&lt;/STRONG&gt;, not as a controlled claim that RFT universally outperforms SFT when the base model is held constant. Always check the current&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/foundry/openai/how-to/fine-tuning" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/foundry/openai/how-to/fine-tuning"&gt;fine-tuning model support table&lt;/A&gt;&amp;nbsp;before starting a new experiment.&lt;/P&gt;
&lt;H2 data-line="61"&gt;The Supply-Chain Recovery Problem&lt;/H2&gt;
&lt;P data-line="63"&gt;The experiment runs on a benchmark of procedurally generated warehouse-disruption scenarios — hundreds used for training and validation, plus a separate held-out set of 150 for evaluation. Each scenario represents a disruption in which one warehouse is unavailable. The model receives:&lt;/P&gt;
&lt;UL data-line="65"&gt;
&lt;LI data-line="65"&gt;12 to 16 affected orders, each with a SKU, quantity, priority, deadline, margin, and optional approved substitute.&lt;/LI&gt;
&lt;LI data-line="66"&gt;Three warehouses with availability, SKU inventory, shipment capacity, transit time, and standard and expedite costs.&lt;/LI&gt;
&lt;LI data-line="67"&gt;One shared expedite budget.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="69"&gt;For every order, the model must choose a warehouse, the requested SKU or an approved substitute, a quantity, and standard or expedited shipping, or defer the order. The answer must be one complete JSON plan.&lt;/P&gt;
&lt;P data-line="71"&gt;This is difficult because decisions are coupled. Assigning three units of SKU A to one order changes the inventory available to all other orders. Expediting a flexible order may consume the budget needed for an urgent, high-priority order. A plan can use only valid choices and still be suboptimal; worse, one shared-constraint violation makes the entire plan infeasible.&lt;/P&gt;
&lt;img /&gt;
&lt;P data-line="75"&gt;&lt;EM&gt;Figure 1. The comparison application exposes orders, priorities, deadlines, substitutes, margins, and the shared expedite budget. Readers can change the scenario and run the deployed packages without changing code.&lt;/EM&gt;&lt;/P&gt;
&lt;H2 data-line="77"&gt;SFT and RFT Receive Different Learning Signals&lt;/H2&gt;
&lt;P data-line="79"&gt;The SFT dataset contained a scenario and one selected teacher plan as the labeled assistant response. Only teacher plans that were feasible and scored at least&amp;nbsp;0.75&amp;nbsp;were eligible. This produced 148 training and 38 validation demonstrations.&lt;/P&gt;
&lt;P data-line="81"&gt;SFT is a strong choice when the desired answer can be demonstrated directly. It teaches the model to reproduce the labeled target token by token. An SFT model can still reason about constraints at inference time, but its training objective does not ask it to generate several valid alternatives, evaluate their business outcomes, or reward a different plan that is better than the single label. Shared constraints are learned only to the extent that the demonstrations and prompt represent them successfully.&lt;/P&gt;
&lt;P data-line="83"&gt;RFT rows contained the prompt and scenario but no target plan. The model sampled plans during training, and the grader evaluated each sampled outcome. Every captured scenario was retained, producing 300 training and 60 validation rows across equal loose, mixed, and tight budget-pressure families.&lt;/P&gt;
&lt;P data-line="85"&gt;This distinction is central:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;SFT&lt;/th&gt;&lt;th&gt;RFT&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Learns from one labeled response per example&lt;/td&gt;&lt;td&gt;Learns from rewards on sampled responses&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Optimizes agreement with demonstrations&lt;/td&gt;&lt;td&gt;Optimizes the grader-defined outcome&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;A different valid plan can still disagree with the label&lt;/td&gt;&lt;td&gt;Different plans can earn similar rewards if their outcomes are similar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Requires high-quality target answers&lt;/td&gt;&lt;td&gt;Requires a trustworthy, discriminating grader&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2 data-line="98"&gt;Turning Business Outcomes into a Reward&lt;/H2&gt;
&lt;P data-line="100"&gt;The grader has two jobs. First, it acts as a hard feasibility gate. Malformed plans, missing or duplicate orders, unavailable warehouses, incorrect quantities, prohibited substitutes, exhausted inventory or capacity, invalid shipping modes, and excess expedite spending receive zero reward.&lt;/P&gt;
&lt;P data-line="102"&gt;Second, it scores every feasible plan using normalized service, margin, and cost components:&lt;/P&gt;
&lt;P&gt;Q=0.55S+0.25M+0.20Ce&lt;SPAN aria-hidden="true"&gt;Q=0.55S+0.25M+0.20Ce​&lt;/SPAN&gt;&lt;/P&gt;
&lt;P data-line="108"&gt;Here,&amp;nbsp;S&lt;SPAN aria-hidden="true"&gt;S&lt;/SPAN&gt;&amp;nbsp;is priority-weighted on-time service,&amp;nbsp;M&lt;SPAN aria-hidden="true"&gt;M&lt;/SPAN&gt;&amp;nbsp;is retained margin, and&amp;nbsp;Ce&lt;SPAN aria-hidden="true"&gt;Ce​&lt;/SPAN&gt;&amp;nbsp;is fulfillment-adjusted shipping-cost efficiency. Service receives the highest weight, but the model cannot ignore margin or spend.&lt;/P&gt;
&lt;P data-line="110"&gt;The following shortened excerpt shows the important shape of the Python scorer used in the experiment:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;from collections import defaultdict


def score_plan(plan, scenario):
    # Schema, coverage, type, warehouse, quantity, substitution, and
    # shipping-mode checks run before this shortened scoring excerpt.
    orders = {order["order_id"]: order for order in scenario["orders"]}
    warehouses = {
        warehouse["warehouse_id"]: warehouse
        for warehouse in scenario["warehouses"]
    }
    inventory_used = defaultdict(int)
    capacity_used = defaultdict(int)
    expedite_spend = 0.0
    shipping_cost = 0.0
    service_earned = 0.0
    margin_earned = 0.0
    shipped_orders = 0

    for decision in plan["decisions"]:
        order = orders[decision["order_id"]]
        warehouse = warehouses[decision["warehouse_id"]]
        quantity = decision["quantity"]

        inventory_used[(warehouse["warehouse_id"], decision["sku"])] += quantity
        capacity_used[warehouse["warehouse_id"]] += quantity

        unit_cost = warehouse[f"{decision['shipping_mode']}_cost"]
        shipping_cost += unit_cost * quantity
        if decision["shipping_mode"] == "expedite":
            expedite_spend += unit_cost * quantity

        delivered_on_time = (
            warehouse[f"{decision['shipping_mode']}_hours"]
            &amp;lt;= order["deadline_hours"]
        )
        if delivered_on_time:
            service_earned += order["priority"]

        retention = 0.90 if decision["sku"] != order["sku"] else 1.0
        if not delivered_on_time:
            retention *= 0.50
        margin_earned += order["margin"] * retention
        shipped_orders += 1

    if any(
        used &amp;gt; warehouses[warehouse_id]["inventory"].get(sku, 0)
        for (warehouse_id, sku), used in inventory_used.items()
    ):
        return {"score": 0.0, "feasible": False, "reason": "inventory exceeded"}

    if any(
        used &amp;gt; warehouses[warehouse_id]["shipment_capacity"]
        for warehouse_id, used in capacity_used.items()
    ):
        return {"score": 0.0, "feasible": False, "reason": "capacity exceeded"}

    if expedite_spend &amp;gt; scenario["expedite_budget"]:
        return {"score": 0.0, "feasible": False, "reason": "budget exceeded"}

    service = service_earned / sum(order["priority"] for order in orders.values())
    margin = margin_earned / sum(order["margin"] for order in orders.values())
    fulfilled_fraction = shipped_orders / len(orders)
    reference_cost = max(1.0, sum(o["quantity"] for o in orders.values()) * 15.0)
    cost_efficiency = fulfilled_fraction * max(0.0, 1.0 - shipping_cost / reference_cost)

    return {
        "score": 0.55 * service + 0.25 * margin + 0.20 * cost_efficiency,
        "feasible": True,
    }
&lt;/LI-CODE&gt;
&lt;P data-line="187"&gt;Microsoft Foundry packages this logic as a Python grader. During RFT, the model output is available to the grader as the sample, while the structured scenario remains private grader context. This avoids leaking a target answer to the model and keeps the reward deterministic.&lt;/P&gt;
&lt;H2 data-line="189"&gt;SFT Run: Excellent Imitation Metrics, Weak Business Generalization&lt;/H2&gt;
&lt;P data-line="191"&gt;The SFT run used&amp;nbsp;gpt-4.1-mini-2025-04-14&amp;nbsp;with the following configuration:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Setting&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Training rows&lt;/td&gt;&lt;td&gt;148&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Validation rows&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Epochs&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Seed&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Training type&lt;/td&gt;&lt;td&gt;Global Standard&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Foundry-selected batch size&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Foundry-selected learning-rate multiplier&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Training steps&lt;/td&gt;&lt;td&gt;444&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="204"&gt;The job completed in approximately 1 hour and 6 minutes wall-clock and billed 699,000 training tokens. Final training loss was&amp;nbsp;0.01, final validation loss was&amp;nbsp;0.01, and both training and validation mean token accuracy reached&amp;nbsp;0.99.&lt;/P&gt;
&lt;P data-line="206"&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P data-line="208"&gt;&lt;EM&gt;Figure 2. The completed SFT job in Microsoft Foundry. Low loss and high token accuracy show that the model learned the selected teacher demonstrations closely.&lt;/EM&gt;&lt;/P&gt;
&lt;P data-line="210"&gt;Those metrics looked excellent, but they measured imitation of the labeled responses. They did not establish that a newly generated plan would satisfy every shared constraint or maximize the business reward. That distinction became visible only after deployment: across 150 held-out scenarios, SFT achieved&amp;nbsp;0.313&amp;nbsp;mean quality and only&amp;nbsp;38.7%&amp;nbsp;feasibility.&lt;/P&gt;
&lt;P data-line="212"&gt;This was a valuable failed hill-climb step. SFT reduced P50 latency from&amp;nbsp;4.54&amp;nbsp;to&amp;nbsp;4.18&amp;nbsp;seconds and token cost from&amp;nbsp;$0.00858&amp;nbsp;to&amp;nbsp;$0.00119&amp;nbsp;per scenario, but the quality regression meant the package had not improved overall.&lt;/P&gt;
&lt;H2 data-line="214"&gt;RFT Run: Reward Increased as the Policy Improved&lt;/H2&gt;
&lt;P data-line="216"&gt;The RFT run used&amp;nbsp;o4-mini-2025-04-16&amp;nbsp;and the deterministic grader:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Setting&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Training rows&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Validation rows&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Epochs&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reasoning effort&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Compute multiplier&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Learning-rate multiplier&lt;/td&gt;&lt;td&gt;1.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evaluation interval&lt;/td&gt;&lt;td&gt;Every 5 training steps&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Validation samples per evaluation&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Seed&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Training type&lt;/td&gt;&lt;td&gt;Global Standard&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Foundry-selected batch size&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Approximate training steps&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="233"&gt;The run completed in approximately 25.6 hours wall-clock, including about one hour for service orchestration, data import, and GPU queueing. Foundry billed 24.750 training hours. Final mean training reward reached&amp;nbsp;0.80, and final full-validation mean reward reached&amp;nbsp;0.82.&lt;/P&gt;
&lt;img /&gt;
&lt;P data-line="237"&gt;&lt;EM&gt;Figure 3. Foundry's RFT monitor shows training reward rising from roughly 0.69 toward 0.80. It also exposes validation reward, reasoning-token usage, grader execution latency, and per-step duration. Periodic validation produces the regular duration spikes.&lt;/EM&gt;&lt;/P&gt;
&lt;P data-line="239"&gt;The curve is noisy because each step uses a different training batch, so the trend matters more than any one point. The validation reward did not diverge from training reward, but training metrics alone were not the decision gate. A model can exploit a grader, overfit its scenarios, or find a mediocre shortcut that still earns reward. The final decision therefore used a separate 150-scenario test set that did not overlap training or validation data.&lt;/P&gt;
&lt;H2 data-line="241"&gt;The Measured Hill Climb&lt;/H2&gt;
&lt;P data-line="243"&gt;The experiment progressed through four packages:&lt;/P&gt;
&lt;OL data-line="245"&gt;
&lt;LI data-line="245"&gt;&lt;STRONG&gt;GPT-5.2 teacher without explicit reasoning:&lt;/STRONG&gt;&amp;nbsp;Fast, but frequently violated coupled constraints.&lt;/LI&gt;
&lt;LI data-line="246"&gt;&lt;STRONG&gt;GPT-4.1-mini with SFT:&lt;/STRONG&gt;&amp;nbsp;Cheaper and slightly faster, but did not preserve planning quality.&lt;/LI&gt;
&lt;LI data-line="247"&gt;&lt;STRONG&gt;GPT-5.2 teacher with a strengthened prompt and medium reasoning:&lt;/STRONG&gt;&amp;nbsp;Solved the task well, with a large latency and token-cost increase.&lt;/LI&gt;
&lt;LI data-line="248"&gt;&lt;STRONG&gt;o4-mini with grader-based RFT and medium reasoning:&lt;/STRONG&gt;&amp;nbsp;Preserved near-teacher quality while reducing latency and token cost.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="250"&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P data-line="252"&gt;&lt;EM&gt;Figure 4. The hill climb uses a documented composite index: 70% quality, 15% inverse token cost, and 15% inverse P50 latency. The measured components remain visible so the weighting is auditable.&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Package&lt;/th&gt;&lt;th&gt;Quality&lt;/th&gt;&lt;th&gt;Feasible&lt;/th&gt;&lt;th&gt;P50 latency&lt;/th&gt;&lt;th&gt;Token cost/scenario&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPT-5.2 teacher, no explicit reasoning&lt;/td&gt;&lt;td&gt;0.335&lt;/td&gt;&lt;td&gt;42.7%&lt;/td&gt;&lt;td&gt;4.54 s&lt;/td&gt;&lt;td&gt;$0.00858&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPT-4.1-mini SFT&lt;/td&gt;&lt;td&gt;0.313&lt;/td&gt;&lt;td&gt;38.7%&lt;/td&gt;&lt;td&gt;4.18 s&lt;/td&gt;&lt;td&gt;$0.00119&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GPT-5.2 teacher, medium reasoning&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;0.851&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;99.3%&lt;/td&gt;&lt;td&gt;66.68 s&lt;/td&gt;&lt;td&gt;$0.09975&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;o4-mini RFT, medium reasoning&lt;/td&gt;&lt;td&gt;0.833&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;100%&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;58.59 s&lt;/td&gt;&lt;td&gt;$0.03101&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="261"&gt;The reasoning teacher achieved the highest absolute quality. RFT trailed it by&amp;nbsp;0.018&amp;nbsp;quality points, but reduced P50 latency by about 12% and token cost by about 69%. That made RFT the strongest operational balance in this experiment, not the universal winner on every dimension.&lt;/P&gt;
&lt;P data-line="263"&gt;Fine-tuned model hosting is separate from the token charges in the table and accrues while a customized deployment is active. Workload volume and concurrency therefore matter when calculating production cost per scenario.&lt;/P&gt;
&lt;H2 data-line="265"&gt;What the Deployed Models Did in the Comparison App&lt;/H2&gt;
&lt;P data-line="267"&gt;After training, I deployed the SFT and RFT models and exposed them in the Warehouse Planning Gym comparison application. The app sends the same editable scenario to both packages, displays token usage, latency, estimated token cost, and allocation decisions, and then runs the production-style grader to explain the operational result.&lt;/P&gt;
&lt;P data-line="267"&gt;Note: The input provided below to the model is different from the one used in the finetuning and evaluation run&lt;/P&gt;
&lt;img /&gt;
&lt;P data-line="271"&gt;&lt;EM&gt;Figure 5. On this live scenario, SFT produced a plausible-looking plan but spent $42 on expedite shipping against a $35 shared budget. One coupled-constraint violation made the complete plan infeasible, so the grader returned 0.000. RFT respected the budget and every other hard constraint, earning 0.900.&lt;/EM&gt;&lt;/P&gt;
&lt;P data-line="273"&gt;The SFT failure is exactly the kind that can hide in a row-by-row review. Each allocation decision looks reasonable in isolation. The error appears only after expedite spending is accumulated across the complete plan. RFT took longer for this request because it used 4,160 reasoning tokens, but it produced an executable outcome.&lt;/P&gt;
&lt;img /&gt;
&lt;P data-line="277"&gt;&lt;EM&gt;Figure 6. On the same scenario, the reasoning teacher and RFT produced the same feasible allocation and both scored 0.900. RFT's estimated token charge was $0.0219, compared with $0.0306 for the teacher in this run.&lt;/EM&gt;&lt;/P&gt;
&lt;P data-line="279"&gt;This single scenario makes the constraint behavior understandable, but it is not the performance claim. In this sample, the teacher happened to be faster than RFT (18.2&amp;nbsp;versus&amp;nbsp;40.9&amp;nbsp;seconds). The 150-scenario paired evaluation is the stronger evidence: there, RFT retained near-teacher quality, was faster at P50, and had substantially lower average token cost.&lt;/P&gt;
&lt;H2 data-line="281"&gt;What This Experiment Establishes, and What It Does Not&lt;/H2&gt;
&lt;P data-line="283"&gt;Five conclusions stand out.&lt;/P&gt;
&lt;OL data-line="285"&gt;
&lt;LI data-line="285"&gt;&lt;STRONG&gt;Hill climbing kept the optimization honest.&lt;/STRONG&gt;&amp;nbsp;The cheap SFT package looked attractive until held-out quality was included. The strongest package emerged only after quality, latency, and cost were measured together.&lt;/LI&gt;
&lt;LI data-line="286"&gt;&lt;STRONG&gt;Training metrics must match the business decision.&lt;/STRONG&gt;&amp;nbsp;SFT's&amp;nbsp;0.99&amp;nbsp;token accuracy proved excellent imitation, not constraint satisfaction. RFT's reward metric was better aligned with the business objective, but still required held-out evaluation.&lt;/LI&gt;
&lt;LI data-line="287"&gt;&lt;STRONG&gt;A grader converts policy into a learnable signal.&lt;/STRONG&gt;&amp;nbsp;Hard rules received zero reward; feasible alternatives received continuous credit for service, margin, and cost. That let training reward outcomes instead of one canonical answer.&lt;/LI&gt;
&lt;LI data-line="288"&gt;&lt;STRONG&gt;RFT learns a policy, not an embedded optimizer.&lt;/STRONG&gt;&amp;nbsp;At inference time the model does not normally run the grader or prove global optimality. For guaranteed feasibility, keep validation, repair, best-of-N selection, or a mathematical optimizer in the runtime architecture.&lt;/LI&gt;
&lt;LI data-line="289"&gt;&lt;STRONG&gt;Foundry made the lifecycle operational.&lt;/STRONG&gt;&amp;nbsp;Dataset management, grader attachment, managed training, reward monitoring, validation evaluations, checkpoints, deployment, and model invocation were part of one platform workflow rather than separate training infrastructure.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="291"&gt;There are also important limitations. SFT and RFT used different base models because Foundry's supported methods were model-specific. The teacher packages used different prompting and reasoning settings. Raw&amp;nbsp;o4-mini&amp;nbsp;could not be deployed for a same-base pre/post comparison because that version was deprecated. This experiment therefore demonstrates a practical package hill climb for one supply-chain workload; it does not prove that RFT always beats SFT or mathematical optimization.&lt;/P&gt;
&lt;P data-line="293"&gt;For a production fulfillment system, an optimization solver remains the right choice when a formally optimal allocation is required. The model can still add value by interpreting disruptions, mapping unstructured inputs into constraints, proposing strategies, or producing candidate plans that deterministic components validate.&lt;/P&gt;
&lt;H2 data-line="295"&gt;Get Started&lt;/H2&gt;
&lt;P data-line="297"&gt;&lt;STRONG&gt;Ready to run the hill climb or adapt it to another constrained planning problem?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="299"&gt;&lt;STRONG&gt;Explore the complete implementation:&lt;/STRONG&gt;&amp;nbsp;Clone the&amp;nbsp;&lt;A href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase" target="_blank" rel="noopener" data-href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase"&gt;Supply-Chain Hill-Climb Showcase&lt;/A&gt;. The repository includes dataset generation, SFT and RFT submissions, the Python grader, deployment scripts, held-out evaluation, charts, and the model comparison application.&lt;/P&gt;
&lt;P data-line="301"&gt;&lt;STRONG&gt;Follow the experiment:&lt;/STRONG&gt;&amp;nbsp;Use the&amp;nbsp;&lt;A href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/blob/main/RUNBOOK.md" target="_blank" rel="noopener" data-href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/blob/main/RUNBOOK.md"&gt;step-by-step runbook&lt;/A&gt;, review the&amp;nbsp;&lt;A href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/tree/main/03_finetuning" target="_blank" rel="noopener" data-href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/tree/main/03_finetuning"&gt;fine-tuning stage&lt;/A&gt;, and inspect the&amp;nbsp;&lt;A href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/tree/main/04_evaluation" target="_blank" rel="noopener" data-href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/tree/main/04_evaluation"&gt;held-out evaluation methodology&lt;/A&gt;.&lt;/P&gt;
&lt;P data-line="303"&gt;&lt;STRONG&gt;Learn the Foundry workflow:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="305"&gt;
&lt;LI data-line="305"&gt;&lt;A href="https://learn.microsoft.com/azure/foundry/openai/how-to/fine-tuning" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/foundry/openai/how-to/fine-tuning"&gt;Customize a model with fine-tuning in Microsoft Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="306"&gt;&lt;A href="https://learn.microsoft.com/azure/foundry/openai/how-to/reinforcement-fine-tuning" target="_blank" rel="noopener" data-href="https://learn.microsoft.com/azure/foundry/openai/how-to/reinforcement-fine-tuning"&gt;Reinforcement fine-tuning in Microsoft Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="307"&gt;&lt;A href="https://ai.azure.com/" target="_blank" rel="noopener" data-href="https://ai.azure.com/"&gt;Open the Microsoft Foundry portal&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="309"&gt;&lt;STRONG&gt;Join the conversation:&lt;/STRONG&gt;&amp;nbsp;Which business process in your organization has several valid answers, objective outcome measures, and enough complexity that prompt engineering alone has plateaued? Share the scenario in the comments, or&amp;nbsp;&lt;A href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/issues" target="_blank" rel="noopener" data-href="https://github.com/MSFT-Innovation-Hub-India/supplychain-hillclimb-showcase/issues"&gt;open an issue in the repository&lt;/A&gt; so the grader and evaluation design can be discussed with the implementation in view.&lt;/P&gt;</description>
      <pubDate>Thu, 06 Aug 2026 14:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/from-distillation-to-reinforcement-fine-tuning-hill-climbing-in/ba-p/4543260</guid>
      <dc:creator>srikantan</dc:creator>
      <dc:date>2026-08-06T14:00:00Z</dc:date>
    </item>
    <item>
      <title>Exploring Multi-Agent Workflows with Microsoft Agent Framework</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/exploring-multi-agent-workflows-with-microsoft-agent-framework/ba-p/4542512</link>
      <description>&lt;P&gt;As organizations race to automate decision-making, content generation, analysis, and execution at scale, the future is shifting from isolated AI agents to multi-agent workflows where specialized agents collaborate, delegate, challenge, and refine each other's work. By allowing multiple AI agents to work together, organizations can tackle complex business processes more efficiently, improve accuracy, and scale operations in ways that would be difficult for a single agent to achieve alone.&lt;/P&gt;
&lt;P&gt;In this blog, we will explore 5 types of multi-agent workflows offered by the Microsoft Agent Framework to design, manage, and scale complex multi-agent workflows.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;&lt;U&gt;Prerequisites for the Tutorial:&lt;/U&gt;&lt;/STRONG&gt;&lt;/H5&gt;
&lt;OL&gt;
&lt;LI&gt;Azure Subscription&lt;/LI&gt;
&lt;LI&gt;Microsoft Foundry resource deployed in a resource group. Deploy any model (such as gpt-4.1-mini) in the Foundry project.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;1. Concurrent Orchestration&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;P&gt;In this orchestration, the same input is sent to multiple agents simultaneously and consolidated. Each agent handles tasks independently and the results are combined. All agents work at the same time.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;U&gt;Used when:&lt;/U&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You need different approaches/perspectives for a problem&lt;/LI&gt;
&lt;LI&gt;Group decision making-based scenarios&lt;/LI&gt;
&lt;LI&gt;Voting-based scenarios&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;U&gt;Use Case: Ticket Assessment on Various Criteria&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Consider a customer-support use case in which a new ticket must be assessed quickly and routed correctly. With concurrent orchestration, the same incoming ticket is sent to three specialized agents at the same time.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import os
import asyncio
from typing import cast
from agent_framework import Message
from agent_framework.foundry import FoundryChatClient
from azure.identity import DefaultAzureCredential
from agent_framework.orchestrations import ConcurrentBuilder
from dotenv import load_dotenv
load_dotenv()

async def main():
    credential = DefaultAzureCredential()

    chat_client = FoundryChatClient(
        credential=credential,
        project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
        model=os.getenv("AZURE_AI_MODEL_DEPLOYMENT_NAME")
    )

    sentiment_agent = chat_client.as_agent(
        name="Sentiment Agent",
        instructions="You are a helpful assistant that analyzes the sentiment of a support ticket."
    )

    category_agent = chat_client.as_agent(
        name="Category Agent",
        instructions="You are a helpful assistant that categorizes a support ticket into categories such as Billing, Technical, Refund, or Account."
    )

    priority_agent = chat_client.as_agent(
        name="Priority Agent",
        instructions="You are a helpful assistant that determines the priority of a support ticket as High, Medium, or Low."
    )

    workflow = ConcurrentBuilder(
        participants = [sentiment_agent, category_agent, priority_agent]
    ).build()

    result = await workflow.run("I was charged twice and I'm furious — refund me now!")
    outputs = result.get_outputs()

    i = 1
    for response in outputs:
        for msg in cast(list[Message], response.messages):
            name = msg.author_name or ("assistant" if msg.role == "assistant" else "user")
            print(f"{'-' * 60}\n{i:02d} [{name}]\n{msg.text}")
            i += 1

if __name__ == "__main__":
    asyncio.run(main())&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;2. Sequential Orchestration&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;P&gt;Used when the output of one agent is consumed by subsequent agents one after another. This pattern is ideal for workflows where each step depends on the previous one.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;U&gt;Used When:&lt;/U&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;There is a multi-step process, where each step relies on the output of the previous one.&lt;/LI&gt;
&lt;LI&gt;Situations that benefit from iterative refinement, such as drafting, reviewing, and improving content.&lt;/LI&gt;
&lt;LI&gt;Each stage produces an output and the next output builds upon that output.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;U&gt;Use Case: Automated Support Ticket Triage&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Consider a customer-support operation that receives large volumes of unstructured tickets and must route each one accurately. In this sequential workflow, a Summarizer Agent first condenses the raw ticket into one or two sentences that capture the customer’s core intent. Its output is then passed to a Classifier Agent, which assigns exactly one category—Billing, Technical, Refund, or Urgent.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import os
import asyncio
from typing import cast
from agent_framework import Message
from agent_framework.foundry import FoundryChatClient
from azure.identity import DefaultAzureCredential
from agent_framework.orchestrations import SequentialBuilder
from dotenv import load_dotenv
load_dotenv()

async def main():
    credential = DefaultAzureCredential()

    chat_client = FoundryChatClient(
        credential=credential,
        project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
        model=os.getenv("AZURE_AI_MODEL_DEPLOYMENT_NAME")
    )

    summarizer_agent = chat_client.as_agent(
        name="Summarizer Agent",
        description="Summarizes a support ticket into 1-2 sentences of core intent.",
        instructions="You are a helpful assistant that summarizes support tickets into concise summaries."
    )

    classifier_agent = chat_client.as_agent(
        name="Classifier Agent",
        description="Classifies a ticket summary into: Billing, Technical, Refund, or Urgent.",
        instructions="You are a helpful assistant that classifies a support ticket summary strictly into one of the following categories: Billing, Technical, Refund, or Urgent."
    )

    workflow = SequentialBuilder(
    participants=[summarizer_agent, classifier_agent],
    output_from = "all"
    ).build()

    ticket = "I was charged twice for my subscription this month and need a refund ASAP."
    result = await workflow.run(ticket)
    outputs = result.get_outputs()
    
    i = 1
    for response in outputs:
        for msg in cast(list[Message], response.messages):
            name = msg.author_name or ("assistant" if msg.role == "assistant" else "user")
            print(f"{'-' * 60}\n{i:02d} [{name}]\n{msg.text}")
            i += 1


if __name__ == "__main__":
    asyncio.run(main())
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;3. Group Chat Orchestration&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;P&gt;Manages a collaborative conversation between multiple agents, optionally involving a human in the process (Human-in-the-Loop). There is a central chat manager that decides which agent responds next and when to request for human input.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;U&gt;Used when:&lt;/U&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Scenarios that require debates or group brainstorming.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;U&gt;Use Case: Cross-Functional Feature Proposal Review&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;A product team uses specialist agents to review a feature proposal in one shared discussion. Product Agent assesses value, Engineering Agent feasibility, Design Agent usability, and Security Agent compliance. A Manager Agent guides the debate and concludes with a recommendation to proceed, revise, or reject.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import os
import asyncio
from typing import cast
from agent_framework import AgentResponseUpdate, Message
from agent_framework.foundry import FoundryChatClient
from azure.identity import DefaultAzureCredential
from agent_framework.orchestrations import GroupChatBuilder
from dotenv import load_dotenv
load_dotenv()

async def main():
    credential = DefaultAzureCredential()

    chat_client = FoundryChatClient(
        credential=credential,
        project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
        model=os.getenv("AZURE_AI_MODEL_DEPLOYMENT_NAME")
    )

    product_agent = chat_client.as_agent(
        name="Product Agent",
        instructions="You are a helpful assistant that argues for user value and business priority.",
        default_options={"store": False} # turn off server-side storage, so the client keeps history in the local session and re-sends the full conversation every turn.
    )

    engineering_agent = chat_client.as_agent(
        name="Engineering Agent",
        instructions="You are a helpful assistant that raises engineering feasibility, effort, and technical risks.",
        default_options={"store": False}
    )

    design_agent = chat_client.as_agent(
        name="Design Agent",
        instructions="You are a helpful assistant that focuses on UX and usability concerns.",
        default_options={"store": False}
    )

    security_agent = chat_client.as_agent(
        name="Security Agent",
        instructions="You are a helpful assistant that flags compliance and data-protection issues.",
        default_options={"store": False}
    )

    manager_agent = chat_client.as_agent(
        name="Manager Agent",
        instructions=(
            "You moderate a design-review discussion. Each turn, choose the SINGLE next "
            "participant to speak from: Product Agent, Engineering Agent, Design Agent, "
            "Security Agent. Never select the same participant twice in a row. Once every "
            "perspective has been heard and a clear decision is reached, terminate the "
            "conversation with a short recommendation."
        ),
        default_options={"store": False}  
    )

    workflow = GroupChatBuilder(
        participants=[product_agent, engineering_agent, design_agent, security_agent],
        orchestrator_agent=manager_agent,
        max_rounds=5,
        intermediate_output_from="all",
    ).build()

    stream = await workflow.run("Proposal: add biometric login to the mobile app. Should we build it next quarter?", 
                                stream=True)

    last_executor = None
    async for event in stream:
        if event.type in ("intermediate", "output") and isinstance(event.data, AgentResponseUpdate):
            executor = event.data.author_name
            if executor != last_executor:
                print(f"\n{'-' * 60}\n{executor}:\n")
                last_executor = executor
            print(event.data.text, end="", flush=True)

    result = await stream.get_final_response()
    print(f"\n{'=' * 60}\nFinished ({len(result.get_outputs())} output messages).")

if __name__ == "__main__":
    asyncio.run(main())&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;4. Handoff Orchestration&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;P&gt;This orchestration lets agents assign a task to other agents based on their expertise.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;U&gt;Used when:&lt;/U&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Multiple agents are involved, but the order of execution is unknown/non-deterministic.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;U&gt;Use Case: Dynamic Customer Support Routing&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;A Triage Agent greets the customer, identifies the issue, and hands the conversation to the right specialist: a Refund Agent for refunds and returns, or an Order Status Agent for shipping updates. If the customer’s need changes, the specialist hands the conversation back to triage for seamless rerouting.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import os
import asyncio
from typing import cast
from agent_framework import AgentResponseUpdate, Message
from agent_framework.foundry import FoundryChatClient
from azure.identity import DefaultAzureCredential
from agent_framework.orchestrations import HandoffBuilder
from dotenv import load_dotenv
load_dotenv()

async def main():
    credential = DefaultAzureCredential()

    chat_client = FoundryChatClient(
        credential=credential,
        project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
        model=os.getenv("AZURE_AI_MODEL_DEPLOYMENT_NAME"),
    )

    triage_agent = chat_client.as_agent(
        name="triage_agent",
        instructions=(
                "Greet the customer and briefly acknowledge their issue in one sentence, "
                "then hand off to the right specialist."
        ),        
        default_options={"store": False},
        require_per_service_call_history_persistence=True
    )

    refund_agent = chat_client.as_agent(
        name="refund_agent",
        instructions="You process refunds and returns. Ask for the order number and resolve the request.",
        default_options={"store": False},
        require_per_service_call_history_persistence=True
    )

    order_status_agent = chat_client.as_agent(
        name="order_status_agent",
        description="Answers questions about order status and shipping.",
        instructions="You answer order status and shipping questions.",
        default_options={"store": False},
        require_per_service_call_history_persistence=True
    )

    workflow = (
        HandoffBuilder(participants=[triage_agent, refund_agent, order_status_agent])
        .with_start_agent(triage_agent)
        .add_handoff(triage_agent, [refund_agent, order_status_agent])  # triage can route to either
        .add_handoff(refund_agent, [triage_agent])                     # specialists can hand back
        .add_handoff(order_status_agent, [triage_agent])
        .build()
    )

    # Interactive loop: run once, then answer each request_info until it ends.
    user_message: str | None = "Hi, I was charged twice for order #12345 and want a refund."
    responses: dict | None = None
    last_executor = None

    while True:
        if responses is not None:
            stream = workflow.run(responses=responses, stream=True)
        else:
            stream = workflow.run(user_message, stream=True)

        pending_request_id = None
        async for event in stream:
            if event.type in ("intermediate", "output") and isinstance(event.data, AgentResponseUpdate):
                executor = event.data.author_name
                if executor != last_executor:
                    print(f"\n{'-' * 60}\n{executor}:\n")
                    last_executor = executor
                print(event.data.text, end="", flush=True)
            elif event.type == "request_info":
                pending_request_id = event.request_id  # workflow is waiting for the user

        if pending_request_id is None:
            break  # no input requested -&amp;gt; conversation finished

        user_text = input("\n\nYou: ")
        if not user_text.strip():
            break  # empty answer terminates the handoff workflow
        responses = {pending_request_id: [Message(role="user", contents=[user_text])]}

if __name__ == "__main__":
    asyncio.run(main())&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;5. Magentic Orchestration&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;P&gt;This orchestration allows for dynamic collaboration of multiple agents. Used when the exact workflow is not known upfront, and for complex open-ended problems.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;There is a &lt;STRONG&gt;task ledger&lt;/STRONG&gt; which keeps track of the tasks that need to be done. The &lt;STRONG&gt;progress ledger&lt;/STRONG&gt; keeps track of the tasks completed and what all was learnt.&lt;/P&gt;
&lt;P&gt;The manager agent does the following:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Maintains the overall goal&lt;/LI&gt;
&lt;LI&gt;Creates and updates the task ledger&lt;/LI&gt;
&lt;LI&gt;Chooses which agent should work next&lt;/LI&gt;
&lt;LI&gt;Tracks progress in the progress ledger&lt;/LI&gt;
&lt;LI&gt;Replans when stuck&lt;/LI&gt;
&lt;LI&gt;Synthesizes the final answer&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;U&gt;Use Case: Autonomous Blog Drafting and Review&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Given a topic, a Magentic manager plans and drives an iterative draft-and-review cycle: it directs a writer&amp;nbsp;agent to produce the post, routes the draft to an&amp;nbsp;editor agent for clarity and length feedback, loops back for revisions when needed, and finalizes the post once it meets the quality bar — all without a human specifying the step order.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import os
import asyncio
from typing import cast
from agent_framework import AgentResponseUpdate
from agent_framework.foundry import FoundryChatClient
from azure.identity import DefaultAzureCredential
from agent_framework.orchestrations import MagenticBuilder
from dotenv import load_dotenv
load_dotenv()

async def main():
    credential = DefaultAzureCredential()
    
    chat_client = FoundryChatClient(
        credential=credential,
        project_endpoint=os.getenv("AZURE_AI_PROJECT_ENDPOINT"),
        model=os.getenv("AZURE_AI_MODEL_DEPLOYMENT_NAME")
    )

    writer_agent = chat_client.as_agent(
        name="Writer Agent",
        instructions="You write clear, engaging blog posts on the requested topic.",
        default_options={"store": False},
    )

    editor_agent = chat_client.as_agent(
        name="Editor Agent",
        instructions="You review drafts for clarity and length, and suggest concise improvements.",
        default_options={"store": False},
    )

    manager_agent = chat_client.as_agent(
        name="Manager Agent",
        instructions="You coordinate the writer and editor to produce a polished final blog post.",
        default_options={"store": False},
    )

    workflow = MagenticBuilder(
        participants=[writer_agent, editor_agent],
        manager_agent=manager_agent,
        max_stall_count=2,
        max_round_count=10,
        intermediate_output_from="all").build()

    stream = workflow.run(
        "Write a 300-word blog post explaining why sleep matters for productivity.",
        stream=True,
    )

    last_executor = None
    async for event in stream:
        if event.type in ("intermediate", "output") and isinstance(event.data, AgentResponseUpdate):
            executor = event.data.author_name
            if executor != last_executor:
                print(f"\n{'-' * 60}\n{executor}:\n")
                last_executor = executor
            print(event.data.text, end="", flush=True)

    result = await stream.get_final_response()
    print(f"\n{'=' * 60}\nFinished ({len(result.get_outputs())} output messages).")

if __name__ == "__main__":
    asyncio.run(main())&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;Difference Between Group Chat, Handoff, and Magentic Orchestration&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.031%; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td class="lia-align-center"&gt;&lt;STRONG&gt;Group Chat&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-align-center"&gt;&lt;STRONG&gt;Handoff&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-align-center"&gt;&lt;STRONG&gt;Magentic&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Who's in charge?&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;A manager agent picks who speaks next&lt;/td&gt;&lt;td&gt;No manager agent - agents route to each other based on their expertise&lt;/td&gt;&lt;td&gt;The manager agent plans to attain the final goal&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;Next Steps:&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;OL&gt;
&lt;LI&gt;
&lt;DIV class="lia-align-left"&gt;Try it yourself - Clone the &lt;A class="lia-external-url" href="https://github.com/SonakshiA/Multi-Agent-MAF" target="_blank" rel="noopener"&gt;GitHub Repo&lt;/A&gt; to get started!&lt;/DIV&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P class="lia-align-left"&gt;Build upon the Magentic Orchestration use case - &lt;EM&gt;"Write a well-researched 800-word article on whether biometric login improves security. Verify claims, add real statistics, and include a counter-argument section."&lt;/EM&gt; Add participants agents such as&amp;nbsp;&lt;STRONG&gt;researcher_agent&lt;/STRONG&gt;,&amp;nbsp;&lt;STRONG&gt;fact_checker_agent&lt;/STRONG&gt;,&amp;nbsp;&lt;STRONG&gt;writer_agent&lt;/STRONG&gt;, and &lt;STRONG&gt;editor_agent&lt;/STRONG&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;&lt;U&gt;&lt;STRONG&gt;Related Resources:&lt;/STRONG&gt;&lt;/U&gt;&lt;/H5&gt;
&lt;OL&gt;
&lt;LI&gt;Reference Used in the Blog (Including images):&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/training/modules/orchestrate-semantic-kernel-multi-agent-solution/1-introduction?pivots=text" target="_blank" rel="noopener"&gt;Introduction - Training | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;More on Magentic Orchestration: &lt;A href="https://learn.microsoft.com/en-us/training/modules/orchestrate-semantic-kernel-multi-agent-solution/8-use-magentic-orchestration?pivots=text" target="_blank" rel="noopener"&gt;Use Magentic Orchestration - Training | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;/OL&gt;</description>
      <pubDate>Wed, 05 Aug 2026 20:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/exploring-multi-agent-workflows-with-microsoft-agent-framework/ba-p/4542512</guid>
      <dc:creator>SonakshiA</dc:creator>
      <dc:date>2026-08-05T20:00:00Z</dc:date>
    </item>
    <item>
      <title>Introducing Real-Time Multichannel Speech-to-Text</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-real-time-multichannel-speech-to-text/ba-p/4541701</link>
      <description>&lt;P&gt;Organizations working with stereo audio often face a difficult choice.&lt;/P&gt;
&lt;P&gt;In many contact center, conversational AI, and communication scenarios, participants are already recorded on separate channels. Keeping those channels separate provides valuable conversational context, especially when speakers overlap or interrupt each other.&lt;/P&gt;
&lt;P&gt;Yet supporting channel-separated transcription has traditionally required additional complexity. Teams often split audio channels and build parallel transcription pipelines, increasing operational overhead and, in many cases, processing costs. Others merge channels into a single audio stream, simplifying processing but potentially sacrificing transcription quality and speaker attribution.&lt;/P&gt;
&lt;P&gt;Today, we're launching &lt;STRONG&gt;Real-Time Multichannel Speech-to-Text &lt;/STRONG&gt;in public preview in Azure Speech, part of Microsoft Foundry.&lt;/P&gt;
&lt;P&gt;This new capability enables Azure Speech to process stereo audio while preserving channel separation throughout the real-time transcription workflow, making it easier to build contact center intelligence, agent-assist solutions, conversational AI experiences, and analytics applications.&lt;/P&gt;
&lt;H2&gt;Why channel separation matters&lt;/H2&gt;
&lt;P&gt;When separate speakers are already recorded on separate channels, that information is valuable.&lt;/P&gt;
&lt;P&gt;Consider a customer service call where the customer is recorded on one channel and the agent on another. During natural conversation, participants may speak simultaneously, interrupt one another, or react while the other person is still talking.&lt;/P&gt;
&lt;P&gt;A single mixed audio stream can make these situations more challenging to process accurately. By preserving channel boundaries, speech recognition can maintain clearer speaker separation and better preserve conversational structure.&lt;/P&gt;
&lt;P&gt;This is why many organizations choose to retain stereo recordings in the first place.&lt;/P&gt;
&lt;H2&gt;How Real-Time Multichannel Speech-to-Text works&lt;/H2&gt;
&lt;P&gt;Until now, organizations generally relied on one of two approaches.&lt;/P&gt;
&lt;P&gt;The first approach is to split channels and process each independently. This preserves channel separation and recognition quality but requires managing multiple transcription workflows and combining results later.&lt;/P&gt;
&lt;P&gt;The second approach is to merge channels into a single stream and transcribe the mixed audio. This simplifies implementation but can reduce the benefits of having separate audio channels, particularly when overlapping speech occurs.&lt;/P&gt;
&lt;P&gt;Real-Time Multichannel Speech-to-Text is designed to eliminate this tradeoff.&lt;/P&gt;
&lt;P&gt;The concept is straightforward. Instead of requiring separate recognition pipelines for each channel, Azure Speech can process stereo audio directly and return transcription results with channel attribution preserved. Because the channels remain separate throughout recognition, applications can retain valuable conversational structure without building additional processing infrastructure.&lt;/P&gt;
&lt;P&gt;The result is a simpler architecture that remains aligned with how the audio was originally captured.&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;Built into the Speech SDK experience&lt;/H2&gt;
&lt;P&gt;If you're already using Azure Speech, getting started is intentionally simple.&lt;/P&gt;
&lt;P&gt;Real-Time Multichannel Speech-to-Text integrates directly into the existing Speech SDK experience starting with SDK version 1.51.0.&lt;/P&gt;
&lt;P&gt;Enabling stereo processing requires only a simple configuration change, allowing you to continue using the same recognition workflows, event handling patterns, and application architecture you're already familiar with.&lt;/P&gt;
&lt;P&gt;Here is a complete, copy-paste Python example:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import azure.cognitiveservices.speech as speechsdk
import time

speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", endpoint="YourSpeechEndpoint")
speech_config.speech_recognition_language = "en-US"
done = False

# Enable Multichannel processing
speech_config.set_property(speechsdk.PropertyId.Speech_EnableMultiChannelProcessing, "true")

audio_config = speechsdk.AudioConfig(filename="stereo.wav")
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

# Print Multichannel results
def recognized_cb(evt):
    if evt.result.reason == speechsdk.ResultReason.RecognizedSpeech:
        print("RECOGNIZED (channel {}): {}".format(evt.result.channel, evt.result.text))

def stop_cb(evt):
    global done
    done = True

speech_recognizer.recognized.connect(recognized_cb)
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(0.5)
speech_recognizer.stop_continuous_recognition()&lt;/LI-CODE&gt;
&lt;P&gt;💡There is no separate service to deploy and no need to create parallel recognition sessions for each channel. Just as importantly, your application continues to receive real-time transcription results while preserving channel information.&lt;/P&gt;
&lt;H2&gt;Designed for real-world conversational scenarios&lt;/H2&gt;
&lt;P&gt;Real-Time Multichannel Speech-to-Text is particularly valuable in scenarios where separate audio channels already exist.&lt;/P&gt;
&lt;H3&gt;Contact centers&lt;/H3&gt;
&lt;P&gt;Customer and agent audio are commonly captured on separate channels. Preserving those channels can help maintain conversational context while supporting agent assistance, quality monitoring, compliance workflows, and post-call analytics.&lt;/P&gt;
&lt;H3&gt;Conversational AI&lt;/H3&gt;
&lt;P&gt;Voice agents and copilots benefit from understanding who said what. Channel-aware transcription provides cleaner conversational structure for downstream AI workflows such as summarization and insight generation.&lt;/P&gt;
&lt;H3&gt;Communications and collaboration&lt;/H3&gt;
&lt;P&gt;Applications that capture participants on separate channels can generate richer transcripts while preserving the structure of the original conversation.&lt;/P&gt;
&lt;H2&gt;Part of the Azure Speech transcription platform&lt;/H2&gt;
&lt;P&gt;Real-Time Multichannel Speech-to-Text builds on the broader Azure Speech transcription platform, part of Microsoft Foundry.&lt;/P&gt;
&lt;P&gt;Organizations can continue using Azure Speech across real-time, fast transcription, and batch transcription workflows while taking advantage of stereo audio processing where appropriate. Individual transcription modes may differ in how they interact with capabilities such as speaker diarization, but they remain part of the same Azure Speech developer experience.&lt;/P&gt;
&lt;H2&gt;Get started today&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Real-Time Multichannel Speech-to-Text&lt;/STRONG&gt; is now available in Azure Speech.&lt;/P&gt;
&lt;P&gt;If you've been choosing between the complexity of parallel transcription pipelines and the compromises of mixed-audio transcription, this feature offers a new option: preserve stereo channel separation within a single Azure Speech transcription workflow.&lt;/P&gt;
&lt;P&gt;We'd love to hear your feedback. Try it in your applications and let us know how it improves your transcription quality. You can reach us through:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Read the Documentation&amp;nbsp;&lt;/STRONG&gt;—&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/ai-services/speech-service/how-to-recognize-speech-multichannel" target="_blank" rel="noopener"&gt;How to transcribe multichannel audio in real time - Speech service - Foundry Tools | Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Support&lt;/STRONG&gt;&amp;nbsp;— File a support request through the Azure Portal&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Stack Overflow&lt;/STRONG&gt;&amp;nbsp;— Tag your questions with&amp;nbsp;azure-speech-service&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;GitHub&lt;/STRONG&gt;&amp;nbsp;— Open issues on the&amp;nbsp;&lt;A href="https://github.com/Azure-Samples/cognitive-services-speech-sdk" target="_blank" rel="noopener"&gt;Azure AI Speech SDK samples repository&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 05 Aug 2026 18:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-real-time-multichannel-speech-to-text/ba-p/4541701</guid>
      <dc:creator>JanGoergen</dc:creator>
      <dc:date>2026-08-05T18:00:00Z</dc:date>
    </item>
    <item>
      <title>When Does RL Actually Help Fine-Tuning? A Difficulty-Controlled Study on Structured Generation</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/when-does-rl-actually-help-fine-tuning-a-difficulty-controlled/ba-p/4535077</link>
      <description>&lt;H2 data-line="9"&gt;The uncomfortable question&lt;/H2&gt;
&lt;P data-line="15"&gt;Reinforcement learning is often the finishing move of the modern fine-tuning stack: run SFT first, then add RL (GRPO, PPO, DPO) to squeeze out the last few points. In practice the return is wildly inconsistent — sometimes a real jump, sometimes nothing after a burned GPU budget. The folk rule&amp;nbsp;&lt;EM&gt;"RL helps when the task is hard"&lt;/EM&gt;&amp;nbsp;is directionally right but too vague to budget against: it doesn't say&amp;nbsp;&lt;EM&gt;how much&lt;/EM&gt;,&amp;nbsp;&lt;EM&gt;which fields&lt;/EM&gt;, or&amp;nbsp;&lt;EM&gt;how to check in advance&lt;/EM&gt;. This post turns that intuition into a&amp;nbsp;&lt;STRONG&gt;decision rule you can apply before committing to an RL run.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-line="23"&gt;&lt;STRONG&gt;TL;DR.&lt;/STRONG&gt;&amp;nbsp;In a controlled text-to-JSON experiment, GRPO added only&amp;nbsp;&lt;STRONG&gt;+0.0111 absolute&lt;/STRONG&gt;&amp;nbsp;after SFT on a straightforward formulation where target attributes were explicitly provided. On a harder formulation requiring attributes to be inferred and normalized from prose, the weighted score increased from&amp;nbsp;&lt;STRONG&gt;0.6983 to 0.7498 — +0.0515 absolute, or approximately +7.4% relative&lt;/STRONG&gt;. The largest gains occurred in&amp;nbsp;&lt;STRONG&gt;Semantic-IoU (SIoU)-scored attribute fields&lt;/STRONG&gt;, while cosine-scored free-text fields improved less. The practical takeaway is that low post-SFT performance alone is not enough to justify RL: first confirm that SFT has plateaued, that the missing information is recoverable, and that the reward can provide meaningful sequence-level credit. Fully reproducible on public ABO data.&lt;/P&gt;
&lt;H2 data-line="28"&gt;The setup: one task, two difficulties&lt;/H2&gt;
&lt;P data-line="31"&gt;The task is a large class of enterprise fine-tuning jobs: turn semi-structured product data into a fixed 8-field JSON object. Four fields are free-text editorial descriptions scored by&amp;nbsp;&lt;STRONG&gt;cosine&lt;/STRONG&gt;&amp;nbsp;similarity; four are sparse attribute&amp;nbsp;&lt;EM&gt;lists&lt;/EM&gt;&amp;nbsp;(category, color, material, style — surfaced in the schema as inference-type tags like&amp;nbsp;vibe,&amp;nbsp;quick_semantic,&amp;nbsp;trend_signals, and&amp;nbsp;overall_vibe) scored by&amp;nbsp;&lt;STRONG&gt;Semantic-IoU (SIoU)&lt;/STRONG&gt;&amp;nbsp;(fuzzy set overlap). The reported metric is the weighted aggregate of these eight per-field scores. GRPO uses the same underlying cosine and SIoU scoring functions as evaluation; during training both arms apply the same reward shaping (threshold annealing and per-field weighting), while final test reporting uses a fixed SIoU threshold (τ = 0.7) and equal field weights.&lt;/P&gt;
&lt;P data-line="45"&gt;We use&amp;nbsp;&lt;STRONG&gt;Amazon Berkeley Objects (ABO)&lt;/STRONG&gt;&amp;nbsp;(public, CC BY 4.0) as a stand-in for a proprietary product catalog, and build two arms of the&amp;nbsp;&lt;EM&gt;same&lt;/EM&gt;&amp;nbsp;task:&lt;/P&gt;
&lt;UL data-line="48"&gt;
&lt;LI data-line="45"&gt;&lt;STRONG&gt;Easy&lt;/STRONG&gt;&amp;nbsp;— the target attributes (productType&amp;nbsp;/&amp;nbsp;color&amp;nbsp;/&amp;nbsp;material) are handed to the model in the prompt, so the gold is&amp;nbsp;&lt;STRONG&gt;copyable&lt;/STRONG&gt;. SFT can reformat its way to a high score; RL should have little to add.&lt;/LI&gt;
&lt;LI data-line="48"&gt;&lt;STRONG&gt;Hard&lt;/STRONG&gt;&amp;nbsp;— those same label lines are&amp;nbsp;&lt;STRONG&gt;hidden in prose&lt;/STRONG&gt;&amp;nbsp;(the info still lives in the product name and bullets), so the gold must be&amp;nbsp;&lt;STRONG&gt;inferred and normalized&lt;/STRONG&gt;, not copied.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="51"&gt;Both arms use the same &lt;STRONG&gt;Qwen3-32B&lt;/STRONG&gt;&amp;nbsp;base and the&amp;nbsp;&lt;STRONG&gt;identical SFT-then-GRPO training recipe&lt;/STRONG&gt; — same LoRA config, learning rates, sampling settings, reward functions, reward curriculum (threshold annealing), and per-field weighting. The only thing that changes is whether the target attributes are exposed in the prompt or must be inferred from prose. Train and test are disjoint product sets, so the reported gains are measured on held-out items the model did not see in training.&lt;/P&gt;
&lt;H3&gt;What the two arms look like (same product)&lt;/H3&gt;
&lt;P data-line="69"&gt;A representative pair makes the difficulty knob concrete — the rows are the&amp;nbsp;&lt;EM&gt;same&lt;/EM&gt;&amp;nbsp;item, differing only in whether the structured attributes are exposed:&lt;/P&gt;
&lt;P data-line="72"&gt;&lt;STRONG&gt;Easy — attributes exposed (gold is copyable):&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Every gold token already appears in the prompt, so SFT can &lt;EM&gt;reformat&lt;/EM&gt; its way to a high score — RL has little to add.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Hard — the same three label lines are hidden (gold must be inferred):&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The attributes still live in the product name ("yellow gold", "earrings"), so the model must&amp;nbsp;&lt;STRONG&gt;locate and normalize&lt;/STRONG&gt; them from prose instead of copying a labeled field — and the free-text gold is rephrased so the bullet-copy shortcut is closed too. That is where SFT leaves more headroom and GRPO produces a larger improvement.&lt;/P&gt;
&lt;H2 data-line="105"&gt;The headline result&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Task&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;SFT&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;SFT → GRPO&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Δ absolute&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Easy&lt;/STRONG&gt;&amp;nbsp;(attributes exposed)&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;0.8885&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;0.8996&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;+0.0111&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;small gain after SFT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;Hard&lt;/STRONG&gt;&amp;nbsp;(attributes hidden)&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;0.6983&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;0.7498&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;&lt;STRONG&gt;+0.0515 (≈ +7.4% rel.)&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;larger gain; concentrated in SIoU fields&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN lia-align-center"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;P data-line="112"&gt;Two things stand out. First, &lt;STRONG&gt;the observed SFT ceiling depends strongly on task formulation&lt;/STRONG&gt;: exposing the attributes lets SFT learn a largely copy-and-format transformation, reaching 0.8885; hiding them drops it to 0.6983 because the model can no longer copy. Second, &lt;STRONG&gt;the GRPO gain is much larger on the hard formulation&lt;/STRONG&gt;&amp;nbsp;(+0.0515) than the easy one (+0.0111).&lt;/P&gt;
&lt;P data-line="108"&gt;&lt;STRONG&gt;The pattern in one line:&lt;/STRONG&gt;&amp;nbsp;headroom is necessary but not sufficient — GRPO helped most where SFT had plateaued on recoverable, inference-heavy fields&amp;nbsp;&lt;EM&gt;and&lt;/EM&gt; the task-level reward provided direct semantic credit. In this experiment the size of the GRPO gain was strongly associated with the headroom remaining after SFT, particularly for inference-oriented fields.&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;Figure 1. Weighted held-out scores before and after GRPO. The easy formulation improves by +0.0111 absolute, while the hard formulation improves by +0.0515 absolute, equivalent to approximately +7.4% relative.&lt;/EM&gt;&lt;/img&gt;
&lt;H2 data-line="114"&gt;Where the gain lands: it's the field&amp;nbsp;&lt;EM&gt;type&lt;/EM&gt;, not just the score&lt;/H2&gt;
&lt;P data-line="130"&gt;If the pattern holds, the hard-arm gain should concentrate in the&amp;nbsp;&lt;STRONG&gt;SIoU list fields&lt;/STRONG&gt; — the ones that require inference — and touch the already-strong cosine fields less. That is what we observe.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="width: 63.1481%; height: 372px; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr style="height: 58.8px;"&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Field&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Type&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Easy SFT&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Easy GRPO&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Δ easy&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Hard SFT&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;Hard GRPO&lt;/th&gt;&lt;th class="lia-border-color-21" style="height: 58.8px;"&gt;&lt;STRONG&gt;Δ hard&lt;/STRONG&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;quick_summary&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;cosine&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;1.000&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;1.000&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.000&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.832&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.856&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.024&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;rich_semantic&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;cosine&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.995&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.995&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;−0.000&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.788&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.804&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.016&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;summary&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;cosine&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.959&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.962&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.003&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.890&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.903&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.013&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;trend&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;cosine&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.884&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.894&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.010&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.819&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.858&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.039&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;quick_semantic&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;SIoU&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.881&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.892&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.012&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.588&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.694&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;+0.105&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;trend_signals&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;SIoU&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.706&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.724&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.018&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.471&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.532&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;+0.061&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;overall_vibe&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;SIoU&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.861&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.886&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.025&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.665&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.717&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;+0.052&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;vibe&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;SIoU&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.823&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.846&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;+0.023&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.533&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;0.635&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;+0.101&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;weighted_overall&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&amp;nbsp;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;0.8885&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;0.8996&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;+0.0111&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;0.6983&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;0.7498&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-border-color-21" style="height: 34.8px;"&gt;&lt;STRONG&gt;+0.0515&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;col style="width: 12.50%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="132"&gt;Notice the contrast. On the hard arm, the four cosine free-text fields also have headroom (rich_semantic 0.788, trend 0.819), yet GRPO produced smaller and less consistent gains there (e.g., trend +0.039, quick_summary +0.024). The four SIoU inference fields, sitting at 0.47–0.67 after SFT, are where the largest gains land: quick_semantic +0.105, vibe +0.101, trend_signals +0.061, overall_vibe +0.052.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;Figure 2. Per-field GRPO-minus-SFT differences. The largest hard-arm improvements occur in SIoU-scored attribute fields, especially quick_semantic and vibe.&lt;/EM&gt;&lt;/img&gt;
&lt;P&gt;&lt;STRONG&gt;Why?&lt;/STRONG&gt;&amp;nbsp;Standard SFT optimizes token-level likelihood against one reference output. Although it can generalize beyond exact memorization, the objective does not directly assign sequence-level partial credit based on the downstream SIoU or cosine metric. GRPO instead evaluates sampled outputs with the task-level grader and reinforces higher-scoring generations. This gives the optimizer a direct signal for recovering semantically correct attributes even when the generated sequence differs from the reference wording. In this experiment, GRPO's gains concentrated where the missing information was recoverable from the input but poorly served by token-level imitation — the hard-arm SIoU fields.&lt;/P&gt;
&lt;H2&gt;A pre-flight check: should you run RL at all?&lt;/H2&gt;
&lt;P data-line="168"&gt;You don't need to run RL to estimate whether it will help. Because GRPO's gains here concentrated where SFT left recoverable headroom, a short SFT-baseline inspection is informative. But mind the trap:&amp;nbsp;&lt;STRONG&gt;a low score is necessary, not sufficient.&lt;/STRONG&gt;&amp;nbsp;The check is three cheap steps:&lt;/P&gt;
&lt;OL data-line="173"&gt;
&lt;LI data-line="164"&gt;&lt;STRONG&gt;Always run SFT first.&lt;/STRONG&gt;&amp;nbsp;RL isn't a replacement for SFT — it comes after it. So the question is never "SFT vs RL," but "after SFT, is it worth spending more on RL?" SFT is relatively cheap, so do it first.&lt;/LI&gt;
&lt;LI data-line="167"&gt;&lt;STRONG&gt;Score the SFT checkpoint&amp;nbsp;&lt;EM&gt;per-field&lt;/EM&gt;&amp;nbsp;on a held-out test set&lt;/STRONG&gt;&amp;nbsp;(not just the aggregate). This is nearly zero-cost — a single inference pass plus grading.&lt;/LI&gt;
&lt;LI data-line="169"&gt;&lt;STRONG&gt;Apply the checklist below&lt;/STRONG&gt;&amp;nbsp;to each low-scoring field.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P data-line="171"&gt;&lt;STRONG&gt;When to consider RL.&lt;/STRONG&gt; Consider RL when SFT has genuinely plateaued, important fields remain below target, the missing information is recoverable from the input, sampled outputs can meaningfully vary, and a reliable task-level reward can distinguish partial improvements. In this study that reward is SIoU on attribute lists — a concrete choice for this task, not a universal requirement.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th class="lia-border-color-21"&gt;Post-SFT condition&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Diagnosis&lt;/th&gt;&lt;th class="lia-border-color-21"&gt;Recommended action&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Aggregate and field scores are already near target&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Limited headroom&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Keep SFT; skip RL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Important fields remain low and the information is recoverable&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Potential reward-credit gap&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Consider RL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Scores are low because labels are noisy or unrecoverable&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Data or reward problem&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Fix data/reward first&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;SFT validation is still improving&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;SFT not converged&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Continue tuning SFT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;Reward does not reliably distinguish better outputs&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Weak RL signal&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;Improve the grader before RL&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-line="194"&gt;The point is that a low score alone is not enough. GRPO helped here specifically where the missing information was recoverable&amp;nbsp;&lt;EM&gt;and&lt;/EM&gt; the task-level reward could credit partial progress. A low free-text (cosine) score, a noisy label, and an unconverged SFT are different problems with different fixes, and GRPO should not be assumed to solve them automatically.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;img&gt;
&lt;P class="lia-align-justify"&gt;&lt;EM&gt;Figure 3. Exploratory relationship between post-SFT field score and subsequent GRPO gain. Each point is one field on one arm: x = its post-SFT score (inspectable on your own checkpoint), y = the GRPO gain it received. Color = arm (orange = hard, blue = easy); shape = field type (circle = inference / SIoU, square = free-text / cosine). In this experiment the largest gains occur among low-scoring SIoU attribute fields, while free-text fields generally show smaller gains over the observed score range. (Headroom size alone still correlates with gain, pooled R²≈0.74 — the field-type axis is what a headroom-only reading misses.)&lt;/EM&gt;&lt;/P&gt;
&lt;/img&gt;
&lt;H2&gt;A prerequisite: make sure you’ve actually maxed out SFT&lt;/H2&gt;
&lt;P data-line="211"&gt;The whole diagnostic assumes the post-SFT score reflects a&amp;nbsp;&lt;EM&gt;genuine&lt;/EM&gt;&amp;nbsp;ceiling, not an under-trained run. Hyperparameters absolutely matter here: if SFT is left under-tuned, its "headroom" is illusory — RL will appear to help when a better-tuned SFT would have closed the same gap for far less compute. So before you read any field as "stranded," confirm SFT has converged:&lt;/P&gt;
&lt;UL data-line="217"&gt;
&lt;LI data-line="208"&gt;&lt;STRONG&gt;Train to a plateau, then measure.&lt;/STRONG&gt;&amp;nbsp;Push epochs/steps until the held-out score stops improving. A still-rising validation curve means you're measuring an unfinished SFT, not headroom.&lt;/LI&gt;
&lt;LI data-line="211"&gt;&lt;STRONG&gt;Sweep the few hyperparameters that move the needle&lt;/STRONG&gt;&amp;nbsp;— learning rate, epochs, and (for LoRA) rank — and keep the best-validation checkpoint. You don't need an exhaustive grid; you need evidence the val metric is no longer sensitive to these.&lt;/LI&gt;
&lt;LI data-line="214"&gt;&lt;STRONG&gt;Sanity-check the copyable fields.&lt;/STRONG&gt;&amp;nbsp;Fields whose answer is directly copyable from the input should saturate near 1.0. If even those are low, SFT is under-trained — fix that first; recovering copyable content is SFT's job, not RL's.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="218"&gt;In this study both arms share one SFT recipe (Qwen3-32B, LoRA rank 32, lr 5e-4) that we confirmed can saturate: on the easy arm it reaches&amp;nbsp;&lt;STRONG&gt;0.8885 with many test items at exact 1.0&lt;/STRONG&gt; — direct evidence the recipe isn't leaving easy points unclaimed. Because the identical recipe (SFT, GRPO, and reward shaping) sits under both arms, the difference in GRPO gain is attributable to task difficulty rather than to a change in the training setup&lt;/P&gt;
&lt;H2&gt;What we can conclude — and what remains open&lt;/H2&gt;
&lt;P data-line="235"&gt;&lt;STRONG&gt;Shows:&lt;/STRONG&gt;&amp;nbsp;in this experiment, GRPO's post-SFT gain was strongly associated with the headroom remaining after SFT, particularly for inference-oriented fields — small on the easy formulation (+0.0111) and larger on the hard one (+0.0515), concentrated in the SIoU attribute fields.&lt;/P&gt;
&lt;P data-line="230"&gt;&lt;STRONG&gt;Does not establish:&lt;/STRONG&gt;&amp;nbsp;that this holds unchanged for&amp;nbsp;&lt;EM&gt;hard-verifiable&lt;/EM&gt;&amp;nbsp;rewards (math, code) or other task families. The gold is a rule-derived silver label, not a human-preference target. The easy +0.0111 is a small gain, and the reported numbers use a 48-example held-out subset with a single seed, so we do not treat it as a significance test; the hard +0.0515 is larger and lands on the predicted field-level structure, but additional seeds and a larger test set would be needed to quantify uncertainty.&lt;/P&gt;
&lt;P data-line="237"&gt;&lt;STRONG&gt;Confounded factors.&lt;/STRONG&gt;&amp;nbsp;In this study, inference requirement, output format, and grader type are partly coupled: the four hidden attribute fields are list-valued and scored with SIoU. The experiment identifies a useful empirical pattern but does not fully disentangle these factors. The hard formulation also removes explicit attribute lines&amp;nbsp;&lt;EM&gt;and&lt;/EM&gt; reduces direct lexical overlap with the target output, so it changes more than a single microscopic difficulty knob. The GRPO recipe (its reward curriculum and per-field weights) was tuned on the harder task and applied unchanged to both arms; holding it fixed keeps the arm-to-arm comparison clean, but the recipe is not independently optimized for the easy arm.&lt;/P&gt;
&lt;H2&gt;What’s next&lt;/H2&gt;
&lt;UL&gt;
&lt;LI data-line="248"&gt;&lt;STRONG&gt;Extend to hard-verifiable rewards&lt;/STRONG&gt;&amp;nbsp;(math-correctness, code-execution) to test whether the observed headroom–gain relationship holds under other reward types — the most important open question.&lt;/LI&gt;
&lt;LI data-line="251"&gt;&lt;STRONG&gt;Explore a predictor&lt;/STRONG&gt;&amp;nbsp;for whether the post-SFT per-field distribution can forecast the GRPO gain.&lt;/LI&gt;
&lt;LI data-line="253"&gt;&lt;STRONG&gt;Sweep more difficulty points&lt;/STRONG&gt;&amp;nbsp;(a graded reveal-fraction) to trace the full curve.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Reproduce it on public data (CC BY 4.0)&lt;/H2&gt;
&lt;P data-line="263"&gt;Everything runs on the public&amp;nbsp;&lt;STRONG&gt;Amazon Berkeley Objects&lt;/STRONG&gt;&amp;nbsp;dataset (&lt;A href="https://arxiv.org/abs/2110.06199" target="_blank" rel="noopener" data-href="https://arxiv.org/abs/2110.06199"&gt;Collins et al., CVPR 2022&lt;/A&gt;;&amp;nbsp;abo-listings&amp;nbsp;text metadata only) — no proprietary data, checkpoints, or code required. The study is specified end-to-end below, and because evaluation uses the same cosine and SIoU graders (at a fixed threshold τ = 0.7 and equal field weights), the headline numbers can be verified from a set of model predictions with&amp;nbsp;&lt;STRONG&gt;no fine-tuning access at all&lt;/STRONG&gt;; only retraining the models needs the preview.&lt;/P&gt;
&lt;OL&gt;
&lt;LI data-line="270"&gt;&lt;STRONG&gt; Get the data. &lt;/STRONG&gt;Download the ABO listings metadata (public, no credentials):&lt;/LI&gt;
&lt;/OL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P data-line="236"&gt;aws s3 cp --no-sign-request --recursive s3://amazon-berkeley-objects/listings/ abo-listings/listings/&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;OL start="2"&gt;
&lt;LI data-line="270"&gt;&lt;STRONG&gt; Build the two arms. &lt;/STRONG&gt;Filter to fashion listings and map each product's real attributes (brand, product_type, color, material, style, pattern, bullet points, keywords) into the 8-field editorial JSON — four free-text fields + four attribute-list fields. Build both arms aligned by product_id, differing by the difficulty knob:&amp;nbsp;&lt;STRONG&gt;easy&lt;/STRONG&gt;&amp;nbsp;exposes the&amp;nbsp;productType&amp;nbsp;/&amp;nbsp;color&amp;nbsp;/&amp;nbsp;material&amp;nbsp;lines in the prompt (gold is copyable);&amp;nbsp;&lt;STRONG&gt;hard&lt;/STRONG&gt;&amp;nbsp;hides those label lines (the words still live in the product name and bullets) and rephrases the free-text gold so the copy shortcut is closed. Split disjointly by&amp;nbsp;product_id&amp;nbsp;(4,800 / 600 / 600 train / val / test). Because of inference and grading cost, the numbers in this post are computed on a&amp;nbsp;&lt;STRONG&gt;fixed 48-example subset&lt;/STRONG&gt;&amp;nbsp;of the 600-example test split (seed 42), used for every checkpoint (both arms, SFT and GRPO).&lt;/LI&gt;
&lt;LI data-line="281"&gt;&lt;STRONG&gt; Verify the numbers (no special access). &lt;/STRONG&gt;The evaluation grader is fully specified in the Appendix: cosine similarity on the four free-text fields + SIoU (embedding overlap at τ = 0.7, text-embedding-3-small) on the four list fields, averaged with equal weights into weighted_overall. Implement it and score predictions on that fixed 48-example evaluation subset drawn from the held-out test split; you should land within small-sample range of&amp;nbsp;&lt;STRONG&gt;Easy ≈ 0.89, Hard SFT ≈ 0.70 → GRPO ≈ 0.75&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI data-line="285"&gt;&lt;STRONG&gt; Rerun the training (needs preview access). &lt;/STRONG&gt;The fine-tuning itself uses the&lt;STRONG&gt;&amp;nbsp;Interactive Post-Training API&lt;/STRONG&gt;&amp;nbsp;(currently in private preview). The base model, SFT configuration, GRPO configuration, and reward shaping are&amp;nbsp;&lt;STRONG&gt;identical across arms&lt;/STRONG&gt;; only the data (attributes exposed vs. inferred) changes:&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI style="list-style-type: none;"&gt;
&lt;UL data-line="290"&gt;
&lt;LI data-line="293"&gt;&lt;STRONG&gt;SFT:&lt;/STRONG&gt;&amp;nbsp;Qwen3-32B&amp;nbsp;LoRA r32, lr 5e-4, batch 32, 1 epoch, 4,800 train examples.&lt;/LI&gt;
&lt;LI data-line="294"&gt;&lt;STRONG&gt;GRPO&lt;/STRONG&gt;&amp;nbsp;(from the SFT checkpoint): lr 2e-5, temperature 1.0,&amp;nbsp;group_size&amp;nbsp;8,&amp;nbsp;groups_per_batch&amp;nbsp;8, importance-sampling loss, 64 steps, seed 42. Both arms anneal the SIoU threshold 0.5→0.7 and up-weight the inference-type list fields (overall_vibe/trend_signals&amp;nbsp;×3,&amp;nbsp;vibe&amp;nbsp;×2,&amp;nbsp;quick_semantic&amp;nbsp;×1.5).&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="305"&gt;Score both checkpoints with the same evaluation grader (τ = 0.7, equal weights) and compare the SFT vs GRPO deltas. This is a custom reward on public data, not a preset recipe.&lt;/P&gt;
&lt;H2&gt;Bottom line&lt;/H2&gt;
&lt;P&gt;Run and tune SFT first. Then inspect held-out performance by field rather than relying only on an aggregate score. When SFT has saturated on a copy-and-format task, RL may offer little additional value. When important, recoverable attributes remain difficult and a reliable task-level reward can distinguish partial semantic improvements, RL becomes a more promising investment. These results establish that pattern for one structured-generation task; testing whether it generalizes to math, code, preference optimization, and other reward types remains future work.&lt;/P&gt;
&lt;H2&gt;Appendix — Scoring metrics&lt;/H2&gt;
&lt;P data-line="311"&gt;This is the evaluation grader used to report all test metrics in this post. Each of the eight fields is scored in [0, 1] by one of two functions, then averaged into&amp;nbsp;weighted_overall. Training additionally applies reward shaping (threshold annealing and per-field weights, the same on both arms); the numbers reported here use the fixed evaluation configuration below (τ = 0.7, equal weights). All embeddings use&amp;nbsp;text-embedding-3-small;&amp;nbsp;emb(·)&amp;nbsp;is the embedding of a normalized (lowercased, whitespace-collapsed) string.&lt;/P&gt;
&lt;OL&gt;
&lt;LI data-line="327"&gt;&lt;STRONG&gt; Cosine fields&amp;nbsp;&lt;/STRONG&gt;(quick_summary, rich_semantic, summary, trend) — free-text descriptions. Gold and prediction are each reduced to one string, embedded, and compared:&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;&lt;STRONG&gt;Semantic-IoU fields&lt;/STRONG&gt;&amp;nbsp;(quick_semantic,&amp;nbsp;trend_signals,&amp;nbsp;overall_vibe,&amp;nbsp;vibe) — sparse attribute&amp;nbsp;&lt;EM&gt;lists&lt;/EM&gt;. Let G, P be the gold and predicted lists. Embed every item, greedily match pairs whose cosine ≥ τ (neither already matched), and let m be the number of matched pairs (the semantic intersection |G ∩ P|):&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P data-line="339"&gt;This is the Jaccard index&amp;nbsp;|G ∩ P| / |G ∪ P|, but intersection is defined by embedding similarity ≥ τ (τ = 0.7) instead of exact string match — so "sneakers" matches "shoes" without being identical.&lt;/P&gt;
&lt;OL start="3"&gt;
&lt;LI data-line="343"&gt;&lt;STRONG&gt; Aggregation.&amp;nbsp;&lt;/STRONG&gt;With per-field scores sₖ and equal weights (wₖ = 1 over all 8 fields at scoring time):&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;P data-line="348"&gt;The denominator is fixed at the full field count (8), so a missing or malformed field contributes 0 to the numerator but still counts in the denominator — the model can't inflate its score by emitting only the easy fields, and output that fails to parse as JSON scores 0.&lt;/P&gt;
&lt;P data-line="343"&gt;&lt;STRONG&gt;In one line:&lt;/STRONG&gt;&amp;nbsp;cosine fields ask&amp;nbsp;&lt;EM&gt;"is the sentence semantically close?"&lt;/EM&gt;; SIoU fields ask&amp;nbsp;&lt;EM&gt;"how much do the two attribute sets overlap, allowing synonyms?"&lt;/EM&gt; The hard task's headroom lives almost entirely in the second question — which is exactly where GRPO delivers its gain.&lt;/P&gt;
&lt;H2&gt;References&lt;/H2&gt;
&lt;P&gt;This work uses the&amp;nbsp;&lt;STRONG&gt;Amazon Berkeley Objects (ABO)&lt;/STRONG&gt;&amp;nbsp;dataset (Collins et al.,&amp;nbsp;&lt;EM&gt;ABO: Dataset and Benchmarks for Real-World 3D Object Understanding&lt;/EM&gt;, CVPR 2022, arXiv:2110.06199). Data © Amazon.com, used under&amp;nbsp;&lt;STRONG&gt;CC BY 4.0&lt;/STRONG&gt;&amp;nbsp;(&lt;A href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener" data-href="https://creativecommons.org/licenses/by/4.0/"&gt;https://creativecommons.org/licenses/by/4.0/&lt;/A&gt;). We use only the abo-listings text-metadata subset (not the 3D assets), which we reshaped and adapted into the text-to-JSON task described above.&lt;/P&gt;
&lt;H2&gt;Disclaimer&lt;/H2&gt;
&lt;P data-line="373"&gt;© 2026 Microsoft Corporation. All rights reserved. This document is provided "as-is." Information and views expressed in this document, including URL and other internet website references, may change without notice. You bear the risk of using it.&lt;/P&gt;
&lt;P data-line="377"&gt;This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes.&lt;/P&gt;
&lt;P data-line="380"&gt;Some examples are for illustration only and are fictitious. No real association is intended or inferred.&lt;/P&gt;</description>
      <pubDate>Wed, 05 Aug 2026 17:11:08 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/when-does-rl-actually-help-fine-tuning-a-difficulty-controlled/ba-p/4535077</guid>
      <dc:creator>shihyaolin</dc:creator>
      <dc:date>2026-08-05T17:11:08Z</dc:date>
    </item>
    <item>
      <title>Microsoft's six Responsible AI pillars: how do you operationalize them in practice?</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/microsoft-s-six-responsible-ai-pillars-how-do-you-operationalize/m-p/4543919#M1510</link>
      <description>&lt;P&gt;Deploying AI without a trust criterion isn't innovation. It's risk taken on without awareness.&lt;/P&gt;&lt;P&gt;Microsoft organizes this problem into six pillars: reliability and safety, privacy and security, inclusiveness, transparency, accountability, and fairness. It's not a marketing list. It's a governance structure applicable to any AI adoption decision.&lt;/P&gt;&lt;P&gt;The pillar that generates the most debate in practice, at least in the conversations I've had, is transparency. Systems that can't explain why they reached a given output create a real accountability problem: who signs off on the decision, the model or the manager?&lt;/P&gt;&lt;P&gt;Accountability doesn't transfer to the tool. It stays with whoever decided to use it.&lt;/P&gt;&lt;P&gt;Fairness also tends to be underestimated. Models trained on historical data carry the biases in that data. If the historical record was biased, the model replicates it at scale. Speed amplifies the problem, it doesn't fix it.&lt;/P&gt;&lt;P&gt;Privacy and security are about where the data goes, who accesses it, what gets retained. Questions that need answers before deployment, not after an incident.&lt;/P&gt;&lt;P&gt;The framework doesn't guarantee an outcome. It creates the right questions before any adoption decision.&lt;/P&gt;&lt;P&gt;I'd like to hear how this plays out in practice for you all: which of these six pillars tends to be the hardest to operationalize on your team? And how are you documenting that decision process today?&lt;/P&gt;</description>
      <pubDate>Tue, 04 Aug 2026 13:00:17 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/microsoft-s-six-responsible-ai-pillars-how-do-you-operationalize/m-p/4543919#M1510</guid>
      <dc:creator>rafaellimaesilva</dc:creator>
      <dc:date>2026-08-04T13:00:17Z</dc:date>
    </item>
    <item>
      <title>Securing On-Device AI: Evaluating Foundry Local Models with AI Red Teaming Agent</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/securing-on-device-ai-evaluating-foundry-local-models-with-ai/ba-p/4541303</link>
      <description>&lt;H3&gt;On-Device AI Inference Changes the Architecture, Not the Risk&lt;/H3&gt;
&lt;P&gt;As organizations transform into Frontier Firms and integrate AI into more applications, cloud-hosted inference is not always the optimal architectural choice. Some applications operate with limited connectivity, require low-latency responses, or involve data that organizations prefer to process locally. As AI usage scales, token economics also becomes an architectural consideration as organizations look for greater predictability and control over cloud inference cost. By running AI inference directly on the device, applications can eliminate cloud round trip, support offline operations, avoid cloud token costs, and provide greater control over data during processing.&lt;/P&gt;
&lt;P&gt;However, moving AI inference onto the device changes the application architecture, not the model’s exposure to behavioral risks. On-device language models can still encounter adversarial inputs intended to bypass safeguards, manipulate instructions, or elicit unsafe and unexpected responses. This makes systematic security and safety evaluation, including AI red teaming, an important part of adopting on-device AI.&lt;/P&gt;
&lt;P&gt;AI red teaming evaluates an AI system from an adversarial perspective to uncover safety and security weaknesses before they are encountered in production. While functional testing asks whether a model works as intended under expected conditions, red teaming examines how it behaves when adversarial user intentionally attempts to make it fail or misbehave.&lt;/P&gt;
&lt;P&gt;This article shows how organizations can use Microsoft technology to run AI on end-user devices while systematically evaluate model behavior against safety and security risks. To make this practical, I provide a sample solution that development teams can use to automate repeatable evaluations across models.&lt;/P&gt;
&lt;H3&gt;Running and Evaluating On-Device AI Security Risks&lt;/H3&gt;
&lt;P&gt;Microsoft addresses these on-device AI challenges with complementary solutions: Foundry Local runs end-to-end AI inference on the device, while AI Red Teaming Agent helps developers evaluate model behavior before release.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Foundry Local&lt;/STRONG&gt; (&lt;A href="https://devblogs.microsoft.com/foundry/foundry-local-ga/" target="_blank" rel="noopener"&gt;generally available since April 2026&lt;/A&gt;), is a cross-platform runtime for integrating &amp;nbsp;local language models directly into applications. It runs on Windows, macOS, and Linux, with SDKs for Python, JavaScript, C#, and Rust. The runtime manages the model lifecycle within the application: downloading, caching, loading, inference, and unloading.&lt;/P&gt;
&lt;P&gt;Foundry Local is designed for single-user inference embedded within an application, rather than multi-user model serving through server-based inference stack. It provides a curated catalog of hardware-optimized models, while allowing developers to extend beyond the catalog using Bring Your Own Model (BYOM) in the ONNX format. To learn more, refer to the &lt;A href="https://www.foundrylocal.ai/" target="_blank" rel="noopener"&gt;Foundry Local site&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;AI Red Teaming Agent&lt;/STRONG&gt; complements the solution by enabling developers to evaluate the safety and security risks in on-device language models before release. It combines Microsoft’s open-source Python Risk Identification Tool (&lt;A href="https://github.com/microsoft/PyRIT" target="_blank" rel="noopener"&gt;PyRIT&lt;/A&gt;), with Foundry Risk and Safety Evaluations to generate adversarial probes, assess attack-response pairs, calculate metrics such as Attack Success Rate, and produce detailed reports.&lt;/P&gt;
&lt;P&gt;The AI Red Teaming Agent supports adversarial testing of cloud models hosted in Microsoft Foundry, while its &lt;A href="https://learn.microsoft.com/en-us/azure/foundry/how-to/develop/run-scans-ai-red-teaming-agent" target="_blank" rel="noopener"&gt;local scan&lt;/A&gt; workflow (in Public Preview) extends this capability to on-device models. Using the &lt;EM&gt;azure-ai-evaluation[redteam]&lt;/EM&gt; package, developers can provide a model configuration or application callback as the scan target. The sample solution that follows uses this callback pattern to evaluate a model running through Foundry Local.&lt;/P&gt;
&lt;H3&gt;Try It Yourself: Red-Teaming a Foundry Local model&lt;/H3&gt;
&lt;P&gt;To make this article practical, I provided a sample solution in the &lt;A href="https://github.com/mardianto-msft/foundry-local-eval" target="_blank" rel="noopener"&gt;foundry-local-eval GitHub repository&lt;/A&gt;. The sample solution lets you select and download a model from the Foundry Local curated catalog, runs it entirely on your machine, and evaluate its responses to adversarial prompts using the Azure AI Evaluation red teaming SDK. The Azure Developer CLI (azd) provisions the required Azure resources, helping you move from a fresh clone to a scored risk report seamlessly.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The sample uses a hybrid architecture, in which the target model runs locally through Foundry Local, while the Azure AI Evaluation red teaming SDK uses Microsoft Foundry project to generate adversarial prompts and asses the model’s responses. Model inference remains on the device, while attack generation and risk scoring use Azure services.&lt;/P&gt;
&lt;P&gt;The scan probes the model across four risk categories: &lt;EM&gt;violence, hate and unfairness, sexual content&lt;/EM&gt;, and &lt;EM&gt;self-harm.&lt;/EM&gt; It applies a range of attack strategies and reports key measurements: Attack Success Rate (ASR) that you can track across models and tune your safeguards against. For more details, such as prerequisites, configuration, and step-by-step run instructions, refer to the repository.&lt;/P&gt;
&lt;H3&gt;Final Thoughts: Building On-Device AI with Trust from the Start&lt;/H3&gt;
&lt;P&gt;As organizations progress toward becoming Frontier Firms, bringing AI into more applications must be accompanied by deliberate governance and evaluation. On-device AI is no exception. In this article, I explored how Microsoft technologies can help organizations deploy AI models to end-user devices and conduct systematic, automated safety and security evaluations through AI red teaming. The sample solution provides a practical reference implementation that development teams can use as a starting point. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;By incorporating repeatable red teaming into the development lifecycle, teams can compare results across candidate models, strengthen safeguards before deployment, and treat trust as a design requirement. As applications with on-device AI continue to evolve, this evaluation discipline can help organizations innovate with greater confidence while keeping safety and security central to their Frontier Firm transformation journey.&lt;/P&gt;</description>
      <pubDate>Thu, 30 Jul 2026 14:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/securing-on-device-ai-evaluating-foundry-local-models-with-ai/ba-p/4541303</guid>
      <dc:creator>mhadiputro</dc:creator>
      <dc:date>2026-07-30T14:00:00Z</dc:date>
    </item>
    <item>
      <title>Introducing GPT-transcribe and GPT-live-transcribe in Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-gpt-transcribe-and-gpt-live-transcribe-in-microsoft/ba-p/4541740</link>
      <description>&lt;P&gt;A transcription model hears “account number 8-4-7-2” but returns “account number eighty-four seventy-two.” A single error can break a downstream automation workflow. Developers building voice applications need transcription models that can handle real-world audio conditions, natural speech patterns, and business-critical details, including codes, dates, addresses, account numbers, mixed-language conversations, specialized terminology, and quiet or low-volume speech.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GPT-transcribe&amp;nbsp;&lt;/STRONG&gt;and &lt;STRONG&gt;GPT-live-transcribe do just that and are available in &lt;/STRONG&gt;&lt;STRONG&gt;Microsoft Foundry today&lt;/STRONG&gt;. Two updates to the audio model family designed to improve automatic speech recognition across asynchronous transcription and live streaming scenarios.&lt;/P&gt;
&lt;H1&gt;Built for More Accurate Transcription in Real-World Audio&lt;/H1&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;A class="lia-external-url" href="https://ai.azure.com/catalog/models/gpt-transcribe" target="_blank"&gt;GPT-transcribe&lt;/A&gt;&lt;/STRONG&gt; is the highest accuracy ASR model from Open AI, designed for asynchronous speech-to-text transcription of completed audio files and batch workloads. It accepts audio input and returns text output, making it a strong fit for workflows that process recorded, uploaded, or submitted audio, including meeting recordings, voicemails, and media files.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://ai.azure.com/catalog/models/gpt-live-transcribe" target="_blank"&gt;&lt;STRONG&gt;GPT-live-transcribe&lt;/STRONG&gt;&lt;/A&gt; is designed for low-latency streaming transcription through the Realtime API. It supports real-time audio input and text output, helping developers build live experiences where speech needs to be transcribed continuously as audio arrives. This model also introduces “tunable latency” where developers can adjust the latency/accuracy trade-off for streaming. It is a strong fit for live captions, voice assistants, contact center workflows, accessibility experiences, field service applications, real-time intake, and monitoring systems.&lt;/P&gt;
&lt;P&gt;Together, these models give developers transcription options in Microsoft Foundry for stored audio and live voice interactions. Their text output can support downstream workflows such as search, summarization, routing, analytics, automation, and quality review.&lt;/P&gt;
&lt;H2&gt;What’s New in Both Models&lt;/H2&gt;
&lt;P&gt;The features of the new transcription models focus on improving transcription quality in real-world audio environments where speech can be brief, noisy, accented, quiet, domain-specific, or mixed across languages. Key capabilities include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Background noise:&lt;/STRONG&gt; Helps isolate speech in noisy environments so transcription quality can remain more reliable when audio conditions are not controlled.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Short utterances:&lt;/STRONG&gt; Improves recognition of brief commands, confirmations, interruptions, and clipped speech that can be difficult to capture accurately.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Alphanumeric perception:&lt;/STRONG&gt; Strengthens transcription of IDs, codes, phone numbers, dates, addresses, account numbers, and mixed letter-number sequences.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Domain terminology understanding:&lt;/STRONG&gt; Improves recognition of specialized vocabulary used in product, workflow, industry, and business-process contexts.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Codemix:&lt;/STRONG&gt; Improves understanding when speakers switch between languages within a conversation or utterance.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Context awareness:&lt;/STRONG&gt; Uses topic hints and past conversation context to improve transcription accuracy and help maintain consistency.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Accent robustness:&lt;/STRONG&gt; Improves handling of regional accents, non-native accents, dialects, and varied speaking styles.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Whispering:&lt;/STRONG&gt; Improves recognition of quiet or low-volume speech, including whispered commands and private dictation.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Live captioning and accessibility experiences:&lt;/STRONG&gt; Generate real-time captions for meetings, events, media experiences, and assistive applications.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Contact center and voice workflows:&lt;/STRONG&gt; Capture spoken details as conversations happen, supporting routing, quality review, summarization, and downstream automation.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Monitoring, analytics, and compliance workflows:&lt;/STRONG&gt; Provide text visibility into ongoing spoken input so teams can analyze, review, and act on conversation data.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Also Available: GPT-realtime-2.1 and GPT-realtime-mini-2.1&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;gpt-realtime-2.1&lt;/STRONG&gt; and &lt;STRONG&gt;gpt-realtime-mini-2.1&lt;/STRONG&gt; are also available in Microsoft Foundry for developers building speech-to-speech applications. Unlike GPT-transcribe and GPT-live-transcribe, which return text, these models accept audio and generate audio for low-latency conversational experiences over the Realtime API. gpt-realtime-2.1 focuses on interaction quality and robustness, while gpt-realtime-mini-2.1 provides a smaller, faster, and more cost-efficient option for high-volume deployments.&lt;/P&gt;
&lt;P&gt;Together with GPT-transcribe and GPT-live-transcribe, these realtime audio updates give developers more flexibility to build voice applications that need both accurate transcription and responsive spoken interaction, whether the experience is centered on capturing speech as text, responding with audio, or combining both patterns in a single workflow.&lt;/P&gt;
&lt;H1&gt;Use Cases by Model&lt;/H1&gt;
&lt;H2&gt;GPT-transcribe&lt;/H2&gt;
&lt;P&gt;Use GPT-transcribe when the application needs accurate text transcripts from recorded, uploaded, or submitted audio. It is a strong fit for meeting and call transcription, media transcription, customer support intake, voicemail and message processing, quality review, compliance workflows, and domain-specific transcription where short utterances, structured alphanumeric details, specialized terminology, accents, background noise, code-mixed speech, or quiet audio can affect downstream accuracy.&lt;/P&gt;
&lt;H2&gt;GPT-live-transcribe&lt;/H2&gt;
&lt;P&gt;Use GPT-live-transcribe when the application needs live streaming transcription with low latency. It is designed for real-time captions, accessibility experiences, contact center transcription, voice-enabled workflows, live monitoring, operational dashboards, and agent-assist scenarios where spoken input needs to become text continuously as the interaction unfolds.&lt;/P&gt;
&lt;H1&gt;Pricing&lt;/H1&gt;
&lt;P&gt;The following pricing example shows Global Standard rates by model and modality. Rates for GPT-realtime-2.1 and GPT-realtime-mini-2.1 are listed per 1 million tokens. GPT-transcribe and GPT-live-transcribe are listed per audio hour.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-color-21 lia-border-style-solid" border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Deployment&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Modality&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Input&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Cached Input&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;Output&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21" rowspan="3"&gt;
&lt;P&gt;&lt;STRONG&gt;GPT-realtime-2.1&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" rowspan="3"&gt;
&lt;P&gt;Global Standard&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Audio&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$32.00&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.40&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$64.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Text&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$4.00&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.40&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$24.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Image&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$5.00&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.50&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;--&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21" rowspan="3"&gt;
&lt;P&gt;&lt;STRONG&gt;GPT-realtime-mini-2.1&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21" rowspan="3"&gt;
&lt;P&gt;Global Standard&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Audio&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$10.00&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.30&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$20.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Text&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.60&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.06&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$2.40&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Image&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.80&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.08&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;--&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;GPT-live-transcribe&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Global Standard&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Audio&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;--&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;--&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$1.02/hour&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;&lt;STRONG&gt;GPT-transcribe&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Global Standard&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;Audio&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;--&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;--&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-border-color-21"&gt;
&lt;P&gt;$0.27/hour&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;col style="width: 16.67%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H1&gt;Getting Started&lt;/H1&gt;
&lt;P&gt;Choose GPT-transcribe when your application processes complete audio files asynchronously, or GPT-live-transcribe when it needs text continuously as speech arrives. Try the models &lt;A href="https://ai.azure.com/" target="_blank" rel="noopener"&gt;in Microsoft Foundry&lt;/A&gt;, then use the resources below to explore the Realtime API, follow the audio quickstart, compare available models, and review Azure OpenAI in Foundry Models documentation.&lt;/P&gt;
&lt;P&gt;For asynchronous transcription, submit a complete audio file to GPT-transcribe and process the returned transcript after the request completes. This pattern works well for recordings, voicemails, and uploaded media. For streaming transcription, open a Realtime API session with GPT-live-transcribe, send audio as it is captured, and handle incremental transcript events. This pattern supports live captioning and agent-assist experiences that need text during an active interaction. Refer to the linked quickstart and Realtime API documentation for current SDK setup, authentication, request schemas, and supported audio formats.&lt;/P&gt;
&lt;P&gt;Explore Microsoft Learn documentation to learn more:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/foundry/openai/how-to/realtime-audio" target="_blank" rel="noopener"&gt;Use GPT Realtime API for speech and audio with Azure OpenAI in Foundry Models&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/ai-foundry/openai/realtime-audio-quickstart" target="_blank" rel="noopener"&gt;GPT Realtime audio quickstart&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/models?tabs=global-standard%2Cstandard-chat-completions" target="_blank" rel="noopener"&gt;Azure OpenAI in Foundry Models overview&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 29 Jul 2026 23:07:34 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-gpt-transcribe-and-gpt-live-transcribe-in-microsoft/ba-p/4541740</guid>
      <dc:creator>Dave_Jacobs</dc:creator>
      <dc:date>2026-07-29T23:07:34Z</dc:date>
    </item>
    <item>
      <title>Executive AI Avatar Platform on Azure: Frontier Intelligence Meets Fireworks AI Open-Source</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/executive-ai-avatar-platform-on-azure-frontier-intelligence/ba-p/4541301</link>
      <description>&lt;H1&gt;The 2 a.m. Question Nobody Wants to Answer Twice&lt;/H1&gt;
&lt;P data-start="53" data-end="451"&gt;It is the night before open enrollment closes. An employee in another time zone has a question about HSA eligibility. No HR representative is available, and the FAQ PDF she received three months ago is nowhere to be found. She does not want to submit a ticket and wait two days—she needs an answer now, delivered by an experience that feels familiar, trustworthy, and connected to her organization.&lt;/P&gt;
&lt;P data-start="453" data-end="961"&gt;The Executive AI Avatar Platform was built to close this gap. It provides a branded, always-available AI avatar that can engage through voice or text and respond using the organization’s approved tone, policies, and knowledge. It is more than a chatbot added to a help page. It combines a face, a voice, and an AI-powered conversational experience that can support an employee at 2 a.m. or engage an audience of 10,000 people during a live town hall—without requiring a team to be available around the clock.&lt;/P&gt;
&lt;P data-start="963" data-end="1236" data-is-last-node="" data-is-only-node=""&gt;That is the promise. The rest of this post explains how the platform is built and why the architecture does not rely on a single frontier model for every task. In an enterprise deployment, cost, control, performance, and flexibility matter just as much as model capability.&lt;/P&gt;
&lt;H1&gt;1. What Is the Executive AI Avatar Platform?&lt;/H1&gt;
&lt;P data-start="49" data-end="376"&gt;The Executive AI Avatar Platform is a full-stack conversational AI platform that enables organizations to create branded, conversational digital humans. These photorealistic or custom-trained avatars can represent executives, HR personas, or subject-matter experts and allow employees or customers to interact naturally through text or voice.&lt;/P&gt;
&lt;P data-start="378" data-end="504"&gt;The platform uses a Next.js 15 frontend connected to a FastAPI backend, which orchestrates two primary Microsoft capabilities:&lt;/P&gt;
&lt;P data-start="506" data-end="702"&gt;&lt;STRONG data-start="506" data-end="548"&gt;Azure Speech in Foundry Tools (Avatar)&lt;/STRONG&gt; renders the avatar’s photorealistic, lip-synchronized video and speech in both batch-based scripted experiences and real-time conversational experiences.&lt;/P&gt;
&lt;P data-start="704" data-end="979"&gt;&lt;STRONG data-start="704" data-end="725"&gt;Microsoft Foundry&lt;/STRONG&gt; provides the deployment platform for the language models that generate the avatar’s responses. The architecture can use a frontier model such as GPT-4o or an open model such as MiniMax M2.5, deployed through Microsoft Foundry and served by Fireworks AI.&lt;/P&gt;
&lt;P&gt;┌─────────────────────────────────────────────────────────┐&lt;BR /&gt;│&amp;nbsp; Next.js 15 Frontend&amp;nbsp;&amp;nbsp; — Library · Studio · Interact&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&lt;BR /&gt;└───────────────────┬───────────────────────────────────────┘&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp; REST / WebSocket&lt;BR /&gt;┌───────────────────▼───────────────────────────────────────┐&lt;BR /&gt;│&amp;nbsp; FastAPI Backend — /avatars&amp;nbsp; /synthesis&amp;nbsp; /speech&amp;nbsp; /voice-live │&lt;BR /&gt;└───────────────────┬───────────────────────────────────────┘&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ┌────────────┴─────────────┐&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&lt;BR /&gt;&amp;nbsp; Azure Speech in Foundry Tools&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Microsoft Foundry&lt;BR /&gt;&amp;nbsp; (TTS Avatar — batch&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(GPT-4o realtime,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;amp; real-time rendering) MiniMax M2.5 via Fireworks AI, deployed through Microsoft Foundry)&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;An MCP server using Model Context Protocol, an open standard for connecting AI applications to external tools and data sources also wraps the platform API. This allows MCP-compatible clients, including Claude Desktop, GitHub Copilot in Visual Studio Code, and custom orchestration agents, to trigger avatar video generation without requiring each client to manage Azure credentials directly.&lt;/P&gt;
&lt;H1&gt;2. Use Cases: Live Interaction vs. Scripted Avatar&lt;/H1&gt;
&lt;P data-start="55" data-end="147"&gt;The platform supports two distinct interaction modes; each designed for different scenarios.&lt;/P&gt;
&lt;P data-start="55" data-end="147"&gt;&lt;STRONG&gt;Live Interaction with Voice Live&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="187" data-end="486"&gt;Live Interaction enables a real-time spoken conversation. The user speaks naturally, and the avatar listens, processes the request, and responds with synchronized audio and video. Built-in turn detection allows the conversation to flow without requiring the user to press and hold a button to speak.&lt;/P&gt;
&lt;P data-start="488" data-end="711"&gt;The experience is powered by the &lt;STRONG data-start="521" data-end="572"&gt;Voice Live API in Azure Speech in Foundry Tools&lt;/STRONG&gt; and streamed through a persistent WebSocket connection, enabling low-latency, bidirectional communication between the user and the avatar.&lt;/P&gt;
&lt;P data-start="713" data-end="976" data-is-last-node="" data-is-only-node=""&gt;&lt;STRONG data-start="713" data-end="733"&gt;Best suited for:&lt;/STRONG&gt; live town halls, executive Q&amp;amp;A sessions, customer-support or help-desk kiosks, and other scenarios where responsiveness and a natural conversational experience are more important than extensive customization of the underlying reasoning model.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;Scripted Avatar&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="952" data-end="1244"&gt;This is a text-first interaction mode. The user enters a message or the system provides a predefined script and a language model generates the response. That text is then sent to Azure Speech in Foundry Tools, where text to speech (TTS) produces the avatar’s voice and lip-synchronized video.&lt;/P&gt;
&lt;P data-start="1249" data-end="1491"&gt;The Web Real-Time Communication (WebRTC) session remains open throughout the interaction, so each new message requires only a lightweight text exchange followed by a speakTextAsync call, without establishing a new connection for every turn.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Best for:&lt;/STRONG&gt; onboarding walkthroughs, policy explainers, FAQ bots, and scenarios where you want the flexibility to swap the underlying reasoning model based on cost, latency, or data-residency needs.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Model: MiniMax M2.5 via Fireworks AI, deployed through Microsoft Foundry, generates the text response. The response is then sent to Azure Speech in Foundry Tools to produce the avatar’s voice (TTS) and lip synchronization.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H1&gt;3. Models and Azure Services in the Stack&lt;/H1&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Capability&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Service / Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Used by&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Real-time speech-to-speech reasoning&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Voice Live API in Azure Speech in Foundry Tools, using GPT-4o or GPT-5 through Microsoft Foundry&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Live Interaction tab&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Text chat completion (avatar's "brain")&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;MiniMax M2.5 (FW-MiniMax-M2.5) via &lt;STRONG&gt;Fireworks AI&lt;/STRONG&gt;, deployed through Microsoft Foundry&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Scripted Avatar tab&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Lip-synced video + speech rendering&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Avatar in Azure Speech in Foundry Tools for batch and real-time synthesis&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Both modes&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Authentication&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Entra ID&lt;/STRONG&gt; (DefaultAzureCredential) — no static API keys&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;All model calls&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The key architectural decision is that the reasoning layer is pluggable. The backend exposes a single CHAT_MODEL_PROVIDER setting that routes each scripted-avatar chat completion to one of the supported model providers.&lt;/P&gt;
&lt;P&gt;if settings.CHAT_MODEL_PROVIDER == "minimax":&lt;/P&gt;
&lt;P&gt;# Open-model path: MiniMax M2.5 via Fireworks AI, # deployed through Microsoft Foundry&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; client = get_minimax_client()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response = await client.chat.completions.create(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model=settings.MINIMAX_DEPLOYMENT, messages=messages, ...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR /&gt;else:&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;# Frontier-model path: GPT-4o via Microsoft Foundry&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; client = get_client()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; response = await client.chat.completions.create(&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model=settings.AZURE_OPENAI_DEPLOYMENT, messages=messages, ...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;Both model providers expose the same OpenAI-compatible chat.completions interface, allowing the rest of the pipeline including persona system prompts, conversation history, and avatar rendering to remain independent of the model generating the response. This interoperability makes the cost-and-performance trade-off described in the next section a simple configuration change rather than an architectural redesign.&lt;/P&gt;
&lt;H1&gt;4. The Trade-Off: Open Models via Fireworks AI vs. Frontier Models&lt;/H1&gt;
&lt;P&gt;Why route some workloads to an open model when GPT-4o is available through Microsoft Foundry? In practice, three considerations stand out.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fast inference&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="247" data-end="614"&gt;Fireworks AI provides high-throughput, low-latency inference infrastructure for open models. For short, persona-specific responses—such as HR, IT, or policy-related answers—MiniMax M2.5 can provide a strong balance of latency, quality, and cost. Narrowly scoped tasks may not always require the full reasoning capabilities of a larger, general-purpose frontier model.&lt;/P&gt;
&lt;P data-start="247" data-end="614"&gt;&lt;STRONG&gt;Fine-tuning and ownership of your own model &amp;amp; Intelligence&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="676" data-end="987"&gt;This is the strategic differentiator. Frontier models are typically optimized through prompt engineering, system instructions, retrieval, and supported customization capabilities. With an open model deployed through Microsoft Foundry and served by Fireworks AI, organizations can gain additional flexibility to:&lt;/P&gt;
&lt;UL data-start="989" data-end="1458"&gt;
&lt;LI data-section-id="knbsg7" data-start="989" data-end="1100"&gt;Fine-tune the model using approved proprietary conversation data, policy content, or brand-specific examples.&lt;/LI&gt;
&lt;LI data-section-id="qecgvm" data-start="1101" data-end="1209"&gt;Adapt domain-specific behavior, such as a precise HR-policy tone or specialized customer-support workflow.&lt;/LI&gt;
&lt;LI data-section-id="l0x8ca" data-start="1210" data-end="1310"&gt;Iterate on model behavior without depending entirely on a frontier model provider’s release cycle.&lt;/LI&gt;
&lt;LI data-section-id="1iwjjfz" data-start="1311" data-end="1458"&gt;Retain greater control over the customized model and its long-term deployment strategy, subject to the model’s license and platform capabilities.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1460" data-end="1651"&gt;The open-model path is therefore not simply a lower-cost alternative. It can help organizations build a continuously improving intelligence asset tailored to their data, workflows, and brand.&lt;/P&gt;
&lt;P data-section-id="dsy0k" data-start="1653" data-end="1688"&gt;&lt;STRONG&gt;The Other Side of the Trade-Off&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="1690" data-end="1790"&gt;Open models also come with trade-offs. Frontier models such as GPT-4o generally remain stronger for:&lt;/P&gt;
&lt;UL data-start="1792" data-end="2027"&gt;
&lt;LI data-section-id="9a9s92" data-start="1792" data-end="1860"&gt;Complex, multi-step reasoning and ambiguous instruction following.&lt;/LI&gt;
&lt;LI data-section-id="1n76lsu" data-start="1861" data-end="1922"&gt;Broad knowledge without additional adaptation or grounding.&lt;/LI&gt;
&lt;LI data-section-id="eeexgo" data-start="1923" data-end="2027"&gt;Advanced multimodal experiences, including the real-time audio interaction used by the Voice Live API.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="2029" data-end="2274" data-is-last-node="" data-is-only-node=""&gt;That is why the platform supports both paths. Rather than choosing one model for every workload, the architecture allows each experience to use the model that best meets its requirements for capability, latency, cost, customization, and control.&lt;/P&gt;
&lt;P data-start="2029" data-end="2274"&gt;&lt;STRONG&gt;The trade-off side&lt;/STRONG&gt;&lt;/P&gt;
&lt;P data-start="0" data-end="82"&gt;Frontier models such as GPT-4o still offer important advantages, particularly for:&lt;/P&gt;
&lt;UL data-start="84" data-end="451"&gt;
&lt;LI data-section-id="1ao2blw" data-start="84" data-end="143"&gt;Complex, multi-step reasoning and ambiguous instructions.&lt;/LI&gt;
&lt;LI data-section-id="1um1lh1" data-start="144" data-end="224"&gt;Broad knowledge without requiring additional fine-tuning or domain adaptation.&lt;/LI&gt;
&lt;LI data-section-id="2tfz5j" data-start="225" data-end="451"&gt;Advanced multimodal experiences, including the real-time audio reasoning used by the Voice Live API in Azure Speech in Foundry Tools—an area where many open models have not yet reached the same level of production readiness.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="453" data-end="684" data-is-last-node="" data-is-only-node=""&gt;That is precisely why the platform supports both paths instead of selecting a single model for every workload. This allows each use case to be matched with the right balance of capability, cost, latency, customization, and control.&lt;/P&gt;
&lt;H1&gt;5. Cost Differences at Scale&lt;/H1&gt;
&lt;P&gt;Token costs can compound quickly when an avatar platform is deployed across an organization, supporting thousands of daily conversations across HR, IT, onboarding, and other employee-service scenarios. The comparison below uses publicly available list pricing from the Microsoft Foundry pricing page and Fireworks AI’s serverless pricing documentation, verified at the time of writing. Always confirm the latest pricing before building a business case, as rates and service tiers may change.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Model&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Input ($ / 1M tokens)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Cached input ($ / 1M tokens)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Output ($ / 1M tokens)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Foundry GPT-4o (Global)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$2.50&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$1.25&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$10.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Foundry GPT-5 (Global)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$1.25&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$0.13&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$10.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Fireworks MiniMax (Standard serverless tier)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$0.30&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$0.06&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$1.20&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Fireworks MiniMax (Priority serverless tier)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$0.45&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$0.09&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$1.80&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Worked example — 50M input tokens + 10M output tokens in a month&lt;/STRONG&gt; (a realistic volume for an org-wide FAQ/onboarding avatar handling tens of thousands of short conversations):&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Foundry GPT-4o&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Foundry GPT-5&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;MiniMax M2.5 via Fireworks AI, deployed through Microsoft Foundry (Standard)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Input cost (50M tokens)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$125.00&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$62.50&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$15.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Output cost (10M tokens)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$100.00&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$100.00&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$12.00&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Total / month&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;$225.00&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;$162.50&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;$27.00&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Relative to Foundry GPT-4o&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;100%&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;72%&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;~12%&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.0186%" /&gt;&lt;col style="width: 25.0186%" /&gt;&lt;col style="width: 25.0186%" /&gt;&lt;col style="width: 25.0186%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P data-start="612" data-end="1016"&gt;At this volume, routing scripted-avatar text generation through MiniMax M2.5 via Fireworks AI, deployed through Microsoft Foundry, costs approximately &lt;STRONG data-start="763" data-end="775"&gt;88% less&lt;/STRONG&gt; than using Foundry GPT-4o for the text-generation portion of the pipeline. As usage grows to more than 500 million tokens per month across a large enterprise deployment, the difference can become a meaningful operating-budget consideration.&lt;/P&gt;
&lt;P data-start="1018" data-end="1246"&gt;This comparison does &lt;STRONG data-start="1039" data-end="1046"&gt;not&lt;/STRONG&gt; include avatar-rendering costs in Azure Speech in Foundry Tools, including text-to-speech and video synthesis. These costs apply separately, regardless of which language model generates the response.&lt;/P&gt;
&lt;P data-start="1248" data-end="1581" data-is-last-node="" data-is-only-node=""&gt;The comparison also excludes live spoken sessions powered by the Voice Live API in Azure Speech in Foundry Tools using GPT-4o through Microsoft Foundry. Voice Live is priced separately and is not part of this comparison because MiniMax M2.5 supports the scripted text-generation path rather than the real-time audio interaction path.&lt;/P&gt;
&lt;H1&gt;Get Started&lt;/H1&gt;
&lt;P&gt;Everything described in this post—including dual-model routing, WebRTC-based avatar rendering, and MCP server integration—is available as open-source code that you can clone and run today.&lt;/P&gt;
&lt;P&gt;&lt;STRONG data-start="206" data-end="228"&gt;GitHub repository:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;# Clone the repository&lt;/P&gt;
&lt;P&gt;git clone https://github.com/ganachan/ai-executive-avatar-platform.git&lt;/P&gt;
&lt;P&gt;cd ai-executive-avatar-platform&lt;/P&gt;
&lt;P&gt;# Configure environment variables&lt;/P&gt;
&lt;P&gt;cp backend/.env.example backend/.env # Add your Azure resource details&lt;/P&gt;
&lt;P&gt;cp frontend/.env.example frontend/.env&lt;/P&gt;
&lt;P&gt;# Install and run the FastAPI backend&lt;/P&gt;
&lt;P&gt;cd backend&lt;/P&gt;
&lt;P&gt;pip install -r requirements.txt&lt;/P&gt;
&lt;P&gt;uvicorn main:app --reload --port 8000&lt;/P&gt;
&lt;P&gt;# In a second terminal, install and run the Next.js frontend&lt;/P&gt;
&lt;P&gt;cd frontend&lt;/P&gt;
&lt;P&gt;npm install&lt;/P&gt;
&lt;P&gt;npm run dev&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Prerequisites:&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-section-id="1qtccqt" data-start="809" data-end="830"&gt;Node.js 18 or later&lt;/LI&gt;
&lt;LI data-section-id="1uq9vzm" data-start="831" data-end="853"&gt;Python 3.11 or later&lt;/LI&gt;
&lt;LI data-section-id="zsvxqk" data-start="854" data-end="930"&gt;An Azure subscription with Avatar enabled in Azure Speech in Foundry Tools&lt;/LI&gt;
&lt;LI data-section-id="1wamz67" data-start="931" data-end="999"&gt;A Microsoft Foundry resource with GPT-4o and MiniMax M2.5 deployed&lt;/LI&gt;
&lt;LI data-section-id="17ijcqb" data-start="1000" data-end="1139"&gt;Azure CLI authentication configured through az login for Microsoft Entra ID authentication; static API keys are not required by default&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-start="1141" data-end="1278"&gt;Switching the reasoning model for your deployment requires only a one-line configuration change in backend/config.py or backend/.env:&lt;/P&gt;
&lt;P&gt;# Route scripted-avatar chat through MiniMax M2.5 via Fireworks AI, # deployed through Microsoft Foundry CHAT_MODEL_PROVIDER=minimax # ...or use GPT-4o via Microsoft Foundry CHAT_MODEL_PROVIDER=azure&lt;/P&gt;
&lt;P data-start="1494" data-end="1669" data-is-last-node="" data-is-only-node=""&gt;Fork the repository, connect it to your own Azure resources, and customize the avatar personas, system prompts, knowledge sources, and fine-tuned models for your organization.&lt;/P&gt;
&lt;H2 data-section-id="13i3hxv" data-start="0" data-end="62"&gt;Summary: Open Models as Workflow Partners, Not Replacements&lt;/H2&gt;
&lt;P data-start="64" data-end="256"&gt;The key lesson from building this platform is not that open models outperform frontier models. It is that both belong in the same workflow, with each model routed to the tasks it handles best.&lt;/P&gt;
&lt;P data-start="258" data-end="545"&gt;Use frontier models such as GPT-4o or GPT-5 through Microsoft Foundry when an interaction requires advanced reasoning, multimodal understanding, or real-time speech-to-speech fluency—such as the natural spoken conversations enabled by the Voice Live API in Azure Speech in Foundry Tools.&lt;/P&gt;
&lt;P data-start="547" data-end="978"&gt;Use a fine-tuned open model such as MiniMax M2.5 via Fireworks AI, deployed through Microsoft Foundry, for high-volume, persona-specific, and cost-sensitive text interactions. These include FAQ and policy-related experiences in the Scripted Avatar mode, where organizations may also want greater control over model customization and the option to fine-tune using their approved data, subject to licensing and platform capabilities.&lt;/P&gt;
&lt;P data-start="980" data-end="1176"&gt;Because both model paths use the same OpenAI-compatible interface and are controlled through a single configuration setting, this is not merely a conceptual hybrid architecture. Switching between:&lt;/P&gt;
&lt;P&gt;CHAT_MODEL_PROVIDER=minimax&lt;/P&gt;
&lt;P data-start="1219" data-end="1223"&gt;and:&lt;/P&gt;
&lt;P&gt;CHAT_MODEL_PROVIDER=azure&lt;/P&gt;
&lt;P data-start="1264" data-end="1399"&gt;makes it possible to compare cost, latency, and response quality side by side using the same avatar, persona, and application workflow.&lt;/P&gt;
&lt;P data-start="1401" data-end="1644"&gt;As avatar and agent platforms scale across the enterprise, this pattern—frontier models for complex interactions and customized open models for high-volume workloads—is likely to become a common architectural approach rather than an exception.&lt;/P&gt;
&lt;P data-start="1646" data-end="1922"&gt;Built using &lt;STRONG data-start="1658" data-end="1728"&gt;Azure Speech in Foundry Tools, Microsoft Foundry, and Fireworks AI&lt;/STRONG&gt;. Have questions about the architecture or want to explore the implementation? Share your questions in the comments or clone the repository linked above and try it with your own Azure resources.&lt;/P&gt;
&lt;P data-start="1924" data-end="2082" data-is-last-node="" data-is-only-node=""&gt;Thank you, &lt;STRONG data-start="1935" data-end="1954"&gt;Binaka Sankaran&lt;/STRONG&gt;, for volunteering to record the source video used to create the avatar and for helping us scale and accelerate this initiative.&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jul 2026 14:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/executive-ai-avatar-platform-on-azure-frontier-intelligence/ba-p/4541301</guid>
      <dc:creator>Gana_Chandrasekaran</dc:creator>
      <dc:date>2026-07-29T14:00:00Z</dc:date>
    </item>
    <item>
      <title>Introducing Kimi K3 through Fireworks AI on Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-kimi-k3-through-fireworks-ai-on-microsoft-foundry/ba-p/4540187</link>
      <description>&lt;P&gt;Need to process entire codebases, lengthy legal documents, or hours of meeting transcripts in a single prompt? Kimi K3's 1 million-token context window—one of the largest available—is now deployable on Microsoft Foundry through Fireworks AI. Here's what that massive context means for your applications.&lt;/P&gt;
&lt;H3&gt;What makes Kimi K3 Different&lt;/H3&gt;
&lt;P&gt;Kimi K3 is an open-weight model from Moonshot AI featuring 2.8 trillion parameters—making it one of the largest open models available. Its 1 million-token context window means you can process approximately 750,000 words (roughly 10 full novels or an entire codebase) in a single request. Fireworks AI provides the optimized inference infrastructure, while Microsoft Foundry handles enterprise deployment and governance.&lt;/P&gt;
&lt;H3&gt;Use Cases&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Full repository code analysis&lt;/STRONG&gt;: Analyze entire codebases for security vulnerabilities or refactoring opportunities. For example, you could pass your entire Node.js application (package.json, all source files, and dependencies) in a single prompt and ask Kimi K3 to identify unused imports, potential SQL injection points, or suggest architectural improvements—no chunking or retrieval augmentation required.'&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Long-document summarization&lt;/STRONG&gt;: Process legal contracts, research papers, or compliance documents without chunking&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Extended conversation memory&lt;/STRONG&gt;: Build chatbots that remember entire conversation histories&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Pricing and Deployment&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Model Name&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Deployment Type&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Input/1M tokens&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Output/1M tokens&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Cached Input/1M tokens&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;FW Kimi K3&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&amp;nbsp;Data Zone&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$3.30&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$16.50&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;$0.33&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Customers can deploy Kimi K3 in Microsoft Foundry via Fireworks, subject to applicable availability, deployment, and pricing terms.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Get Started Today&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Deploy &lt;A class="lia-external-url" href="https://ai.azure.com/catalog/models/FW-Kimi-K3" target="_blank" rel="noopener"&gt;Kimi K3 through Fireworks&lt;/A&gt; in Foundry today.&lt;/LI&gt;
&lt;LI&gt;Compare models:&amp;nbsp;&lt;A class="lia-external-url" href="https://ai.azure.com/catalog" target="_blank"&gt;Browse all Foundry Models&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Learn more about&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/foundry/how-to/fireworks/enable-fireworks-models" target="_blank"&gt;Fireworks in Foundry&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Jul 2026 17:34:17 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-kimi-k3-through-fireworks-ai-on-microsoft-foundry/ba-p/4540187</guid>
      <dc:creator>davevoutila</dc:creator>
      <dc:date>2026-07-28T17:34:17Z</dc:date>
    </item>
    <item>
      <title>One agent, three runtimes: porting a CSA agent to Microsoft Scout and Foundry Local</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/one-agent-three-runtimes-porting-a-csa-agent-to-microsoft-scout/m-p/4541628#M1507</link>
      <description>&lt;P&gt;Most of my posts here are about Azure infrastructure lessons from customer engagements. This one is a little different — it's a real‑world engineering lesson from something I built to run &lt;STRONG&gt;my own&lt;/STRONG&gt; practice.&lt;/P&gt;
&lt;P&gt;In my role as a Senior Cloud Solution Architect (CSA), I'm part of a grass-roots organic development team for an internal persona‑driven productivity agent called &lt;STRONG&gt;CSA‑Sherpa&lt;/STRONG&gt;. It runs my daily rhythm: a morning briefing, a running logbook of wins and blockers, pipeline and timekeeping summaries, and reporting/exports. It started life in the &lt;STRONG&gt;&lt;A href="https://docs.github.com/en/copilot/concepts/agents/copilot-cli/about-copilot-cli" target="_blank"&gt;GitHub Copilot CLI&lt;/A&gt;&lt;/STRONG&gt;. But over the last few months two things changed the ground under it: &lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/microsoft-scout/overview" target="_blank"&gt;Microsoft Scout&lt;/A&gt;&lt;/STRONG&gt; arrived as a managed cloud agent with native tooling, scheduling, and memory; and &lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/azure/foundry-local/what-is-foundry-local" target="_blank"&gt;Foundry Local&lt;/A&gt;&lt;/STRONG&gt; made it realistic to run a capable model &lt;STRONG&gt;entirely on‑device&lt;/STRONG&gt; on a Copilot+ PC's NPU — no cloud round‑trip at all.&lt;/P&gt;
&lt;P&gt;That raised a question I think a lot of people building agents will eventually ask:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;If I designed the framework well, can I change how the model runs without rewriting the agent?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To find out, I stood the same agent up in &lt;STRONG&gt;three runtimes&lt;/STRONG&gt;, then wrote a whitepaper and a comparison deck measuring what actually changed. This post explains:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;How one shared, &lt;STRONG&gt;deterministic core&lt;/STRONG&gt; made three very different runtimes comparable&lt;/LI&gt;
&lt;LI&gt;What the three ports — &lt;STRONG&gt;Copilot CLI&lt;/STRONG&gt;, &lt;STRONG&gt;Scout‑native&lt;/STRONG&gt;, and &lt;STRONG&gt;Foundry Local (on‑device NPU)&lt;/STRONG&gt; — actually took&lt;/LI&gt;
&lt;LI&gt;What the analysis showed, and a simple &lt;STRONG&gt;decision framework&lt;/STRONG&gt; for which runtime to use when&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The part that stayed the same: a deterministic core&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The whole exercise only works because all three implementations load the &lt;STRONG&gt;same behavioral core&lt;/STRONG&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Agent definition&lt;/STRONG&gt; — persona, behavioral rules, intent routing, workflow dispatch&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Instructions&lt;/STRONG&gt; — conventions, session bootstrap, change‑management rules&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Skill library&lt;/STRONG&gt; — one procedure file per workflow (morning briefing, logbook, pipeline, timekeeping, impact, ops, export…)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;A deterministic validation contract&lt;/STRONG&gt; — schema, formatting, and privacy validators plus a post‑save enforcement chain&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;That last point is the whole thesis: &lt;STRONG&gt;reliability belongs in code, not in the prompt.&lt;/STRONG&gt; Rather than asking the model to "remember" to validate its output, a real gate (a validation step → a post‑save enforcement chain → index regeneration) enforces it every single run. This wasn't my idea in a vacuum — it follows the enterprise prompt‑engineering principles &lt;STRONG&gt;Kathiravan Thangavelu&lt;/STRONG&gt; lays out in his article &lt;EM&gt;&lt;A href="https://www.linkedin.com/pulse/prompt-engineering-enterprise-ai-why-reliability-thangavelu-1fhlc/" target="_blank"&gt;Prompt Engineering for Enterprise AI: Why Reliability Matters&lt;/A&gt;&lt;/EM&gt;: keep deterministic logic in code, prefer schema‑driven / structured output over prompt‑enforced formatting, and replace "before you answer, verify that…" &lt;STRONG&gt;mental checklists&lt;/STRONG&gt; with real machine validation. My validation gate is that principle in practice. And because that contract is &lt;STRONG&gt;identical&lt;/STRONG&gt; across all three runtimes, I'm comparing three ways to &lt;EM&gt;execute&lt;/EM&gt; one product — not three different products.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The deterministic payoff: faster and cheaper&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Retrofitting those principles into the agent — moving work out of the model and into deterministic scripts — is the single change that paid off the most, on &lt;STRONG&gt;two&lt;/STRONG&gt; axes at once:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Faster.&lt;/STRONG&gt; Letting code (not the model) gather and aggregate history cut the average &lt;STRONG&gt;model round‑trips per workflow from ~8.7 to ~5.5&lt;/STRONG&gt; — roughly a &lt;STRONG&gt;third fewer turns&lt;/STRONG&gt;. Fewer turns means less waiting on generation and less back‑and‑forth to finish a task.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cheaper.&lt;/STRONG&gt; The same change cut usage‑based cost &lt;STRONG&gt;~24%&lt;/STRONG&gt; — and, more importantly, held it &lt;STRONG&gt;flat as the logbook grew&lt;/STRONG&gt; to hundreds of entries, because scripts carry the history the model used to re‑read every run.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;That's the quiet lesson: the reliability work I did for &lt;EM&gt;correctness&lt;/EM&gt; turned out to be the same work that made the agent &lt;STRONG&gt;quicker and less expensive&lt;/STRONG&gt;. Determinism isn't a tax on speed — here it bought all three.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The work: three repositories, three runtimes&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Everything &lt;STRONG&gt;below&lt;/STRONG&gt; the core — runtime, data access, governance, file layout — is where the effort went.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1 · Mainline — Copilot CLI + MCP.&lt;/STRONG&gt; The upstream, most feature‑complete build. Runs as a primary agent in the GitHub Copilot CLI on &lt;STRONG&gt;Claude Opus 4.8&lt;/STRONG&gt;; data services are discovered through MCP. It carries the heaviest governance: a &lt;STRONG&gt;Spec Kit&lt;/STRONG&gt; layer (spec‑driven‑development agents, a constitution + templates, and 50+ per‑feature spec artifacts gated at PR time) plus an &lt;STRONG&gt;add‑on framework&lt;/STRONG&gt;. The richest architecture — and the most complex to operate.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2 · Scout‑native.&lt;/STRONG&gt; A thin wrapper loads the exact same core onto Microsoft Scout — again on &lt;STRONG&gt;Claude Opus 4.8&lt;/STRONG&gt; — but data access is re‑platformed onto &lt;STRONG&gt;Scout's native tooling&lt;/STRONG&gt; instead of MCP subprocesses. No broker to configure; native tools negotiate their own auth. It adds two things the CLI can't do as cleanly:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;✅ &lt;STRONG&gt;Scheduled automations&lt;/STRONG&gt; — my morning briefing fires automatically on weekday mornings&lt;/LI&gt;
&lt;LI&gt;✅ &lt;STRONG&gt;Cross‑session memory&lt;/STRONG&gt; in place of hand‑off files&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The deterministic finalize gate stays fully intact.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3 · Foundry Local — on‑device NPU.&lt;/STRONG&gt; The genuine outlier and the most involved port: a &lt;STRONG&gt;Python re‑implementation&lt;/STRONG&gt; that runs the model — &lt;STRONG&gt;qwen2.5‑7b&lt;/STRONG&gt;, an open ~7‑billion‑parameter model — &lt;STRONG&gt;100% locally&lt;/STRONG&gt; on the device's NPU (a Snapdragon X Elite Copilot+ PC) via Foundry Local's OpenAI‑compatible server. The agent loop, an MCP client, skill loading, and a distinct finalize pipeline all had to be rebuilt outside the CLI. The &lt;STRONG&gt;model never leaves the machine&lt;/STRONG&gt;; only data connectors reach out when connected. The trade‑offs are real — modest throughput and a fixed context window — but so is the payoff: &lt;STRONG&gt;offline, private, near‑zero marginal cost.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The effort&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This wasn't a weekend spike. Across the three code bases (plus a clean isolation clone I kept as an A/B baseline):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;~340–380 commits per repository&lt;/STRONG&gt;, three versions maintained in parallel&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;17 skills&lt;/STRONG&gt; in each cloud build; &lt;STRONG&gt;18&lt;/STRONG&gt; in the Foundry port&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;~37 scripts&lt;/STRONG&gt; in the streamlined Scout build, up to &lt;STRONG&gt;~97&lt;/STRONG&gt; in the governed Mainline build&lt;/LI&gt;
&lt;LI&gt;A &lt;STRONG&gt;Spec Kit&lt;/STRONG&gt; governance layer with 50+ feature specs on Mainline&lt;/LI&gt;
&lt;LI&gt;A &lt;STRONG&gt;four‑part cost study&lt;/STRONG&gt; and two written deliverables: an architecture &lt;STRONG&gt;whitepaper&lt;/STRONG&gt; and a &lt;STRONG&gt;20‑slide comparison deck&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The analysis and reporting&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The whitepaper and deck do two jobs. First, they document each runtime as a &lt;STRONG&gt;layered diagram&lt;/STRONG&gt; — runtime, core, skills, scripting/validation, external services — so the differences are visible at a glance. Second, they convert the architecture fork into &lt;STRONG&gt;economics&lt;/STRONG&gt;: a study that measured the actual token footprints of each repo and priced runs across billing models and hardware. The four dimensions: &lt;STRONG&gt;per‑skill cost&lt;/STRONG&gt;, &lt;STRONG&gt;optimized‑vs‑out‑of‑the‑box&lt;/STRONG&gt;, &lt;STRONG&gt;Copilot CLI vs Scout&lt;/STRONG&gt;, and &lt;STRONG&gt;cloud vs local NPU&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;By the numbers&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The study priced measured token footprints at frontier‑model rates (treat the dollars as ±30% — the &lt;EM&gt;relative&lt;/EM&gt; conclusions are far more robust than the absolute figures):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Per skill:&lt;/STRONG&gt; roughly &lt;STRONG&gt;$0.6–$1.4 per run&lt;/STRONG&gt; usage‑based — or a single flat "premium request" under request‑based billing&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The determinism dividend:&lt;/STRONG&gt; optimized, script‑driven skills cut model round‑trips &lt;STRONG&gt;~8.7 → ~5.5&lt;/STRONG&gt; and usage‑based cost &lt;STRONG&gt;~24%&lt;/STRONG&gt; — and held cost &lt;STRONG&gt;flat&lt;/STRONG&gt; as the logbook grew&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Scout vs CLI:&lt;/STRONG&gt; Scout ran &lt;STRONG&gt;~37% cheaper&lt;/STRONG&gt; across a five‑command session and consumed &lt;STRONG&gt;none&lt;/STRONG&gt; of the premium‑request allowance&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cloud vs local:&lt;/STRONG&gt; on‑device NPU inference came in &lt;STRONG&gt;50–3,400× cheaper in cash&lt;/STRONG&gt; than cloud — at the cost of throughput, context, and first‑pass reliability&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;A full active day&lt;/STRONG&gt; (~4 runs) landed around &lt;STRONG&gt;a few dollars&lt;/STRONG&gt; usage‑based&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The headline isn't any single figure — it's the shape: cloud cents buy first‑pass reliability, on‑device near‑zero cost trades your time, and determinism makes either one cheaper and steadier.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What held up&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;The core is portable.&lt;/STRONG&gt; The same agent, skills, and validation gate ran under all three runtimes. Good separation of concerns paid off.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Determinism pays three ways&lt;/STRONG&gt; — faster, cheaper, &lt;EM&gt;and&lt;/EM&gt; more reliable (detailed above). It was the highest‑leverage change I made.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Managed cloud wins the day job.&lt;/STRONG&gt; Scout is the best daily driver: reliability gate intact, lower setup friction, scheduling + memory, and cheaper across a multi‑command session because it caches the bootstrap.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;On‑device is strategic — but reliability is the tax.&lt;/STRONG&gt; Local NPU inference is dramatically cheaper in cash. We ran an &lt;STRONG&gt;in‑depth test pass across every function&lt;/STRONG&gt; and closed the gaps it surfaced — yet the smaller model that makes Foundry Local possible still &lt;STRONG&gt;hallucinates and drops instructions&lt;/STRONG&gt; often enough on the first pass to matter. Each re‑run is nearly free in dollars, but it costs &lt;STRONG&gt;real time&lt;/STRONG&gt; to catch and correct.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The winning pattern is hybrid.&lt;/STRONG&gt; Draft and triage locally for ~nothing; escalate the correctness‑critical steps to cloud &lt;STRONG&gt;Opus 4.8&lt;/STRONG&gt;, paying only where it buys first‑pass reliability.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Three runtimes, side by side&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;EM&gt;Figure: Three runtimes, one shared core. Only the top rows — runtime, model, data access, and governance — differ; the behavioral core, skill library, validation gate, and outputs are identical across all three.&lt;/EM&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Capability&lt;/th&gt;&lt;th&gt;Mainline (Copilot CLI)&lt;/th&gt;&lt;th&gt;Scout‑native&lt;/th&gt;&lt;th&gt;Foundry Local (NPU)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Runtime&lt;/td&gt;&lt;td&gt;Copilot CLI (cloud)&lt;/td&gt;&lt;td&gt;Scout (cloud, managed)&lt;/td&gt;&lt;td&gt;On‑device NPU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Model&lt;/td&gt;&lt;td&gt;Claude Opus 4.8&lt;/td&gt;&lt;td&gt;Claude Opus 4.8&lt;/td&gt;&lt;td&gt;qwen2.5‑7b (open, ~7B)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Data access&lt;/td&gt;&lt;td&gt;MCP&lt;/td&gt;&lt;td&gt;Native tools&lt;/td&gt;&lt;td&gt;MCP via local client&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Governance&lt;/td&gt;&lt;td&gt;Spec Kit + PR gate&lt;/td&gt;&lt;td&gt;Behavioral rules&lt;/td&gt;&lt;td&gt;Behavioral rules&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scheduling + memory&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Runs fully offline&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;❌&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Marginal cost / run&lt;/td&gt;&lt;td&gt;cloud per‑token&lt;/td&gt;&lt;td&gt;cloud per‑token (cheaper/session)&lt;/td&gt;&lt;td&gt;≈ free&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Best for&lt;/td&gt;&lt;td&gt;Framework development&lt;/td&gt;&lt;td&gt;Daily production&lt;/td&gt;&lt;td&gt;Offline / privacy / bulk&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;When to use each&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Daily CSA workflows →&lt;/STRONG&gt; &lt;EM&gt;Scout‑native.&lt;/EM&gt; Managed, cheaper across a session, reliable, and it doesn't burn your Copilot request allowance.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Building or versioning the framework →&lt;/STRONG&gt; &lt;EM&gt;Mainline.&lt;/EM&gt; Spec Kit governance and the add‑on system earn their keep here.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Offline, air‑gapped, or sensitive data →&lt;/STRONG&gt; &lt;EM&gt;Foundry Local.&lt;/EM&gt; 100% on‑device inference.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Bulk / high‑volume / non‑critical →&lt;/STRONG&gt; &lt;EM&gt;Foundry Local.&lt;/EM&gt; Zero marginal cost.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Must be right on the first pass →&lt;/STRONG&gt; &lt;EM&gt;Cloud Opus 4.8.&lt;/EM&gt; The cents are worth it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Mixed, cost‑sensitive workload →&lt;/STRONG&gt; &lt;EM&gt;Hybrid.&lt;/EM&gt; Local draft → cloud escalate.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Closing Thoughts&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The most useful reframe from this work: the three architectures aren't competitors — they're a &lt;STRONG&gt;portfolio&lt;/STRONG&gt;. A managed cloud daily‑driver (Scout), a governed development platform (Mainline), and a sovereign on‑device runtime (Foundry Local). The job is to match the runtime to the task, not to crown one winner.&lt;/P&gt;
&lt;P&gt;And the same lesson that applies to Azure infrastructure applies to agents: &lt;STRONG&gt;build reliability into the system, not into good intentions.&lt;/STRONG&gt; Because CSA‑Sherpa keeps its guarantees in code, I could change the entire execution model underneath it — cloud CLI, managed cloud, on‑device NPU — and the agent still behaved the same way. That portability is the dividend of a deterministic design.&lt;/P&gt;
&lt;P&gt;These workflows are genuinely complex, and that's exactly where the small model shows its limits: even after closing the gaps our testing surfaced, it still &lt;STRONG&gt;hallucinates and drops instructions&lt;/STRONG&gt; often enough on the first pass to be a real cost. That's the honest trade‑off — near‑zero dollars, paid back in review‑and‑retry time — and it's why my recommendation lands on &lt;STRONG&gt;hybrid&lt;/STRONG&gt;: let the small model draft where it's cheap and low‑risk, and escalate anything that has to be right the first time to cloud &lt;STRONG&gt;Opus 4.8&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;I use the agent in &lt;STRONG&gt;Microsoft Scout&lt;/STRONG&gt; daily, as part of my personal production process.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;I did use AI to help draft and format this post — fittingly, the very agent it describes. The architecture, the analysis, and the conclusions are my own.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Thanks for reading.&lt;/P&gt;</description>
      <pubDate>Tue, 28 Jul 2026 16:42:03 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/one-agent-three-runtimes-porting-a-csa-agent-to-microsoft-scout/m-p/4541628#M1507</guid>
      <dc:creator>joclemen</dc:creator>
      <dc:date>2026-07-28T16:42:03Z</dc:date>
    </item>
    <item>
      <title>Microsoft Foundry External MCP Server Traffic Routing via Corporate Firewall</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/microsoft-foundry-external-mcp-server-traffic-routing-via/m-p/4541620#M1506</link>
      <description>&lt;P&gt;The customer would like to confirm whether traffic from an Azure AI Foundry agent to an external MCP server can be routed through a corporate firewall and whether this scenario is officially supported.&lt;/P&gt;
&lt;P&gt;To validate this scenario, I configured the following in my lab:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Deployed an Azure AI Foundry resource using the &lt;STRONG&gt;Standard Agent Service with network injection&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Created a dedicated subnet for the Foundry Agent Service and delegated it to Microsoft.App/environments.&lt;/LI&gt;
&lt;LI&gt;Associated a route table with the Foundry Agent subnet to route outbound traffic through Azure Firewall.&lt;/LI&gt;
&lt;LI&gt;Configured the required application and network rules on Azure Firewall.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Foundry agent is able to successfully retrieve data from the external MCP server. However, no corresponding traffic is visible in the Azure Firewall logs.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Could you please confirm whether outbound traffic from the Foundry agent to an external MCP server can be routed through Azure Firewall or a corporate firewall? Also, is this routing scenario officially supported?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Appreciate your support!&lt;/P&gt;</description>
      <pubDate>Tue, 28 Jul 2026 15:53:14 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-discussions/microsoft-foundry-external-mcp-server-traffic-routing-via/m-p/4541620#M1506</guid>
      <dc:creator>edwinpantony415</dc:creator>
      <dc:date>2026-07-28T15:53:14Z</dc:date>
    </item>
    <item>
      <title>Claude Opus 5 is available today in Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/claude-opus-5-is-available-today-in-microsoft-foundry/ba-p/4535068</link>
      <description>&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Most AI handles one task well. The harder problem is the complex workflow that spans hours. Effective enterprise AI must be capable of managing complex workflows that require planning, adaptation, and persistence over extended periods. &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;We're excited to announce that &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Claude Opus 5&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;, Anthropic's most advanced Opus model and the first Opus model in the fifth generation of Claude, is now available in &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;Microsoft Foundry&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="none"&gt;. Whether you are building agents, coding software, or automating enterprise workflows, Opus 5 is designed to work for hours, find paths around obstacles, navigate codebases like a senior engineer, and support deeper reasoning and higher accuracy. &amp;nbsp;Combined with Microsoft Foundry's enterprise platform including Foundry evaluation tools, &lt;SPAN data-contrast="auto"&gt;native security controls&lt;/SPAN&gt;, governance, and scalable deployment, organizations can confidently build and operate the next generation of AI applications. &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Navigates codebases like an engineer&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Writing a good function isn't the hard part anymore. The hard part is understanding how a change ripples through a large repository, across files, across architecture decisions someone made years ago. Claude Opus 5 is Anthropic's strongest Opus model yet for that kind of work: it navigates large codebases with the judgment of an engineer, adjusts its approach as a project evolves, and can run for hours, even overnight, on a senior engineering task, working around obstacles instead of stalling on them. &lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Builds long-running agents that can work for hours&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Many enterprise workflows cannot be completed in a single interaction. Research, software engineering, document review, and operational automation often require AI systems that can work continuously over multiple steps while responding intelligently to changing conditions.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Claude Opus 5 powers dependable long-running agents, recovering from errors, and reaching their objectives.&amp;nbsp; Opus 5 plans a workflow, adapts the plan when something breaks, and holds context across tools and subagents to see it through. Combined with Microsoft Foundry Agent Service, developers can build reliable agents that automate sophisticated business processes while maintaining enterprise governance and observability.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Transforms enterprise knowledge work&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;From precise financial workflows to professional work that runs for days, , Opus 5 is built to handle the density of that work with deeper reasoning for long documents, higher accuracy for complex analysis, and raises the bar for the practical tasks that fill a workday. It is&lt;/SPAN&gt; &lt;SPAN data-contrast="none"&gt;built for enterprise work, powering agents that run multi-day projects end-to-end, and follows instructions precisely, stays in scope, and produces professional-grade spreadsheets, slides, and docs.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559739&amp;quot;:160}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Brings deeper reasoning to financial workflows&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Financial analysis cannot tolerate shortcuts. Opus 5 is built to read a dense filing, hold a chart or table in context alongside it, and carry that thread across an entire transaction or reporting cycle, not just the page in front of it. That's the reasoning investment research, corporate finance, risk analysis, and due diligence work depend on.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215,&amp;quot;335559738&amp;quot;:240,&amp;quot;335559739&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Understands documents, charts, and visual information&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Enterprise work is increasingly visual, not just text. Critical information lives in scanned PDFs, dashboards, invoices, technical diagrams, and screenshots of systems that may never have been formally documented. Claude Opus 5 brings advanced vision capabilities to the Opus class, enabling AI to accurately understand and reason over visual content rather than simply extract text from it. Combined with Foundry IQ, which connects agents to documentation and process knowledge already embedded across your organization, AI agents can securely access, interpret, and act on enterprise data in context. Together, these capabilities provide the foundation for intelligent document processing, enterprise search, and a new generation of multimodal applications.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Automates work across multiple applications&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Claude Opus 5 is also a strong model for computer use. By combining high-resolution vision with deep reasoning, the model can interact with software interfaces and complete workflows that span multiple applications. It can navigate interfaces and execute multi-step tasks requiring planning and judgment. This opens new opportunities for automating repetitive business operations while reducing manual effort.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5&gt;&lt;SPAN data-contrast="none"&gt;Enterprise-ready AI with Microsoft Foundry&lt;/SPAN&gt;&lt;SPAN data-contrast="none"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Claude Opus 5 is Zero Data Retention compatible. Powerful models alone are not enough for production AI. Organizations also need platform capabilities to build, evaluate, secure, and scale enterprise applications.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;With Opus 5 in Microsoft Foundry, developers can:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Verdana" data-listid="1" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Verdana&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Build AI applications using Azure-native authentication, networking, billing, and governance.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1080}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Verdana" data-listid="3" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Verdana&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Evaluate model quality and compare prompts, models, and workflows before deployment.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1080}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Verdana" data-listid="4" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Verdana&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Ground AI applications with enterprise data and knowledge using Microsoft IQ.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1080}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Verdana" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Verdana&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Monitor performance and improve agents through continuous evaluation.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1080}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="●" data-font="Verdana" data-listid="2" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Verdana&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;●&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="none"&gt;Deploy production AI with the security, compliance, and operational controls enterprises expect.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335559685&amp;quot;:1080}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Microsoft Foundry gives organizations the complete platform needed to move from experimentation to production with confidence.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;335557856&amp;quot;:16777215}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="none"&gt;Opus 5 is available now in Microsoft Foundry. Start building: &lt;A class="lia-external-url" href="https://aka.ms/claude-opus-5-version-2" target="_blank"&gt;AI Model Catalog | Microsoft Foundry Models&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 24 Jul 2026 17:21:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/claude-opus-5-is-available-today-in-microsoft-foundry/ba-p/4535068</guid>
      <dc:creator>amar_badal</dc:creator>
      <dc:date>2026-07-24T17:21:19Z</dc:date>
    </item>
    <item>
      <title>Post-Stream Refinement is now generally available in Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/post-stream-refinement-is-now-generally-available-in-microsoft/ba-p/4540174</link>
      <description>&lt;P&gt;When we introduced Post-Stream Refinement in public preview earlier this year, it closed the oldest trade-off in real-time speech: you could finally keep instant streaming results&amp;nbsp;&lt;EM&gt;and&lt;/EM&gt;&amp;nbsp;get a highly accurate final transcript, with no penalty to first-token latency. A second recognition pass runs in parallel with streaming and replaces each final segment with a more accurate version once the utterance completes.&lt;/P&gt;
&lt;P&gt;Today, Post-Stream Refinement reaches general availability for Azure AI Speech in Microsoft Foundry, backed by a production SLA. Just as important, it now ships with the capabilities production transcription actually depends on:&amp;nbsp;&lt;STRONG&gt;diarization&lt;/STRONG&gt;&amp;nbsp;to preserve who said what,&amp;nbsp;&lt;STRONG&gt;phrase lists&lt;/STRONG&gt;&amp;nbsp;for your product names and domain vocabulary, and a much wider footprint of&amp;nbsp;&lt;STRONG&gt;19 locales across 22 Azure regions&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Everything you already know about Post-Stream Refinement still applies. The real-time contract is unchanged, your partial results stream exactly as before, and you enable refinement by setting a single property on your existing&amp;nbsp;SpeechConfig. What changes at GA is that the refined transcript is now production-grade and speaker-aware.&amp;nbsp;&lt;A href="https://learn.microsoft.com/azure/ai-services/speech-service/how-to-recognize-speech" target="_blank" rel="noopener"&gt;📖 Read the Documentation&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;What's new at general availability&lt;/H2&gt;
&lt;P&gt;If you have already used Post-Stream Refinement in preview, here is exactly what changes at GA, and what stays the same. The streaming path and SDK contract are untouched; the refinement pass is now production-ready and gains speaker and vocabulary features.&amp;nbsp;&lt;/P&gt;
&lt;img&gt;What's new at GA versus the public preview release. Same real-time streaming contract; production-ready refinement with new speaker and vocabulary features.&lt;/img&gt;
&lt;H2&gt;How Post-Stream Refinement works&lt;/H2&gt;
&lt;P&gt;Real-time and final results serve different needs. Partial results must appear quickly so captions, voice interfaces, and agent turn-taking stay responsive. Final results need enough context to support storage, search, summarization, and business workflows. Post-Stream Refinement runs both at once: a fast streaming pass and a deeper refinement pass over the same audio, in parallel.&lt;/P&gt;
&lt;img&gt;Both passes run in parallel — partial results stream immediately; final results are refined with broader audio context.&lt;/img&gt;
&lt;P&gt;Because the two passes share one input stream, enabling refinement does not require a second transcription job or a separate client pipeline. Your existing recognition events and partial-result handling stay exactly as they are.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Speaker attribution with diarization&lt;/H2&gt;
&lt;P&gt;New at GA, diarization is supported on the Post-Stream Refinement path, so the refined final transcript keeps its speaker labels. That makes the release a strong fit for meetings, contact centers, interviews, and any workflow where the transcript needs to identify who spoke, not just what was said. The refinement pass improves the wording, including proper nouns and named entities, while every utterance stays attributed to the right speaker.&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;Phrase lists for your vocabulary&lt;/H2&gt;
&lt;P&gt;Phrase lists let the recognizer prioritize the names and terms that matter to your application: product catalogs, medical and technical vocabulary, organization names, and acronyms that general speech models might not recognize consistently. At GA you can pair phrase lists with refinement so the second pass has both broad audio context and your domain vocabulary to draw on, which is where the largest accuracy gains on named entities show up.&lt;/P&gt;
&lt;H2&gt;Quality impact&lt;/H2&gt;
&lt;P&gt;In internal testing and partner evaluations across supported locales, Post-Stream Refinement reduced final-transcript word error rate by double-digit relative percentages compared with standard real-time transcription, with the largest gains on the hardest content: long utterances, proper nouns, and domain-specific speech. Pairing phrase lists with refinement improves named-entity accuracy further. Partial-result latency is unchanged; only the final transcript is refined.&lt;/P&gt;
&lt;img&gt;Relative improvement versus standard real-time transcription. Gains vary by locale, acoustic conditions, and content type.&lt;/img&gt;
&lt;P&gt;The refined final result may add a small amount of latency to the final segment because refinement happens after the segment audio is received. Partial results are unaffected.&lt;/P&gt;
&lt;H2&gt;Supported languages and regions&lt;/H2&gt;
&lt;P&gt;General availability supports 19 locales. You declare one locale per session, so the service is tuned to the language you expect. Alongside the Tier-1 languages, GA adds Indic locales, including Bengali, Marathi, Punjabi, and Telugu.&lt;/P&gt;
&lt;img&gt;19 supported locales at GA. Declare one locale per session.&lt;/img&gt;
&lt;P&gt;Post-Stream Refinement is generally available in 22 Azure regions across the Americas, Europe, and Asia Pacific.&lt;/P&gt;
&lt;img&gt;Generally available in 22 Azure regions across the Americas, Europe, and Asia Pacific.&lt;/img&gt;
&lt;H2&gt;Proven at Microsoft scale&lt;/H2&gt;
&lt;P&gt;The technology behind Post-Stream Refinement already powers meeting transcription and Microsoft 365 Copilot experiences in Microsoft Teams, serving millions of users across meetings, webinars, and live events every day. General availability brings the same quality bar to every Azure AI Speech customer through a supported SDK integration, not a research prototype.&lt;/P&gt;
&lt;P&gt;Preview customers across industries, including automotive, consumer electronics, and aviation, reported positive gains in transcription quality, with the clearest improvements on the hardest content: proper nouns, long-form speech, and domain-specific audio. Several are now moving those workloads into production on the GA release.&lt;/P&gt;
&lt;H2&gt;Get started&lt;/H2&gt;
&lt;P&gt;Enabling Post-Stream Refinement is a small configuration change on your existing&amp;nbsp;SpeechConfig. You will need:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Speech SDK 1.50 or later.&lt;/STRONG&gt;&amp;nbsp;Earlier versions do not support the refinement path.&lt;/LI&gt;
&lt;LI&gt;A&amp;nbsp;&lt;STRONG&gt;Speech resource&lt;/STRONG&gt;&amp;nbsp;in one of the supported regions listed above.&lt;/LI&gt;
&lt;LI&gt;The&amp;nbsp;&lt;STRONG&gt;session locale&lt;/STRONG&gt;&amp;nbsp;you expect, set on the recognizer.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Set the post-processing option to PostRefinement. The example below also shows the optional phrase list for your domain vocabulary.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import azure.cognitiveservices.speech as speechsdk

speech_config = speechsdk.SpeechConfig(
    subscription="YourSpeechKey",
    region="YourSpeechRegion")

# Declare one locale for the session
speech_config.speech_recognition_language = "en-US"

# 1) Refine the final transcript (Post-Stream Refinement)
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement")

audio_config = speechsdk.AudioConfig(use_default_microphone=True)

recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    audio_config=audio_config)

# 2) (Optional) Phrase list for names, acronyms, and domain terms
phrase_list = speechsdk.PhraseListGrammar.from_recognizer(recognizer)
for term in ["Contoso", "Fabrikam", "Foundry", "OAuth"]:
    phrase_list.addPhrase(term)&lt;/LI-CODE&gt;
&lt;P&gt;Your existing recognition events and partial-result handling remain unchanged. For speaker attribution, enable diarization through the established real-time diarization path; refinement applies to the final transcript while speaker labels are preserved.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Choose the right release for your workload&lt;/H2&gt;
&lt;P&gt;Post-Stream Refinement now has two paths. They are the same product family with a different feature boundary, so match the path to what your customer needs.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Monolingual PSR — generally available&lt;/th&gt;&lt;th&gt;Multilingual PSR — public preview&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Language selection&lt;/td&gt;&lt;td&gt;One locale declared per session&lt;/td&gt;&lt;td&gt;Automatic detection and code-switching in a single stream (open-range, no locale declared)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Supported locales&lt;/td&gt;&lt;td&gt;19 locales, including Indic bn / mr / pa / te&lt;/td&gt;&lt;td&gt;25 languages / 29 locales, auto-detected&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Azure regions&lt;/td&gt;&lt;td&gt;22 Azure regions across the Americas, Europe, and Asia Pacific&lt;/td&gt;&lt;td&gt;6 Azure regions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Phrase lists &amp;amp; diarization&lt;/td&gt;&lt;td&gt;Supported&lt;/td&gt;&lt;td&gt;Only diarization is supported&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 18.3539%" /&gt;&lt;col style="width: 48.3539%" /&gt;&lt;col style="width: 33.3539%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Working across languages?&lt;/STRONG&gt; If a single stream needs to handle multiple languages or code-switching without a declared locale, use Multilingual Post-Stream Refinement, now in public preview. For a known session locale with phrase lists and diarization, monolingual GA is the right path.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Try Post-Stream Refinement Today&lt;/H2&gt;
&lt;P&gt;Turn on higher-accuracy, language-aware transcription in your Azure AI Speech applications with a single configuration change.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-recognize-speech?pivots=programming-language-python#post-stream-refinement-preview" target="_blank" rel="noopener"&gt;📖 Read the Documentation&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;We would love your feedback. Try Post-Stream Refinement in your applications and tell us how it improves your transcription quality.&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2026 21:29:47 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/post-stream-refinement-is-now-generally-available-in-microsoft/ba-p/4540174</guid>
      <dc:creator>SolarRezaei</dc:creator>
      <dc:date>2026-07-23T21:29:47Z</dc:date>
    </item>
    <item>
      <title>For the first time, real-time transcription goes multilingual</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/for-the-first-time-real-time-transcription-goes-multilingual/ba-p/4539089</link>
      <description>&lt;P&gt;When we introduced&amp;nbsp;&lt;STRONG&gt;Post-Stream Refinement&lt;/STRONG&gt;&amp;nbsp;earlier this year, it closed the oldest gap in real-time speech: you could finally get instant streaming results&amp;nbsp;&lt;EM&gt;and&lt;/EM&gt;&amp;nbsp;a highly accurate final transcript, with no latency penalty. But it kept one hard requirement — you had to tell the service, up front, which single language to expect. Real-world speech does not work that way. People code-switch mid-sentence, product and brand names cross languages, and a global app serves users who simply speak differently from one session to the next.&lt;/P&gt;
&lt;P&gt;Today we remove that requirement.&amp;nbsp;&lt;STRONG&gt;Multilingual Post-Stream Refinement&lt;/STRONG&gt;&amp;nbsp;enters public preview for Azure AI Speech in Microsoft Foundry, and&amp;nbsp;&lt;STRONG&gt;for the first time ever a single real-time stream can transcribe multiple languages in one session&lt;/STRONG&gt; — the spoken language is detected automatically, no locale is declared in advance, and the final transcript is refined for accuracy. Everything you already know about Post-Stream Refinement still applies; what changes is that the refinement pass itself is now multilingual. &lt;A href="https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-recognize-speech?pivots=programming-language-python#post-stream-refinement-preview" target="_blank" rel="noopener"&gt;📖 Read the Documentation&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;What's New in This Release&lt;/H2&gt;
&lt;P&gt;If you have already used Post-Stream Refinement, here is exactly what changes with the multilingual preview — and what stays the same:&lt;/P&gt;
&lt;img&gt;What's new: the same real-time contract, now multilingual. One multilingual model runs the refinement pass, adding automatic multi-language detection, code-switching within a single utterance, open-range setup with no candidate list, and included diarization — while first-token streaming latency stays unchanged.&lt;/img&gt;
&lt;H2&gt;Quality Impact&lt;/H2&gt;
&lt;P&gt;In internal testing and partner evaluations across Tier-1 locales, multilingual Post-Stream Refinement reduced word error rate (WER) by&amp;nbsp;&lt;STRONG&gt;approximately 10% relative on average&lt;/STRONG&gt;, with&amp;nbsp;&lt;STRONG&gt;double-digit relative reductions&lt;/STRONG&gt; on the hardest cases — long utterances, proper nouns, and multilingual or code-switched speech. Partial-result latency is unchanged; only the final transcript is refined.&lt;/P&gt;
&lt;P&gt;Gains are relative reductions versus the standard real-time model and vary by language, acoustic conditions, and content type. The refined final result may add a small amount of latency to the final segment; partial results are unaffected.&lt;/P&gt;
&lt;img&gt;Measured quality gains (relative improvement vs. standard real-time transcription): about 10% relative reduction in average word error rate across Tier-1 locales; double-digit relative reduction on long utterances; double-digit relative reduction on proper nouns and named entities; no change to partial-result (first-token) latency. Relative reductions in word error rate; public preview, exact figures vary by locale and audio.&lt;/img&gt;
&lt;H2&gt;Supported Languages and Regions&lt;/H2&gt;
&lt;P&gt;The public preview supports&amp;nbsp;&lt;STRONG&gt;15 Tier-1 locales&lt;/STRONG&gt;. Because language is detected automatically, a single stream can contain any mix of them:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;img&gt;Supported languages: 25 auto-detected languages spanning 29 market locales — any mix of which can appear in a single real-time stream without declaring a locale up front.&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/DIV&gt;
&lt;P&gt;Available in these Azure regions:&lt;/P&gt;
&lt;img&gt;Availability: multilingual Post-Stream Refinement is live in six Azure regions at public preview — East US, West US, North Europe, Central India, Southeast Asia, and Japan East.&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Real-World Impact&lt;/H3&gt;
&lt;P&gt;Preview customers across industries — including travel, consumer electronics, automotive, aviation, and media — have reported positive gains in transcription quality. Customers testing multilingual and domain-specific audio have observed the clearest improvements on the hardest content: proper nouns, code-switching, and long-form speech. Several are actively validating the feature on their own audio ahead of general availability.&lt;/P&gt;
&lt;H2&gt;Get Started&lt;/H2&gt;
&lt;P&gt;Enabling multilingual Post-Stream Refinement is a small configuration change on your existing&amp;nbsp;SpeechConfig. You will need:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Speech SDK 1.50 or later.&lt;/STRONG&gt;&amp;nbsp;Earlier versions do not support the multilingual path.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;A Speech resource&lt;/STRONG&gt;&amp;nbsp;in one of the supported regions listed above.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Auto-detect language configuration&lt;/STRONG&gt;&amp;nbsp;(open range) so the service identifies the language from the audio — no candidate list required.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Set the post-processing option to&amp;nbsp;PostRefinement&amp;nbsp;and pass an open-range&amp;nbsp;AutoDetectSourceLanguageConfig&amp;nbsp;when you create the recognizer. Here is a complete, copy-paste Python example, including the optional end-of-utterance detection line:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import azure.cognitiveservices.speech as speechsdk

speech_config = speechsdk.SpeechConfig(
    subscription="YourSpeechKey",
    region="YourSpeechRegion")

# 1) Refine the final transcript (Post-Stream Refinement)
speech_config.set_property(
    speechsdk.PropertyId.SpeechServiceResponse_PostProcessingOption,
    "PostRefinement")

# 2) Multilingual auto-detect - no candidate language list needed
auto_detect_config = speechsdk.languageconfig.AutoDetectSourceLanguageConfig()

audio_config = speechsdk.AudioConfig(use_default_microphone=True)

recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    auto_detect_source_language_config=auto_detect_config,
    audio_config=audio_config)&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;💡 Tip:&lt;/STRONG&gt;&amp;nbsp;Refinement matters most for applications that store or process the final transcript — meeting notes, call analytics, compliance archives, AI summarization. If you only use partial results for a live display and discard them, your real-time UX (already fast) is unchanged, while any final transcript you keep improves.&lt;/P&gt;
&lt;H2&gt;Try Multilingual Post-Stream Refinement Today&lt;/H2&gt;
&lt;P&gt;Turn on higher-accuracy, language-aware transcription in your Azure AI Speech applications with a single configuration change. Available now in public preview in Microsoft Foundry.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-recognize-speech?pivots=programming-language-python#post-stream-refinement-preview" target="_blank" rel="noopener"&gt;📖 Read the Documentation&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;We would love your feedback. Try Post-Stream Refinement in your applications and tell us how it improves your transcription quality.&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2026 21:29:27 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/for-the-first-time-real-time-transcription-goes-multilingual/ba-p/4539089</guid>
      <dc:creator>SolarRezaei</dc:creator>
      <dc:date>2026-07-23T21:29:27Z</dc:date>
    </item>
    <item>
      <title>Introducing MAI-Image-2.5 Pro and MAI-Voice-2 Flash in Microsoft Foundry</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-mai-image-2-5-pro-and-mai-voice-2-flash-in-microsoft/ba-p/4539446</link>
      <description>&lt;P&gt;One of the core principles in Microsoft Foundry is giving customers flexibility to choose the right model for the right job. As we've continued to expand the Microsoft AI (MAI) model family, we've heard a consistent theme from developers and enterprises: they want more choice based on their specific workload requirements. Some need the highest possible quality, fidelity, and consistency for professional production workflows. Others prioritize responsiveness and cost-efficiency for frequent, real-time responses.&lt;/P&gt;
&lt;P&gt;Today, we're introducing two new additions to the MAI portfolio:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;MAI-Image-2.5 Pro&lt;/STRONG&gt;, designed for customers who need maximum visual fidelity and creative control&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;MAI-Voice-2 Flash&lt;/STRONG&gt;, built for low-latency voice applications where every millisecond matters.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Together, these models extend the MAI family with specialized options that help developers optimize for the jobs they need to do. Let’s dive in.&lt;/P&gt;
&lt;H1&gt;MAI-Image-2.5 Pro: Built for professional creative workflows&lt;/H1&gt;
&lt;P&gt;MAI-Image-2.5 Pro is our newest high-fidelity image generation model, designed for scenarios where visual accuracy, consistency, and creative control are critical. The model delivers stronger object consistency, improved alignment with creative intent, and enhanced visual reasoning and world knowledge, making it the ideal choice when quality and fidelity matter more than throughput.&lt;/P&gt;
&lt;P&gt;As generative AI moves from experimentation to production, creative teams increasingly need models that can reliably generate assets that meet professional standards without extensive manual editing. MAI-Image-2.5 Pro was built to address those needs. Here are some of the scenarios it best fits:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Campaign Hero Assets &amp;amp; Multi-Frame Storytelling. &lt;/STRONG&gt;Creative agencies and marketing teams can create polished campaign visuals while maintaining consistent products, characters, and brand elements across every asset. Whether producing launch campaigns, social media variants, retail signage, or digital advertising, Image-2.5 Pro helps ensure visual consistency throughout the customer journey.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Product Photography &amp;amp; E-Commerce Catalogs.&lt;/STRONG&gt; Retailers and consumer brands can generate high-quality product imagery with accurate rendering of packaging, labels, materials, and reflections. The model's improved object consistency helps maintain identical product representation across multiple angles, color variations, and lifestyle settings.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Storyboarding &amp;amp; Pre-Visualization.&lt;/STRONG&gt; Film studios, game developers, and creative production teams can rapidly develop visual concepts while maintaining consistency across characters, environments, props, and scenes. Enhanced visual reasoning enables more accurate interpretation of camera direction, lighting, and staging instructions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Regulated Industry Content Creation.&lt;/STRONG&gt; Organizations in healthcare, financial services, manufacturing, and other regulated industries can generate imagery that requires greater real-world accuracy and domain understanding, reducing the effort needed to correct inaccuracies before customer-facing use&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H4&gt;When should customers use MAI-Image-2.5 Pro vs. MAI-Image-2.5?&lt;/H4&gt;
&lt;P&gt;Both models deliver high-quality image generation capabilities, but they are optimized for different priorities.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose MAI-Image-2.5 Pro when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You need maximum image fidelity and creative quality.&lt;/LI&gt;
&lt;LI&gt;Object consistency across multiple images is critical.&lt;/LI&gt;
&lt;LI&gt;Your workflow depends on visual reasoning, world knowledge, and close adherence to creative direction.&lt;/LI&gt;
&lt;LI&gt;You are producing professional marketing, advertising, product design, or enterprise creative assets.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;MAI-Voice-2 Flash: Real-time voice experiences at scale&lt;/H1&gt;
&lt;P&gt;We're also introducing MAI-Voice-2 Flash, a new low-latency text-to-speech model that extends MAI-Voice-2 with faster response times and greater cost efficiency across more than 15 supported languages.&lt;/P&gt;
&lt;P&gt;As voice becomes a critical interface for AI applications, responsiveness is increasingly important to the end-user experience. Whether a customer is speaking with an AI-powered support agent, interacting with a voice assistant, or navigating a self-service phone system, long pauses can make experiences feel slow and unnatural. MAI-Voice-2 Flash was built to address those scenarios. Here are some of the scenarios on when to choose MAI-Voice-2 Flash:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Call Center Agents: &lt;/STRONG&gt;Customer support organizations can generate spoken responses in real time, minimizing delays between conversation turns and enabling more natural customer interactions. Low latency helps improve customer experiences while supporting AI-powered service, support, and sales workflows.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Conversational Voice Assistants:&lt;/STRONG&gt; Developers can build voice-enabled copilots, assistants, and intelligent applications that respond nearly instantly. The result is a more fluid, natural conversation that feels interactive rather than turn-based.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Interactive Voice Response (IVR) Systems: &lt;/STRONG&gt;Organizations can modernize traditional phone systems with dynamic AI-generated speech that responds contextually to customer requests while maintaining a responsive user experience.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;When should customers use MAI-Voice-2 Flash vs. MAI-Voice-2?&lt;/H4&gt;
&lt;P&gt;The distinction between the two voice models comes down to whether customers are optimizing for &lt;STRONG&gt;voice identity&lt;/STRONG&gt; or &lt;STRONG&gt;real-time responsiveness&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose MAI-Voice-2 Flash when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Low latency is a primary requirement.&lt;/LI&gt;
&lt;LI&gt;You are building conversational assistants, IVR systems, or call center experiences.&lt;/LI&gt;
&lt;LI&gt;Users expect immediate spoken responses as part of a live interaction.&lt;/LI&gt;
&lt;LI&gt;Cost efficiency and responsiveness are more important.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Get started today in Microsoft Foundry&lt;/H1&gt;
&lt;P&gt;MAI-Image-2.5 Pro is available through &lt;A href="https://aka.ms/mai-image-2.5-pro-foundrycard" target="_blank" rel="noopener"&gt;Microsoft Foundry&lt;/A&gt;, providing developers with access to Microsoft's latest advancements in image generation. Pricing starts at $5 per 1M tokens for text input, and $106 per 1M tokens for image output.&lt;/P&gt;
&lt;P&gt;MAI-Voice-2 Flash is available through &lt;A href="https://aka.ms/mai-voice-2-flash-foundrycard" target="_blank" rel="noopener"&gt;Azure Speech&lt;/A&gt;, allowing customers to leverage Azure Speech's enterprise-grade reliability, scalability, and ecosystem while benefiting from Microsoft's latest voice technology. Pricing starts at $15 per 1M characters.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jul 2026 20:41:12 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/introducing-mai-image-2-5-pro-and-mai-voice-2-flash-in-microsoft/ba-p/4539446</guid>
      <dc:creator>Naomi Moneypenny</dc:creator>
      <dc:date>2026-07-23T20:41:12Z</dc:date>
    </item>
    <item>
      <title>Grounding Copilot Studio Agents with Azure AI Search and Foundry IQ</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/grounding-copilot-studio-agents-with-azure-ai-search-and-foundry/ba-p/4539337</link>
      <description>&lt;P&gt;An employee opens the HR agent and asks, "How much PTO do I accrue each month?" A few minutes later, someone else asks, "Where is the official code of ethics policy?" Those sound like the same problem. They are not. The first person needs a grounded answer they can understand. The second person needs a link to the right document quickly, without interpretation. If you design for one experience, the other one feels broken.&lt;/P&gt;
&lt;P&gt;That is usually where knowledge-agent projects start to get messy. “Grounding” can sound like one switch you turn on, but in practice it is a spectrum: from zero-code classic search, to agentic retrieval over a knowledge base, to a forced-grounding agent that synthesizes answers when synthesis is required. The easier way to think about it is this: who is doing the retrieval work, and what does the user need back?&lt;/P&gt;
&lt;P&gt;This post walks through five working retrieval patterns for an “Ask HR” agent built on &lt;STRONG&gt;Copilot Studio&lt;/STRONG&gt;, &lt;STRONG&gt;Azure AI Search&lt;/STRONG&gt;, and &lt;STRONG&gt;Foundry IQ&lt;/STRONG&gt;. Each one is running code in the companion sample repo: &lt;STRONG&gt;&lt;A class="lia-external-url" href="https://github.com/honestypugh2/foundry-copilot-hr-policy-knowledge" target="_blank" rel="noopener"&gt;foundry-copilot-hr-policy-knowledge&lt;/A&gt;&lt;/STRONG&gt;. Each has a clear “use this when,” and the five patterns share the same reusable knowledge base so you can layer them on without re-indexing. By the end, you should have a decision tree you can reuse for your own knowledge source, whether that is HR policy, product docs, or support runbooks.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=""&gt;Scope: companion sample for learning and experimentation, not production-ready deployment. Review the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/well-architected/" target="_blank" rel="noopener"&gt;Azure Well-Architected Framework&lt;/A&gt; for reliability, security, cost, and operational hardening before you ship.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;The scenario: one index, many front doors&lt;/H2&gt;
&lt;P&gt;Here is the setup. The sample answers employee questions from a small corpus of internal HR policy documents: PTO accrual, hiring rules, code of ethics, blood-borne pathogen procedures, and dozens more. Underneath every pattern is one foundation: an Azure AI Search index named &lt;EM&gt;hr-policy-index&lt;/EM&gt;, populated by an indexer and skillset that chunk and vectorize the documents.&lt;/P&gt;
&lt;P&gt;Patterns A, C, and the Hosted Agent query that index directly. Patterns A2 and B add a &lt;STRONG&gt;Foundry IQ knowledge base&lt;/STRONG&gt; named &lt;EM&gt;hr-knowledge-base&lt;/EM&gt; &lt;EM&gt;on top of the same index&lt;/EM&gt; for agentic retrieval. That layering is the part to pay attention to. The retrieval assets stay separate from the orchestration layer, so you can start with the simplest pattern, prove value quickly, and move to a more capable one later without re-indexing.&lt;/P&gt;
&lt;H2&gt;Two questions that decide everything&lt;/H2&gt;
&lt;P&gt;Before we get into the patterns, it helps to define the two retrieval terms I use throughout the rest of the post:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/search/search-what-is-azure-search?tabs=indexing%2Cquickstarts" target="_blank" rel="noopener"&gt;Classic search&lt;/A&gt;, index-first retrieval: one hybrid (keyword + vector) query against an Azure AI Search index, ranked and returned. Fast and predictable.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/search/agentic-retrieval-overview?tabs=quickstarts" target="_blank" rel="noopener"&gt;Agentic retrieval&lt;/A&gt;, the knowledge base plans multiple sub-queries from the user's question, runs them in parallel, re-ranks, and merges the results before the agent composes an answer. Higher quality on complex, multi-part questions.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If you want the fuller picture of how these two approaches map to retrieval-augmented generation, the Azure AI Search team's &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview" target="_blank" rel="noopener"&gt;RAG and generative AI overview&lt;/A&gt; walks through the trade-offs and uses a similar HR/PTO example.&lt;/P&gt;
&lt;P&gt;Once those terms are clear, the decision tree comes down to three practical questions:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q1: Do users need an answer or are they really trying to find the right document?&lt;/STRONG&gt;&lt;BR /&gt;If they just need the document, stay on the locator path. If they need the policy explained or summarized, move into the answer-synthesis path.&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN data-user-selection=""&gt;&lt;STRONG&gt;QL: Is the content in a citation-friendly knowledge base?&lt;/STRONG&gt;&lt;BR /&gt;For example, SharePoint content or Azure AI Search content with a reliable &lt;/SPAN&gt;&lt;SPAN data-user-selection=""&gt;&lt;EM&gt;blob_url&lt;/EM&gt;. If yes, Copilot Studio can usually handle this with native citation cards in Pattern A. If not, use Pattern &lt;/SPAN&gt;C with the dual tool &lt;EM&gt;/api/lookup&lt;/EM&gt; path so the agent can return the exact document link.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Q2: Do you actually need an LLM agent in the middle?&lt;/STRONG&gt;&lt;BR /&gt;If the answer is no, keep it simple: use classic search or agentic retrieval over the knowledge base. If the answer is yes, move into the agent path.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;QK: For that non-agent path, is classic index search enough, or do you need agentic KB retrieval?&lt;/STRONG&gt;&lt;BR /&gt;Classic search points to Pattern A. Agentic retrieval over the knowledge base points to Pattern A2.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Q3: If you need an agent, do you want Foundry to run the request loop, or do you need to self-host it?&lt;/STRONG&gt;&lt;BR /&gt;If Foundry can manage the runtime, use Pattern B. If you need the request loop in your own container, use the Hosted Agent.&lt;BR /&gt;&lt;BR /&gt;That is the decision tree in plain terms: Q1 decides whether this is a document-locator experience or an answer-synthesis experience. Q2 decides whether you need an LLM agent at all. Q3 is only about where the agent runs, either Foundry or your container. It does not change the front door; Copilot Studio can still be the user-facing experience.&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;How the sample repo is organized&lt;/H2&gt;
&lt;P&gt;The repo follows the same flow as the post. Start with &lt;EM&gt;docs/DataPipelineAndTesting.md&lt;/EM&gt; to understand how the HR policy corpus is indexed, tested, and validated. Use &lt;EM&gt;docs/RetrievalPatterns.md&lt;/EM&gt; as the decision model for choosing between classic search, agentic retrieval, forced grounding, and hosted runtime options. Then use the pattern-specific docs when you are ready to wire each path.&lt;/P&gt;
&lt;P&gt;For Copilot Studio patterns, &lt;EM&gt;docs/CopilotStudioIntegration.md&lt;/EM&gt; maps to Pattern A, while &lt;EM&gt;docs/CopilotStudioHybridExample.md&lt;/EM&gt; maps to Pattern C and the dual-tool locator flow. For the more advanced agent paths, &lt;EM&gt;docs/FoundryAgentArchitecture.md&lt;/EM&gt; covers Pattern B and the hosted agent architecture. &lt;EM&gt;docs/Distribution-M365-Teams.md&lt;/EM&gt; shows how the agent can be distributed through Microsoft 365 and Teams once the retrieval pattern is working.&lt;/P&gt;
&lt;P&gt;The rest of the post is that tree, one branch at a time.&lt;/P&gt;
&lt;H2&gt;Pattern A: Direct index (classic search, zero agent code)&lt;/H2&gt;
&lt;P&gt;Start here. Copilot Studio queries hr-policy-index directly through its built-in &lt;STRONG&gt;Knowledge&lt;/STRONG&gt; action. No custom agent code runs in the answer path. The sample only owns the index, skillset, and indexing pipeline.&lt;/P&gt;
&lt;P&gt;Populate the index (server-side indexer + skillset handles chunking and vectorization):&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;uv run python scripts/index_knowledge_base_integrated_vectorization.py
# Builds hr-policy-index; a client-side alternative exists for dev/test
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;What you get:&lt;/STRONG&gt; very low latency in the sample, roughly 1-2 seconds, no LLM cost in the retrieval path, and native citation cards. When the source documents carry a &lt;EM&gt;blob_url&lt;/EM&gt; or &lt;EM&gt;metadata_storage_path&lt;/EM&gt;, Copilot Studio can render a click-through card straight to the document. For many "where is the policy?" questions, that may be enough.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The honest limitation:&lt;/STRONG&gt; Pattern A is still classic search. It does not force synthesis. If Copilot Studio generates an answer from retrieved snippets, it may paraphrase a policy in a way that is close, but not precise enough. For HR policy, that matters. If exact wording matters, that is your sign to step up to Pattern B.&lt;/P&gt;
&lt;H2&gt;Pattern A2: Copilot Studio meets Foundry IQ (agentic retrieval, no prompt agent)&lt;/H2&gt;
&lt;P&gt;This is the pattern I would look at when you want better retrieval quality without taking on the overhead of a full prompt agent. In the Copilot Studio new agent experience preview, an agent &lt;STRONG&gt;connects directly to a &lt;/STRONG&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/ai-foundry/agents/concepts/what-is-foundry-iq" target="_blank" rel="noopener"&gt;Foundry IQ&lt;/A&gt;&lt;STRONG&gt; knowledge base&lt;/STRONG&gt; through &lt;STRONG&gt;Microsoft IQ&lt;/STRONG&gt;, with no Foundry prompt agent in between. You reuse the same &lt;EM&gt;hr-knowledge-base&lt;/EM&gt; on top of the same &lt;EM&gt;hr-policy-index&lt;/EM&gt; (one command: &lt;EM&gt;python -m src.agents.create_foundry_agent&lt;/EM&gt;), but retrieval is now agentic: the knowledge base plans sub-queries, retrieves in parallel, reranks, and hands merged results to the agent.&lt;/P&gt;
&lt;P&gt;Wiring it takes a few clicks in Copilot Studio (&lt;A class="lia-external-url" href="https://learn.microsoft.com/microsoft-copilot-studio/agents-experience/foundry-iq-connect" target="_blank" rel="noopener"&gt;step-by-step on Microsoft Learn&lt;/A&gt;):&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Build → Microsoft IQ → Foundry IQ → Create new connection&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;Choose &lt;STRONG&gt;Microsoft Entra ID Integrated&lt;/STRONG&gt; authentication&lt;/LI&gt;
&lt;LI&gt;Select &lt;EM&gt;hr-knowledge-base&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Add to agent&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;A2 is worth the upgrade from A for two reasons. First, you get agentic-retrieval quality without having to build, deploy, or maintain a prompt agent. The knowledge base becomes the reusable asset you improve in Microsoft Foundry, not something you keep reworking inside each Copilot Studio agent. Second, when configured with Microsoft Entra ID Integrated authentication, retrieval can return ACL-trimmed results per user. Each person sees content based on their access.&lt;/P&gt;
&lt;P&gt;Foundry IQ knowledge bases can also inherit enterprise-readiness controls such as customer-managed keys, network isolation, and Entra ID. A single knowledge base can also federate across multiple knowledge sources in parallel.&lt;/P&gt;
&lt;P&gt;Use A2 when you want stronger hybrid retrieval quality without taking on the overhead of operating a full agent.&lt;/P&gt;
&lt;H2&gt;Pattern B: Foundry Agent Service with forced grounding&lt;/H2&gt;
&lt;P&gt;When answers need to be synthesized &lt;EM&gt;and&lt;/EM&gt; grounded, publish a prompt agent to Microsoft Foundry with &lt;A href="https://learn.microsoft.com/azure/ai-foundry/agents/overview" target="_blank" rel="noopener"&gt;&lt;U&gt;Foundry Agent Service&lt;/U&gt;&lt;/A&gt;. In the sample, the agent uses an &lt;EM&gt;MCPTool&lt;/EM&gt; pointing at the knowledge-base endpoint, with &lt;EM&gt;tool_choice="required"&lt;/EM&gt; so the model retrieves policy chunks before answering.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;# src/agents/hr_policy_agent.py (excerpt)
agent = PromptAgentDefinition(
    model=model_deployment_name,          # e.g. gpt-5-mini
    instructions=HR_POLICY_INSTRUCTIONS,
    tools=[mcp_tool],                     # KB MCP endpoint
    tool_choice="required",               # require retrieval before answering
)&lt;/LI-CODE&gt;
&lt;P&gt;Invoke it through the OpenAI client the project hands you:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;client = project.get_openai_client()
response = client.responses.create(
    input="How does PTO accrue for a new hire?",
    extra_body={"agent_reference": {"name": agent_name}},
)&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;What you get:&lt;/STRONG&gt; synthesized answers with grounding and inline [Policy XXXX - Title] citations, all from a single SDK call on a managed runtime. &lt;STRONG&gt;The trade-off:&lt;/STRONG&gt; synthesis takes longer. In the sample, answers take roughly 10-14 seconds versus 1-2 seconds for classic search. For policy explanations, that extra time can be worth it because the user gets a composed, grounded answer instead of a list of snippets.&lt;/P&gt;
&lt;H2&gt;Pattern C: Dual-tool routing for deterministic document locators&lt;/H2&gt;
&lt;P&gt;Some questions do not need an essay; they just need the right URL, fast. Pattern C lets Copilot Studio route per turn:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;"Where is the PTO policy?"&lt;/EM&gt; → POST /api/lookup, a deterministic endpoint with no LLM, roughly 1-2 seconds, returning the document URL verbatim in the answer body.&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;"How many PTO hours do I accrue?"&lt;/EM&gt; → hand off to Pattern A or B for a synthesized answer.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="json"&gt;POST /api/lookup
{ "query": "PTO policy" }
→ 200 OK
{ "policy_id": "12345", "title": "Types of Leave: Paid Time Off (PTO)",
  "blob_url": "https://.../12345-pto.pdf" }&lt;/LI-CODE&gt;
&lt;P&gt;Reach for Pattern C when native citations are not enough. For example, use it when you need fast locator responses, the URL printed directly in the answer body, deterministic and auditable output, or support for a source that is not citation-friendly. The endpoint lives at &lt;EM&gt;src/backend/main.py:/api/lookup&lt;/EM&gt;, with its contract in &lt;EM&gt;copilot/openapi-lookup-v2.json&lt;/EM&gt;.&lt;/P&gt;
&lt;H2&gt;Hosted Agent: the same agent on your own runtime&lt;/H2&gt;
&lt;P&gt;If you need to own the request loop, custom authentication, side-car services, or infrastructure that stays inside your boundary, run the agent yourself. The Hosted Agent is the self-hosted version of the same idea: a container built on &lt;A class="lia-external-url" href="https://learn.microsoft.com/agent-framework/overview/agent-framework-overview" target="_blank" rel="noopener"&gt;Microsoft Agent Framework&lt;/A&gt;&amp;nbsp;with &lt;EM&gt;FoundryChatClient&lt;/EM&gt;. It supports both classic and agentic retrieval through one environment variable:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 62.5926%; height: 184px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 39px;"&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;&lt;STRONG&gt;RETRIEVAL_MODE&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Strategy&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Retrieval type&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 39px;"&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;tool (default)&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;Custom @tool &lt;EM&gt;search_hr_policies&lt;/EM&gt; (hybrid + semantic)&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;Classic search&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 39px;"&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;context-semantic&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;Built-in &lt;EM&gt;AzureAISearchContextProvider&lt;/EM&gt; before each turn&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 39px;"&gt;
&lt;P&gt;Classic search&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 67px;"&gt;&lt;td style="height: 67px;"&gt;
&lt;P&gt;context-agentic&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P&gt;&lt;EM&gt;AzureAISearchContextProvider&lt;/EM&gt; over &lt;EM&gt;hr-knowledge-base&lt;/EM&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 67px;"&gt;
&lt;P&gt;Agentic retrieval&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The context-* modes use Agent Framework’s out-of-the-box RAG context provider. Retrieval runs automatically before each model call with standardized context and citation prompts, so the agent does not have to call a search tool explicitly. That gives the self-hosted path parity with the managed Foundry path across both retrieval types. Copilot Studio can still be the front door. Q3 in the decision tree is really about where the request loop runs, not who greets the user.&lt;/P&gt;
&lt;H2&gt;Choosing a pattern&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Pattern&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Orchestrator&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Retrieval&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Latency (sample)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Best for&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;A&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Copilot Studio&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Classic&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;~1-2 s&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Start here, native citations, no agent code&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;A2&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Copilot Studio → Foundry IQ&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Agentic&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;~2-4 s&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Agentic quality, no agent to maintain&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;B&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Foundry Agent Service&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Classic/agentic via MCP&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;~10-14 s&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Forced-grounding synthesis in Foundry&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;C&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Copilot Studio (router)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;None for lookup&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;~1-2 s&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Deterministic, verbatim document locators&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Hosted&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Agent Framework container&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Classic + agentic&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;~10-14 s&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Self-hosted runtime, custom auth&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;A simple way to read the table: start at &lt;STRONG&gt;A&lt;/STRONG&gt;, move to &lt;STRONG&gt;A2&lt;/STRONG&gt; when you want agentic retrieval without operating an agent, choose &lt;STRONG&gt;B&lt;/STRONG&gt; when each answer needs to be synthesized and grounded in Foundry, add &lt;STRONG&gt;C&lt;/STRONG&gt; for high-volume locator traffic, and pick the &lt;STRONG&gt;Hosted Agent&lt;/STRONG&gt; when you need the runtime on your own infrastructure. These are not mutually exclusive. A mature agent often routes locator queries to &lt;STRONG&gt;C&lt;/STRONG&gt; and content questions to &lt;STRONG&gt;A2&lt;/STRONG&gt; or &lt;STRONG&gt;B&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2&gt;What's next?&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Try it:&lt;/STRONG&gt; clone the sample and follow Steps 1-3 of the walkthrough to stand up Pattern A, provision &lt;EM&gt;hr-knowledge-base&lt;/EM&gt;, connect Copilot Studio, and ask a question in minutes.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Go agentic:&lt;/STRONG&gt; wire the same knowledge base into the Copilot Studio new agent experience via &lt;A class="lia-external-url" href="https://learn.microsoft.com/microsoft-copilot-studio/agents-experience/foundry-iq-connect" target="_blank" rel="noopener"&gt;Foundry IQ&lt;/A&gt; (Pattern A2) and compare answer quality side by side.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Learn more:&lt;/STRONG&gt; explore &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/search/search-agentic-retrieval-concept" target="_blank" rel="noopener"&gt;agentic retrieval in Azure AI Search&lt;/A&gt;, &lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/ai-foundry/agents/concepts/what-is-foundry-iq" target="_blank" rel="noopener"&gt;Foundry IQ&lt;/A&gt;, and &lt;A class="lia-external-url" href="https://learn.microsoft.com/agent-framework/overview/agent-framework-overview" target="_blank" rel="noopener"&gt;Microsoft Agent Framework&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adapt it:&lt;/STRONG&gt; swap the HR policy corpus for your own product docs, support runbooks, or internal knowledge source, then compare Pattern A, A2, and B against the same user questions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use the repo-doc map:&lt;/STRONG&gt; start with &lt;EM&gt;docs/RetrievalPatterns.md&lt;/EM&gt; for the decision model, &lt;EM&gt;docs/CopilotStudioIntegration.md&lt;/EM&gt; for Pattern A, &lt;EM&gt;docs/CopilotStudioHybridExample.md&lt;/EM&gt; for Pattern C, &lt;EM&gt;docs/FoundryAgentArchitecture.md&lt;/EM&gt; for Pattern B and Hosted Agent, and &lt;EM&gt;docs/DataPipelineAndTesting.md&lt;/EM&gt; for ingestion and validation.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;My recommendation: start simple, prove the index works, and move up the stack only when the use case needs it. Some questions need a trusted link. Others need a grounded explanation. A strong architecture supports both without forcing every request through the same path.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;References&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Copilot Studio + Foundry IQ&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/microsoft-copilot-studio/agents-experience/foundry-iq-connect" target="_blank" rel="noopener"&gt;Connect to Foundry IQ from an agent&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/ai-foundry/agents/concepts/foundry-iq-faq" target="_blank" rel="noopener"&gt;Foundry IQ FAQ&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Foundry IQ / knowledge layer&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/ai-foundry/agents/concepts/what-is-foundry-iq" target="_blank" rel="noopener"&gt;What is Foundry IQ?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/foundry/agents/how-to/foundry-iq-connect" target="_blank" rel="noopener"&gt;Connect a Foundry IQ knowledge base to Foundry Agent Service&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Azure AI Search, retrieval&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/search-agentic-retrieval-concept" target="_blank" rel="noopener"&gt;Agentic retrieval overview&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/retrieval-augmented-generation-overview" target="_blank" rel="noopener"&gt;RAG and generative AI in Azure AI Search&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/search-what-is-azure-search" target="_blank" rel="noopener"&gt;Classic vs agentic search&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/agentic-retrieval-how-to-create-knowledge-base" target="_blank" rel="noopener"&gt;Create a knowledge base&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/agentic-knowledge-source-overview" target="_blank" rel="noopener"&gt;Create a knowledge source&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/hybrid-search-overview" target="_blank" rel="noopener"&gt;Hybrid search&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/semantic-search-overview" target="_blank" rel="noopener"&gt;Semantic ranking&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/search-get-started-agentic-retrieval" target="_blank" rel="noopener"&gt;Quickstart: agentic retrieval&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/search/agentic-retrieval-how-to-create-pipeline" target="_blank" rel="noopener"&gt;Tutorial: end-to-end agentic retrieval solution&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Foundry Agent Service (Pattern B)&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/ai-foundry/agents/overview" target="_blank" rel="noopener"&gt;Foundry Agent Service overview&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Agent Framework (Hosted Agent)&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/agent-framework/overview/agent-framework-overview" target="_blank" rel="noopener"&gt;Microsoft Agent Framework overview&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/agent-framework/agents/tools/hosted-mcp-tools" target="_blank" rel="noopener"&gt;Hosted MCP tools&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Governance&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/azure/well-architected/" target="_blank" rel="noopener"&gt;Azure Well-Architected Framework&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Related Microsoft Foundry blog posts&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/foundry-iq-is-now-in-copilot-studio-bring-your-enterprise-data-to-every-agent-co/4534635" target="_blank" rel="noopener"&gt;Foundry IQ is now in Copilot Studio&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/answers-you-can-trust-grounding-enterprise-agents-with-foundry-iq/4536594" target="_blank" rel="noopener"&gt;Answers You Can Trust: Grounding Enterprise Agents with Foundry IQ&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/azure-ai-foundry-blog/foundry-iq-unlocking-ubiquitous-knowledge-for-agents/4470812" target="_blank" rel="noopener"&gt;Foundry IQ: Unlocking ubiquitous knowledge for agents&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 22 Jul 2026 18:00:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-foundry-blog/grounding-copilot-studio-agents-with-azure-ai-search-and-foundry/ba-p/4539337</guid>
      <dc:creator>BrittanyPugh</dc:creator>
      <dc:date>2026-07-22T18:00:00Z</dc:date>
    </item>
  </channel>
</rss>

