Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit 74deee8

Browse files
committed
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
1 parent 67e568f commit 74deee8

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

src/api/providers/base-openai-compatible-provider.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,17 @@ export abstract class BaseOpenAiCompatibleProvider<ModelName extends string>
8686

8787
const temperature = this.options.modelTemperature ?? info.defaultTemperature ?? this.defaultTemperature
8888

89+
// Enable mergeToolResultText to prevent text content after tool_results from creating
90+
// separate user messages that can disrupt the model's conversation flow.
91+
// This helps models like GLM4.5 avoid getting stuck in repeated file read loops.
8992
const params: OpenAI.Chat.Completions.ChatCompletionCreateParamsStreaming = {
9093
model,
9194
max_tokens,
9295
temperature,
93-
messages: [{ role: "system", content: systemPrompt }, ...convertToOpenAiMessages(messages)],
96+
messages: [
97+
{ role: "system", content: systemPrompt },
98+
...convertToOpenAiMessages(messages, { mergeToolResultText: true }),
99+
],
94100
stream: true,
95101
stream_options: { include_usage: true },
96102
tools: this.convertToolsForOpenAI(metadata?.tools),

src/api/providers/lm-studio.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,12 @@ export class LmStudioHandler extends BaseProvider implements SingleCompletionHan
4242
messages: Anthropic.Messages.MessageParam[],
4343
metadata?: ApiHandlerCreateMessageMetadata,
4444
): ApiStream {
45+
// Enable mergeToolResultText to prevent text content after tool_results from creating
46+
// separate user messages that can disrupt the model's conversation flow.
47+
// This helps models like GLM4.5 avoid getting stuck in repeated file read loops.
4548
const openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [
4649
{ role: "system", content: systemPrompt },
47-
...convertToOpenAiMessages(messages),
50+
...convertToOpenAiMessages(messages, { mergeToolResultText: true }),
4851
]
4952

5053
// -------------------------

0 commit comments

Comments
 (0)