mirror of https://github.com/buster-so/buster.git
fix on streaming done messages
This commit is contained in:
parent
02e9bd0fb5
commit
7f481dcda4
|
@ -1954,12 +1954,6 @@ fn tool_modify_dashboards(id: String, content: String, delta_duration: Duration)
|
||||||
files_map.insert(file_id_str, buster_file);
|
files_map.insert(file_id_str, buster_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create info for failed files
|
|
||||||
let failed_files_info: Vec<FailedFileInfo> = modify_dashboards_result.failed_files
|
|
||||||
.into_iter()
|
|
||||||
.map(|f| FailedFileInfo { name: f.file_name, error: f.error }) // Use fields from FailedFileModification
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
// Create the BusterReasoningFile using delta_duration and the new title/status
|
// Create the BusterReasoningFile using delta_duration and the new title/status
|
||||||
let buster_file_message = BusterReasoningMessage::File(BusterReasoningFile {
|
let buster_file_message = BusterReasoningMessage::File(BusterReasoningFile {
|
||||||
id,
|
id,
|
||||||
|
@ -2117,7 +2111,24 @@ fn transform_assistant_tool_message(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if progress == MessageProgress::Complete {
|
if progress == MessageProgress::Complete {
|
||||||
if let Some(final_text) = tracker.get_complete_text(tool_id.clone()) {
|
// --- MODIFICATION START ---
|
||||||
|
// Attempt to parse final arguments directly from the complete chunk
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct DoneArgs {
|
||||||
|
final_response: String,
|
||||||
|
}
|
||||||
|
let final_text_result = serde_json::from_str::<DoneArgs>(&tool_call.function.arguments)
|
||||||
|
.map(|args| args.final_response)
|
||||||
|
.ok(); // Convert Result to Option
|
||||||
|
|
||||||
|
// -- New: Track if direct parse failed --
|
||||||
|
let direct_parse_failed = final_text_result.is_none();
|
||||||
|
|
||||||
|
// Use directly parsed text if available, otherwise fallback to tracker
|
||||||
|
let final_text_to_use = final_text_result.or_else(|| tracker.get_complete_text(tool_id.clone()));
|
||||||
|
|
||||||
|
if let Some(final_text) = final_text_to_use {
|
||||||
|
// --- MODIFICATION END ---
|
||||||
all_results.push(ToolTransformResult::Response(BusterChatMessage::Text {
|
all_results.push(ToolTransformResult::Response(BusterChatMessage::Text {
|
||||||
id: tool_id.clone(),
|
id: tool_id.clone(),
|
||||||
message: Some(final_text),
|
message: Some(final_text),
|
||||||
|
@ -2125,14 +2136,24 @@ fn transform_assistant_tool_message(
|
||||||
is_final_message: Some(true),
|
is_final_message: Some(true),
|
||||||
originating_tool_name: Some(tool_name.clone()),
|
originating_tool_name: Some(tool_name.clone()),
|
||||||
}));
|
}));
|
||||||
tracker.clear_chunk(tool_id.clone());
|
// --- MODIFICATION: Log warning if direct parse failed (using flag) ---
|
||||||
|
if direct_parse_failed {
|
||||||
|
tracing::warn!("Failed to parse final 'done' arguments directly, used tracker fallback for tool_id: {}", tool_id);
|
||||||
|
}
|
||||||
|
// --- END MODIFICATION ---
|
||||||
|
} else {
|
||||||
|
// Log if neither direct parse nor tracker worked
|
||||||
|
tracing::error!("Failed to get complete text for 'done' tool (ID: {}) from both direct parse and tracker.", tool_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tracker.clear_chunk(tool_id.clone());
|
||||||
// Clear the marker for the reasoning message as well
|
// Clear the marker for the reasoning message as well
|
||||||
let reasoning_message_id = format!("{}_reasoning_finished", tool_id);
|
let reasoning_message_id = format!("{}_reasoning_finished", tool_id);
|
||||||
tracker.clear_chunk(reasoning_message_id);
|
tracker.clear_chunk(reasoning_message_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"message_user_clarifying_question" => {
|
"message_user_clarifying_question" => {
|
||||||
|
// --- NOTE: Keep InProgress logic as is ---
|
||||||
if let Some(full_text_value) = parser.process_response_tool_chunk(&tool_call.function.arguments, "text") {
|
if let Some(full_text_value) = parser.process_response_tool_chunk(&tool_call.function.arguments, "text") {
|
||||||
let delta = tracker.add_chunk(tool_id.clone(), full_text_value.clone());
|
let delta = tracker.add_chunk(tool_id.clone(), full_text_value.clone());
|
||||||
if !delta.is_empty() {
|
if !delta.is_empty() {
|
||||||
|
@ -2146,7 +2167,24 @@ fn transform_assistant_tool_message(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if progress == MessageProgress::Complete {
|
if progress == MessageProgress::Complete {
|
||||||
if let Some(final_text) = tracker.get_complete_text(tool_id.clone()) {
|
// --- MODIFICATION START ---
|
||||||
|
// Attempt to parse final arguments directly from the complete chunk
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct ClarifyingQuestionArgs {
|
||||||
|
text: String, // Assuming the argument name is 'text'
|
||||||
|
}
|
||||||
|
let final_text_result = serde_json::from_str::<ClarifyingQuestionArgs>(&tool_call.function.arguments)
|
||||||
|
.map(|args| args.text)
|
||||||
|
.ok(); // Convert Result to Option
|
||||||
|
|
||||||
|
// -- New: Track if direct parse failed --
|
||||||
|
let direct_parse_failed = final_text_result.is_none();
|
||||||
|
|
||||||
|
// Use directly parsed text if available, otherwise fallback to tracker
|
||||||
|
let final_text_to_use = final_text_result.or_else(|| tracker.get_complete_text(tool_id.clone()));
|
||||||
|
|
||||||
|
if let Some(final_text) = final_text_to_use {
|
||||||
|
// --- MODIFICATION END ---
|
||||||
all_results.push(ToolTransformResult::Response(BusterChatMessage::Text {
|
all_results.push(ToolTransformResult::Response(BusterChatMessage::Text {
|
||||||
id: tool_id.clone(),
|
id: tool_id.clone(),
|
||||||
message: Some(final_text),
|
message: Some(final_text),
|
||||||
|
@ -2154,8 +2192,16 @@ fn transform_assistant_tool_message(
|
||||||
is_final_message: Some(true),
|
is_final_message: Some(true),
|
||||||
originating_tool_name: Some(tool_name.clone()),
|
originating_tool_name: Some(tool_name.clone()),
|
||||||
}));
|
}));
|
||||||
tracker.clear_chunk(tool_id.clone());
|
// --- MODIFICATION: Log warning if direct parse failed (using flag) ---
|
||||||
|
if direct_parse_failed {
|
||||||
|
tracing::warn!("Failed to parse final 'message_user_clarifying_question' arguments directly, used tracker fallback for tool_id: {}", tool_id);
|
||||||
|
}
|
||||||
|
// --- END MODIFICATION ---
|
||||||
|
} else {
|
||||||
|
// Log if neither direct parse nor tracker worked
|
||||||
|
tracing::error!("Failed to get complete text for 'message_user_clarifying_question' tool (ID: {}) from both direct parse and tracker.", tool_id);
|
||||||
}
|
}
|
||||||
|
tracker.clear_chunk(tool_id.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue