@@ -454,6 +454,8 @@ export class ChatComponent implements OnInit, AfterViewInit, OnDestroy {
454454 }
455455 } else if ( chunkJson . errorMessage ) {
456456 this . processErrorMessage ( chunkJson )
457+ } else if ( chunkJson . actions ) {
458+ this . processActionArtifact ( chunkJson )
457459 }
458460 this . changeDetectorRef . detectChanges ( ) ;
459461 } ,
@@ -573,6 +575,13 @@ export class ChatComponent implements OnInit, AfterViewInit, OnDestroy {
573575 return parts ;
574576 }
575577
578+ private processActionArtifact ( e : AdkEvent ) {
579+ if ( e . actions && e . actions . artifactDelta ) {
580+ this . storeEvents ( null , e ) ;
581+ this . storeMessage ( null , e , 'bot' ) ;
582+ }
583+ }
584+
576585 /**
577586 * Collapse consecutive text parts into a single part. Preserves relative
578587 * order of other parts.
@@ -675,43 +684,45 @@ export class ChatComponent implements OnInit, AfterViewInit, OnDestroy {
675684 additionalIndeces . toolUseIndex :
676685 undefined ,
677686 } ;
678- if ( part . inlineData ) {
679- const base64Data =
680- this . formatBase64Data ( part . inlineData . data , part . inlineData . mimeType ) ;
681- message . inlineData = {
682- displayName : part . inlineData . displayName ,
683- data : base64Data ,
684- mimeType : part . inlineData . mimeType ,
685- } ;
686- } else if ( part . text ) {
687- message . text = part . text ;
688- message . thought = part . thought ? true : false ;
689- if ( e ?. groundingMetadata && e . groundingMetadata . searchEntryPoint &&
690- e . groundingMetadata . searchEntryPoint . renderedContent ) {
691- message . renderedContent =
692- e . groundingMetadata . searchEntryPoint . renderedContent ;
693- }
694- message . eventId = e ?. id ;
695- } else if ( part . functionCall ) {
696- message . functionCall = part . functionCall ;
697- message . eventId = e ?. id ;
698- } else if ( part . functionResponse ) {
699- message . functionResponse = part . functionResponse ;
700- message . eventId = e ?. id ;
701- } else if ( part . executableCode ) {
702- message . executableCode = part . executableCode ;
703- } else if ( part . codeExecutionResult ) {
704- message . codeExecutionResult = part . codeExecutionResult ;
705- if ( e . actions && e . actions . artifact_delta ) {
706- for ( const key in e . actions . artifact_delta ) {
707- if ( e . actions . artifact_delta . hasOwnProperty ( key ) ) {
708- this . renderArtifact ( key , e . actions . artifact_delta [ key ] ) ;
687+ if ( part ) {
688+ if ( part . inlineData ) {
689+ const base64Data = this . formatBase64Data (
690+ part . inlineData . data , part . inlineData . mimeType ) ;
691+ message . inlineData = {
692+ displayName : part . inlineData . displayName ,
693+ data : base64Data ,
694+ mimeType : part . inlineData . mimeType ,
695+ } ;
696+ } else if ( part . text ) {
697+ message . text = part . text ;
698+ message . thought = part . thought ? true : false ;
699+ if ( e ?. groundingMetadata && e . groundingMetadata . searchEntryPoint &&
700+ e . groundingMetadata . searchEntryPoint . renderedContent ) {
701+ message . renderedContent =
702+ e . groundingMetadata . searchEntryPoint . renderedContent ;
703+ }
704+ message . eventId = e ?. id ;
705+ } else if ( part . functionCall ) {
706+ message . functionCall = part . functionCall ;
707+ message . eventId = e ?. id ;
708+ } else if ( part . functionResponse ) {
709+ message . functionResponse = part . functionResponse ;
710+ message . eventId = e ?. id ;
711+ } else if ( part . executableCode ) {
712+ message . executableCode = part . executableCode ;
713+ } else if ( part . codeExecutionResult ) {
714+ message . codeExecutionResult = part . codeExecutionResult ;
715+ if ( e . actions && e . actions . artifact_delta ) {
716+ for ( const key in e . actions . artifact_delta ) {
717+ if ( e . actions . artifact_delta . hasOwnProperty ( key ) ) {
718+ this . renderArtifact ( key , e . actions . artifact_delta [ key ] ) ;
719+ }
709720 }
710721 }
711722 }
712723 }
713724
714- if ( Object . keys ( part ) . length > 0 ) {
725+ if ( part && Object . keys ( part ) . length > 0 ) {
715726 this . insertMessageBeforeLoadingMessage ( message ) ;
716727 }
717728 }
@@ -796,19 +807,24 @@ export class ChatComponent implements OnInit, AfterViewInit, OnDestroy {
796807
797808 private storeEvents ( part : any , e : any ) {
798809 let title = '' ;
799- if ( part . text ) {
800- title += 'text:' + part . text ;
801- } else if ( part . functionCall ) {
802- title += 'functionCall:' + part . functionCall . name ;
803- } else if ( part . functionResponse ) {
804- title += 'functionResponse:' + part . functionResponse . name ;
805- } else if ( part . executableCode ) {
806- title += 'executableCode:' + part . executableCode . code . slice ( 0 , 10 ) ;
807- } else if ( part . codeExecutionResult ) {
808- title += 'codeExecutionResult:' + part . codeExecutionResult . outcome ;
809- } else if ( part . errorMessage ) {
810- title += 'errorMessage:' + part . errorMessage
810+ if ( part == null && e . actions . artifactDelta ) {
811+ title += 'eventAction: artifact' ;
812+ } else if ( part ) {
813+ if ( part . text ) {
814+ title += 'text:' + part . text ;
815+ } else if ( part . functionCall ) {
816+ title += 'functionCall:' + part . functionCall . name ;
817+ } else if ( part . functionResponse ) {
818+ title += 'functionResponse:' + part . functionResponse . name ;
819+ } else if ( part . executableCode ) {
820+ title += 'executableCode:' + part . executableCode . code . slice ( 0 , 10 ) ;
821+ } else if ( part . codeExecutionResult ) {
822+ title += 'codeExecutionResult:' + part . codeExecutionResult . outcome ;
823+ } else if ( part . errorMessage ) {
824+ title += 'errorMessage:' + part . errorMessage
825+ }
811826 }
827+
812828 e . title = title ;
813829
814830 this . eventData . set ( e . id , e ) ;
0 commit comments