@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
5
5
import { generateId } from '../shared/generate-id' ;
6
6
import { readDataStream } from '../shared/read-data-stream' ;
7
- import { Message } from '../shared/types' ;
7
+ import { CreateMessage , Message } from '../shared/types' ;
8
8
9
9
export type AssistantStatus = 'in_progress' | 'awaiting_message' ;
10
10
@@ -29,6 +29,19 @@ export type UseAssistantHelpers = {
29
29
*/
30
30
input : string ;
31
31
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
+
32
45
/**
33
46
* setState-powered method to update the input value.
34
47
*/
@@ -122,23 +135,18 @@ export function useAssistant({
122
135
setInput ( event . target . value ) ;
123
136
} ;
124
137
125
- const submitMessage = async (
126
- event ?: React . FormEvent < HTMLFormElement > ,
138
+ const append = async (
139
+ message : Message | CreateMessage ,
127
140
requestOptions ?: {
128
141
data ?: Record < string , string > ;
129
142
} ,
130
143
) => {
131
- event ?. preventDefault ?.( ) ;
132
-
133
- if ( input === '' ) {
134
- return ;
135
- }
136
-
137
- setStatus ( 'in_progress' ) ;
138
-
139
144
setMessages ( messages => [
140
145
...messages ,
141
- { id : '' , role : 'user' , content : input } ,
146
+ {
147
+ ...message ,
148
+ id : message . id ?? generateId ( ) ,
149
+ } ,
142
150
] ) ;
143
151
144
152
setInput ( '' ) ;
@@ -240,7 +248,23 @@ export function useAssistant({
240
248
setStatus ( 'awaiting_message' ) ;
241
249
} ;
242
250
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
+
243
266
return {
267
+ append,
244
268
messages,
245
269
setMessages,
246
270
threadId,
0 commit comments