[bot] OpenAI Realtime API (WebSocket) not instrumented
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- java
- Área
- api, observability
Línea de trabajo
Comienza en el módulo openai_2_15_0 inspeccionando cómo TracingHttpClient envuelve a HttpClient y cómo client.beta().realtime() establece su conexión WebSocket. Identifica un hook estable de WebSocket o RealtimeClient y determina después cómo se pueden capturar los eventos y deltas de la sesión. Se considera completado cuando las sesiones Realtime emiten un span con JSON de entrada/salida y las métricas de tokens disponibles, o cuando se documenta la limitación si no existe un hook estable.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Gap description
The openai-java SDK v2.15.0+ exposes a WebSocket-based Realtime API under client.beta().realtime(). The current instrumentation in openai_2_15_0 works by wrapping the SDK's HttpClient interface (execute / executeAsync), which only intercepts HTTP/HTTPS requests. WebSocket connections are established through a separate code path and are never passed through TracingHttpClient, so no span is created for any Realtime API session.
Affected surface
| SDK | API surface | Transport |
|---|---|---|
com.openai:openai-java:2.15.0+ |
client.beta().realtime() |
WebSocket (WSS) |
Why it matters
Realtime API sessions carry voice and text generation work that is billable and latency-sensitive — exactly the kind of LLM execution Braintrust is designed to observe. Without instrumentation, users see a complete blind spot for this API even when all other OpenAI calls are traced.
Analogous gap already tracked
Issue #120 tracks the same problem for the Google GenAI Live (streaming) API, which also uses a persistent bidirectional connection that bypasses the HTTP-layer hook.
Suggested approach
- Identify the WebSocket-abstraction interface in
openai-java(likelyWebSocketor aRealtimeClient). - Use ByteBuddy to intercept session open/message/close events, or wrap the WebSocket factory the same way
TracingHttpClientwrapsHttpClient. - Accumulate audio/text deltas and emit a span on session close with
braintrust.input_json/braintrust.output_jsonand token metrics where available.
Notes
- This gap exists only in the
openai_2_15_0module; no other provider currently wraps a WebSocket transport. - If the upstream SDK does not yet expose a stable hook point, a note in the docs would at minimum set user expectations.
- Lenguaje dominante
- Java
- Estrellas
- 21
- Forks
- 5
- Merge medio
- 2 d 7 h
- PR fusionados (30 d)
- 8
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de braintrustdata/braintrust-sdk-java
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Todos los issues de braintrustdata/braintrust-sdk-java
Issues similares
-
certification
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
[BUG] ECR GetAuthorizationToken returns a proxyEndpoint for the default region, not the request's Abiertobug ecr
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Needs: Triage Type: Feature request
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
AntennaPod/AntennaPod#8794 ·
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
github/copilot-sdk#2760 ·