You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug] Google audio, video and PDF inlineData can be discarded by image shedding #6176
Package version 0.1.213, source revision 33104b1f9545caeb0344193009917ceef9969682. This is a source-level regression report for this exact revision.
Problem
The Google collector treats every inlineData part as an image. Gemini also carries audio, video and documents in that field, so a byte or image-count limit can replace those parts with an image-omitted note. Undeclared media is likewise assumed to be PNG without evidence.
Proposed correction
Collect Google inlineData only when its declared MIME type is image/*. Preserve non-image and unknown media in both byte and count shedding; image archiving and protected-tail behavior continue as before.
The prepared branch includes focused regression coverage in tests/egress-shed-media.test.ts, tests/issue4124-image-count-cap.test.ts, tests/issue5745-image-shed-cap.test.ts.
Proposed fix: #6184. The collector now limits image shedding to declared image/* media and retains audio, video, PDF and unknown media. The independent focused suite passes 30/30.
Activity
Afloat16 commentedon Nov 11, 2026
Proposed fix: #6184. The collector now limits image shedding to declared image/* media and retains audio, video, PDF and unknown media. The independent focused suite passes 30/30.
ranxianglei commentedon Nov 11, 2026
[bot] (ai: qwen/qwen3.8-27b)
查重:不重复。本报告与上游同号内容 #6176 是同一份(标题/作者/时间戳一致,PR #6184 正文写
Fixes #6176即指本条),且已有修复 PR #6184。未与其它独立缺陷重复。本次为对 #6184 的审核 + 本地定向验证。标签:
bug·scope/wiring(出站 wire 媒体处理)·p2(能用但特定条件下明显退化,非永久数据丢失)。结构化八问
是什么问题:Gemini 的
inlineData字段不只装图片——音频、视频、PDF 也走它。但出站 shedding 把每个inlineData都当图片:超预算时把非图媒体替换成一张[image: … omitted]占位、或从图片计数里算进去再归档,导致模型这一轮看不到用户发的文档/音频。此外没声明 MIME 的媒体被无证据地默认成 PNG。什么原因导致的:根因在收集器这一层。
src/egress-shed.ts的collectOccurrences()google 分支(master 第 170–172 行)对每个inlineData无条件收集为「图片 occurrence」,MIME 缺失默认image/png——把「有 inlineData」等同于「是图片」。字节 shedding(shedWireImages)和计数 shedding(shedWireImagesToCount)都走这一个收集器,所以两条路都被污染。影响范围与严重程度:触发条件较窄,须同时满足——走 Google/Gemini 协议 + 请求带非图
inlineData+ 触发了字节预算或图片数量上限的 shedding。命中时该轮模型看不到这份媒体(被误标成 image omitted),多模态文档/音频任务会退化甚至答错;原始字节仍在会话存储与客户端自身历史里,不是永久数据丢失。普通文本+图片会话完全不受影响。→ p2(特定条件明显问题,需绕行/命中才发生,未到 p1 数据丢失档)。怎么修复的:在收集器源头按 MIME 收口——google 分支只在声明的
mimeType匹配^image\//i时才收集为图片;非图与未知媒体一律不收集(两条 shedding 路自然都不碰它们)。真图片的归档 / protected-tail / jimp 降采样行为保持不变。这是改「决定什么算图片」的那一层(疏),不是在下游过滤字节(堵)。是否有回归问题:
tests/issue3400-image-rescale.test.ts:516、tests/issue4124-image-count-cap.test.ts:207)都用显式image/pngMIME,仍被收集 → 不受影响,本地全绿。inlineData,现在不再被 shed。旧值=当作image/png参与字节/计数 shedding(可能被归档或降采样);新值=原样保留。这是本 PR 的目的本身(修的就是这个误判),也更安全——避免把非图喂给 jimp 降采样造成损坏。代价:若真出现「缺 MIME 的大体积真图」本轮不会被 shed,可能仍超预算并走send anyway+warn 日志路径;Gemini 规范要求 mimeType 必填,属畸形输入边缘,可接受。是否破坏缓存:不涉及。shedding 只作用于出站副本,不改内核状态、不改前缀缓存键;本次仅缩小「哪些 part 参与 shed」的集合,不改变任何已缓存字节的生成方式。
是否改了设计方向:不涉及。仍是同一个两档 shedding 机制,只是把 google 的图片识别从「有 inlineData 即是图」收紧为「声明为 image/* 才是图」。
是否引入了新的配置:不涉及。无新 env/config/默认值。
验证证据(本地定向,非全量)
tests/egress-shed-media.test.ts8 例)。一个不阻塞的小提示
PR 描述里 "Regression coverage" 列了三个测试文件(
egress-shed-media/issue4124/issue5745),实际 diff 只新增tests/egress-shed-media.test.ts,另两个是既有用例未改动——措辞上易让人以为三个都改了;实质覆盖没问题,不影响合并判定。结论:修复正确、最小、覆盖双向,测试有牙,CI 无失败。建议合并(合并权在 owner,我不代 merge)。PR 质量达标,无需在分支上重构。等 CI 全绿后即可合入。