Skip to content

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

Open
aayush-kapoor wants to merge 2 commits intomainfrom
aayush/stream-text-stringify
Open

fix(ai): skip stringifying text when streaming partial text#14123
aayush-kapoor wants to merge 2 commits intomainfrom
aayush/stream-text-stringify

Conversation

@aayush-kapoor
Copy link
Copy Markdown
Collaborator

@aayush-kapoor aayush-kapoor commented Apr 3, 2026

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

repro
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`,
  );
});

Checklist

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

Related Issues

fixes #13839

@tigent tigent bot added ai/core core functions like generateText, streamText, etc. Provider utils, and provider spec. bug Something isn't working as documented reproduction provided labels Apr 3, 2026
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 reproduction provided

Projects

None yet

Development

Successfully merging this pull request may close these issues.

streamText Memory Issue: parsePartialOutput creates O(n) string copies

1 participant