# AWS Bedrock (Responses) - gemma-4-31b grade card

OpenAI Responses on Bedrock Mantle · serves `google.gemma-4-31b` as gemma-4-31b · probed live 2026-08-29

HTML version: [https://inferencecanary.com/aws-responses/gemma-4-31b](https://inferencecanary.com/aws-responses/gemma-4-31b) · matrix: [https://inferencecanary.com/index.md](https://inferencecanary.com/index.md)

## Grades


| Axis | Grade | Basis |
|---|---|---|
| Inference | D− | A − 2 high − 3 medium severity, per the published ladder |
| Billing | OK | Reported usage consistent with bytes on the wire. Footnote: Reports reasoning_tokens: 0 beside delivered reasoning - under-counts in the customer's favor. |
| Caching | No (0/8 hits) | No cold→warm trial hit - every call re-reads (and re-bills) the full context. Speed numbers: [https://inferencecanary.com/speed.md](https://inferencecanary.com/speed.md) |


## Flags

- **[high · inference] Several providers drop replayed reasoning: the model never sees its own prior thinking** - The gemma-4 chat template renders reasoning replayed on model turns, and the model card mandates preserving thinking across tool-call turns - the reference provider reproduces this live. These providers delete it before templating: on a continuation after a tool call, the model re-derives or invents instead of recalling, and no error is raised. AWS Bedrock's Responses dialect is the sharpest case: it defines an explicit input item for replayed reasoning, accepts it without error, and never renders it to the model. (details: [/replayed-reasoning-dropped.md](https://inferencecanary.com/replayed-reasoning-dropped.md))
- **[high · inference] Images in tool results: rejected or silently blinded on several providers** - The model reads images returned by tools - the reference provider delivers them, perception-judged, and several OpenAI-compat providers prove the standard shape works. The failing providers fail on schema choice, not model limits: several reject the request (400/422), and AWS Bedrock (Responses) is the worst class - it returns 200 and the model never sees the image, answering confidently about content it never saw. Google's own shim rejects a capability Google's native protocol serves. SambaNova and Novita, which rejected these requests through July, deliver tool-result images since 2026-08-25. (details: [/tool-result-images.md](https://inferencecanary.com/tool-result-images.md))
- **[medium · inference] AWS Bedrock never emits parallel tool calls** - parallel_tool_calls: true is accepted on both Bedrock APIs, but only a single call ever comes back; every other provider emits two for the same two-lookup prompt. A model capability suppressed at the serving layer; the workaround is sequential calling at double the turns and latency. (details: [/bedrock-parallel-tool-call.md](https://inferencecanary.com/bedrock-parallel-tool-call.md))
- **[medium · inference] AWS Bedrock un-escapes tool-call arguments in transit** - At temperature 0, every other provider agrees the model returns a tricky string argument with literal escape sequences. Both Bedrock APIs instead return real control characters - one extra unescape pass applied to the model's own output. Any argument whose bytes matter (embedded JSON, code, regexes) is corrupted. (details: [/bedrock-argument-corruption.md](https://inferencecanary.com/bedrock-argument-corruption.md))
- **[medium · inference] AWS Bedrock (Responses) rejects temperature** - temperature returns 400 unsupported_parameter, so deterministic sampling is unreachable on this provider: every run is stochastic, degrading reproducibility for applications and evals alike. (details: [/aws-responses-temperature.md](https://inferencecanary.com/aws-responses-temperature.md))

