Skip to content

[bot] AWS Bedrock Runtime: start_async_invoke() not instrumented #524

@braintrust-bot

Description

@braintrust-bot

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

Metadata

Metadata

Assignees

No one assigned
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions