Skip to content

Commit e4c8647

Browse files
authored
feat (ui): allow asynchronous onFinish in createUIMessageStream (#7392)
## Background Users want to use async functions as callback without getting ESLint errors (see #7384 ). ## Summary Allow promise-like return values and await. ## Related Issues Fixes #7384
1 parent 57edfcb commit e4c8647

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

‎.changeset/tiny-seals-flash.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'ai': patch
3+
---
4+
5+
feat (ui): allow asynchronous onFinish in createUIMessageStream

‎packages/ai/src/ui-message-stream/create-ui-message-stream.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export function createUIMessageStream<UI_MESSAGE extends UIMessage>({
4343
* (including the original message if it was extended).
4444
*/
4545
responseMessage: UI_MESSAGE;
46-
}) => void;
46+
}) => void | PromiseLike<void>;
4747

4848
generateId?: IdGenerator;
4949
}): ReadableStream<InferUIMessageChunk<UI_MESSAGE>> {

‎packages/ai/src/ui-message-stream/handle-ui-message-stream-finish.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export function handleUIMessageStreamFinish<UI_MESSAGE extends UIMessage>({
4646
* (including the original message if it was extended).
4747
*/
4848
responseMessage: UI_MESSAGE;
49-
}) => void;
49+
}) => void | PromiseLike<void>;
5050
}): ReadableStream<InferUIMessageChunk<UI_MESSAGE>> {
5151
// last message is only relevant for assistant messages
5252
let lastMessage: UI_MESSAGE | undefined =
@@ -112,9 +112,9 @@ export function handleUIMessageStreamFinish<UI_MESSAGE extends UIMessage>({
112112
controller.enqueue(chunk);
113113
},
114114

115-
flush() {
115+
async flush() {
116116
const isContinuation = state.message.id === lastMessage?.id;
117-
onFinish({
117+
await onFinish({
118118
isContinuation,
119119
responseMessage: state.message as UI_MESSAGE,
120120
messages: [

0 commit comments

Comments
 (0)