Skip to content

Commit 9c2a049

Browse files
authoredApr 23, 2024··
Add append helper to useAssistant. (#1407)
1 parent 1e84d6d commit 9c2a049

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed
 

‎.changeset/healthy-files-scream.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'ai': patch
3+
---
4+
5+
Add append() helper to useAssistant.

‎docs/pages/docs/api-reference/use-assistant.mdx

+5
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ The `useAssistant` hook returns an object with several helper methods and variab
137137
'React.Dispatch<React.SetStateAction<string>>',
138138
'Function to update the `input` value.',
139139
],
140+
[
141+
'append',
142+
'(message: Message) => void',
143+
` Append a user message to the chat list. This triggers the API call to fetch the assistant's response.`,
144+
],
140145
[
141146
'handleInputChange',
142147
'(e: any) => void',

‎packages/core/react/use-assistant.ts

+36-12
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useState } from 'react';
44

55
import { generateId } from '../shared/generate-id';
66
import { readDataStream } from '../shared/read-data-stream';
7-
import { Message } from '../shared/types';
7+
import { CreateMessage, Message } from '../shared/types';
88

99
export type AssistantStatus = 'in_progress' | 'awaiting_message';
1010

@@ -29,6 +29,19 @@ export type UseAssistantHelpers = {
2929
*/
3030
input: string;
3131

32+
/**
33+
* Append a user message to the chat list. This triggers the API call to fetch
34+
* the assistant's response.
35+
* @param message The message to append
36+
* @param requestOptions Additional options to pass to the API call
37+
*/
38+
append: (
39+
message: Message | CreateMessage,
40+
requestOptions?: {
41+
data?: Record<string, string>;
42+
},
43+
) => Promise<void>;
44+
3245
/**
3346
* setState-powered method to update the input value.
3447
*/
@@ -122,23 +135,18 @@ export function useAssistant({
122135
setInput(event.target.value);
123136
};
124137

125-
const submitMessage = async (
126-
event?: React.FormEvent<HTMLFormElement>,
138+
const append = async (
139+
message: Message | CreateMessage,
127140
requestOptions?: {
128141
data?: Record<string, string>;
129142
},
130143
) => {
131-
event?.preventDefault?.();
132-
133-
if (input === '') {
134-
return;
135-
}
136-
137-
setStatus('in_progress');
138-
139144
setMessages(messages => [
140145
...messages,
141-
{ id: '', role: 'user', content: input },
146+
{
147+
...message,
148+
id: message.id ?? generateId(),
149+
},
142150
]);
143151

144152
setInput('');
@@ -240,7 +248,23 @@ export function useAssistant({
240248
setStatus('awaiting_message');
241249
};
242250

251+
const submitMessage = async (
252+
event?: React.FormEvent<HTMLFormElement>,
253+
requestOptions?: {
254+
data?: Record<string, string>;
255+
},
256+
) => {
257+
event?.preventDefault?.();
258+
259+
if (input === '') {
260+
return;
261+
}
262+
263+
append({ role: 'user', content: input }, requestOptions);
264+
};
265+
243266
return {
267+
append,
244268
messages,
245269
setMessages,
246270
threadId,

0 commit comments

Comments
 (0)
Please sign in to comment.