mirror of https://github.com/buster-so/buster.git
Merge pull request #505 from buster-so/cursor/handle-cancelled-chats-without-reasoning-messages-5d57
Handle cancelled chats without reasoning messages
This commit is contained in:
commit
5191170e77
|
@ -208,6 +208,13 @@ function ensureReasoningMessagesCompleted(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean up and finalize all message fields for a cancelled chat
|
* Clean up and finalize all message fields for a cancelled chat
|
||||||
|
*
|
||||||
|
* This function handles three cancellation scenarios:
|
||||||
|
* 1. Early cancellation - No reasoning or response messages exist yet
|
||||||
|
* 2. Reasoning cancellation - Reasoning messages exist but no response messages
|
||||||
|
* 3. Response cancellation - Both reasoning and response messages exist
|
||||||
|
*
|
||||||
|
* In all cases, the message is marked as complete with an appropriate final reasoning message.
|
||||||
*/
|
*/
|
||||||
interface CleanedMessageFields {
|
interface CleanedMessageFields {
|
||||||
rawLlmMessages: CoreMessage[];
|
rawLlmMessages: CoreMessage[];
|
||||||
|
@ -267,6 +274,10 @@ async function cleanUpMessage(
|
||||||
responseMessagesType: Array.isArray(responseMessages) ? 'array' : typeof responseMessages,
|
responseMessagesType: Array.isArray(responseMessages) ? 'array' : typeof responseMessages,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Check if this is an early cancellation (no reasoning or response messages)
|
||||||
|
const hasReasoningMessages = currentReasoning.length > 0;
|
||||||
|
const hasResponseMessages = currentResponseMessages.length > 0;
|
||||||
|
|
||||||
// Clean up all message fields
|
// Clean up all message fields
|
||||||
const cleanedFields = cleanUpMessageFields(
|
const cleanedFields = cleanUpMessageFields(
|
||||||
currentRawMessages,
|
currentRawMessages,
|
||||||
|
@ -274,11 +285,18 @@ async function cleanUpMessage(
|
||||||
currentResponseMessages
|
currentResponseMessages
|
||||||
);
|
);
|
||||||
|
|
||||||
// Determine the final reasoning message based on whether we were in response phase
|
// Determine the final reasoning message based on the state of the chat
|
||||||
const hasResponseMessages = currentResponseMessages.length > 0;
|
let finalReasoningMessage: string;
|
||||||
const finalReasoningMessage = hasResponseMessages
|
if (!hasReasoningMessages && !hasResponseMessages) {
|
||||||
? 'Stopped during final response'
|
// Chat was cancelled before any reasoning began
|
||||||
: 'Stopped reasoning';
|
finalReasoningMessage = 'Stopped reasoning';
|
||||||
|
} else if (hasResponseMessages) {
|
||||||
|
// Chat was cancelled during response generation
|
||||||
|
finalReasoningMessage = 'Stopped during final response';
|
||||||
|
} else {
|
||||||
|
// Chat was cancelled during reasoning
|
||||||
|
finalReasoningMessage = 'Stopped reasoning';
|
||||||
|
}
|
||||||
|
|
||||||
// Log the cleaned reasoning to debug
|
// Log the cleaned reasoning to debug
|
||||||
console.info('Cleaned reasoning before save:', {
|
console.info('Cleaned reasoning before save:', {
|
||||||
|
@ -287,6 +305,7 @@ async function cleanUpMessage(
|
||||||
(r) => r && typeof r === 'object' && 'status' in r && r.status === 'loading'
|
(r) => r && typeof r === 'object' && 'status' in r && r.status === 'loading'
|
||||||
).length,
|
).length,
|
||||||
lastReasoningMessage: cleanedFields.reasoning[cleanedFields.reasoning.length - 1],
|
lastReasoningMessage: cleanedFields.reasoning[cleanedFields.reasoning.length - 1],
|
||||||
|
finalReasoningMessage,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Ensure the reasoning array is properly serializable
|
// Ensure the reasoning array is properly serializable
|
||||||
|
|
Loading…
Reference in New Issue