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
This commit is contained in:
Roo Code 2026-01-29 14:53:39 +00:00
parent 67e568f6bb
commit 74deee8965
2 changed files with 11 additions and 2 deletions

View file

@ -86,11 +86,17 @@ export abstract class BaseOpenAiCompatibleProvider<ModelName extends string>
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),

View file

@ -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 }),
]
// -------------------------