Skip to content

Commit cccef97

Browse files
wyf7107copybara-github
authored andcommitted
fix: When event has no content but artifactDelta is present, we should render the image
PiperOrigin-RevId: 822314795
1 parent 43c2518 commit cccef97

File tree

2 files changed

+61
-44
lines changed

2 files changed

+61
-44
lines changed

src/app/components/chat/chat.component.ts

Lines changed: 60 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

src/app/core/models/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export declare interface LlmResponse {
6363

6464
export declare interface EventActions {
6565
message?: string;
66+
artifactDelta?: any;
6667
functionCall?: FunctionCall;
6768
functionResponse?: FunctionResponse;
6869
finishReason?: string;

0 commit comments

Comments
 (0)