[bot] AWS Bedrock batch inference (CreateModelInvocationJob) is not instrumented at all
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- aws, java
- Domain
- backend, observability-sre
Research direction
Start with BraintrustAWSBedrock.java, AWSBedrockInstrumentationModule.java, BraintrustBedrockInterceptor.java, and InstrumentationSemConv.java, then review BraintrustAWSBedrockTest.java and the AWS Bedrock control-plane client APIs. Add coverage for the named batch-job operations, including their request and response shapes and lifecycle, and verify it with focused tests or cassettes for submission, status, listing, and stopping.
Written by the indexing model from the issue text.
Description
Summary
The aws_bedrock_2_30_0 module only ever wraps the Bedrock data-plane runtime client builders (software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClientBuilder / BedrockRuntimeAsyncClientBuilder), and only tags Converse/ConverseStream operations on that client (tracked separately in #134 for InvokeModel). AWS Bedrock's official batch inference API — submitted through the entirely separate control-plane client software.amazon.awssdk.services.bedrock.BedrockClient (CreateModelInvocationJob / GetModelInvocationJob / ListModelInvocationJobs / StopModelInvocationJob) — has no wrapping mechanism at all. This is a different Maven artifact/class hierarchy (bedrock vs. bedrockruntime) that this module never references, so unlike the Gemini Batches gap (#165, where calls at least reach the wrapper and get mis-tagged), a Bedrock batch inference job call today produces zero span — not even a generic or mis-tagged one.
What is missing
BraintrustBedrockInterceptor.javaline 55:private static final Set<String> INSTRUMENTED_OPERATIONS = Set.of("Converse", "ConverseStream");, enforced at lines 62–66 (beforeExecutionreturns immediately for any other operation name). This interceptor is only ever attached to aBedrockRuntimeClientBuilder/BedrockRuntimeAsyncClientBuilderin the first place (see next point), so it structurally cannot see batch-inference-job calls regardless of this allowlist.BraintrustAWSBedrock.java(lines 23–24, 53–54): both publicwrap()overloads are typed to accept onlyBedrockRuntimeClientBuilder/BedrockRuntimeAsyncClientBuilder. There is nowrap(BedrockClientBuilder)overload, so a manual user has no supported way to instrument the control-plane client that hosts batch inference at all.AWSBedrockInstrumentationModule.java(BedrockBuilderAdvice.build(), lines 74–83): the auto-instrumentationinstanceofchecks are likewise limited toBedrockRuntimeClientBuilder/BedrockRuntimeAsyncClientBuilder. ABedrockClientBuilder(control plane) passing throughSdkDefaultClientBuilder.build()falls through both branches untouched.InstrumentationSemConv.tagBedrockRequest()/tagBedrockResponse()only understand Converse-shaped JSON (messages,output.message,usage.inputTokens) — even if a batch job call were reached, there's no field extraction forCreateModelInvocationJobRequest/GetModelInvocationJobResponseshapes (jobArn,inputDataConfig/S3 URI,outputDataConfig/S3 URI,status,roleArn).- No test, cassette, or example anywhere in the repo references
CreateModelInvocationJob,GetModelInvocationJob,ModelInvocationJob, or thebedrock(non-bedrockruntime) client package — confirmed via repo-wide search. - No async submit → poll-status → retrieve-result lifecycle is modeled for this provider, unlike the (also-gapped, but at least structurally reachable) OpenAI (#164), Anthropic (#155), and Google GenAI (#165) batch APIs.
Braintrust docs status: not_found
Fetched https://www.braintrust.dev/docs/integrations/ai-providers/bedrock in full. It documents per-language tracing coverage for Converse/ConverseStream/InvokeModel/InvokeModelWithResponseStream across the TypeScript, Python, Go, and Java SDKs (explicitly noting for Java: "Other Bedrock operations such as InvokeModel and ApplyGuardrail are not traced" — consistent with #134). No mention anywhere on the page, for any language SDK, of batch inference / model invocation jobs / CreateModelInvocationJob. This is a documentation gap across the whole product, not just Java, but the Java SDK itself also has zero code path that could produce a span for this API even if docs existed.
Upstream sources
- AWS Bedrock batch inference user guide: https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference.html and https://docs.aws.amazon.com/bedrock/latest/userguide/batch-inference-create.html — describes submitting a batch inference job against an S3 input file and retrieving results from S3 once the job completes.
- API reference: https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelInvocationJob.html (also
GetModelInvocationJob,ListModelInvocationJobs,StopModelInvocationJob). - AWS SDK for Java v2 control-plane client:
software.amazon.awssdk.services.bedrock.BedrockClient#createModelInvocationJob— https://docs.aws.amazon.com/java/api/latest/software/amazon/awssdk/services/bedrock/BedrockClient.html and https://docs.aws.amazon.com/java/api/latest/software/amazon/awssdk/services/bedrock/model/CreateModelInvocationJobRequest.html — this is a distinct Maven artifact (software.amazon.awssdk:bedrock) from the already-instrumentedsoftware.amazon.awssdk:bedrockruntime.
Local repo files inspected
braintrust-sdk/instrumentation/aws_bedrock_2_30_0/src/main/java/dev/braintrust/instrumentation/awsbedrock/v2_30_0/BraintrustBedrockInterceptor.java— line 55 (INSTRUMENTED_OPERATIONS), lines 62–66 (allowlist enforcement), imports at lines 31–32 (bedrockruntime.model.ConverseRequest/ConverseStreamRequestonly)braintrust-sdk/instrumentation/aws_bedrock_2_30_0/src/main/java/dev/braintrust/instrumentation/awsbedrock/v2_30_0/BraintrustAWSBedrock.java— lines 23–24 and 53–54 (wrap()overload signatures, bothbedrockruntimebuilder types only)braintrust-sdk/instrumentation/aws_bedrock_2_30_0/src/main/java/dev/braintrust/instrumentation/awsbedrock/v2_30_0/auto/AWSBedrockInstrumentationModule.java— lines 74–83 (BedrockBuilderAdvice.build()instanceofchecks limited tobedrockruntimebuilders)braintrust-sdk/src/main/java/dev/braintrust/instrumentation/InstrumentationSemConv.java—tagBedrockRequest()/tagBedrockResponse()handle only Converse-shaped bodiesbraintrust-sdk/instrumentation/aws_bedrock_2_30_0/src/test/java/dev/braintrust/instrumentation/awsbedrock/v2_30_0/BraintrustAWSBedrockTest.java— all tests useConverseRequest/ConverseStreamRequest; no batch-job test exists- Repo-wide search for
ModelInvocationJob,CreateModelInvocationJob, and thesoftware.amazon.awssdk.services.bedrock.(control-plane) package — zero matches outside this issue - Existing related/non-duplicate issues reviewed: #134 (Bedrock
InvokeModelembeddings — same module, different operation, not batch), #165 (Google GenAI Batches — different provider), #155 (Anthropic Message Batches — different provider), #164 (OpenAI Batch API — different provider)
- Dominant language
- Java
- Stars
- 21
- Forks
- 5
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 8
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from braintrustdata/braintrust-sdk-java
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
All issues in braintrustdata/braintrust-sdk-java
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
infinispan/infinispan#18150 ·
-
area/frontend
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
opensearch-project/k-NN#3597 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 88/100