assistant2: Exclude tool uses and results when summarizing threads (#25689)

This PR fixes the generation of summaries for threads when tools are
being used.

Previously we were including the tool uses in the summarization request,
but this would result in invalid messages being sent to the model and
summaries not being generated.

We now exclude any tool uses or results from the model when summarizing
a thread.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2025-02-26 17:24:56 -05:00 committed by GitHub
parent 6a1c104522
commit b8fb416892
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -23,6 +23,8 @@ use crate::thread_store::SavedThread;
#[derive(Debug, Clone, Copy)]
pub enum RequestKind {
Chat,
/// Used when summarizing a thread.
Summarize,
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Serialize, Deserialize)]
@ -243,7 +245,7 @@ impl Thread {
pub fn to_completion_request(
&self,
_request_kind: RequestKind,
request_kind: RequestKind,
_cx: &App,
) -> LanguageModelRequest {
let mut request = LanguageModelRequest {
@ -265,12 +267,18 @@ impl Thread {
content: Vec::new(),
cache: false,
};
if let Some(tool_results) = self.tool_results_by_message.get(&message.id) {
for tool_result in tool_results {
request_message
.content
.push(MessageContent::ToolResult(tool_result.clone()));
match request_kind {
RequestKind::Chat => {
for tool_result in tool_results {
request_message
.content
.push(MessageContent::ToolResult(tool_result.clone()));
}
}
RequestKind::Summarize => {
// We don't care about tool use during summarization.
}
}
}
@ -281,10 +289,17 @@ impl Thread {
}
if let Some(tool_uses) = self.tool_uses_by_message.get(&message.id) {
for tool_use in tool_uses {
request_message
.content
.push(MessageContent::ToolUse(tool_use.clone()));
match request_kind {
RequestKind::Chat => {
for tool_use in tool_uses {
request_message
.content
.push(MessageContent::ToolUse(tool_use.clone()));
}
}
RequestKind::Summarize => {
// We don't care about tool use during summarization.
}
}
}
@ -451,7 +466,7 @@ impl Thread {
return;
}
let mut request = self.to_completion_request(RequestKind::Chat, cx);
let mut request = self.to_completion_request(RequestKind::Summarize, cx);
request.messages.push(LanguageModelRequestMessage {
role: Role::User,
content: vec![