assistant panel: Fix pending completions not being cleaned up (#16201)

Turns out that you could always cancel a completion, even if it was
already done and completed, because it was never cleaned up.

Release Notes:

- N/A
This commit is contained in:
Thorsten Ball 2024-08-14 12:13:09 +02:00 committed by GitHub
parent 8b8335f449
commit b7dcd4e4d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1713,6 +1713,8 @@ impl Context {
.insert_message_after(assistant_message.id, Role::User, MessageStatus::Done, cx)
.unwrap();
let pending_completion_id = post_inc(&mut self.completion_count);
let task = cx.spawn({
|this, mut cx| async move {
let stream = model.stream_completion(request, &cx);
@ -1761,10 +1763,9 @@ impl Context {
})?;
smol::future::yield_now().await;
}
this.update(&mut cx, |this, cx| {
this.pending_completions
.retain(|completion| completion.id != this.completion_count);
.retain(|completion| completion.id != pending_completion_id);
this.summarize(false, cx);
})?;
@ -1806,7 +1807,7 @@ impl Context {
});
self.pending_completions.push(PendingCompletion {
id: post_inc(&mut self.completion_count),
id: pending_completion_id,
assistant_message_id: assistant_message.id,
_task: task,
});