From 775c913de20824d187f677e65845fe8680ecd7f6 Mon Sep 17 00:00:00 2001 From: oobabooga <112222186+oobabooga@users.noreply.github.com> Date: Mon, 6 Apr 2026 14:13:01 -0700 Subject: [PATCH] Fix crash when truncating prompts with tool call messages --- modules/chat.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/modules/chat.py b/modules/chat.py index aeed688d..7e9cce60 100644 --- a/modules/chat.py +++ b/modules/chat.py @@ -568,13 +568,24 @@ def generate_chat_prompt(user_input, state, **kwargs): encoded_length = get_encoded_length(prompt) while len(messages) > 0 and encoded_length > max_length: - # Remove old message, save system message if len(messages) > 2 and messages[0]['role'] == 'system': - messages.pop(1) - - # Remove old message when no system message is present + pop_idx = 1 elif len(messages) > 1 and messages[0]['role'] != 'system': - messages.pop(0) + pop_idx = 0 + else: + pop_idx = None + + if pop_idx is not None: + messages.pop(pop_idx) + + # Remove orphaned tool-call/tool-result messages that + # would be invalid without their partner. + while pop_idx < len(messages): + msg = messages[pop_idx] + if msg.get('role') == 'tool' or (msg.get('role') == 'assistant' and msg.get('tool_calls')): + messages.pop(pop_idx) + else: + break # Resort to truncating the user input else: