Amazon engineers describe a reusable migration from Claude Sonnet 4.6 to a decision model, combining shorter label definitions, confidence tuning and parallel production evaluation.
Amazon engineers say replacing Claude Sonnet 4.6 with Strands Decider cut AI labeling costs by 98% for an internal ticket-classification system, projecting millions of dollars in annual token savings.
The team selected the E4B Gemma 4 build of Strands Decider, ran it on SageMaker ml.g5.xlarge instances, and reduced tokens per ticket from 6,724 to 2,010. Their three-mode Lambda switch — BEDROCK, DUAL, and DECIDER — let Decider process live traffic before controlling production labels. The engineers caution that savings depend heavily on utilization and that frequently changing catalogs are a poor fit.
Amazon engineers Carr Onstott and Mehul Jaiswal say replacing Claude Sonnet 4.6 with Strands Decider cut AI costs for an internal ticket-labeling system by 98%. The team reports comparable classification performance and projects millions of dollars in annual token savings.
Their November 9, 2026 Strands Agents write-up describes a specific migration: take a high-volume task with 20 known categories, replace generated JSON with a decision output, and compare both systems before changing which one controls production labels.
The useful contribution is the implementation pattern. Teams considering a similar move can copy the evaluation sequence, deployment structure and rollback mechanism without assuming they will reproduce Amazon's savings.
Why Ticket Labeling Fits a Decision Model
Amazon's system handles customer escalations, capacity requests, automated alarms, security findings and other internal tickets. Sonnet 4.6 processed each ticket with a long system prompt, reasoned against the label catalog and generated JSON.
Strands Decider accepts a state, a question and a set of possible answers. It returns probabilities for the options plus a confidence score. It cannot generate free-form text, according to the engineers' account.
For this application, the mapping is straightforward:
State: the ticket's content.
Options: the available ticket categories, plus a "none" option.
Decision: which category to apply, subject to a confidence threshold.
A fixed catalog removes much of the need for text generation. The consuming application needs a label, not a paragraph explaining it. That makes this a plausible candidate for specialization.
I'd begin with that output contract when assessing a replacement. If a downstream workflow needs explanations, summaries or suggested actions, a label-only model cannot supply them. The engineers also caution that frequently changing catalogs and tickets requiring extensive context are poor fits for this approach. Those constraints narrow the opportunity to a particular class of classification work; they do not make this a general replacement for Anthropic's Sonnet.
Build the Comparison Around Labels and Confidence
The engineers started with the original Strands Decider 2B, then selected the E4B Gemma 4 build after it performed better on their ticket test set. They tuned the confidence required to apply a label and compared that configuration with production Sonnet on a separate ticket set.
Define the closed label catalog. Identify the decisions the application actually needs to make, including what happens when no category fits.
Rewrite labels as concise criteria. Amazon reduced each of its 20 label descriptions to one or two sentences and supplied them as options in a single-choice question.
Compare candidate builds offline. Use held-out tickets to select a candidate before changing production behavior.
Tune the confidence threshold. Decide how much confidence is required before the application accepts a label.
Compare the selected configuration with production on a separate set. Keep model selection and the final comparison distinct.
The shorter criteria were necessary because Decider's context window was 4,096 tokens. Amazon's production label descriptions alone exceeded that limit. The team also dropped the oldest comments from long tickets to make them fit.
That means the migration changed three things together: the model, the label descriptions and, for long tickets, the available history. Any quality comparison evaluates that complete pipeline. I'd explicitly track long-ticket results because losing an early comment could matter even when aggregate results look healthy.
The authors say E4B beat production Sonnet on the separate comparison set. However, the post supplies no raw ticket dataset, numerical quality scores, absolute traffic volume or independent replication. It also leaves readers without enough evaluation detail to reproduce the quality claim.
Treat Confidence as a Policy Setting
A confidence threshold determines which predictions the application accepts. Raising it generally trades coverage for selectivity: fewer tickets may receive an automatic label, but the accepted subset can be more reliable.
A confidence score is not automatically a calibrated probability of correctness. For another deployment, I'd measure both accepted-label accuracy and the proportion of tickets accepted at each threshold. A model that performs well only after declining most tickets may be useful, but it has different economics from one that handles nearly everything.
The write-up does not specify the low-confidence handling policy, so teams need to define their own path for those tickets, such as review, leaving them unlabeled or invoking another model.
Use Three Modes to Separate Testing From Control
Amazon's labeling Lambda reads a three-way setting from AWS AppConfig for every message. The modes determine which models run and whose answer reaches the ticket:
Mode
Models called
Label applied
BEDROCK
Sonnet through Bedrock
Sonnet's result
DUAL
Sonnet and Decider in parallel
Sonnet's result; Decider is compared
DECIDER
Decider only
Decider's result
The important distinction is between producing a prediction and allowing it to affect production. In DUAL, Decider sees live traffic without controlling the labels. The engineers say examining disagreements on real tickets taught them more than offline evaluation alone.
I'd copy this switch before copying the model choice. It creates a controlled way to inspect unfamiliar ticket formats, changing traffic and operational failures while preserving the existing labeling path. Returning the setting to BEDROCK also provides a rollback route, provided that path remains available.
Agreement alone is not a quality metric: both models can make the same mistake. A practical evaluation should assess disagreements against the intended labeling rules and inspect some agreements too. That is an evaluation recommendation, not an additional result published by Amazon.
The team defined its infrastructure in AWS CDK with Beta, Gamma and Prod deployment stages, adding environment-level staging alongside the runtime model switch.
Deploy the Model Behind a Network-Isolated Endpoint
The production path uses standard AWS services:
Ticket events enter an SQS queue.
A Lambda function reads ticket data and calls the model.
A SageMaker AI endpoint serves Strands Decider.
AppConfig holds the operating mode.
CloudWatch carries logs, metrics and alarms.
The engineers ran E4B on SageMaker ml.g5.xlarge instances, each with one A10G GPU and 24 GB of GPU memory. They report roughly 19 GiB of model memory use and about 640 milliseconds for one request on one instance.
The endpoint autoscales with traffic. Its model container has outbound network access blocked, and SageMaker copies the model weights from S3 before startup. Teams adopting this setup should therefore plan for the model to start from supplied artifacts without downloading dependencies during serving.
The reported 640 ms single-instance request time should stay separate from the 897 ms average call time in the comparison below. The post provides both figures without enough timing detail to treat them as interchangeable measurements.
Read the 98% Savings as a Utilization-Dependent Claim
The engineers report these results for their Sonnet and Decider pipelines:
Metric
Claude Sonnet 4.6
Strands Decider E4B
Average time per call
4,215 ms
897 ms
Input tokens per ticket
6,554
2,009
Output tokens per ticket
170
1
Total tokens per ticket
6,724
2,010
Reported cost per ticket
$0.0222
About $0.0005
Reported cost per million tickets
About $22,200
About $500
The token reduction comes from shorter input instructions and eliminating a generated JSON answer. The team reports a 70% reduction in total tokens and a 78% reduction in average call time. It separately reports that average Lambda execution duration fell 74% when Sonnet usage stopped.
The cost calculation uses published us-east-1 on-demand prices: $3 per million input tokens and $15 per million output tokens for Sonnet 4.6 through Bedrock's global endpoint, versus $1.408 per instance-hour for the SageMaker deployment.
Those are different billing models. Sonnet's quoted cost follows token usage. The GPU endpoint costs money while capacity is running, making utilization central to Decider's per-ticket figure.
At approximately 640 ms per request, the engineers estimate about 5,600 tickets per instance-hour. They calculate roughly $250 per million tickets at full utilization and about $500 per million after retaining headroom for bursts. The latter is about 44 times cheaper than their Sonnet baseline, rounded to a 98% reduction. The comparison excludes Lambda charges.
Low Traffic Changes the Economics
Using the authors' $1.408 hourly rate, reaching $0.0005 per ticket requires roughly 2,800 tickets per running instance-hour. That is arithmetic from their published figures, not a separate benchmark.
For illustration, an instance handling only 100 tickets an hour would cost about $0.01408 per ticket, or $14,080 per million, in instance charges alone. Autoscaling policy and idle time determine how closely a real deployment resembles either scenario.
My reading is that high volume is essential to interpreting this case. A busy shared endpoint can spread its GPU bill across many decisions. A lightly used dedicated endpoint may still offer latency or deployment benefits, but Amazon's headline percentage is not a portable price guarantee.
Normalize JSON Before Comparing Results
The engineers report an integration surprise: changing JSON key order while keeping content the same shifted output probabilities by up to 0.19. They now send requests with sorted keys.
That is a substantial movement on a probability scale. Near a threshold, it could change whether an application accepts a label, even though the underlying ticket content is unchanged.
Sorting keys makes request serialization consistent; it does not demonstrate that the model is insensitive to other formatting changes. I'd version the serializer, label criteria and truncation rules alongside the selected model and threshold. Otherwise, a seemingly minor API change could alter decisions and make later comparisons difficult to interpret.
Frequently Asked Questions
3 questions
1
Can Strands Decider Explain Its Labels?
The model described in the post cannot generate free-form text. It returns option probabilities and confidence, so workflows requiring explanations need another component.
2
Was the 98% Cost Reduction Independently Verified?
No independent verification is supplied. The figure comes from the implementing team's list-price calculation and reported instance utilization.
3
What Should Teams Copy First?
Start with held-out evaluation and the three-way production switch. Together, they let a team compare a candidate on real traffic before giving it control over labels.