Skip to content

Commit 3f1e998

Browse files
authored
Merge branch 'main' into main
2 parents 868b2f0 + 6732c27 commit 3f1e998

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,9 @@ export class ChatWidget extends Disposable implements IChatWidget {
439439
}
440440
}));
441441
this.viewModelDisposables.add(this.viewModel.onDidDisposeModel(() => {
442+
// Ensure that view state is saved here, because we will load it again when a new model is assigned
443+
this.inputPart.saveState();
444+
442445
// Disposes the viewmodel and listeners
443446
this.viewModel = undefined;
444447
this.onDidChangeItems();

src/vs/workbench/contrib/chat/common/chatServiceImpl.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
7-
import { CancellationToken } from 'vs/base/common/cancellation';
6+
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';
87
import { Emitter, Event } from 'vs/base/common/event';
98
import { MarkdownString } from 'vs/base/common/htmlContent';
109
import { Iterable } from 'vs/base/common/iterator';
@@ -135,7 +134,7 @@ export class ChatService extends Disposable implements IChatService {
135134
private readonly _providers = new Map<string, IChatProvider>();
136135

137136
private readonly _sessionModels = this._register(new DisposableMap<string, ChatModel>());
138-
private readonly _pendingRequests = new Map<string, CancelablePromise<void>>();
137+
private readonly _pendingRequests = this._register(new DisposableMap<string, CancellationTokenSource>());
139138
private readonly _persistedSessions: ISerializableChatsData;
140139
private readonly _hasProvider: IContextKey<boolean>;
141140

@@ -461,7 +460,9 @@ export class ChatService extends Disposable implements IChatService {
461460
let gotProgress = false;
462461
const requestType = commandPart ? 'slashCommand' : 'string';
463462

464-
const rawResponsePromise = createCancelablePromise<void>(async token => {
463+
const source = new CancellationTokenSource();
464+
const token = source.token;
465+
const sendRequestInternal = async () => {
465466
const progressCallback = (progress: IChatProgress) => {
466467
if (token.isCancellationRequested) {
467468
return;
@@ -599,10 +600,11 @@ export class ChatService extends Disposable implements IChatService {
599600
} finally {
600601
listener.dispose();
601602
}
602-
});
603-
this._pendingRequests.set(model.sessionId, rawResponsePromise);
603+
};
604+
const rawResponsePromise = sendRequestInternal();
605+
this._pendingRequests.set(model.sessionId, source);
604606
rawResponsePromise.finally(() => {
605-
this._pendingRequests.delete(model.sessionId);
607+
this._pendingRequests.deleteAndDispose(model.sessionId);
606608
});
607609
return rawResponsePromise;
608610
}
@@ -662,6 +664,7 @@ export class ChatService extends Disposable implements IChatService {
662664
cancelCurrentRequestForSession(sessionId: string): void {
663665
this.trace('cancelCurrentRequestForSession', `sessionId: ${sessionId}`);
664666
this._pendingRequests.get(sessionId)?.cancel();
667+
this._pendingRequests.deleteAndDispose(sessionId);
665668
}
666669

667670
clearSession(sessionId: string): void {
@@ -675,6 +678,7 @@ export class ChatService extends Disposable implements IChatService {
675678

676679
this._sessionModels.deleteAndDispose(sessionId);
677680
this._pendingRequests.get(sessionId)?.cancel();
681+
this._pendingRequests.deleteAndDispose(sessionId);
678682
this._onDidDisposeSession.fire({ sessionId, providerId: model.providerId, reason: 'cleared' });
679683
}
680684

0 commit comments

Comments
 (0)