ADK Java OTel spans do not expose tool-call execution correctly in Langfuse/OpenInference
- Lenguaje dominante
- Java
- Estrellas
- 1.7k
- Forks
- 420
- Merge medio
- 4 d 12 h
- PR fusionados (30 d)
- 31
Descripción
## 🔴 Required Information
**Describe the Bug:**
ADK Java traces exported to Langfuse via OTLP show `call_llm` spans, but tool-call execution is not represented correctly: tools appear as **"not called"**, and `execute_tool` visibility/payload mapping is missing or inconsistent even when tools were actually invoked.
**Steps to Reproduce:**
1. Create an ADK Java agent with MCP tools (for example, `list_premerge_failed_tests_by_job` and `list_unhealthy_tests`).
2. Configure OpenTelemetry export to Langfuse using `OtlpHttpSpanExporter`.
3. Run an agent prompt that should invoke those tools.
4. Open the resulting trace in Langfuse UI and inspect the `call_llm` observation and tool section.
5. Observe that tools are displayed as **"not called"** and no reliable `execute_tool` observation/payload is shown.
**Expected Behavior:**
When tools execute, Langfuse should show them as called, include `execute_tool` observation visibility, and render tool request/response payloads correctly.
**Observed Behavior:**
- `call_llm` is visible in timeline.
- Tools are shown as **"not called"** in the same trace.
- Tool-call visibility/payload mapping is missing or inconsistent.
- No crash, but observability is incorrect/incomplete for tool execution.
**Environment Details:**
- ADK Library Version (see maven dependency): `com.google.adk:google-adk:1.2.0` (`google-adk-spring-ai:1.2.0`)
- OS: macOS
- TS Version (tsc --version): N/A (Java integration)
**Model Information:**
- Which model is being used: `qwen-3.5-122b`
---
## 🟡 Optional Information
**Regression:**
Unknown.
**Logs:**
```text
Langfuse UI observation:
- call_llm span present
- Tools section shows entries as "not called"
- Agent output text indicates tools were expected/executed in flow
```
**Screenshots / Video:**
**Additional Context:**
- ADK Java appears to emit ADK-specific attributes (e.g. `gcp.vertex.agent.tool_call_args`, `gcp.vertex.agent.tool_response`, `gcp.vertex.agent.llm_request`, `gcp.vertex.agent.llm_response`).
- Langfuse/OpenInference expects standard tool/IO mapping on spans (e.g. `input.value`, `output.value`) for reliable rendering.
**Minimal Reproduction Code:**
```java
// Pseudocode reproduction shape:
// 1) Build LlmAgent with MCP tools
// 2) Enable OTLP export to Langfuse
// 3) Trigger prompt that should call tools
// 4) Inspect Langfuse trace: call_llm visible, tools shown as "not called"
```
**How often has this issue occurred?:**
- 100%
Guía de contribución
Evaluación
Este issue todavía no se ha evaluado.