[BOT ISSUE] Spring AI instrumentation limited to OpenAI and Anthropic chat models; no embedding model support
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 38/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Lĩnh vực
- ai, backend, observability
Hướng nghiên cứu
Bắt đầu với BraintrustSpringAI.java và BraintrustObservationHandler.java, sau đó xem xét hai mô-đun auto-instrumentation và BraintrustSpringAITest.java. Xác định cách các provider Spring AI được liệt kê và EmbeddingModelObservationContext cần được hỗ trợ; được coi là hoàn thành khi các lệnh gọi chat và embedding được hỗ trợ tạo ra các span ожидаed, với các bài kiểm thử bao quát hành vi được thêm vào.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- Java
- Star
- 21
- Fork
- 5
- Merge trung bình
- 2 ngày 7 giờ
- Pull request đã merge (30 ngày)
- 8
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của braintrustdata/braintrust-sdk-java
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Tất cả issue của braintrustdata/braintrust-sdk-java
Issue tương tự
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Đang mởarea/plugin
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
kestra-io/plugin-kestra#190 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Add canonical URLs and a sitemap Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
integra-team-red/meet-map#249 ·
-
[Studio][Bug] Cancelled create-user dialog keeps the password and admin switch for the next attempt Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
apache/rocketmq-dashboard#5064 ·