Summary
The AWS Bedrock Runtime start_async_invoke() API is not instrumented. Calls to client.start_async_invoke(...) produce zero Braintrust tracing. This method submits an asynchronous model invocation job — output is written to an S3 bucket — and is the Bedrock analog to batch inference APIs that are already instrumented for Anthropic (messages.batches.create()) and tracked as gaps for OpenAI (#295), Mistral (#272), and Google GenAI (#332).
The Bedrock Runtime integration was completed in #279 (closed 2026-06-16) and instruments the four synchronous execution surfaces. start_async_invoke was not included.
What is missing
| Bedrock Runtime method |
Description |
Instrumented? |
client.converse(...) |
Synchronous unified chat |
Yes |
client.converse_stream(...) |
Streaming unified chat |
Yes |
client.invoke_model(...) |
Synchronous raw model invocation |
Yes |
client.invoke_model_with_response_stream(...) |
Streaming raw invocation |
Yes |
client.start_async_invoke(...) |
Asynchronous model invocation job |
No |
API details
- Endpoint:
POST /async-invoke
- Purpose: Submit a long-running async model invocation. The caller supplies
modelId, modelInput (provider-specific JSON), and outputDataConfig (S3 output location). The API returns an invocationArn immediately; output is written to S3 when complete.
- Poll for results: Status checked via
client.get_async_invoke(invocationArn=...) or client.list_async_invokes().
- Use case: Large-scale batch generation workloads where latency is not time-sensitive (similar to Anthropic's Message Batches API or OpenAI's Batch API).
Minimum instrumentation for start_async_invoke
At minimum, start_async_invoke should create a span capturing:
| Span field |
Content |
| input |
modelInput (parsed JSON body), modelId |
| output |
invocationArn, submission HTTP status |
| metadata |
provider: "bedrock", model (from modelId), S3 output location, clientRequestToken if set |
| metrics |
Submission latency |
Span type should be SpanTypeAttribute.TASK, matching the Anthropic batch pattern.
Availability
start_async_invoke is in both boto3 matrix pins:
boto3==1.43.29 (latest)
boto3==1.34.116 (floor)
It is in the bedrock-runtime service (not bedrock-agent-runtime), so it is reachable via the same wrap_bedrock_client(client) helper that wraps the existing four methods.
Braintrust docs status
not_found — The AWS Bedrock integration page documents tracing for converse and invoke_model. No mention of async invocation.
Upstream sources
Local files inspected
py/src/braintrust/integrations/bedrock_runtime/patchers.py — defines ConversePatcher, ConverseStreamPatcher, InvokeModelPatcher, InvokeModelWithResponseStreamPatcher, composed into BedrockRuntimeClientMethodsPatcher; zero references to start_async_invoke
py/src/braintrust/integrations/bedrock_runtime/tracing.py — _converse_wrapper, _converse_stream_wrapper, _invoke_model_wrapper, _invoke_model_stream_wrapper only; no async invoke wrappers
py/src/braintrust/integrations/bedrock_runtime/integration.py — registers BedrockRuntimeClientMethodsPatcher; no async invoke registration
py/src/braintrust/integrations/anthropic/tracing.py — Anthropic messages.batches.create() IS instrumented as a task-type span — reference implementation for this pattern
py/pyproject.toml — [tool.braintrust.matrix.boto3] pins: latest = "boto3==1.43.29", "1.34.116" = "boto3==1.34.116"
Relationship to existing issues
Summary
The AWS Bedrock Runtime
start_async_invoke()API is not instrumented. Calls toclient.start_async_invoke(...)produce zero Braintrust tracing. This method submits an asynchronous model invocation job — output is written to an S3 bucket — and is the Bedrock analog to batch inference APIs that are already instrumented for Anthropic (messages.batches.create()) and tracked as gaps for OpenAI (#295), Mistral (#272), and Google GenAI (#332).The Bedrock Runtime integration was completed in #279 (closed 2026-06-16) and instruments the four synchronous execution surfaces.
start_async_invokewas not included.What is missing
client.converse(...)client.converse_stream(...)client.invoke_model(...)client.invoke_model_with_response_stream(...)client.start_async_invoke(...)API details
POST /async-invokemodelId,modelInput(provider-specific JSON), andoutputDataConfig(S3 output location). The API returns aninvocationArnimmediately; output is written to S3 when complete.client.get_async_invoke(invocationArn=...)orclient.list_async_invokes().Minimum instrumentation for
start_async_invokeAt minimum,
start_async_invokeshould create a span capturing:modelInput(parsed JSON body),modelIdinvocationArn, submission HTTP statusprovider: "bedrock",model(frommodelId), S3 output location,clientRequestTokenif setSpan type should be
SpanTypeAttribute.TASK, matching the Anthropic batch pattern.Availability
start_async_invokeis in both boto3 matrix pins:boto3==1.43.29(latest)boto3==1.34.116(floor)It is in the
bedrock-runtimeservice (notbedrock-agent-runtime), so it is reachable via the samewrap_bedrock_client(client)helper that wraps the existing four methods.Braintrust docs status
not_found — The AWS Bedrock integration page documents tracing for
converseandinvoke_model. No mention of async invocation.Upstream sources
StartAsyncInvoke— https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_StartAsyncInvoke.htmlstart_async_invokemethod in thebedrock-runtimeserviceLocal files inspected
py/src/braintrust/integrations/bedrock_runtime/patchers.py— definesConversePatcher,ConverseStreamPatcher,InvokeModelPatcher,InvokeModelWithResponseStreamPatcher, composed intoBedrockRuntimeClientMethodsPatcher; zero references tostart_async_invokepy/src/braintrust/integrations/bedrock_runtime/tracing.py—_converse_wrapper,_converse_stream_wrapper,_invoke_model_wrapper,_invoke_model_stream_wrapperonly; no async invoke wrapperspy/src/braintrust/integrations/bedrock_runtime/integration.py— registersBedrockRuntimeClientMethodsPatcher; no async invoke registrationpy/src/braintrust/integrations/anthropic/tracing.py— Anthropicmessages.batches.create()IS instrumented as atask-type span — reference implementation for this patternpy/pyproject.toml—[tool.braintrust.matrix.boto3]pins:latest = "boto3==1.43.29","1.34.116" = "boto3==1.34.116"Relationship to existing issues
converse,converse_stream,invoke_model,invoke_model_with_response_stream;start_async_invokewas not in scopeclient.batches.create()) not instrumented #295 tracks the analogous OpenAI Batch API gap (client.batches.create())client.batch.jobs.create()) not instrumented #272 tracks the analogous Mistral Batch Jobs API gap (client.batch.jobs.create())client.batches.create/create_embeddings) #332 tracks the analogous Google GenAI Batch API gap (client.batches.create())