Skip to content

Commit 171ca21

Browse files
authored
handle thinking array case (microsoft#264292)
1 parent 86f1b8f commit 171ca21

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/vs/workbench/contrib/chat/browser/chatListRenderer.ts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -971,16 +971,10 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
971971

972972
// keep existing thinking part instance during streaming and update it in place
973973
if (alreadyRenderedPart && partToRender.kind === 'thinking' && alreadyRenderedPart instanceof ChatThinkingContentPart) {
974-
alreadyRenderedPart.updateThinking(partToRender);
975-
renderedParts[contentIndex] = alreadyRenderedPart;
976-
for (let i = partsToRender.length; i < renderedParts.length; i++) {
977-
const part = renderedParts[i];
978-
if (part) {
979-
part.dispose();
980-
part.domNode?.remove();
981-
delete renderedParts[i];
982-
}
974+
if (!Array.isArray(partToRender.value)) {
975+
alreadyRenderedPart.updateThinking(partToRender);
983976
}
977+
renderedParts[contentIndex] = alreadyRenderedPart;
984978
return;
985979
}
986980

@@ -1509,22 +1503,25 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
15091503

15101504
renderThinkingPart(content: IChatThinkingPart, context: IChatContentPartRenderContext, templateData: IChatListItemTemplate,): IChatContentPart {
15111505

1512-
// if array, we do a lazy rendering for now
1506+
// if array, we do a naive part by part rendering for now
15131507
if (Array.isArray(content.value)) {
15141508
if (content.value.length < 1) {
15151509
this._currentThinkingPart?.finalizeTitleIfDefault();
15161510
return this.renderNoContent(other => content.kind === other.kind);
15171511
}
15181512
for (const item of content.value) {
15191513
if (item) {
1520-
const itemContent = { ...content, value: item };
1521-
const itemPart = templateData.instantiationService.createInstance(ChatThinkingContentPart, itemContent, context);
1522-
itemPart.addDisposable(itemPart.onDidChangeHeight(() => this.updateItemHeight(templateData)));
1523-
this._currentThinkingPart = itemPart;
1524-
return itemPart;
1514+
if (this._currentThinkingPart) {
1515+
this._currentThinkingPart.setupThinkingContainer({ ...content, value: item }, context);
1516+
} else {
1517+
const itemContent = { ...content, value: item };
1518+
const itemPart = templateData.instantiationService.createInstance(ChatThinkingContentPart, itemContent, context);
1519+
itemPart.addDisposable(itemPart.onDidChangeHeight(() => this.updateItemHeight(templateData)));
1520+
this._currentThinkingPart = itemPart;
1521+
}
15251522
}
15261523
}
1527-
1524+
return this._currentThinkingPart ?? this.renderNoContent(other => content.kind === other.kind);
15281525
// non-array, handle case where we are currently thinking vs. starting a new thinking part
15291526
} else {
15301527
if (this._currentThinkingPart) {
@@ -1537,8 +1534,6 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
15371534
return this._currentThinkingPart;
15381535

15391536
}
1540-
1541-
return this.renderNoContent(other => content.kind === other.kind);
15421537
}
15431538

15441539
disposeElement(node: ITreeNode<ChatTreeItem, FuzzyScore>, index: number, templateData: IChatListItemTemplate, details?: IListElementRenderDetails): void {

0 commit comments

Comments
 (0)