Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#71 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
38/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
java, spring

Línea de trabajo

Empieza por BraintrustSpringAI.java y BraintrustObservationHandler.java; después revisa los dos módulos de auto-instrumentación y BraintrustSpringAITest.java. Determina cómo deberían cubrirse los proveedores de Spring AI enumerados y EmbeddingModelObservationContext; se considera terminado cuando las llamadas de chat y embedding compatibles crean los spans esperados, con pruebas que cubran el comportamiento añadido.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
Java
Estrellas
21
Forks
5
Merge medio
2 d 7 h
PR fusionados (30 d)
8

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de braintrustdata/braintrust-sdk-java

Todos los issues de braintrustdata/braintrust-sdk-java

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.