Fix auto-continue bug: ensure assistant message before continue prompt
The auto-continue logic was adding User continue prompts without first adding an Assistant message when the LLM returned an empty response. This caused consecutive User messages in the conversation history, which confused the LLM and caused it to return more empty responses. The fix ensures an Assistant message is always added before the continue prompt, using '[empty response]' as a placeholder when the LLM returned nothing substantive. This maintains proper User/Assistant alternation.
This commit is contained in:
@@ -4550,20 +4550,20 @@ impl<W: UiWriter> Agent<W> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add any text response to context before prompting for continuation
|
// Add any text response to context before prompting for continuation
|
||||||
if has_response {
|
// IMPORTANT: We must always add an assistant message to maintain User/Assistant alternation
|
||||||
let response_text = if !current_response.is_empty() {
|
// Without this, consecutive User messages confuse the LLM and cause empty responses
|
||||||
current_response.clone()
|
let response_text = if !current_response.is_empty() {
|
||||||
} else {
|
current_response.clone()
|
||||||
full_response.clone()
|
} else if !full_response.is_empty() {
|
||||||
};
|
full_response.clone()
|
||||||
if !response_text.trim().is_empty() {
|
} else {
|
||||||
let assistant_msg = Message::new(
|
"[empty response]".to_string()
|
||||||
MessageRole::Assistant,
|
};
|
||||||
response_text.trim().to_string(),
|
let assistant_msg = Message::new(
|
||||||
);
|
MessageRole::Assistant,
|
||||||
self.context_window.add_message(assistant_msg);
|
if response_text.trim().is_empty() { "[empty response]".to_string() } else { response_text.trim().to_string() },
|
||||||
}
|
);
|
||||||
}
|
self.context_window.add_message(assistant_msg);
|
||||||
|
|
||||||
// Add a follow-up message asking for continuation
|
// Add a follow-up message asking for continuation
|
||||||
let continue_prompt = if has_incomplete_tool_call {
|
let continue_prompt = if has_incomplete_tool_call {
|
||||||
|
|||||||
Reference in New Issue
Block a user