[bot] Google GenAI video generation (generateVideos / Veo) traced with materially less detail than text generation
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 55/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- java
调研方向
从 BraintrustApiClient.java 开始,重点查看 tagSpan 和四个传输重写,然后检查 BraintrustGenAITest.java 以及 Google GenAI 的 generateVideos 和 getVideosOperation API。为视频生成添加有针对性的覆盖,并验证请求详细信息、span 分类、可用指标以及长时间运行操作的轮询是否以预期的保真度得到体现。
由索引模型根据 Issue 内容生成。
描述
Summary
The Google GenAI Java SDK (com.google.genai, v1.18.0, the version this module targets) exposes Models.generateVideos(...) (Veo video-generation models) and the associated long-running-operation polling API (client.operations.getVideosOperation(...)). Braintrust's Java GenAI instrumentation intercepts these calls only incidentally, through a generic HTTP-transport hook that was designed for generateContent. The result is spans that are silently mislabeled and largely empty for video generation — not a total absence of spans, but instrumentation with materially less detail/fidelity than the documented generate_content path.
What is missing
BraintrustApiClient (braintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustApiClient.java) intercepts every HTTP call made by the SDK by overriding the transport-level methods on ApiClient:
request(String, String, String, Optional<HttpOptions>)— line 186request(String, String, byte[], Optional<HttpOptions>)— line 210asyncRequest(String, String, String, Optional<HttpOptions>)— line 239asyncRequest(String, String, byte[], Optional<HttpOptions>)— line 277
Because this hook is transport-level, a generateVideos call (and each operations.getVideosOperation poll of the resulting long-running operation) does produce a span — but tagSpan (lines 50–161) was written exclusively for the generateContent request/response shape:
- Line 156 unconditionally sets
braintrust.span_attributesto{"type": "llm"}for every call this client makes, including video-generation calls, which are not LLM chat-completion calls. - Lines 65–76 and 81–95 only promote
model/systemInstruction/tools/toolConfig/safetySettings/cachedContentandgenerationConfig.{temperature,topP,topK,candidateCount,maxOutputTokens,stopSequences,responseMimeType,responseSchema}intobraintrust.metadata/input_json.generateVideosrequests use an entirely different shape (instances/parametersorprompt/image/video+ aGenerateVideosConfigwith fields likenumberOfVideos,durationSeconds,aspectRatio,enhancePrompt,personGeneration) — none of these fields are extracted, soinput_jsonfor a video-generation span is effectively empty. - Lines 127–149 only look for
usageMetadata.{promptTokenCount,candidatesTokenCount,totalTokenCount,cachedContentTokenCount}to populatebraintrust.metrics. Video-generation responses have no such field, so metrics are silently skipped (not wrong, just absent) while the span is still taggedtype: llm. generateVideosreturns aGenerateVideosOperationthat is notdoneimmediately; the caller pollsclient.operations.getVideosOperation(...)repeatedly until completion. Each poll produces its own disconnected span (named via URL-derivedgetOperation, e.g.get_videos_operation) rather than being correlated to the originating video-generation request — there is no long-running-operation span model, unlike the single request/response span Braintrust produces forgenerate_content.
There is no reference anywhere in this module (or its tests) to generateVideos, GenerateVideosOperation, GenerateVideosConfig, Veo, or getVideosOperation — confirmed via full-directory grep of braintrust-sdk/instrumentation/genai_1_18_0/.
Braintrust docs status
Checked https://www.braintrust.dev/docs/integrations/ai-providers/gemini (current as of this audit):
- Java section documents only content-generation spans (
generate_content, sync/async) andgenerateContentStream, with request metadata (model, contents, generation config), response, and token metrics. - No mention of video generation,
generateVideos, or Veo models for any language (Java, Python, TypeScript, Go). - Status: not_found — video generation tracing is undocumented for Java (and for every other language) in the current docs.
Upstream sources
- Google GenAI Java SDK repo: https://github.com/googleapis/java-genai —
Modelsclass exposesgenerateVideos(String model, GenerateVideosSource source, GenerateVideosConfig config)andgenerateVideos(String model, String prompt, Image image, Video video, GenerateVideosConfig config). - SDK README usage example (video generation via Veo, polling
operation.done()/client.operations.getVideosOperation): https://github.com/googleapis/java-genai/blob/main/README.md - SDK CHANGELOG entries for video generation support (e.g. "Add backwards compatibility for generateVideos in Java SDK", "Add support for Veo frame interpolation and video extension"): https://github.com/googleapis/java-genai/blob/main/CHANGELOG.md
- Gemini API Veo docs (request/response/config shape —
GenerateVideosConfigfields likenumberOfVideos,durationSeconds,aspectRatio): https://ai.google.dev/gemini-api/docs/veo - Java Veo 3 walkthrough (async polling pattern): https://glaforge.dev/posts/2025/09/10/generating-videos-in-java-with-veo3/
Local files inspected
braintrust-sdk/instrumentation/genai_1_18_0/src/main/java/com/google/genai/BraintrustApiClient.java— full file read;tagSpan(lines 50–161) and the four transport overrides (lines 186, 210, 239, 277) are the only interception points, and are generateContent-shaped.braintrust-sdk/instrumentation/genai_1_18_0/src/test/java/dev/braintrust/instrumentation/genai/v1_18_0/BraintrustGenAITest.java— only tests syncgenerateContent; no video-generation test coverage.- Full-directory grep of
braintrust-sdk/instrumentation/genai_1_18_0/forgenerateImages|GenerateImages|predictLongRunning|generate_videos|video— zero matches.
- 主要语言
- Java
- 星标
- 21
- 派生
- 5
- 平均合并
- 1 天 20 小时
- 30 天内合并 PR
- 8
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
braintrustdata/braintrust-sdk-java 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 82/100
-
难度 2/5 1-3 小时 新手友好度 82/100
-
难度 2/5 1-3 小时 新手友好度 82/100
-
难度 2/5 1-3 小时 新手友好度 78/100
-
难度 2/5 1-3 小时 新手友好度 68/100
查看 braintrustdata/braintrust-sdk-java 的全部 Issue
相似的 Issue
-
enhancement good first issue
难度 2/5 半天 新手友好度 66/100
apache/fineract-consumer-facing#175 ·
维护者通常 1 天内回复
-
[BUG] 订单:会员凭订单号即可取消其他会员的待付款订单(取消接口不校验订单归属)可能已有人在做 @dadiyang 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 70/100
macrozheng/mall#1016 ·
-
[Bug] The producer summary counts an unreported client version as a second version and warns about a version mix可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 74/100
apache/rocketmq-dashboard#6110 ·
维护者通常 4 天内回复
-
Feature:Resolution
难度 2/5 1-3 小时 新手友好度 72/100
intellij-elixir/intellij-elixir#4396 ·
维护者通常 1 天内回复
-
Python 3.15 support可能已有人在做 @amnesiaof 今天认领。 未关闭L: python L: python:uv
难度 2/5 1-3 小时 新手友好度 72/100
dependabot/dependabot-core#16524 · 1 条评论 ·
维护者通常 1 天内回复