Skip to content

Commit 96d451b

Browse files
authored
1 parent 1e76ed6 commit 96d451b

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ export class NotebookChatController extends Disposable implements INotebookEdito
177177
private _sessionCtor: CancelablePromise<void> | undefined;
178178
private _activeSession?: Session;
179179
private _warmupRequestCts?: CancellationTokenSource;
180+
private _activeRequestCts?: CancellationTokenSource;
180181
private readonly _ctxHasActiveRequest: IContextKey<boolean>;
181182
private readonly _ctxCellWidgetFocused: IContextKey<boolean>;
182183
private readonly _ctxUserDidEdit: IContextKey<boolean>;
@@ -397,8 +398,9 @@ export class NotebookChatController extends Disposable implements INotebookEdito
397398
}
398399

399400
async acceptInput() {
400-
assertType(this._activeSession);
401401
assertType(this._widget);
402+
await this._sessionCtor;
403+
assertType(this._activeSession);
402404
this._warmupRequestCts?.dispose(true);
403405
this._warmupRequestCts = undefined;
404406
this._activeSession.addInput(new SessionPrompt(this._widget.inlineChatWidget.value));
@@ -449,18 +451,19 @@ export class NotebookChatController extends Disposable implements INotebookEdito
449451

450452
//TODO: update progress in a newly inserted cell below the widget instead of the fake editor
451453

452-
const requestCts = new CancellationTokenSource();
454+
this._activeRequestCts?.cancel();
455+
this._activeRequestCts = new CancellationTokenSource();
453456
const progressEdits: TextEdit[][] = [];
454457

455458
const progressiveEditsQueue = new Queue();
456459
const progressiveEditsClock = StopWatch.create();
457460
const progressiveEditsAvgDuration = new MovingAverage();
458-
const progressiveEditsCts = new CancellationTokenSource(requestCts.token);
461+
const progressiveEditsCts = new CancellationTokenSource(this._activeRequestCts.token);
459462
let progressiveChatResponse: IInlineChatMessageAppender | undefined;
460463
const progress = new AsyncProgress<IInlineChatProgressItem>(async data => {
461464
// console.log('received chunk', data, request);
462465

463-
if (requestCts.token.isCancellationRequested) {
466+
if (this._activeRequestCts?.token.isCancellationRequested) {
464467
return;
465468
}
466469

@@ -502,7 +505,7 @@ export class NotebookChatController extends Disposable implements INotebookEdito
502505
}
503506
});
504507

505-
const task = this._activeSession.provider.provideResponse(this._activeSession.session, request, progress, requestCts.token);
508+
const task = this._activeSession.provider.provideResponse(this._activeSession.session, request, progress, this._activeRequestCts.token);
506509
let response: ReplyResponse | ErrorResponse | EmptyResponse;
507510

508511
try {
@@ -512,7 +515,7 @@ export class NotebookChatController extends Disposable implements INotebookEdito
512515
this._widget?.inlineChatWidget.updateInfo(!this._activeSession.lastExchange ? localize('thinking', "Thinking\u2026") : '');
513516
this._ctxHasActiveRequest.set(true);
514517

515-
const reply = await raceCancellationError(Promise.resolve(task), requestCts.token);
518+
const reply = await raceCancellationError(Promise.resolve(task), this._activeRequestCts.token);
516519
if (progressiveEditsQueue.size > 0) {
517520
// we must wait for all edits that came in via progress to complete
518521
await Event.toPromise(progressiveEditsQueue.onDrained);
@@ -575,7 +578,7 @@ export class NotebookChatController extends Disposable implements INotebookEdito
575578
this._widget?.inlineChatWidget.updateInfo('');
576579
this._widget?.inlineChatWidget.updateToolbar(true);
577580

578-
this._activeSession.addExchange(new SessionExchange(this._activeSession.lastInput, response));
581+
this._activeSession?.addExchange(new SessionExchange(this._activeSession.lastInput, response));
579582
this._ctxLastResponseType.set(response instanceof ReplyResponse ? response.raw.type : undefined);
580583
}
581584

@@ -762,15 +765,12 @@ export class NotebookChatController extends Disposable implements INotebookEdito
762765
this._strategy?.cancel();
763766
}
764767

765-
if (this._activeSession) {
766-
this._inlineChatSessionService.releaseSession(this._activeSession);
767-
}
768-
769-
this._activeSession = undefined;
768+
this._activeRequestCts?.cancel();
770769
}
771770

772771
discard() {
773772
this._strategy?.cancel();
773+
this._activeRequestCts?.cancel();
774774
this._widget?.discardChange();
775775
this.dismiss();
776776
}

0 commit comments

Comments
 (0)