Football Decider Lab: Choosing a Substitute with Strands Decider
Description and use
Демонстрационное приложение Football Decider Lab выбирает замену на основе инструкций тренера. Оно проверяет eligibility игроков, вызывает Strands Decider 2B через HTTP, применяет GatePolicy с порогом 0.7 и генерирует解释 Bedrock. В сценарии 'protect-lead' Decider выбрал
Problem
A football coach needs to choose among three eligible bench players for a substitution based on a specific instruction (e.g., 'protect the lead' or 'chase goal'), but the model may select the wrong player or produce low-confidence output that should trigger human review.
Outcome
In the 'protect-lead' scenario, Decider selected bench-23 (defensive cover) with confidence 0.7403 and the action SUBSTITUTE passed the gate. In the 'chase-goal' scenario, Decider selected bench-17 (attacking full-back) with confidence 0.1581 and the action REVIEW_MODEL was triggered because confidence fell below the 0.7 threshold. Both live responses and Bedrock explanations passed validation.
Workflow
- Check snapshot for missing workload data or telemetry older than 15 seconds; if missing, return REVIEW_DATA and set action to MONITOR.
- When synthetic substitution trigger is reached, check remaining substitution allowance and filter the bench.
- A candidate must be on the bench, have a readiness score of at least 60, and be approved for the outgoing player's role.
- If no eligible candidate, return NO_REPLACEMENT; if one candidate, use policy result without calling Decider; if several candidates, ask the model to choose.
- Call Strands Decider 2B via HTTP with match context, coach instruction, and eligible player descriptions; expected test answers stay outside the request.
- Validate the response: reject unknown player IDs, invalid probability distributions, or unexpected model identity.
- Apply GatePolicy with threshold 0.7: below threshold, keep selected player in record and set action to REVIEW_MODEL; at or above threshold, set action to SUBSTITUTE.
- Create immutable DecisionRecord storing input snapshot, eligibility results, offered options, raw model response, final action, and hashes for prompt, option set, and gate configuration.
- Generate explanation text from the DecisionRecord using a Strands Agent on Amazon Bedrock, ensuring it preserves the selected player and final action.
- If Bedrock fails or response fails validation, the decision record remains available and explanation failure is shown separately.
Evidence
It is the 70th minute. Your team leads 1-0. You want to replace your right back, and three players on the bench can cover the position. The coach's instruction is clear: protect the lead.
All three have the same readiness score. Choosing the first player whose primary position matches would favor bench-17, even when the coach asks for defensive cover.
Below 0.7, the selected player stays in the record, but the action becomes REVIEW_MODEL. The threshold is experimental. A confidence value of 0.74 does not mean a 74% chance that the substitution will succeed.
In the defensive case, the selected candidate cleared the confidence gate. In the attacking case, Decider selected the authored target player but returned confidence below the threshold. The application kept the choice and requested human review.
The verified demo runs the Python app and CPU-based Decider as separate services on one EC2 instance in Frankfurt. Bedrock handles the explanation call. Keeping their statuses separate makes it possible to see which step failed.
- Record date: 2026-10-22T07:26:11.566Z