From 74deee896573235cca5cfbf7ac8097fda78fa904 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Thu, 29 Jan 2026 14:53:39 +0000 Subject: [PATCH] fix: enable mergeToolResultText for LM Studio and OpenAI-compatible providers Enable the mergeToolResultText option for LM Studio and BaseOpenAiCompatibleProvider to align their message formatting behavior with the Z.ai provider. This change helps prevent models like GLM4.5 from getting stuck in repeated file read loops by merging text content after tool_results into the last tool message instead of creating separate user messages that can disrupt the model conversation flow. Fixes #11071 --- src/api/providers/base-openai-compatible-provider.ts | 8 +++++++- src/api/providers/lm-studio.ts | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/api/providers/base-openai-compatible-provider.ts b/src/api/providers/base-openai-compatible-provider.ts index fc3d769ae2a..9d9e35c427d 100644 --- a/src/api/providers/base-openai-compatible-provider.ts +++ b/src/api/providers/base-openai-compatible-provider.ts @@ -86,11 +86,17 @@ export abstract class BaseOpenAiCompatibleProvider const temperature = this.options.modelTemperature ?? info.defaultTemperature ?? this.defaultTemperature + // Enable mergeToolResultText to prevent text content after tool_results from creating + // separate user messages that can disrupt the model's conversation flow. + // This helps models like GLM4.5 avoid getting stuck in repeated file read loops. const params: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = { model, max_tokens, temperature, - messages: [{ role: "system", content: systemPrompt }, ...convertToOpenAiMessages(messages)], + messages: [ + { role: "system", content: systemPrompt }, + ...convertToOpenAiMessages(messages, { mergeToolResultText: true }), + ], stream: true, stream_options: { include_usage: true }, tools: this.convertToolsForOpenAI(metadata?.tools), diff --git a/src/api/providers/lm-studio.ts b/src/api/providers/lm-studio.ts index a771394c535..9054f5cc1b5 100644 --- a/src/api/providers/lm-studio.ts +++ b/src/api/providers/lm-studio.ts @@ -42,9 +42,12 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan messages: Anthropic.Messages.MessageParam[], metadata?: ApiHandlerCreateMessageMetadata, ): ApiStream { + // Enable mergeToolResultText to prevent text content after tool_results from creating + // separate user messages that can disrupt the model's conversation flow. + // This helps models like GLM4.5 avoid getting stuck in repeated file read loops. const openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [ { role: "system", content: systemPrompt }, - ...convertToOpenAiMessages(messages), + ...convertToOpenAiMessages(messages, { mergeToolResultText: true }), ] // -------------------------