AWS bedrock high security documentation change
Summary
Updated documentation for refusal responses: Added stop_details object with refusal category/explanation, clarified refusal behavior in streaming, and noted increased refusal rate on Claude Fable 5 due to content classifiers.
Security assessment
The change documents enhanced refusal mechanisms for security-sensitive content categories (e.g., 'cyber', 'bio'), directly addressing content safety controls and dual-use restrictions. This provides explicit evidence of security-focused content filtering improvements.
Diff
diff --git a/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.md b/bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.md index bcb47caf6..c33c0e9a4 100644 --- a//bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.md +++ b//bedrock/latest/userguide/model-parameters-anthropic-claude-messages-request-response.md @@ -289,4 +289,9 @@ Example responses with new stop_reason values: - "content": [ - { - "type": "text", - "text": "I can't help with that request." + "stop_details": { + "type": "refusal", + "category": "cyber", + "explanation": "This request triggered restrictions on violative cyber content and was blocked under Anthropic's Usage Policy." + }, + "content": [], + "usage": { + "input_tokens": 106, + "output_tokens": 1 @@ -294 +298,0 @@ Example responses with new stop_reason values: - ] @@ -333 +337 @@ Example responses with new stop_reason values: - * **refusal** – Claude refuses to generate a response due to safety concerns + * **refusal** – The model was blocked by a content classifier before completing its response. The response may contain partial content if the classifier fired mid-stream. See `stop_details` for additional information about the restriction. This stop reason occurs at a materially higher rate on Claude Fable 5 due to its dual-use content classifiers. @@ -342,0 +347,12 @@ Example responses with new stop_reason values: + * **stop_details** (object | null) – Additional information about why the response stopped. Present when `stop_reason` is `"refusal"`. May be null even on a refusal. + + * **type** (string) – Always `"refusal"` when present. + + * **category** (string or null) – The content category that triggered the restriction (e.g., `"cyber"`, `"bio"`). Null when the refusal does not map to a named category. + + * **explanation** (string or null) – Human-readable explanation of the restriction. Not guaranteed to be stable across requests — do not parse programmatically. + +###### Note + +Branch on `stop_reason`, not on `stop_details`. The `stop_details` field is informational and can be null even when `stop_reason` is `"refusal"`. Refusals can also occur mid-stream: the classifier may fire after some content has already been streamed. In streaming mode, the refusal arrives as the final `message_delta` event with `stop_reason: "refusal"`; any content blocks streamed before the refusal are valid partial output. +