Skip to content

Backport: fix(ai): skip stringifying text when streaming partial text#14200

Merged
vercel-ai-sdk[bot] merged 1 commit intorelease-v6.0from
backport-pr-14123-to-release-v6.0
Apr 7, 2026
Merged

Backport: fix(ai): skip stringifying text when streaming partial text#14200
vercel-ai-sdk[bot] merged 1 commit intorelease-v6.0from
backport-pr-14123-to-release-v6.0

Conversation

@vercel-ai-sdk
Copy link
Copy Markdown
Contributor

@vercel-ai-sdk vercel-ai-sdk bot commented Apr 7, 2026

This is an automated backport of #14123 to the release-v6.0 branch. FYI @aayush-kapoor

## Background

#13839

streamText with the default text output called JSON.stringify on the
full accumulated text on every single streaming chunk that creates
increasingly large string copies per stream casuing memory issues

## Summary

- skip `JSON.stringify` when the partial output is already a string
- structured outputs still go through stringify as before since they
need serialization to compare.
- compare the text directly
- no extra full-string serialization per chunk

## Manual Verification

tried reproducing via 
<details>
<summary>repro</summary>

```ts
import { openai } from '@ai-sdk/openai';
import { streamText } from 'ai';
import { run } from '../../lib/run';

run(async () => {
  const result = streamText({
    model: openai.responses('gpt-4o-mini'),
    prompt:
      'Write an extremely detailed 5000-word essay about the history of computing. Include every detail you can.',
  });

  let chunks = 0;
  for await (const textPart of result.textStream) {
    chunks++;
    if (chunks % 100 === 0) {
      const mb = (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(1);
      console.log(`chunk ${chunks} — heap: ${mb}MB`);
    }
  }

  console.log(`\nTotal chunks: ${chunks}`);
  console.log(
    `Final heap: ${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(1)}MB`,
  );
});
```
</details>

## Checklist

- [x] Tests have been added / updated (for bug fixes / features)
- [ ] Documentation has been added / updated (for bug fixes / features)
- [x] A _patch_ changeset for relevant packages has been added (for bug
fixes / features - run `pnpm changeset` in the project root)
- [x] I have reviewed this pull request (self-review)

## Related Issues

fixes #13839
@vercel-ai-sdk vercel-ai-sdk bot enabled auto-merge (squash) April 7, 2026 18:35
@tigent tigent bot added ai/core core functions like generateText, streamText, etc. Provider utils, and provider spec. bug Something isn't working as documented maintenance CI, internal documentation, automations, etc labels Apr 7, 2026
@vercel-ai-sdk vercel-ai-sdk bot merged commit 1003609 into release-v6.0 Apr 7, 2026
24 checks passed
@vercel-ai-sdk vercel-ai-sdk bot deleted the backport-pr-14123-to-release-v6.0 branch April 7, 2026 18:43
@vercel-ai-sdk
Copy link
Copy Markdown
Contributor Author

vercel-ai-sdk bot commented Apr 7, 2026

🚀 Published in:

Package Version
ai 6.0.150
@ai-sdk/angular 2.0.151
@ai-sdk/gateway 3.0.92
@ai-sdk/langchain 2.0.156
@ai-sdk/llamaindex 2.0.150
@ai-sdk/react 3.0.152
@ai-sdk/rsc 2.0.150
@ai-sdk/svelte 4.0.150
@ai-sdk/vue 3.0.150

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai/core core functions like generateText, streamText, etc. Provider utils, and provider spec. bug Something isn't working as documented maintenance CI, internal documentation, automations, etc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant