[BOT ISSUE] Spring AI instrumentation limited to OpenAI and Anthropic chat models; no embedding model support
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 38/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Pouca atividade
- Domínio
- ai, backend, observability
Direção de pesquisa
Comece por BraintrustSpringAI.java e BraintrustObservationHandler.java e, em seguida, revise os dois módulos de auto-instrumentação e BraintrustSpringAITest.java. Determine como os provedores Spring AI listados e EmbeddingModelObservationContext devem ser cobertos; considera-se concluído quando as chamadas de chat e embedding compatíveis criam os spans esperados, com testes cobrindo o comportamento adicionado.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
The Spring AI instrumentation module (springai_1_0_0) only wraps OpenAiChatModel.Builder and AnthropicChatModel.Builder. All other Spring AI chat model providers — including Google Vertex AI Gemini, Mistral, AWS Bedrock, and Azure OpenAI — are silently passed through with no instrumentation. Additionally, Spring AI's EmbeddingModel interface is not instrumented for any provider.
Unlike the analogous LangChain4j gap (#60), unsupported Spring AI providers generally cannot fall through to this repo's direct SDK auto-instrumentation modules. Spring AI providers use their own HTTP transport layers (Spring RestClient, Google Cloud libraries, Azure SDK, AWS SDK) rather than the upstream provider SDKs that the auto-instrumentation modules target (com.openai:openai-java, com.anthropic:anthropic-java, com.google.genai).
What is missing
1. Chat model providers beyond OpenAI and Anthropic
BraintrustSpringAI.wrap() (lines 17–39) checks the builder class name against two hardcoded strings:
private static final String OPENAI_BUILDER_CLASS =
"org.springframework.ai.openai.OpenAiChatModel$Builder";
private static final String ANTHROPIC_BUILDER_CLASS =
"org.springframework.ai.anthropic.AnthropicChatModel$Builder";
Unrecognized builders are returned unmodified with a log.info() message. No BraintrustObservationHandler is registered, so no spans are created.
The most impactful missing providers:
| Spring AI module | Provider | Auto-instrumentation fallback? |
|---|---|---|
spring-ai-vertex-ai-gemini |
Google Vertex AI Gemini | No — uses google-cloud-vertexai, not com.google.genai |
spring-ai-azure-openai |
Azure OpenAI | No — uses com.azure:azure-ai-openai, not com.openai:openai-java |
spring-ai-bedrock |
AWS Bedrock | No — uses software.amazon.awssdk:bedrockruntime |
spring-ai-mistral-ai |
Mistral AI | No — uses Spring RestClient directly |
The auto-instrumentation modules (SpringAIOpenAIInstrumentationModule, SpringAIAnthropicInstrumentationModule) similarly only register ByteBuddy advice for the two known builder classes.
2. Embedding model instrumentation
BraintrustObservationHandler implements ObservationHandler<ChatModelObservationContext> only. Spring AI also fires observations for embedding calls via EmbeddingModelObservationContext, but no handler is registered for these. This means all Spring AI embedding calls — including OpenAI and Anthropic embeddings through Spring AI — produce no Braintrust spans.
Spring AI's EmbeddingModel interface is implemented by OpenAiEmbeddingModel, VertexAiEmbeddingModel, BedrockEmbeddingModel, and others.
Braintrust docs status
- Spring AI is not mentioned on the Braintrust integrations page at https://www.braintrust.dev/docs/integrations/ai-providers: not_found
- No Spring AI-specific documentation exists for the Java SDK
Upstream sources
- Spring AI supported models: https://docs.spring.io/spring-ai/reference/api/chatmodel.html — documents 15+ chat model implementations
- Spring AI embedding models: https://docs.spring.io/spring-ai/reference/api/embeddings.html — documents
EmbeddingModelinterface and implementations for OpenAI, Vertex AI, Bedrock, etc. - Spring AI observation support: https://docs.spring.io/spring-ai/reference/api/observability.html — documents
ChatModelObservationContextandEmbeddingModelObservationContextfor Micrometer-based tracing - Spring AI releases: https://github.com/spring-projects/spring-ai/releases — actively maintained, GA since v1.0.0
Local files inspected
braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/BraintrustSpringAI.java— lines 17–39 (hardcoded builder class checks; unrecognized builders passed through)braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/BraintrustObservationHandler.java— implementsObservationHandler<ChatModelObservationContext>only; noEmbeddingModelObservationContexthandlerbraintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/OpenAIBuilderWrapper.java— OpenAI-specific taggingbraintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/AnthropicBuilderWrapper.java— Anthropic-specific taggingbraintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/auto/SpringAIOpenAIInstrumentationModule.java— only targetsOpenAiChatModel$Builder.build()braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/auto/SpringAIAnthropicInstrumentationModule.java— only targetsAnthropicChatModel$Builder.build()braintrust-sdk/instrumentation/springai_1_0_0/src/test/java/dev/braintrust/instrumentation/springai/v1_0_0/BraintrustSpringAITest.java— parameterized tests only cover OpenAI and Anthropic; no embedding tests exist
- Linguagem predominante
- Java
- Estrelas
- 21
- Forks
- 5
- Merge médio
- 18h 29min
- PRs com merge (30d)
- 8
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de braintrustdata/braintrust-sdk-java
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
Todas as issues de braintrustdata/braintrust-sdk-java
Issues semelhantes
-
NullPointerException when a `DeserializationProblemHandler` returns `null` for `byte[]` (single value unwrapped) and `char[]` elementsTalvez já em andamento @Marti2203 assumiu hoje. Aberta
Dificuldade 2/5 Meio dia Facilidade para iniciantes 88/100
FasterXML/jackson-databind#6300 ·
Mantenedores costumam responder em até 1 dia
-
content good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 95/100
cpinitiative/usaco-guide#6699 ·
Mantenedores costumam responder em até 1 dia
-
BC remittance upload: a claim MSP refused (S03) is saved with a blank status instead of refused (F)Abertatype: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
carlos-emr/carlos#4933 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
apache/rocketmq-dashboard#6925 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Vakore/ZappierGames#147 ·