Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[BOT ISSUE] Spring AI instrumentation limited to OpenAI and Anthropic chat models; no embedding model support

Aberta
#71 0 comentários 0 reações 0 responsáveis Ver no GitHub

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
Stack de tecnologia
java, spring
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

Upstream sources

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 — implements ObservationHandler<ChatModelObservationContext> only; no EmbeddingModelObservationContext handler
  • braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/OpenAIBuilderWrapper.java — OpenAI-specific tagging
  • braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/AnthropicBuilderWrapper.java — Anthropic-specific tagging
  • braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/auto/SpringAIOpenAIInstrumentationModule.java — only targets OpenAiChatModel$Builder.build()
  • braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/auto/SpringAIAnthropicInstrumentationModule.java — only targets AnthropicChatModel$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

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de braintrustdata/braintrust-sdk-java

Todas as issues de braintrustdata/braintrust-sdk-java

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.