[bot] Google GenAI Multimodal Live API sessions not instrumented
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- java
- Ambito
- observability-sre
Direzione di ricerca
Inizia da braintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustApiClient.java e BraintrustInstrumentation.java, quindi esamina i punti di ingresso client.aio.live.connect() e AsyncSession di Google GenAI. Confronta la strumentazione delle richieste esistente con la Live API basata su WebSocket e usa BraintrustGenAITest.java come punto di partenza per i test. Il lavoro è completato quando le sessioni della Live API e le relative interazioni hanno una copertura di strumentazione senza interrompere i test generateContent esistenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The Google GenAI Java SDK has a stable Multimodal Live API (client.aio.live.connect() → AsyncSession) that enables real-time, bidirectional text and audio generation over WebSocket. This API surface is completely invisible to the current Braintrust instrumentation because BraintrustApiClient only wraps HTTP-based ApiClient.request() and asyncRequest() methods — WebSocket connections use an entirely separate transport that is never intercepted.
Braintrust already documents Live API tracing for Python (client.aio.live.connect() sessions and "tool calls made during Live API sessions"), but there is no equivalent Java instrumentation.
What is missing
BraintrustApiClient (the core instrumentation class, placed in the com.google.genai package to access package-private ApiClient) overrides exactly four methods:
ApiResponse request(String, String, String, Optional<HttpOptions>) // line 186
ApiResponse request(String, String, byte[], Optional<HttpOptions>) // line 210
CompletableFuture<ApiResponse> asyncRequest(String, String, String, ...) // line 239
CompletableFuture<ApiResponse> asyncRequest(String, String, byte[], ...) // line 277
The Live API is not HTTP — it uses WebSocket (WSS) via org.java_websocket.client.WebSocketClient internally. The entry point is:
client.aio.live.connect(model, LiveConnectConfig) // → CompletableFuture<AsyncSession>
AsyncSession then provides:
sendClientContent(LiveSendClientContentParameters)— sends text/content turnssendRealtimeInput(LiveSendRealtimeInputParameters)— streams real-time audio/video inputsendToolResponse(LiveSendToolResponseParameters)— responds to model tool callsreceive(Consumer<LiveServerMessage>)— registers callback for server messages
None of these are reachable via ApiClient.request(), so no spans are created for Live API sessions.
Why this is a distinct gap from #61
Issue #61 covers generateContentStream() not being instrumented (missing streaming HTTP method overrides). The Live API is fundamentally different:
- Uses WebSocket (WSS), not HTTP SSE
- Accessed via
client.aio.live, notclient.models - Supports multi-turn real-time sessions, not single request/response
- Even if #61 is fixed, Live API sessions would remain completely uninstrumented
Braintrust docs status
Braintrust docs at https://www.braintrust.dev/docs/integrations/ai-providers/gemini document Live API tracing for Python:
client.aio.live.connect()— supported (Python)- "async Live API round-trips" — supported (Python)
- "tool calls made during Live API sessions" — supported (Python)
- Java Live API: not_found — no mention in Java SDK documentation
Upstream sources
- Google GenAI Java SDK Live API: introduced in v0.3.0 (2025-03-28), stable and progressively enhanced through v1.18.0 (the version this module targets) — https://github.com/googleapis/java-genai
- Google GenAI Java SDK changelog: v0.3.0 "add types for Live API" and "Support Live API", v1.0.0 "add async support for Live API"
- Gemini Live API docs: https://ai.google.dev/api/multimodal-live — real-time, bidirectional generative execution surface for text and audio
Local files inspected
braintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustApiClient.java— lines 186–312: onlyrequest()andasyncRequest()are overridden; no WebSocket or Live API interceptionbraintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustInstrumentation.java— wrapsApiClientintoClient; noliveclient wrappingbraintrust-sdk/instrumentation/genai_1_18_0/src/test/java/dev/braintrust/instrumentation/genai/v1_18_0/BraintrustGenAITest.java— tests only sync/asyncgenerateContent; no Live API tests
- 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
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
inu-appcenter/memorIN-backend#288 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
frontend maui-pilot pilot-ask question
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Apertaarea/plugin
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
kestra-io/plugin-kestra#190 ·