@@ -180,9 +180,9 @@ export class VoiceAgent extends Agent {
180180 const maxVolume = event . data [ 1 ] ;
181181 if ( this . inputChannel == Channel . Audio )
182182 this . talkingConnection ?. write (
183- this . createAssistantRequest ( "user" , [
184- toStreamAudioContent ( arrayBufferToUint8 ( rawAudioPcmData . buffer ) ) ,
185- ] )
183+ this . createAssistantAudioMessage (
184+ arrayBufferToUint8 ( rawAudioPcmData . buffer )
185+ )
186186 ) ;
187187 } ;
188188
@@ -268,9 +268,7 @@ export class VoiceAgent extends Agent {
268268 if ( ! this . isConnected ) await this . connect ( ) ;
269269 if ( this . inputChannel == Channel . Text ) {
270270 // only send text when you know the channel is text
271- this . talkingConnection ?. write (
272- this . createAssistantRequest ( "user" , [ toTextContent ( text ) ] )
273- ) ;
271+ this . talkingConnection ?. write ( this . createAssistantTextMessage ( text ) ) ;
274272 }
275273 } ;
276274
@@ -381,29 +379,34 @@ export class VoiceAgent extends Agent {
381379 userContent : AssistantConversationUserMessage | undefined
382380 ) => {
383381 if ( userContent ) {
384- const agentTranscript = toContentText (
385- userContent . getMessage ( ) ?. getContentsList ( )
386- ) ;
387- if ( agentTranscript ) {
388- if ( this . agentMessages . length > 0 ) {
389- const lastMessage = this . agentMessages [ this . agentMessages . length - 1 ] ;
390- if (
391- lastMessage . role === MessageRole . User &&
392- lastMessage . id === userContent . getId ( )
393- ) {
394- this . agentMessages . pop ( ) ;
382+ switch ( userContent . getMessageCase ( ) ) {
383+ case AssistantConversationUserMessage . MessageCase . MESSAGE_NOT_SET :
384+ case AssistantConversationUserMessage . MessageCase . AUDIO :
385+ case AssistantConversationUserMessage . MessageCase . TEXT :
386+ const agentTranscript = userContent . getText ( ) ?. getContent ( ) ;
387+ if ( agentTranscript ) {
388+ if ( this . agentMessages . length > 0 ) {
389+ const lastMessage =
390+ this . agentMessages [ this . agentMessages . length - 1 ] ;
391+ if (
392+ lastMessage . role === MessageRole . User &&
393+ lastMessage . id === userContent . getId ( )
394+ ) {
395+ this . agentMessages . pop ( ) ;
396+ }
397+ }
398+ this . agentMessages . push ( {
399+ id : userContent . getId ( ) ,
400+ role : MessageRole . User ,
401+ messages : [ agentTranscript ] ,
402+ time : toDate ( userContent ?. getTime ( ) ) ,
403+ status : userContent . getCompleted ( )
404+ ? MessageStatus . Complete
405+ : MessageStatus . Pending ,
406+ } ) ;
395407 }
396- }
397- this . agentMessages . push ( {
398- id : userContent . getId ( ) ,
399- role : MessageRole . User ,
400- messages : [ agentTranscript ] ,
401- time : toDate ( userContent ?. getTime ( ) ) ,
402- status : userContent . getCompleted ( )
403- ? MessageStatus . Complete
404- : MessageStatus . Pending ,
405- } ) ;
406408 }
409+
407410 this . emit (
408411 AgentEvent . ConversationEvent ,
409412 AssistantMessagingResponse . DataCase . USER ,
@@ -416,30 +419,42 @@ export class VoiceAgent extends Agent {
416419 systemContent : AssistantConversationAssistantMessage | undefined
417420 ) => {
418421 if ( systemContent ) {
419- const responseContent =
420- systemContent ?. getMessage ( ) ?. getContentsList ( ) || [ ] ;
421- if (
422- responseContent . filter ( ( x ) => x . getContenttype ( ) == "text" ) . length > 0
423- ) {
424- const systemTranscript = toContentText (
425- responseContent . filter ( ( x ) => x . getContenttype ( ) == "text" )
426- ) ;
427- if ( systemTranscript ) {
428- if ( systemContent . getCompleted ( ) ) {
429- // Complete message
430- if ( this . agentMessages . length > 0 ) {
431- const lastMessage =
432- this . agentMessages [ this . agentMessages . length - 1 ] ;
433- if (
434- lastMessage . role === MessageRole . System &&
435- lastMessage . status === MessageStatus . Pending
436- ) {
437- // Update the existing message to complete
438- lastMessage . messages = [ systemTranscript ] ; // Replace with complete message
439- lastMessage . status = MessageStatus . Complete ;
440- lastMessage . time = toDate ( systemContent ?. getTime ( ) ) ;
422+ //
423+ switch ( systemContent . getMessageCase ( ) ) {
424+ case AssistantConversationAssistantMessage . MessageCase . MESSAGE_NOT_SET :
425+ case AssistantConversationAssistantMessage . MessageCase . AUDIO :
426+ const content = systemContent . getAudio ( ) ;
427+ if ( content ) {
428+ const audioData = content . getContent_asU8 ( ) ;
429+ this . addAudioChunk ( new Uint8Array ( audioData ) . buffer ) ;
430+ }
431+ case AssistantConversationAssistantMessage . MessageCase . TEXT :
432+ const systemTranscript = systemContent . getText ( ) ?. getContent ( ) ;
433+ if ( systemTranscript ) {
434+ if ( systemContent . getCompleted ( ) ) {
435+ // Complete message
436+ if ( this . agentMessages . length > 0 ) {
437+ const lastMessage =
438+ this . agentMessages [ this . agentMessages . length - 1 ] ;
439+ if (
440+ lastMessage . role === MessageRole . System &&
441+ lastMessage . status === MessageStatus . Pending
442+ ) {
443+ // Update the existing message to complete
444+ lastMessage . messages = [ systemTranscript ] ; // Replace with complete message
445+ lastMessage . status = MessageStatus . Complete ;
446+ lastMessage . time = toDate ( systemContent ?. getTime ( ) ) ;
447+ } else {
448+ // Unexpected case: complete message without pending, create new
449+ this . agentMessages . push ( {
450+ id : systemContent . getId ( ) ,
451+ role : MessageRole . System ,
452+ messages : [ systemTranscript ] ,
453+ time : toDate ( systemContent ?. getTime ( ) ) ,
454+ status : MessageStatus . Complete ,
455+ } ) ;
456+ }
441457 } else {
442- // Unexpected case: complete message without pending, create new
443458 this . agentMessages . push ( {
444459 id : systemContent . getId ( ) ,
445460 role : MessageRole . System ,
@@ -449,28 +464,29 @@ export class VoiceAgent extends Agent {
449464 } ) ;
450465 }
451466 } else {
452- this . agentMessages . push ( {
453- id : systemContent . getId ( ) ,
454- role : MessageRole . System ,
455- messages : [ systemTranscript ] ,
456- time : toDate ( systemContent ?. getTime ( ) ) ,
457- status : MessageStatus . Complete ,
458- } ) ;
459- }
460- } else {
461- // Chunk
462- if ( this . agentMessages . length > 0 ) {
463- const lastMessage =
464- this . agentMessages [ this . agentMessages . length - 1 ] ;
465- if (
466- lastMessage . role === MessageRole . System &&
467- lastMessage . status === MessageStatus . Pending
468- ) {
469- // Update existing message with new chunk
470- lastMessage . messages [ 0 ] += systemTranscript ; // Merge strings
471- lastMessage . time = toDate ( systemContent ?. getTime ( ) ) ;
467+ // Chunk
468+ if ( this . agentMessages . length > 0 ) {
469+ const lastMessage =
470+ this . agentMessages [ this . agentMessages . length - 1 ] ;
471+ if (
472+ lastMessage . role === MessageRole . System &&
473+ lastMessage . status === MessageStatus . Pending
474+ ) {
475+ // Update existing message with new chunk
476+ lastMessage . messages [ 0 ] += systemTranscript ; // Merge strings
477+ lastMessage . time = toDate ( systemContent ?. getTime ( ) ) ;
478+ } else {
479+ // Create new pending message for chunk
480+ this . agentMessages . push ( {
481+ id : systemContent . getId ( ) ,
482+ role : MessageRole . System ,
483+ messages : [ systemTranscript ] ,
484+ time : toDate ( systemContent ?. getTime ( ) ) ,
485+ status : MessageStatus . Pending ,
486+ } ) ;
487+ }
472488 } else {
473- // Create new pending message for chunk
489+ // Create new pending message for chunk if no messages exist
474490 this . agentMessages . push ( {
475491 id : systemContent . getId ( ) ,
476492 role : MessageRole . System ,
@@ -479,29 +495,8 @@ export class VoiceAgent extends Agent {
479495 status : MessageStatus . Pending ,
480496 } ) ;
481497 }
482- } else {
483- // Create new pending message for chunk if no messages exist
484- this . agentMessages . push ( {
485- id : systemContent . getId ( ) ,
486- role : MessageRole . System ,
487- messages : [ systemTranscript ] ,
488- time : toDate ( systemContent ?. getTime ( ) ) ,
489- status : MessageStatus . Pending ,
490- } ) ;
491498 }
492499 }
493- }
494- }
495-
496- if (
497- responseContent . filter ( ( x ) => x . getContenttype ( ) == "audio" ) . length > 0
498- ) {
499- for ( const content of responseContent ) {
500- if ( content . getContenttype ( ) === "audio" ) {
501- const audioData = content . getContent_asU8 ( ) ;
502- this . addAudioChunk ( new Uint8Array ( audioData ) . buffer ) ;
503- }
504- }
505500 }
506501 this . emit (
507502 AgentEvent . ConversationEvent ,
0 commit comments