[bot] Google GenAI `generateImages` spans missing prompt input and use wrong span type
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 74/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Tranquilo
- Stack tecnológico
- java
- Área
- observability
Línea de trabajo
Comienza en braintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustApiClient.java, especialmente en tagSpan, líneas 97–161, y revisa BraintrustGenAITest.java para comprobar las aserciones de spans existentes. Añade cobertura para el análisis de solicitudes y respuestas de generateImages, incluido prompt, los metadatos de generación de imágenes y una categorización adecuada del span; el trabajo estará terminado cuando la prueba verifique que estos valores se capturan, en lugar del comportamiento actual que solo cubre generateContent.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
When client.models.generateImages() is called through the instrumented Google GenAI client, a span is created (the call goes through ApiClient.request()), but the span contains no useful input data. The tagSpan() method in BraintrustApiClient only extracts fields specific to generateContent (contents, generationConfig, usageMetadata), which are absent from image generation requests and responses.
The result:
input_jsononly has{model: "..."}— the actual prompt text is not captured. This is the primary creative input and the most important thing to trace for image generation.- No metrics — image generation responses use response-level metadata (not
usageMetadata), so no token or character counts are captured. - Wrong span type — hardcoded
type: "llm"instead of something appropriate for image generation.
This is analogous to the embedContent gap tracked in #65, where calls are intercepted at HTTP level but parsed with the wrong field schema.
Braintrust already documents and traces generate_images for the Python SDK. The Java SDK makes the same API calls but the span tagging logic was never extended to handle them.
What is missing
BraintrustApiClient.tagSpan() (lines 50–161) handles only generateContent fields:
Request parsing (lines 97–113):
if (requestJson.containsKey("contents")) { // generateContent field — not present in generateImages
inputJson.put("contents", requestJson.get("contents"));
}
if (requestJson.containsKey("generationConfig")) { // generateContent field — not present in generateImages
inputJson.put("config", requestJson.get("generationConfig"));
}
A generateImages request body looks like:
{
"prompt": "A photorealistic cat sitting on a moon",
"config": {
"numberOfImages": 2,
"aspectRatio": "16:9",
"negativePrompt": "blurry, low quality"
}
}
Neither prompt nor config.numberOfImages/config.aspectRatio are extracted. The input_json stored in the span ends up as {model: "imagen-3.0-generate-001"} only — the prompt is silently dropped.
Response parsing (lines 116–149):
if (responseJson.get("usageMetadata") instanceof Map) { // not present in generateImages responses
...
}
generateImages responses return generatedImages[].image.imageBytes (base64) and generatedImages[].generationParameters. No usageMetadata is present, so the metrics block is empty.
Span attributes (line 156):
span.setAttribute("braintrust.span_attributes", toJson(Map.of("type", "llm")));
Image generation is not an LLM call. Braintrust's Python tracer uses a different span categorization for image generation spans.
Braintrust docs status
- Braintrust docs at https://www.braintrust.dev/docs/integrations/ai-providers/gemini document
generate_imagesas a traced surface for Python: supported - No mention of
generateImagesinstrumentation for Java: not_found
Upstream sources
- Google GenAI Java SDK
generateImages:client.models.generateImages(String model, String prompt, GenerateImagesConfig config)— stable API, available in genai-java v1.18.0 (the version this module targets) - Imagen API reference: https://ai.google.dev/api/generate-images — documents
prompt,config(numberOfImages, aspectRatio, negativePrompt, safetyFilterLevel, personGeneration), andgeneratedImagesresponse format - Braintrust Python tracing:
generate_imagesand async variants are explicitly listed as traced surfaces at https://www.braintrust.dev/docs/integrations/ai-providers/gemini
Local files inspected
braintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustApiClient.java— lines 97–113 (tagSpaninput parsing: onlycontents/generationConfigextracted;promptfield absent); lines 116–149 (response parsing: onlyusageMetadatachecked; missing for image responses); line 156 (hardcodedtype: "llm")braintrust-sdk/instrumentation/genai_1_18_0/src/test/java/dev/braintrust/instrumentation/genai/v1_18_0/BraintrustGenAITest.java— nogenerateImagestest exists
- 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 ·