{"record":{"id":"3e2c73a462b044b7","repo":"BoundaryML/baml","slug":"aws-bedrock-only-supports-text-blocks-for-system-messages","errorCode":null,"errorMessage":"AWS Bedrock only supports text blocks for system messages, but got {:#?}","messagePattern":"AWS Bedrock only supports text blocks for system messages, but got (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/baml-runtime/src/internal/llm_client/primitive/aws/aws_client.rs","lineNumber":1294,"sourceCode":"            .flatten()\n            .collect();\n\n        bedrock::types::Message::builder()\n            .set_role(Some(msg.role.as_str().into()))\n            .set_content(Some(content))\n            .build()\n            .map_err(|e: bedrock::error::BuildError| e.into())\n    }\n\n    fn part_to_system_message(\n        part: &ChatMessagePart,\n        allowed_metadata: &AllowedRoleMetadata,\n    ) -> Result<Vec<bedrock::types::SystemContentBlock>> {\n        match part {\n            ChatMessagePart::Text(t) => {\n                Ok(vec![bedrock::types::SystemContentBlock::Text(t.clone())])\n            }\n            ChatMessagePart::Media(_) => anyhow::bail!(\n                \"AWS Bedrock only supports text blocks for system messages, but got {:#?}\",\n                part\n            ),\n            ChatMessagePart::WithMeta(p, meta) => {\n                let mut blocks = Self::part_to_system_message(p, allowed_metadata)?;\n                if allowed_metadata.is_allowed(\"cache_control\")\n                    && meta.contains_key(\"cache_control\")\n                {\n                    blocks.push(bedrock::types::SystemContentBlock::CachePoint(\n                        bedrock::types::CachePointBlock::builder()\n                            .r#type(bedrock::types::CachePointType::Default)\n                            .build()?,\n                    ));\n                }\n                Ok(blocks)\n            }\n        }\n    }","sourceCodeStart":1276,"sourceCodeEnd":1312,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-runtime/src/internal/llm_client/primitive/aws/aws_client.rs#L1276-L1312","documentation":"Bedrock system prompts may only contain SystemContentBlock::Text. When a system-role message part is a media (ChatMessagePart::Media), BAML cannot convert it and bails. System messages in Bedrock have no way to carry image/pdf/video blocks, so media there is always invalid.","triggerScenarios":"Putting media content (image/pdf/video) inside a system-role message of a prompt run against an AWS Bedrock client, including media nested inside WithMeta parts without cache_control-only metadata.","commonSituations":"Copying a chat-template that includes an image in the system prompt (common with OpenAI) and running it on Bedrock; multimodal system instructions that another provider tolerated.","solutions":["Move the media out of the system message into a user/assistant message.","Replace the system media with a text description of the content.","If it was accidental, fix the prompt template role so media lives under user role.","Use a provider that supports media in system messages if that design is required."],"exampleFix":"// before\nmessage \"system\" { {#.image} } // media in system\n// after\nmessage \"system\" \"You are a vision assistant.\"\nmessage \"user\" { {#.image} }","handlingStrategy":"validation","validationCode":"if (systemMessageParts.some(p => p.type !== 'text')) { throw new Error('AWS Bedrock system messages must be text-only; move media to a user message.'); }","typeGuard":"const systemIsTextOnly = (parts) => parts.every(p => p.type === 'text');","tryCatchPattern":"try { await b.MyPrompt(...) } catch (e) { if (String(e).includes('only supports text blocks for system messages')) { /* relocate media parts to user role and retry */ } else throw e; }","preventionTips":["Keep system prompts text-only for Bedrock clients.","Place images/PDFs/videos in user-role messages.","Audit prompt templates ported from other providers for media in system role."],"tags":["aws-bedrock","system-prompt","media","unsupported-media-type"],"backgroundTag":"unsupported-operation","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}