From df411c0bd2078eb1b66c9e2d1ea0cfe8fd3e58ac Mon Sep 17 00:00:00 2001 From: Roo Code Date: Mon, 22 Dec 2025 03:35:07 +0000 Subject: [PATCH] fix: default OpenAI Compatible provider to XML protocol for better third-party proxy compatibility --- packages/types/src/providers/openai.ts | 5 ++++- src/utils/__tests__/resolveToolProtocol.spec.ts | 8 +++++--- .../ui/hooks/__tests__/useSelectedModel.spec.ts | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/types/src/providers/openai.ts b/packages/types/src/providers/openai.ts index 47b883e0e10..ed4801fd168 100644 --- a/packages/types/src/providers/openai.ts +++ b/packages/types/src/providers/openai.ts @@ -551,7 +551,10 @@ export const openAiModelInfoSaneDefaults: ModelInfo = { inputPrice: 0, outputPrice: 0, supportsNativeTools: true, - defaultToolProtocol: "native", + // Default to XML for OpenAI Compatible providers since third-party proxies + // have varying levels of support for native tool calling. Users who want + // native tool calling can explicitly enable it in Advanced Settings. + defaultToolProtocol: "xml", } // https://learn.microsoft.com/en-us/azure/ai-services/openai/api-version-deprecation diff --git a/src/utils/__tests__/resolveToolProtocol.spec.ts b/src/utils/__tests__/resolveToolProtocol.spec.ts index 5fbc5344382..235f08a38cd 100644 --- a/src/utils/__tests__/resolveToolProtocol.spec.ts +++ b/src/utils/__tests__/resolveToolProtocol.spec.ts @@ -376,13 +376,15 @@ describe("resolveToolProtocol", () => { expect(result).toBe(TOOL_PROTOCOL.XML) // Model default wins }) - it("should use native tools for OpenAI compatible provider with default model info", () => { + it("should use XML for OpenAI compatible provider with default model info", () => { const settings: ProviderSettings = { apiProvider: "openai", } - // Using the actual openAiModelInfoSaneDefaults to verify the fix + // OpenAI Compatible defaults to XML protocol since third-party proxies + // have varying levels of support for native tool calling. + // Users who want native can explicitly enable it in Advanced Settings. const result = resolveToolProtocol(settings, openAiModelInfoSaneDefaults) - expect(result).toBe(TOOL_PROTOCOL.NATIVE) // Should use native tools by default + expect(result).toBe(TOOL_PROTOCOL.XML) // Should use XML by default for better compatibility }) }) }) diff --git a/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts b/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts index 4dca874ee20..86de4642574 100644 --- a/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts +++ b/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts @@ -702,7 +702,8 @@ describe("useSelectedModel", () => { expect(result.current.id).toBe("gpt-4o") expect(result.current.info).toEqual(openAiModelInfoSaneDefaults) expect(result.current.info?.supportsNativeTools).toBe(true) - expect(result.current.info?.defaultToolProtocol).toBe("native") + // OpenAI Compatible defaults to XML for better third-party proxy compatibility + expect(result.current.info?.defaultToolProtocol).toBe("xml") }) it("should merge native tool defaults with custom model info", () => { @@ -734,7 +735,8 @@ describe("useSelectedModel", () => { } expect(result.current.info).toEqual({ ...nativeToolDefaults, ...customModelInfo }) expect(result.current.info?.supportsNativeTools).toBe(true) - expect(result.current.info?.defaultToolProtocol).toBe("native") + // OpenAI Compatible defaults to XML for better third-party proxy compatibility + expect(result.current.info?.defaultToolProtocol).toBe("xml") }) it("should allow custom model info to override native tool defaults", () => {