[bot] Spring AI tool/function execution produces no span — only the surrounding chat model call is traced
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 38/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- java
- Ambito
- ai, observability
Direzione di ricerca
Inizia da BraintrustSpringAI.java e dai file auto/*InstrumentationModule.java corrispondenti sia in springai_1_0_0 che in springai_2_0_0, quindi confrontali con TracingToolExecutor di langchain_1_8_0. Traccia il percorso di esecuzione di ToolCallingManager e ToolCallback di Spring AI. Il lavoro è completo quando ogni invocazione di uno strumento locale dispone di uno span dedicato in entrambi i moduli supportati, insieme agli span esistenti delle chiamate al modello.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Both Spring AI instrumentation modules (springai_1_0_0, springai_2_0_0) only wrap OpenAiChatModel.Builder/AnthropicChatModel.Builder construction (BraintrustSpringAI.wrap()). Spring AI's own local tool-execution machinery — ToolCallingManager/DefaultToolCallingManager, the auto-registered ToolCallingAdvisor, and ToolCallback/MethodToolCallback/FunctionToolCallback — is never touched by either module. When a model response triggers a tool call, Spring AI resolves and invokes the corresponding Java method in-process, but that invocation produces no span: only the LLM call that requested the tool and the follow-up LLM call that consumes the result are traced, with the actual tool execution invisible in between.
This is distinct from the already-filed streaming-reassembly bugs (#78 Anthropic SSE tool_use/thinking blocks, #79 OpenAI SSE tool_calls delta-merging) — those are about the LLM span's own tool_calls output being malformed during streaming. This gap is about the absence of a separate span for the tool's actual execution, which is the "tool-calling during model execution" surface itself, comparable to langchain_1_8_0's TracingToolExecutor which does instrument LangChain4j's equivalent local tool execution.
What is missing
A full-repo search for ToolCalling, ToolCallback, and toolCall under both springai_1_0_0 and springai_2_0_0 returns zero matches. BraintrustSpringAI.java in both modules exposes exactly one entry point:
public static <T> T wrap(OpenTelemetry openTelemetry, T chatModelBuilder) { ... }
which only instruments chat model construction. Neither module registers any instrumentation for:
ToolCallingManager.executeToolCalls()— the method that actually resolves and invokes tool callbacks in response to a model's tool-call requestToolCallingAdvisor— theChatClientadvisor auto-registered whenever tools are present, which drives the resolve/execute loopToolCallback.call()(and itsMethodToolCallback/FunctionToolCallbackimplementations) — the actual per-tool invocation point
For comparison, langchain_1_8_0 instruments LangChain4j's analogous local-execution surface via TracingToolExecutor, producing a dedicated span per tool call — Spring AI has no equivalent.
Braintrust docs status
- Spring AI integration is not documented on Braintrust's integrations page at https://www.braintrust.dev/docs/integrations/ai-providers: not_found
- Braintrust's general tracing docs (https://www.braintrust.dev/docs/instrument/trace-llm-calls) describe function/tool calling as part of LLM span capture, not as a separately-spanned execution step: not_found for a documented tool-execution span pattern this gap would need to follow
Upstream sources
- Spring AI tool calling reference: https://docs.spring.io/spring-ai/reference/api/tools.html — documents
ToolCallingManager,ToolCallingAdvisor(auto-registered in theChatClientadvisor chain), andToolCallback/MethodToolCallback/FunctionToolCallbackas the current (Spring AI 1.x/2.x) tool-execution architecture - Spring AI OpenAI chat reference: https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html — confirms function/tool calling support for the exact provider this repo already instruments
Local files inspected
braintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/BraintrustSpringAI.java— singlewrap(OpenTelemetry, T chatModelBuilder)entry point (line 61); no tool-calling instrumentationbraintrust-sdk/instrumentation/springai_1_0_0/src/main/java/dev/braintrust/instrumentation/springai/v1_0_0/auto/SpringAIOpenAIInstrumentationModule.javaandSpringAIAnthropicInstrumentationModule.java— only instrument the two chat model buildersbraintrust-sdk/instrumentation/springai_2_0_0/src/main/java/dev/braintrust/instrumentation/springai/v2_0_0/BraintrustSpringAI.java,SpringAIOpenAI.java,SpringAIAnthropic.java, and theirauto/*InstrumentationModule.java— same scope as 1.0.0, no tool-calling instrumentation- Full-repo grep for
ToolCalling,ToolCallback,toolCallscoped to both Spring AI modules — zero matches braintrust-sdk/instrumentation/langchain_1_8_0/— confirmed as the comparison point: this module does instrument LangChain4j's equivalent local tool-execution surface (TracingToolExecutor)
- Lingua principale
- Java
- Stelle
- 21
- Fork
- 5
- Merge medio
- 2g 7h
- PR unite (30g)
- 8
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di braintrustdata/braintrust-sdk-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Tutte le issue di braintrustdata/braintrust-sdk-java
Issue simili
-
certification
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
[BUG] ECR GetAuthorizationToken returns a proxyEndpoint for the default region, not the request's Apertabug ecr
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Needs: Triage Type: Feature request
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
AntennaPod/AntennaPod#8794 ·
-
agentic-workflows
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
github/copilot-sdk#2760 ·