File tree Expand file tree Collapse file tree 10 files changed +94
-5
lines changed
examples/next-app/components Expand file tree Collapse file tree 10 files changed +94
-5
lines changed Original file line number Diff line number Diff line change 3
3
import type { EmotionScores } from '@humeai/voice' ;
4
4
import { useVoice } from '@humeai/voice-react' ;
5
5
import { SelectItem } from '@radix-ui/react-select' ;
6
- import { useMemo , useState } from 'react' ;
6
+ import { useCallback , useMemo , useState } from 'react' ;
7
7
import { match } from 'ts-pattern' ;
8
8
9
9
import {
@@ -38,12 +38,26 @@ export const ExampleComponent = () => {
38
38
callDurationTimestamp,
39
39
sendUserInput,
40
40
sendAssistantInput,
41
+ sendResumeAssistantMessage,
42
+ sendPauseAssistantMessage,
41
43
} = useVoice ( ) ;
42
44
43
45
const [ textValue , setTextValue ] = useState ( '' ) ;
44
46
const [ textInputType , setTextInputType ] = useState < 'user' | 'assistant' > (
45
47
'user' ,
46
48
) ;
49
+ const [ paused , setPaused ] = useState ( false ) ;
50
+
51
+ const togglePaused = useCallback ( ( ) => {
52
+ if ( paused ) {
53
+ sendResumeAssistantMessage ( ) ;
54
+ setPaused ( false ) ;
55
+ } else {
56
+ sendPauseAssistantMessage ( ) ;
57
+ setPaused ( true ) ;
58
+ }
59
+ } , [ paused ] ) ;
60
+ const pausedText = paused ? 'Resume' : 'Pause' ;
47
61
48
62
const assistantMessages = useMemo ( ( ) => {
49
63
return messages
@@ -165,6 +179,13 @@ export const ExampleComponent = () => {
165
179
>
166
180
Send text input message
167
181
</ button >
182
+
183
+ < button
184
+ className = "border border-black p-2"
185
+ onClick = { togglePaused }
186
+ >
187
+ { pausedText }
188
+ </ button >
168
189
</ div >
169
190
170
191
< div >
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " @humeai/voice" ,
3
- "version" : " 0.1.6-beta.1 " ,
3
+ "version" : " 0.1.6-beta.2 " ,
4
4
"description" : " " ,
5
5
"main" : " ./dist/index.js" ,
6
6
"module" : " ./dist/index.mjs" ,
Original file line number Diff line number Diff line change @@ -243,4 +243,42 @@ export class VoiceClient {
243
243
get readyState ( ) {
244
244
return this . socket . readyState ;
245
245
}
246
+
247
+ /**
248
+ * @name sendPauseAssistantMessage
249
+ * @description
250
+ * Send pause assistant message to the websocket. This pauses responses from EVI. Chat history is still saved and sent after resuming.
251
+ */
252
+ sendPauseAssistantMessage ( ) {
253
+ if ( ! this . socket ) {
254
+ throw new Error ( 'Socket is not connected.' ) ;
255
+ }
256
+
257
+ if ( this . socket . readyState !== WebSocket . OPEN ) {
258
+ throw new Error ( 'Socket is not open.' ) ;
259
+ }
260
+
261
+ const json = JSON . stringify ( { type : 'pause_assistant_message' } ) ;
262
+
263
+ this . socket . send ( json ) ;
264
+ }
265
+
266
+ /**
267
+ * @name sendResumeAssistantMessage
268
+ * @description
269
+ * Send resume assistant message to the websocket. This resumes responses from EVI. Chat history sent while paused will now be sent.
270
+ */
271
+ sendResumeAssistantMessage ( ) {
272
+ if ( ! this . socket ) {
273
+ throw new Error ( 'Socket is not connected.' ) ;
274
+ }
275
+
276
+ if ( this . socket . readyState !== WebSocket . OPEN ) {
277
+ throw new Error ( 'Socket is not open.' ) ;
278
+ }
279
+
280
+ const json = JSON . stringify ( { type : 'resume_assistant_message' } ) ;
281
+
282
+ this . socket . send ( json ) ;
283
+ }
246
284
}
Original file line number Diff line number Diff line change
1
+ import z from 'zod' ;
2
+
3
+ export const PauseAssistantMessageSchema = z . object ( {
4
+ type : z . literal ( 'pause_assistant_message' ) ,
5
+ } ) ;
6
+
7
+ export type PauseAssistantMessage = z . infer < typeof PauseAssistantMessageSchema > ;
Original file line number Diff line number Diff line change
1
+ import z from 'zod' ;
2
+
3
+ export const ResumeAssistantMessageSchema = z . object ( {
4
+ type : z . literal ( 'resume_assistant_message' ) ,
5
+ } ) ;
6
+
7
+ export type ResumeAssistantMessage = z . infer <
8
+ typeof ResumeAssistantMessageSchema
9
+ > ;
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " @humeai/voice-embed-react" ,
3
- "version" : " 0.1.6-beta.1 " ,
3
+ "version" : " 0.1.6-beta.2 " ,
4
4
"description" : " " ,
5
5
"main" : " ./dist/index.js" ,
6
6
"module" : " ./dist/index.mjs" ,
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " @humeai/voice-embed" ,
3
- "version" : " 0.1.6-beta.1 " ,
3
+ "version" : " 0.1.6-beta.2 " ,
4
4
"description" : " " ,
5
5
"main" : " ./dist/index.js" ,
6
6
"module" : " ./dist/index.mjs" ,
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " @humeai/voice-react" ,
3
- "version" : " 0.1.6-beta.1 " ,
3
+ "version" : " 0.1.6-beta.2 " ,
4
4
"description" : " " ,
5
5
"main" : " ./dist/index.js" ,
6
6
"module" : " ./dist/index.mjs" ,
Original file line number Diff line number Diff line change @@ -82,6 +82,8 @@ export type VoiceContextType = {
82
82
sendAssistantInput : VoiceClient [ 'sendAssistantInput' ] ;
83
83
sendSessionSettings : VoiceClient [ 'sendSessionSettings' ] ;
84
84
sendToolMessage : VoiceClient [ 'sendToolMessage' ] ;
85
+ sendPauseAssistantMessage : VoiceClient [ 'sendPauseAssistantMessage' ] ;
86
+ sendResumeAssistantMessage : VoiceClient [ 'sendResumeAssistantMessage' ] ;
85
87
status : VoiceStatus ;
86
88
micFft : number [ ] ;
87
89
error : VoiceError | null ;
@@ -379,6 +381,8 @@ export const VoiceProvider: FC<VoiceProviderProps> = ({
379
381
sendAssistantInput : client . sendAssistantInput ,
380
382
sendSessionSettings : client . sendSessionSettings ,
381
383
sendToolMessage : client . sendToolMessage ,
384
+ sendPauseAssistantMessage : client . sendPauseAssistantMessage ,
385
+ sendResumeAssistantMessage : client . sendResumeAssistantMessage ,
382
386
status,
383
387
unmute : mic . unmute ,
384
388
error,
@@ -407,6 +411,8 @@ export const VoiceProvider: FC<VoiceProviderProps> = ({
407
411
client . sendAssistantInput ,
408
412
client . sendSessionSettings ,
409
413
client . sendToolMessage ,
414
+ client . sendPauseAssistantMessage ,
415
+ client . sendResumeAssistantMessage ,
410
416
status ,
411
417
error ,
412
418
isAudioError ,
Original file line number Diff line number Diff line change @@ -205,6 +205,12 @@ export const useVoiceClient = (props: {
205
205
} ,
206
206
[ ] ,
207
207
) ;
208
+ const sendPauseAssistantMessage = useCallback ( ( ) => {
209
+ client . current ?. sendPauseAssistantMessage ( ) ;
210
+ } , [ ] ) ;
211
+ const sendResumeAssistantMessage = useCallback ( ( ) => {
212
+ client . current ?. sendResumeAssistantMessage ( ) ;
213
+ } , [ ] ) ;
208
214
209
215
return {
210
216
readyState,
@@ -215,5 +221,7 @@ export const useVoiceClient = (props: {
215
221
sendUserInput,
216
222
sendAssistantInput,
217
223
sendToolMessage,
224
+ sendPauseAssistantMessage,
225
+ sendResumeAssistantMessage,
218
226
} ;
219
227
} ;
You can’t perform that action at this time.
0 commit comments