llm-catalog-archive

Change

6940d3e

6940d3e22797b83d9c59008940cebcdba626a693 · commit on GitHub

aws-blog-feed: changed (677709 bytes, HTTP 200)

raw/aws-blog-feed/response.xml modified

Lines added
+1,535
Lines removed
-1,528
Stored bytes at this commit
677,709
Timestamp
observed
Raw artifact at this commit
raw/aws-blog-feed/response.xml
Recorded headers
observed_at2026-10-24T04:37:03.142Z
origin_datenull
status200
final URLhttps://aws.amazon.com/blogs/machine-learning/feed/
etagnull
last-modifiedFri, 23 Oct 2026 23:20:31 GMT
dateSat, 24 Oct 2026 04:37:03 GMT
agenull
cache-controlnull
cf-cache-statusnull
content-encodingnull
content-lengthnull
@@@ -5,7 +5,7 @@
<atom:link href="https://aws.amazon.com/blogs/machine-learning/feed/" rel="self" type="application/rss+xml"/>
<link>https://aws.amazon.com/blogs/machine-learning/</link>
<description>Official Machine Learning Blog of Amazon Web Services</description>
- <lastBuildDate>Thu, 22 Oct 2026 21:42:37 +0000</lastBuildDate>
+ <lastBuildDate>Fri, 23 Oct 2026 17:48:54 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly </sy:updatePeriod>
@@@ -13,322 +13,932 @@
1 </sy:updateFrequency>
<item>
- <title>Amazon Polly delivers a major upgrade to its Generative engine</title>
- <link>https://aws.amazon.com/blogs/machine-learning/amazon-polly-delivers-a-major-upgrade-to-its-generative-engine/</link>
+ <title>Multi-Turn Reinforcement Learning on Amazon SageMaker AI: A hands-on guide</title>
+ <link>https://aws.amazon.com/blogs/machine-learning/multi-turn-reinforcement-learning-on-amazon-sagemaker-ai-a-hands-on-guide/</link>
- <dc:creator><![CDATA[Suyin Wang]]></dc:creator>
- <pubDate>Thu, 22 Oct 2026 18:06:35 +0000</pubDate>
- <category><![CDATA[Amazon Polly]]></category>
- <category><![CDATA[Announcements]]></category>
- <category><![CDATA[Foundational (100)]]></category>
- <guid isPermaLink="false">8dd8e6bc35ad32eff8fd57bbe04f9c56274f46ed</guid>
+ <dc:creator><![CDATA[Daniel Quang]]></dc:creator>
+ <pubDate>Fri, 23 Oct 2026 17:48:54 +0000</pubDate>
+ <category><![CDATA[Amazon SageMaker AI]]></category>
+ <category><![CDATA[Expert (400)]]></category>
+ <category><![CDATA[Technical How-to]]></category>
+ <guid isPermaLink="false">d4a0021627e124e1cbf32bd2a1426e1abfda6b33</guid>
- <description>The Amazon Polly Generative engine gets a major upgrade: more expressive, more accurate speech with low latency, plus 14 new voices across 9 locales and general availability of Hindi and Finnish. This drop-in upgrade requires no code changes and is now generally available in produc…
- <content:encoded>&lt;p&gt;Amazon Polly Generative engine now offers more natural and accurate speech output. We’re introducing an upgrade to the &lt;a href="https://docs.aws.amazon.com/polly/latest/dg/generative-voices.html" target="_blank" rel="noopener"&gt;Amazon Polly Generative engine&…
-&lt;p&gt;Importantly, this is a drop-in upgrade for existing generative voices. Voice names and API calls are unchanged, so your existing applications continue to work as they do today.&lt;/p&gt;
-&lt;p&gt;&lt;a href="https://aws.amazon.com/pm/polly/?trk=b671ff34-bbc7-4bfb-810d-1d5dd86754c8&amp;amp;sc_channel=ps&amp;amp;ef_id=CjwKCAjwxeHWBhBPEiwAiqtQ-T9vdBDVcvj307u_rytRQbtnrsBUgG615Vad1q2eqCjNWSGgbYPK2hoCVQ4QAvD_BwE:G:s&amp;amp;gads_camp=24332379316&amp;amp;gads_ag=206560268051&amp;amp;gads_a…
-&lt;h2 id="hear-the-difference"&gt;Hear the difference&lt;/h2&gt;
-&lt;p&gt;You can use sample audio to evaluate the improvements directly.&lt;/p&gt;
+ <description>Multi-Turn Reinforcement Learning (MTRL) on Amazon SageMaker AI trains models on the outcome of a whole multi-step task rather than labeled steps. This hands-on guide walks the full pipeline using Wordle: deploying the agent and reward on Amazon Bedrock AgentCore, preparing the dat…
+ <content:encoded>&lt;p&gt;Most fine-tuning teaches a model to produce a better answer to a single prompt. Agentic tasks are different. An agent that files an expense report or triages a support ticket takes a sequence of actions, and each step depends on what came before. There’s rarely on…
+&lt;p&gt;Multi-Turn Reinforcement Learning (MTRL) on Amazon SageMaker AI trains models on exactly that signal. SageMaker AI sends prompts to an agent you host on Amazon Bedrock AgentCore, or on your own infrastructure, such as Amazon Elastic Kubernetes Service (Amazon EKS), Amazon Elastic Compute Cl…
+&lt;p&gt;This post uses &lt;a href="https://en.wikipedia.org/wiki/Wordle" target="_blank" rel="noopener"&gt;Wordle&lt;/a&gt;, a game in which a player has six tries to guess a hidden five-letter word, as the example. After each guess, every letter turns green if it is in the right position, yellow i…
+&lt;p&gt;In our run, MTRL took gpt-oss-20b from a 61 to an 84 percent solve rate on held-out words at its default reasoning effort, and from 15 to 69 percent at the low effort it trained at, for about $339 in training tokens. In this post, we walk through the pipeline end-to-end: deploying the agent…
+&lt;h2 id="solution-overview"&gt;Solution overview&lt;/h2&gt;
+&lt;p&gt;The system has two halves. SageMaker AI owns the training job and the policy model. AgentCore hosts the agent, the Wordle environment, and the reward function. The following diagram shows how they connect.&lt;/p&gt;
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-1.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-1.png" alt="SageMaker AI training j…
+ &lt;p class="wp-caption-text"&gt;Figure 1: MTRL on SageMaker AI, where the training job invokes the AgentCore-hosted agent once per rollout to sample the policy model, play the game, and report a reward&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;For every rollout, the MTRL service invokes the AgentCore runtime, a capability of Amazon Bedrock AgentCore, with one training row, which holds one secret word. A Strands agent in the runtime calls the policy model through the SageMaker Job Runtime’s OpenAI-compatible endpoint. The model pl…
+&lt;p&gt;Three design points matter for what follows:&lt;/p&gt;
&lt;ul&gt;
- &lt;li&gt;&lt;strong&gt;The more natural, authentic, and expressive voices.&lt;/strong&gt; Hear how Tiffany welcomes you in a delightful tone.
- &lt;ul&gt;
- &lt;li&gt;“Hi there! I’m Tiffany, one of Polly’s generative voices. I was built to sound natural, expressive, and a little bit delightful. What should we talk about?”
- &lt;audio class="wp-audio-shortcode" id="audio-141976-1" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/01-tiffany-intro-4th-gen.mp3?_=1"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;/ul&gt; &lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Accurate speech generation for numbers, currency, addresses, and so on.&lt;/strong&gt; Kenneth reads back an order confirmation, including the tracking number, date and time, currency and address accurately.
- &lt;ul&gt;
- &lt;li&gt;“Thanks for calling. Your order, number 4471 9902 ships today to 85 Harbor View Drive, Apartment 4B, Portland, Oregon 97209. It should arrive on Thursday, October 22nd, between 9 AM and 1 PM. Your total was $1,284.50 and your confirmation code is K-7-Q-2-X-9.”
- &lt;audio class="wp-audio-shortcode" id="audio-141976-2" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/details-acc-kenneth.mp3?_=2"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;/ul&gt; &lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Net new languages.&lt;/strong&gt; Arjun and Kiara for Hindi, and Suvi for Finnish. Hindi and Finnish are generally available for the first time on the Amazon Polly Generative engine.
- &lt;ul&gt;
- &lt;li&gt;&lt;strong&gt;Arjun&lt;/strong&gt;: नमस्कार, आप सुन रहे हैं आज की मुख्य ख़बरें। देश के कई हिस्सों में मानसून की विदाई के साथ मौसम सुहाना हो गया है। (Hello, you’re listening to today’s top stories. As the monsoon retreats across much of the country, the weather has turned pleasant.)
- &lt;audio class="wp-audio-shortcode" id="audio-141976-3" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/use-case-news-hi.mp3?_=3"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Kiara&lt;/strong&gt;: नमस्ते! मेरा नाम कियारा है। आइए, आज मैं आपको एक छोटी सी कहानी सुनाती हूँ।(Hello! My name is Kiara. Come, let me tell you a little story today.)
- &lt;audio class="wp-audio-shortcode" id="audio-141976-4" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/greeting-kiara-hi.mp3?_=4"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Suvi&lt;/strong&gt;: Majakanvartija ei ollut nähnyt laivaa yhteentoista päivään. Sitten, vähän puolenyön jälkeen, horisontissa välähti yksi ainoa valo. Kerran. Kahdesti. Ja sitten, uskomatonta kyllä, se vilkutti takaisin hänen nimensä. (The lighthouse keeper hadn’t seen a …
- &lt;audio class="wp-audio-shortcode" id="audio-141976-5" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/09-suvi-finnish-4th-gen.mp3?_=5"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;/ul&gt; &lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Different styles of speech delivery based on textual context.&lt;/strong&gt; Powered by the new Amazon Polly Generative engine, the voices can reflect emotion and prosody even better based on the text input, without manual setup.
- &lt;ul&gt;
- &lt;li&gt;&lt;strong&gt;Neutral&lt;/strong&gt;: “Your package arrived early.”
- &lt;audio class="wp-audio-shortcode" id="audio-141976-6" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/context-neutral-kenneth.mp3?_=6"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Uncertainty&lt;/strong&gt;: “So, um… your package arrived early. I think?”
- &lt;audio class="wp-audio-shortcode" id="audio-141976-7" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/context-unsure-kenneth.mp3?_=7"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Surprised&lt;/strong&gt;: “Wait, what? Your package arrived early?”
- &lt;audio class="wp-audio-shortcode" id="audio-141976-8" preload="none" style="width: 100%;" controls="controls"&gt;
- &lt;source type="audio/mpeg" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/22/context-question-kenneth.mp3?_=8"&gt;
- &lt;/audio&gt;&lt;/li&gt;
- &lt;/ul&gt; &lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The agent and reward live in one place.&lt;/strong&gt; A single Python file deployed to AgentCore holds the environment, the tool, and the scoring function.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The dataset carries only the secret word.&lt;/strong&gt; The word lists bundled with the agent are built from the open-source &lt;a href="http://wordlist.aspell.net/" target="_blank" rel="noopener"&gt;SCOWL&lt;/a&gt; word lists and are used only for scoring.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;The reward is outcome-dominant.&lt;/strong&gt; A solve pays 1.05–1.55 depending on speed, a loss pays -0.5, and never making a valid guess pays -1.5. A small shaping term rewards good strategy within each tier.&lt;/li&gt;
&lt;/ul&gt;
-&lt;h2 id="new-voices-languages-and-region-availability"&gt;New voices, languages, and Region availability&lt;/h2&gt;
+&lt;h3 id="supported-models-and-regions"&gt;Supported models and AWS Regions&lt;/h3&gt;
+&lt;p&gt;MTRL is serverless: you pick a base model and the service provisions the training and sampling infrastructure. At the time of writing, it supports the following base models, each trained with a LoRA adapter:&lt;/p&gt;
+&lt;table border="1px" width="100%" cellpadding="10px"&gt;
+ &lt;tbody&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Base model&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;AWS Regions&lt;/strong&gt;&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Amazon Nova 2 Lite&lt;/td&gt;
+ &lt;td&gt;US East (N. Virginia) (us-east-1), US West (Oregon) (us-west-2)&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;code&gt;GPT-OSS-20B&lt;/code&gt;&lt;/td&gt;
+ &lt;td&gt;US East (N. Virginia) (us-east-1), US West (Oregon) (us-west-2)&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Gemma 4 31B (instruction-tuned)&lt;/td&gt;
+ &lt;td&gt;US West (Oregon) (us-west-2)&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Qwen 3.6 27B&lt;/td&gt;
+ &lt;td&gt;US West (Oregon) (us-west-2)&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;p&gt;We chose &lt;code&gt;GPT-OSS-20B&lt;/code&gt; because it has the lowest per-token price of the four and its reasoning effort is controllable per request. See the &lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-mtrl.html" target="_blank" rel="noopener"&gt;MTRL doc…
+&lt;h3 id="pricing"&gt;Pricing&lt;/h3&gt;
+&lt;p&gt;You don’t choose instances or size a cluster. You pay per million tokens in three dimensions, priced by base model:&lt;/p&gt;
&lt;ul&gt;
- &lt;li&gt;&lt;strong&gt;A larger catalog overall for Amazon Polly Generative engine&lt;/strong&gt; – Totaling 57 generative voices across 11 languages and 25 locales.&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;14 new voices&lt;/strong&gt; across 9 locales – US English (Kenneth, Nate), Australian English (Russell, Curtis), Indian English (Kiara, Arjun), German (Tina), US Spanish (Carlos), Brazilian Portuguese (Leo, Carolina), Korean (Hyunduk), Hindi (Kiara, Arjun) and Finnish (Suvi…
- &lt;li&gt;&lt;strong&gt;Net new languages generally available in Generative engine –&lt;/strong&gt;&amp;nbsp;Hindi and Finnish.&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Region expansion&lt;/strong&gt; to AWS GovCloud (US-West) – Totaling 11 AWS Regions.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Prefill:&lt;/strong&gt; input tokens the policy model processes. These accumulate in a multi-turn task, because every turn re-reads the history.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Sample:&lt;/strong&gt; tokens the policy model generates, including reasoning tokens.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Train:&lt;/strong&gt; tokens processed in the backward pass that updates the LoRA adapter.&lt;/li&gt;
&lt;/ul&gt;
-&lt;h2 id="built-for-production-ready-speech-workflows-for-enterprise"&gt;Built for production-ready speech workflows for enterprise&lt;/h2&gt;
-&lt;p&gt;The upgraded Amazon Polly Generative engine uses a standard Amazon Polly API call to build your speech applications. With Amazon Polly, you can continue to build with familiar AWS patterns: call the same Amazon Polly API, manage access with AWS Identity and Access Management (IAM), use the …
-&lt;p&gt;This launch is designed to elevate the speech output quality that you can hear with your existing Amazon Polly implementation. No changes to your code are required to get the upgraded voices. For applications that already use Amazon Polly Generative voices, the upgrade happens in place. For…
-&lt;h2 id="competitive-price-performance"&gt;Competitive price-performance&lt;/h2&gt;
-&lt;p&gt;The Amazon Polly Generative engine offers competitive pricing on a pay-as-you-go basis. With this model upgrade, you get improved voice quality and accuracy at the same price. There’s no cost increase, no new SKU, and no changes to your existing integration. You can cache and replay synthes…
-&lt;p&gt;The Amazon Polly Generative engine now delivers more natural, expressive speech alongside low-latency streaming for real-time applications, Speech Synthesis Markup Language (SSML) support for fine-grained control, and the operational reliability of a fully managed AWS service. This combinat…
-&lt;h2 id="what-you-can-build"&gt;What you can build&lt;/h2&gt;
-&lt;p&gt;&lt;strong&gt;Contact centers.&lt;/strong&gt; Accuracy matters most in customer service conversations. When a caller checks an order, a voice that reads back the tracking number, address, and confirmation code correctly helps resolve the call in self-service rather than escalating to a huma…
-&lt;p&gt;&lt;strong&gt;Cascaded voice agents.&lt;/strong&gt; Using Amazon Polly in a voice agent framework, you can convert LLM response text into clear, natural-sounding speech and stream it back to users in near real time over WebSockets or telephony channels. This makes live conversational voice …
-&lt;p&gt;&lt;strong&gt;Media, localization, and dubbing.&lt;/strong&gt; Convert scripts into finished audio for video, advertising, podcasts, product overviews, and audiobooks. You can use one voice or many, without a studio session. More natural intonation reduces post-production. The expanded loca…
-&lt;p&gt;&lt;strong&gt;E-learning and training.&lt;/strong&gt; Narrate courseware, onboarding, and knowledge-based articles at scale, and update them as soon as the source text changes. No re-recording is required. More expressive delivery supports engagement through long-form material.&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Accessibility.&lt;/strong&gt; Provide a clear, natural spoken version of articles, documents, and applications so more people can consume your content by listening: read aloud, on the go, or with a screen reader.&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Interactive and transactional experiences.&lt;/strong&gt; Voice-enable games, kiosks, IVR menus, and IoT devices with responses generated on demand. Use Amazon Polly when the voice needs to sound natural and read names, numbers, product details, addresses, and confirmations re…
-&lt;blockquote&gt;
- &lt;p&gt;&lt;em&gt;“At Sanoma Media Finland, we use Amazon Polly to turn our real-time news articles into audio, giving the listener the choice to listen whenever it suits them better. Today we publish over 10,000 articles per month using Polly’s Finnish neural voice. Based on our testing, Suvi’s n…
- &lt;p&gt;— Justus Reinikainen, Product Manager, Sanoma Media Finland&lt;/p&gt;
-&lt;/blockquote&gt;
-&lt;h2 id="getting-started"&gt;Getting started&lt;/h2&gt;
-&lt;p&gt;You can access the new voices using the &lt;a href="https://console.aws.amazon.com/" target="_blank" rel="noopener"&gt;AWS Management Console&lt;/a&gt;, &lt;a href="https://aws.amazon.com/cli" target="_blank" rel="noopener"&gt;AWS Command Line Interface (AWS CLI)&lt;/a&gt;, or the AWS SDKs.…
-&lt;p&gt;Prerequisites:&lt;/p&gt;
+&lt;p&gt;The 100-step run consumed 491.6 million prefill, 159.7 million sample, and 643.3 million train tokens across 105,486 rollouts in 12 hours 40 minutes. At &lt;code&gt;GPT-OSS-20B&lt;/code&gt; list prices in the US East (N. Virginia) Region (us-east-1) at the time of writing, that is about $33…
+&lt;table border="1px" width="100%" cellpadding="10px"&gt;
+ &lt;tbody&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Dimension&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Tokens&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Price per 1M&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Prefill&lt;/td&gt;
+ &lt;td&gt;491,616,806&lt;/td&gt;
+ &lt;td&gt;$0.12&lt;/td&gt;
+ &lt;td&gt;$58.99&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Sample&lt;/td&gt;
+ &lt;td&gt;159,737,098&lt;/td&gt;
+ &lt;td&gt;$0.30&lt;/td&gt;
+ &lt;td&gt;$47.92&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Train&lt;/td&gt;
+ &lt;td&gt;643,308,554&lt;/td&gt;
+ &lt;td&gt;$0.36&lt;/td&gt;
+ &lt;td&gt;$231.59&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;Total&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;1,294,662,458&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;$338.50&lt;/strong&gt;&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;p&gt;The train dimension dominates and scales with trajectory length, so shorter games and less verbose reasoning cut the bill. The AgentCore runtime bills separately for the vCPU and memory the agent uses. For this run, that was about $79, from the runtime’s Amazon CloudWatch usage metrics at u…
+&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
+&lt;p&gt;To follow this walkthrough, you need the following. See also the &lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-mtrl-prereqs.html" target="_blank" rel="noopener"&gt;MTRL prerequisites&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
- &lt;li&gt;Active AWS account with Amazon Polly access.&lt;/li&gt;
- &lt;li&gt;AWS Command Line Interface (AWS CLI) installed and configured.&lt;/li&gt;
- &lt;li&gt;Python 3.10+.&lt;/li&gt;
- &lt;li&gt;Boto3 installed: &lt;code&gt;pip install boto3&lt;/code&gt;.&lt;/li&gt;
- &lt;li&gt;AWS Identity and Access Management (IAM) permissions: &lt;code&gt;polly:SynthesizeSpeech&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;Python 3.10 or later, uv, Node 20 or later, and the AgentCore CLI (&lt;code&gt;npm install -g @aws/agentcore&lt;/code&gt;). See &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agentcore-get-started-cli.html" target="_blank" rel="noopener"&gt;Get started with Amaz…
+ &lt;li&gt;botocore 1.43.37 or later, on the machine that launches the job. This is the first version that includes the &lt;code&gt;AgentRFT&lt;/code&gt; &lt;code&gt;CreateJob&lt;/code&gt; operation.&lt;/li&gt;
+ &lt;li&gt;Two AWS Identity and Access Management (IAM) roles, described in Step 1.&lt;/li&gt;
+ &lt;li&gt;An Amazon Simple Storage Service (Amazon S3) bucket in the same Region as the agent. The training job must also run in that Region, because &lt;code&gt;CreateJob&lt;/code&gt; rejects a cross-Region runtime ARN.&lt;/li&gt;
&lt;/ul&gt;
-&lt;p&gt;Here’s a quick example using the AWS SDK for Python (Boto3) with the &lt;code&gt;SynthesizeSpeech&lt;/code&gt; API and a generative voice:&lt;/p&gt;
+&lt;h2 id="step-1-create-the-iam-roles"&gt;Step 1: Create the IAM roles&lt;/h2&gt;
+&lt;p&gt;MTRL uses two roles, and one of them has a trust policy that the general SageMaker AI documentation doesn’t mention.&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Agent runtime role.&lt;/strong&gt; &lt;code&gt;agentcore deploy&lt;/code&gt; creates this role for you. It trusts &lt;code&gt;bedrock-agentcore.amazonaws.com&lt;/code&gt; and needs the &lt;code&gt;AmazonSageMakerJobRuntimeAccess&lt;/code&gt; managed policy, which lets the agen…
+&lt;p&gt;&lt;strong&gt;Training job role.&lt;/strong&gt; You create this one. It must trust &lt;code&gt;job.sagemaker.amazonaws.com&lt;/code&gt; with both &lt;code&gt;sts:AssumeRole&lt;/code&gt; and &lt;code&gt;sts:TagSession&lt;/code&gt;, and it needs the &lt;code&gt;AmazonSageMakerJobFullAccess&lt…
&lt;div class="hide-language"&gt;
- &lt;pre&gt;&lt;code class="language-python"&gt;import boto3
+ &lt;pre&gt;&lt;code class="language-json"&gt;{
+ "Version": "2012-10-17",
+ "Statement": [{
+ "Effect": "Allow",
+ "Principal": {"Service": "job.sagemaker.amazonaws.com"},
+ "Action": ["sts:AssumeRole", "sts:TagSession"]
+ }]
+}&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The trust principal is &lt;code&gt;job.sagemaker.amazonaws.com&lt;/code&gt;, not &lt;code&gt;sagemaker.amazonaws.com&lt;/code&gt;. With the generic principal, &lt;code&gt;CreateJob&lt;/code&gt; fails with “Could not assume role,” and the message names the …
+&lt;h2 id="step-2-deploy-the-agent-to-amazon-bedrock-agentcore"&gt;Step 2: Deploy the agent to Amazon Bedrock AgentCore&lt;/h2&gt;
+&lt;p&gt;Clone the &lt;a href="https://github.com/aws-samples/sample-multi-turn-rl-wordle" target="_blank" rel="noopener"&gt;sample repository&lt;/a&gt;, set your account and Region in Wordle/agentcore/&lt;code&gt;aws-targets.json&lt;/code&gt;, and deploy:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;git clone https://github.com/aws-samples/sample-multi-turn-rl-wordle
+cd sample-multi-turn-rl-wordle/Wordle
+agentcore validate
+agentcore deploy&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;The CLI builds the agent’s dependencies for the runtime’s Linux ARM64 platform, creates the execution role with &lt;code&gt;AmazonSageMakerJobRuntimeAccess&lt;/code&gt; attached, and deploys through AWS CloudFormation. We recommend it over uploading a code package on the console, where it’s…
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-2.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-2.png" alt="Amazon Bedrock AgentCor…
+ &lt;p class="wp-caption-text"&gt;Figure 2: The Wordle agent runtime in the Amazon Bedrock AgentCore console with status Ready&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;The runtime reads two environment variables from &lt;code&gt;agentcore.json&lt;/code&gt;. &lt;code&gt;REASONING_EFFORT=low&lt;/code&gt; sets &lt;code&gt;reasoning_effort&lt;/code&gt; on every request to the policy model. In our evaluation jobs, low effort used 63 to 83 percent fewer sample …
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-3.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-3.png" alt="AgentCore console envir…
+ &lt;p class="wp-caption-text"&gt;Figure 3: Runtime environment variables showing REASONING_EFFORT set to low&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;The agent is one file, &lt;code&gt;main.py&lt;/code&gt;. Simplified, its entrypoint looks like the following. For your own task, you change the task parsing, the tools, and the reward:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-python"&gt;app = BedrockAgentCoreApp()
-polly = boto3.client("polly", region_name="us-east-1")
+@app.entrypoint # outermost: starts the HTTP server AgentCore invokes
+@sagemaker_rft_handler # reports the returned reward to SageMaker AI
+def handle_rollout(payload):
+ prompt, answer = parse_task(payload["prompt"])
+ game = WordleGame(answer)
-response = polly.synthesize_speech(
- Text="Hello! This is Amazon Polly's next-generation generative voice.",
- VoiceId="Kenneth", # any generative voice in the catalogue
- Engine="generative",
- OutputFormat="mp3",
-)
+ @tool
+ def guess_word(guess: str) -&amp;gt; str:
+ """Submit a 5-letter Wordle guess and get feedback."""
+ return game.guess(guess)
-with open("speech.mp3", "wb") as f:
- f.write(response["AudioStream"].read())&lt;/code&gt;&lt;/pre&gt;
+ agent = Agent(model=build_model(), system_prompt=SYSTEM_PROMPT, tools=[guess_word])
+ agent(prompt)
+ return {"reward": game.final_reward()}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
-&lt;p&gt;You can also make the same request with the AWS CLI:&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; The &lt;code&gt;sagemaker_rft_handler&lt;/code&gt; decorator does not start an HTTP server by itself. Wrap it with &lt;code&gt;BedrockAgentCoreApp&lt;/code&gt; and &lt;code&gt;@app.entrypoint&lt;/code&gt;, with the entrypoint decorator outermost. With…
+&lt;h2 id="step-3-verify-the-runtime"&gt;Step 3: Verify the runtime&lt;/h2&gt;
+&lt;p&gt;Before spending GPU time, confirm the whole chain works with a payload shaped like the one the training service sends. The repository includes one as Wordle/&lt;code&gt;payload.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="hide-language"&gt;
- &lt;pre&gt;&lt;code class="language-bash"&gt;aws polly synthesize-speech \
- --region us-east-1 \
- --voice-id Kenneth \
- --engine generative \
- --output-format mp3 \
- --text "Hello! This is Amazon Polly's next-generation generative voice." \
- speech.mp3&lt;/code&gt;&lt;/pre&gt;
+ &lt;pre&gt;&lt;code class="language-json"&gt;{
+ "prompt": "{\"prompt\": \"Guess the 5-letter word\", \"answer\": \"beach\", \"id\": \"smoke-test\"}",
+ "metadata": {
+ "jobArn": "arn:aws:sagemaker:us-east-1:111122223333:job/AgentRFT/smoke-test",
+ "rolloutId": "r1"
+ }
+}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
-&lt;p&gt;To retrieve the full, current voice list programmatically, call &lt;code&gt;DescribeVoices&lt;/code&gt;. You can use this in deployment checks to confirm that a selected generative voice is available in the Region where your application runs.&lt;/p&gt;
-&lt;h2 id="availability"&gt;Availability&lt;/h2&gt;
-&lt;p&gt;The next-generation Generative engine and the new voices are now generally available. The 14 new Generative voices are available in the following AWS Regions: US East (N. Virginia), US West (Oregon), Europe (Frankfurt), Europe (Zurich), Europe (London), Asia Pacific (Sydney), Asia Pacific (…
+&lt;p&gt;The fake job ARN is expected to fail, and the way it fails is the proof. Put your own account ID into it first: for a job ARN in another account, the service returns a 403 before it checks whether the job exists, which looks like a broken IAM setup. From the Wordle directory, run:&lt;/p&gt;…
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
+sed "s/111122223333/$ACCOUNT/" payload.json &amp;gt; /tmp/payload.json
+
+aws bedrock-agentcore invoke-agent-runtime \
+ --agent-runtime-arn &amp;lt;RUNTIME_ARN&amp;gt; \
+ --runtime-session-id smoke-test-$(date +%s)000000000000000 \
+ --payload fileb:///tmp/payload.json /dev/stdout&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;In the runtime’s Amazon CloudWatch logs, you see the agent parse the prompt, authenticate to the Job Runtime endpoint, and receive a 400 error reading “Could not find job.” That failure confirms that parsing, authentication, and error reporting work. The command itself prints {“reward”: -1.…
+&lt;h2 id="step-4-prepare-the-dataset"&gt;Step 4: Prepare the dataset&lt;/h2&gt;
+&lt;p&gt;The MTRL dataset has no target responses, transcripts, or labels. Each row is one task for the agent to attempt. Here are the first three rows of the training file:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-json"&gt;{"prompt": "{\"prompt\": \"Guess the 5-letter word\", \"answer\": \"riser\", \"id\": \"wordle_train_0000\"}"}
+{"prompt": "{\"prompt\": \"Guess the 5-letter word\", \"answer\": \"swoon\", \"id\": \"wordle_train_0001\"}"}
+{"prompt": "{\"prompt\": \"Guess the 5-letter word\", \"answer\": \"dirty\", \"id\": \"wordle_train_0002\"}"}&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;The service reads the &lt;code&gt;prompt&lt;/code&gt; column (or the first column) and passes the string to your agent verbatim, without parsing it. We made the string a small JSON object with three fields:&lt;/p&gt;
&lt;ul&gt;
- &lt;li&gt;&lt;strong&gt;Developers&lt;/strong&gt; – Call &lt;code&gt;synthesize_speech&lt;/code&gt; with &lt;code&gt;Engine="generative"&lt;/code&gt; in your existing application. No other changes are required.&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Contact-center teams&lt;/strong&gt; – The improvements reach &lt;strong&gt;Amazon Connect&lt;/strong&gt; and &lt;strong&gt;Genesys&lt;/strong&gt; flows automatically.&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Everyone&lt;/strong&gt; – Access any voice in the &lt;a href="https://console.aws.amazon.com/polly/" target="_blank" rel="noopener"&gt;Amazon Polly console&lt;/a&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;prompt:&lt;/strong&gt; the instruction the agent shows the policy model, identical on every row.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;answer:&lt;/strong&gt; the secret word. Only the environment and the reward function use it. The policy model never sees it.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;id:&lt;/strong&gt; a row ID for tracing a rollout in the logs back to its source row.&lt;/li&gt;
&lt;/ul&gt;
-&lt;p&gt;A few things to know:&lt;/p&gt;
+&lt;p&gt;The sample repository’s &lt;code&gt;make_dataset.py&lt;/code&gt; draws 640 training words (five full batches of 128) and 128 validation words from the answer list with no overlap, so the validation solve rate measures generalization. The service also accepts Apache Parquet, JSON arrays, and…
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;uv run python make_dataset.py
+aws s3 cp training-data.jsonl s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/train/
+aws s3 cp validation-data.jsonl s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/validation/&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;Because the service never inspects the &lt;code&gt;prompt&lt;/code&gt; string, a production task can pack a full message list, tool configuration, or reward specification into it. See the &lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-mtrl-assets.html" target="_…
+&lt;h2 id="step-5-launch-the-training-job"&gt;Step 5: Launch the training job&lt;/h2&gt;
+&lt;p&gt;The launcher uses the &lt;code&gt;MultiTurnRLTrainer&lt;/code&gt; class from the &lt;code&gt;sagemaker-train&lt;/code&gt; SDK. Point it at the runtime ARN from Step 2, the role from Step 1, the datasets from Step 4, and an MLflow app for metrics. The MLflow app is required, so if you don’t …
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;uv run python run_mtrl_training.py \
+ --model openai-reasoning-gpt-oss-20b \
+ --agent-runtime-arn &amp;lt;RUNTIME_ARN&amp;gt; \
+ --role-arn arn:aws:iam::&amp;lt;ACCOUNT&amp;gt;:role/&amp;lt;JOB_ROLE&amp;gt; \
+ --train-dataset s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/train/training-data.jsonl \
+ --val-dataset s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/validation/validation-data.jsonl \
+ --s3-output-path s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/output/ \
+ --mlflow-app-arn arn:aws:sagemaker:&amp;lt;REGION&amp;gt;:&amp;lt;ACCOUNT&amp;gt;:mlflow-app/&amp;lt;APP_ID&amp;gt;&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;The launcher overrides three hyperparameters and leaves every other one at the gpt-oss-20b default. It sets &lt;code&gt;sampling_max_tokens&lt;/code&gt; to 8192, the service maximum, because at the default of 4096 gpt-oss often ran out of tokens while reasoning, before its first tool call. …
+&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Don’t redeploy the agent while a job is running. Redeploying restarts the runtime, in-flight rollouts see no sampling requests, and the service fails the entire job.&lt;/p&gt;
+&lt;h2 id="step-6-monitor-training-in-mlflow"&gt;Step 6: Monitor training in MLflow&lt;/h2&gt;
+&lt;p&gt;The service logs reward, token, and turn statistics at every step and runs validation every &lt;code&gt;val_every&lt;/code&gt; steps. The metric to watch is &lt;code&gt;val/reward/pass_at_1&lt;/code&gt;, the fraction of held-out words solved. Every solve scores at least 1.01, so it clears t…
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-4.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-4.png" alt="Two line charts trackin…
+ &lt;p class="wp-caption-text"&gt;Figure 4: Training curves for the 100-step run, with mean reward per game on the left and validation solve rate on the right&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;Training reward climbs to about +0.57 within 15 steps and holds there. Validation reward stays lower, mostly because of temperature 1.0 versus 0 rather than overfitting (see Step 7). The validation solve rate jumps from 2 to 31 percent in the first 10 steps, then moves between 35 and 48 per…
+&lt;p&gt;The runtime’s OpenTelemetry traces in CloudWatch record every model turn and tool call. Here is one game the trained model played during an evaluation job (medium effort, temperature 1.0), with the reasoning trimmed. The secret word was PASTE:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-text"&gt;[model] Reasoning: [...] "CRANE" has 5 distinct letters: C,R,A,N,E. [...]
+We'll guess "CRANE".
+Tool call: guess_word(guess="CRANE")
+[tool] Guess 1/6: CRANE -&amp;gt; C=gray, R=gray, A=yellow, N=gray, E=green
+Current Knowledge:
+- Correct Position (Green): _ _ _ _ E
+- In Word, Wrong Position (Yellow): 'A' (at least 1)
+- Not in Word (Gray): C, N, R
+- Guesses Remaining: 5
+[model] Reasoning: [...] "ALIVE": ends with E, includes A. Letters not C,N,R.
+Tool call: guess_word(guess="ALIVE")
+[tool] Guess 2/6: ALIVE -&amp;gt; A=yellow, L=gray, I=gray, V=gray, E=green
+[model] Reasoning: [...] So positions not 1 or 3 for A. Positions left: 2,4
+for A. [...] We might guess "HASTE"? [...]
+Tool call: guess_word(guess="HASTE")
+[tool] Guess 3/6: HASTE -&amp;gt; H=gray, A=green, S=green, T=green, E=green
+[model] Reasoning: We have the word: _ASTE. [...] "PASTE" is a word. PASTE
+fits. Also "WASTE" also fits [...] Choose "PASTE" maybe.
+Tool call: guess_word(guess="PASTE")
+[tool] Guess 4/6: PASTE --- all green. Correct, you solved it!&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;A trained-model rollout from the AgentCore runtime traces. The model keeps green letters in place, never reuses a gray letter, and uses each yellow letter to rule out positions, though nothing in the training data showed it how.&lt;/p&gt;
+&lt;h2 id="step-7-evaluate-the-trained-model-at-serving-settings"&gt;Step 7: Evaluate the trained model at serving settings&lt;/h2&gt;
+&lt;p&gt;When the job completes, its page in SageMaker AI Studio shows the status and the model package group that holds the trained model. &lt;code&gt;DescribeJob&lt;/code&gt;, with &lt;code&gt;JobCategory&lt;/code&gt; set to &lt;code&gt;AgentRFT&lt;/code&gt;, returns the output model package ARN a…
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-5.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-5.png" alt="SageMaker AI Studio Job…
+ &lt;p class="wp-caption-text"&gt;Figure 5: The completed training job in SageMaker AI Studio on the Jobs, Training, Multi-turn RL tab&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;An &lt;a href="https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-mtrl-evaluation.html" target="_blank" rel="noopener"&gt;evaluation job&lt;/a&gt; (&lt;code&gt;JobCategory&lt;/code&gt; set to &lt;code&gt;AgentRFTEvaluation&lt;/code&gt;) plays your evaluation prompts through the…
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;uv run python run_mtrl_eval.py --runs base:1.0 trained:1.0 \
+ --model-package-arn &amp;lt;OUTPUT_MODEL_PACKAGE_ARN&amp;gt; \
+ --agent-runtime-arn &amp;lt;RUNTIME_ARN&amp;gt; \
+ --role-arn arn:aws:iam::&amp;lt;ACCOUNT&amp;gt;:role/&amp;lt;JOB_ROLE&amp;gt; \
+ --dataset s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/validation/validation-data.jsonl \
+ --s3-output-path s3://&amp;lt;YOUR_BUCKET&amp;gt;/wordle-mtrl/eval/ \
+ --mlflow-app-arn arn:aws:sagemaker:&amp;lt;REGION&amp;gt;:&amp;lt;ACCOUNT&amp;gt;:mlflow-app/&amp;lt;APP_ID&amp;gt;&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-6.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-6.png" alt="Reasoning effort and sa…
+ &lt;p class="wp-caption-text"&gt;Figure 6: Reasoning effort and sampling temperature at each stage, where the training job fixes validation at temperature 0 and the deployed effort while evaluation jobs let you choose&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;Each 128-word evaluation took four to seven minutes. Reasoning effort comes from the agent’s environment variables, so to change it you edit &lt;code&gt;REASONING_EFFORT&lt;/code&gt;, redeploy, and evaluate. We evaluated both models at low and medium effort and at temperature 0 and 1.0:&lt;…
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-7.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/12/ML-22014-7.png" alt="Bar charts comparing ba…
+ &lt;p class="wp-caption-text"&gt;Figure 7: Base model versus trained model under four decoding settings, with solve rate on the left and mean reward per game on the right&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;The gray segment of each bar is the base model and the blue segment is the gain from training. The low-effort, temperature-0 pair is the training job’s validation at steps 0 and 100. The medium-effort, temperature-1.0 trained result is the mean of two runs (80 and 88 percent).&lt;/p&gt;
+&lt;p&gt;At temperature 0, both models often end the game without a solve, at either effort. With sampling on, medium effort adds 15 points for the trained model and 46 for the base model. The adapter adds 14–54 points in every setting, so what training taught transfers across settings.&lt;/p&gt;

Diff display stops at 400 lines. The line counts above are from the whole diff. 50 lines shown here cut at 300 characters. The raw artifact at this commit is linked above.