Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[bot] OpenAI Images API spans missing input/output capture

Aperta
#145 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
68/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
java
Ambito
api, observability

Direzione di ricerca

Inizia da braintrust-sdk/src/main/java/dev/braintrust/instrumentation/InstrumentationSemConv.java leggendo tagOpenAIRequest(), tagOpenAIResponse() e getSpanName(), quindi esamina le fixture cassette esistenti di OpenAI chat_completions e responses. Aggiungi la copertura di Images API per le chiamate generate, edit e variation; il lavoro è completo quando gli span acquisiscono i dati documentati della richiesta e della risposta dell’immagine, l’utilizzo quando applicabile e un nome dello span leggibile, con test o fixture che coprano questo comportamento.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

Summary

The OpenAI instrumentation intercepts every HTTP call made through the OpenAI Java client's HttpClient (generic, transport-level wrapping), so calls to the Images API (client.images().generate(), .edit(), .createVariation()) do produce a span. However, InstrumentationSemConv's request/response tagging logic only recognizes the Chat Completions (messages/choices) and Responses API (input/output) JSON shapes. Images API requests and responses use neither shape, so the resulting spans have no useful input or output data — the same class of gap already fixed/tracked for embeddings (#66) and audio (#131), but not yet filed for Images.

What is missing

InstrumentationSemConv.tagOpenAIRequest() (lines 127–138 of braintrust-sdk/src/main/java/dev/braintrust/instrumentation/InstrumentationSemConv.java):

if (requestJson.has("messages")) {
    span.setAttribute("braintrust.input_json", toJson(requestJson.get("messages")));
} else if (requestJson.has("input") && requestJson.get("input").isArray()) {
    span.setAttribute("braintrust.input_json", toJson(requestJson.get("input")));
}

An images.generate request body looks like:

{
  "model": "gpt-image-1",
  "prompt": "A photorealistic cat sitting on a moon",
  "size": "1024x1024",
  "quality": "high",
  "n": 1
}

prompt is a plain string (not messages, not an input array), so neither branch matches — braintrust.input_json is never set for Images API calls. size, quality, n, and style are also dropped since only model is captured into metadata.

InstrumentationSemConv.tagOpenAIResponse() (lines 144–201) only sets braintrust.output_json when the response has choices or output:

if (responseJson.has("choices")) {
    span.setAttribute("braintrust.output_json", toJson(responseJson.get("choices")));
} else if (responseJson.has("output")) {
    span.setAttribute("braintrust.output_json", toJson(responseJson.get("output")));
}

An images.generate response returns {"data": [{"url": "...", "revised_prompt": "..."}], ...} (or b64_json instead of url). Neither choices nor output is present, so braintrust.output_json is never set — the generated image URL/base64 data and revised_prompt are silently dropped. No usage extraction exists for the Images API's token-based billing on gpt-image-1 either.

The span name mapping in getSpanName() (lines 511–522) also has no case for the images/generations / images/edits / images/variations path segments, so the span name falls back to the raw last path segment instead of a human-readable name like the existing "Chat Completion"/"Embeddings" cases.

Braintrust docs status

  • not_found — the Braintrust OpenAI integration docs at https://www.braintrust.dev/docs/integrations/ai-providers/openai document streaming audio transcription tracing ("Braintrust traces streaming audio transcription calls for sync and async OpenAI clients") but make no mention of the Images API or image generation tracing for any language.

Upstream sources

  • OpenAI Images API reference: https://platform.openai.com/docs/api-reference/images/create — documents prompt (string, required), size, quality, n, style, response_format, and the response data[] array with url/b64_json/revised_prompt
  • OpenAI Java SDK: client.images().generate(ImageGenerateParams), .edit(ImageEditParams), .createVariation(ImageCreateVariationParams) — stable, documented methods on com.openai:openai-java (this repo pins 2.15.0,))
  • gpt-image-1 token-based usage: https://platform.openai.com/docs/guides/image-generationgpt-image-1 responses include a usage object with input_tokens/output_tokens, distinct from the legacy DALL·E per-image pricing

Local files inspected

  • braintrust-sdk/src/main/java/dev/braintrust/instrumentation/InstrumentationSemConv.java — lines 110–141 (tagOpenAIRequest: only messages/array-input handled), lines 143–201 (tagOpenAIResponse: only choices/output handled), lines 511–522 (getSpanName: no case for images/* paths)
  • braintrust-sdk/instrumentation/openai_2_15_0/src/main/java/dev/braintrust/instrumentation/openai/v2_15_0/TracingHttpClient.java — generic HTTP-level wrapping; delegates all tagging to InstrumentationSemConv
  • test-harness/src/testFixtures/resources/cassettes/openai/mappings/ — only chat_completions-* and responses-* cassette files exist; no images-* cassette or test exists anywhere in the repo (confirmed via repo-wide search)
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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di braintrustdata/braintrust-sdk-java

Tutte le issue di braintrustdata/braintrust-sdk-java

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.