{
"id": "model-transport:bedrock-converse",
"_kind": "ModelTransportProtocol",
"_file": "compute/model-transport-protocols/bedrock-converse.yaml",
"_cluster": "compute",
"attributes": {
"displayName": "AWS Bedrock Converse",
"vendor": "Amazon Web Services",
"specUrl": "https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html",
"streamingFraming": "aws-event-stream",
"toolUseSchema": "Bedrock Converse defines a unified, provider-agnostic tool-use\nschema. Tool calls appear as `toolUse` content blocks in\n`output.message.content` with `toolUseId`, `name`, and `input`.\nTool results are returned in subsequent user-role messages as\n`toolResult` blocks referencing the same `toolUseId`.\n",
"thinkingChannel": "content-block",
"cacheControl": "explicit",
"firstSpecVersion": "2024-05-30",
"currentSpecVersion": "2024-05-30",
"status": "standard",
"requestBodyShape": "POST /model/{modelId}/converse\nPOST /model/{modelId}/converse-stream\nJSON body (top-level fields):\n - `messages` (required, array of `{role: \"user\"|\"assistant\",\n content: ContentBlock[]}`)\n - `system` (optional, array of `{text}` system blocks)\n - `inferenceConfig` (optional, `{maxTokens, temperature, topP,\n stopSequences}`)\n - `toolConfig` (optional, `{tools: [{toolSpec: {name, description,\n inputSchema: {json: <JSONSchema>}}}], toolChoice?: {auto|any|tool}}`)\n - `guardrailConfig` (optional, `{guardrailIdentifier, guardrailVersion,\n trace?}`)\n - `additionalModelRequestFields` (optional, opaque object passed\n to the underlying provider โ used for Anthropic `thinking` etc.)\n - `additionalModelResponseFieldPaths` (optional, list of JSON paths\n to surface from the provider response)\n - `promptVariables` (optional)\n - `requestMetadata` (optional)\nA `ContentBlock` is one of: `{text}`, `{image: {format, source: {bytes}}}`,\n`{document: {format, name, source: {bytes}}}`, `{video: ...}`,\n`{toolUse}`, `{toolResult}`, `{guardContent}`, `{cachePoint: {type: \"default\"}}`,\n`{reasoningContent: {reasoningText: {text, signature}}}`.\n",
"responseBodyShape": "Non-streaming (Converse):\n HTTP 200 `application/json`:\n {\n \"output\": { \"message\": { \"role\": \"assistant\",\n \"content\": [ ContentBlock, ... ] } },\n \"stopReason\": \"end_turn\"|\"tool_use\"|\"max_tokens\"|\"stop_sequence\"|\"guardrail_intervened\"|\"content_filtered\",\n \"usage\": { \"inputTokens\": int, \"outputTokens\": int,\n \"totalTokens\": int,\n \"cacheReadInputTokens\"?: int,\n \"cacheWriteInputTokens\"?: int },\n \"metrics\": { \"latencyMs\": int },\n \"additionalModelResponseFields\"?: { ... },\n \"trace\"?: { \"guardrail\"?: ... }\n }\nStreaming (ConverseStream):\n HTTP 200 `application/vnd.amazon.eventstream` โ AWS EventStream\n frames carrying typed events (see streamingEventTypes).\n",
"streamingEventTypes": [
"messageStart",
"contentBlockStart",
"contentBlockDelta",
"contentBlockStop",
"messageStop",
"metadata",
"internalServerException",
"modelStreamErrorException",
"validationException",
"throttlingException",
"serviceUnavailableException"
],
"toolCallWireFormat": "A `toolUse` content block in `output.message.content`:\n { \"toolUse\": { \"toolUseId\": \"tooluse_...\",\n \"name\": \"<tool_name>\",\n \"input\": { ... } } }\n`toolUseId` is the correlation handle echoed on the matching\n`toolResult`.\n",
"toolResultWireFormat": "A `toolResult` content block in a subsequent user-role message:\n { \"toolResult\": { \"toolUseId\": \"tooluse_...\",\n \"content\": [ {text|json|image|document}, ... ],\n \"status\"?: \"success\"|\"error\" } }\n",
"errorEnvelope": "Non-2xx response, `application/json`:\n { \"message\": string, \"__type\": \"<ExceptionName>\" }\nCommon `__type` values: `ValidationException`, `AccessDeniedException`,\n`ThrottlingException`, `ServiceQuotaExceededException`,\n`ModelTimeoutException`, `ModelErrorException`,\n`ModelNotReadyException`, `InternalServerException`,\n`ServiceUnavailableException`.\n`x-amzn-RequestId` and `x-amzn-ErrorType` headers are populated.\n",
"cacheControlWireFormat": "Provider-agnostic prompt caching is expressed as a `cachePoint`\ncontent block inserted between cacheable prefix content and the\nrest of the messages / system / tools:\n { \"cachePoint\": { \"type\": \"default\" } }\nCache accounting is reported as `usage.cacheReadInputTokens` and\n`usage.cacheWriteInputTokens` on the response.\nper-region and per-model availability of cachePoint (rolled out\nacross Anthropic and other providers in 2024-2025).\n",
"rateLimitSignaling": "On HTTP 429 `ThrottlingException`: standard AWS retry semantics\napply. No per-tenant remaining-budget headers are documented;\nquota state is exported via CloudWatch service-quotas metrics.\n`retry-after` may be returned on throttling responses.\n",
"reasoningWireFormat": "Reasoning is carried as `reasoningContent` content blocks on the\nassistant message:\n { \"reasoningContent\": { \"reasoningText\": { \"text\": \"...\",\n \"signature\": \"<opaque>\" } } }\nor, when redacted server-side:\n { \"reasoningContent\": { \"redactedContent\": \"<base64-bytes>\" } }\nProvider-specific reasoning controls (e.g. Anthropic\n`thinking.budget_tokens`) are forwarded via\n`additionalModelRequestFields`.\n",
"authHeaderFormat": "AWS Signature Version 4:\n `Authorization: AWS4-HMAC-SHA256 ...`\n `x-amz-date: <ISO8601>`\n `x-amz-security-token: <session-token>` (for STS / role creds)\nEndpoint: `https://bedrock-runtime.<region>.amazonaws.com`.\n",
"versioningHeader": "No protocol-version header on the request. The Converse API itself\nis versioned implicitly through the AWS service endpoint;\nprovider-specific overrides are passed via\n`additionalModelRequestFields` (e.g. `anthropic_version` /\n`anthropic_beta`).\n"
},
"outgoingEdges": [
{
"from": "model-transport:bedrock-converse",
"to": "layer:3-transport",
"kind": "realizes",
"attributes": {}
},
{
"from": "model-transport:bedrock-converse",
"to": "provider:aws-bedrock",
"kind": "served_by"
},
{
"from": "model-transport:bedrock-converse",
"to": "model:claude-opus-4-7@current",
"kind": "spoken_by"
}
],
"incomingEdges": []
}