[BOT ISSUE] Spring AI instrumentation limited to OpenAI and Anthropic chat models; no embedding model support
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 38/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Calme
- Domaine
- ai, backend, observability
Piste de recherche
Commencez par BraintrustSpringAI.java et BraintrustObservationHandler.java, puis examinez les deux modules d’auto-instrumentation ainsi que BraintrustSpringAITest.java. Déterminez comment les fournisseurs Spring AI listés et EmbeddingModelObservationContext doivent être pris en charge ; le travail est terminé lorsque les appels de chat et d’embedding pris en charge créent les spans attendus, avec des tests couvrant le comportement ajouté.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Java
- Étoiles
- 21
- Forks
- 5
- Merge moyen
- 2 j 7 h
- PR mergées (30 j)
- 8
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de braintrustdata/braintrust-sdk-java
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Toutes les issues de braintrustdata/braintrust-sdk-java
Issues similaires
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
inu-appcenter/memorIN-backend#288 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
frontend maui-pilot pilot-ask question
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Ouvertearea/plugin
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
kestra-io/plugin-kestra#190 ·