wrapAISDK copies AI SDK v7 file bytes one key per byte instead of turning them into attachments
Maintainer antworten meist innerhalb von 1 Tag
@AbhiPrasad arbeitet bereits daran.
Seit 06.11.2026.
Bewertung
Dieses Issue wurde noch nicht bewertet.
Beschreibung
What happens
With ai 7.0.145 and braintrust 3.32.0, file parts reach the doStream model span as { type: 'file', mediaType, data: { type: 'data', data: Uint8Array } }, the AI SDK 7 shape (SharedV4FileData). processContentPart passes part.data, the wrapper object, to convertDataToAttachment, which only handles a string, Uint8Array, Buffer or Blob, so no attachment is made. deepCopyEvent then runs JSON.stringify and JSON.parse on the raw Uint8Array, which becomes an object with one key per byte.
The same code is in 3.43.0 and on main as of e0b7107dc7.
Impact
1 MB of image bytes becomes 1,000,000 keys and about 120 MB of heap on every model call. We call Claude through Vertex, which takes no image URLs, so the AI SDK downloads every image in the conversation and each call carries all of them. A chat with 25 MB of images pushed the heap to about 3.1 GB, and our 4 GB serverless instances were killed for memory.
On a single 38-image call (24.5 MB of images), the heap peaked at 2,651 MB with wrapAISDK and at 117 MB without it, and deepCopyEvent alone allocated 5.4 GB.
Reproduction
processContentPart leaves this shape untouched, so the model span event is copied like this.
import { deepCopyEvent } from 'braintrust';
const copy = deepCopyEvent({
input: [{ type: 'file', mediaType: 'image/png', data: { type: 'data', data: new Uint8Array(1_000_000) } }],
});
// copy.input[0].data.data is a plain object with 1,000,000 keys, about 11 MB of JSON
Workaround we use
A one-line change in processContentPart, applied with pnpm patch to every build in dist, fixes it for us.
const fileAttachment = convertDataToAttachment(
- part.data,
+ part.data.type === "data" ? part.data.data : part.data,
part.mimeType || part.mediaType,
part.name || part.filename
);
With it, the same 38-image call peaked at 130 MB of heap with tracing on. A complete fix could also handle { type: 'url' } and the other SharedV4FileData variants in convertDataToAttachment.
Environment
braintrust3.32.0, also seen at runtime on 3.42.0 and in the source of 3.43.0ai7.0.145 with@ai-sdk/google-vertex5.0.117 (Anthropic on Vertex)- Node 22
- Vorherrschende Sprache
- TypeScript
- Sterne
- 29
- Forks
- 22
- Ø Merge
- 1 T. 25 Min.
- Gemergte PRs (30 T.)
- 80
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus braintrustdata/braintrust-sdk-javascript
-
@braintrust/otel can't be installed alongside OpenTelemetry JS 3Evtl. vergeben @lforst hat das heute übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 57/100
braintrustdata/braintrust-sdk-javascript#2745 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
typescript
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
braintrustdata/braintrust-sdk-javascript#2708 ·
Maintainer antworten meist innerhalb von 1 Tag
-
typescript
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
braintrustdata/braintrust-sdk-javascript#2707 ·
Maintainer antworten meist innerhalb von 1 Tag
-
typescript
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
braintrustdata/braintrust-sdk-javascript#2686 ·
Maintainer antworten meist innerhalb von 1 Tag
-
typescript
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
braintrustdata/braintrust-sdk-javascript#2685 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in braintrustdata/braintrust-sdk-javascript
Ähnliche Issues
-
Add: ESP 2 ROOffenapproved check:passed streams:add
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
ipaas: Configure form shows "Deploy to apply." and "Overrides selected Link" when they don't applyEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
wso2/integration-control-plane#1118 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
UTDNebula/utd-notebook#311 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag