Stabilized message.id during streamText call with multiple steps #6267
+6
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Background
When dealing with chat message persistence, it is certainly helpful if the server and client have similar representations of a message, most importantly the key/identifier/id being the same. The id of a message is a bit of a difficult concept due to the message being an aggregation of activities from an AI model and tool executions where each component has an id.
In vercel ai, the server message id comes from the first step part, but the client message id comes from the last step part. The messages on the client get their ids in processChatResponse, on the server in appendResponseMessages. The server chooses the id from the first message part. The client seems to attempt to do this, but fails because the logic doesn't fail to prevent the id from being overridden.
#4845
Summary
I fixed the client processChatResponse to keep the message id from the first step part even as more step parts come in.
Verification
I tested with a variety of ai multi-step responses.
Tasks
pnpm changeset
in the project root)pnpm prettier-fix
in the project root)Future Work
Related Issues