From 25efa8cf81586d48944fe6bab2a9f80bbfd8adfc Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 14 Apr 2026 16:41:46 +0100 Subject: [PATCH] fix(minimax): share provider hook bundle --- extensions/minimax/index.test.ts | 14 ++++++++++++++ extensions/minimax/provider-registration.ts | 17 +++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/extensions/minimax/index.test.ts b/extensions/minimax/index.test.ts index f346d9d8c55..153c1ff48cf 100644 --- a/extensions/minimax/index.test.ts +++ b/extensions/minimax/index.test.ts @@ -147,6 +147,20 @@ describe("minimax provider hooks", () => { expect(resolvedPortalModelId).toBe("MiniMax-M2.7-highspeed"); }); + it("shares the provider hook bundle across MiniMax variants", async () => { + const { providers } = await registerProviderPlugin({ + plugin: minimaxProviderPlugin, + id: "minimax", + name: "MiniMax Provider", + }); + const apiProvider = requireRegisteredProvider(providers, "minimax"); + const portalProvider = requireRegisteredProvider(providers, "minimax-portal"); + + expect(apiProvider.buildReplayPolicy).toBe(portalProvider.buildReplayPolicy); + expect(apiProvider.wrapStreamFn).toBe(portalProvider.wrapStreamFn); + expect(apiProvider.resolveReasoningOutputMode).toBe(portalProvider.resolveReasoningOutputMode); + }); + it("registers the bundled MiniMax web search provider", () => { const webSearchProviders: unknown[] = []; diff --git a/extensions/minimax/provider-registration.ts b/extensions/minimax/provider-registration.ts index 3d80b4a5225..a68a1e8a965 100644 --- a/extensions/minimax/provider-registration.ts +++ b/extensions/minimax/provider-registration.ts @@ -38,10 +38,11 @@ const HYBRID_ANTHROPIC_OPENAI_REPLAY_HOOKS = buildProviderReplayFamilyHooks({ anthropicModelDropThinkingBlocks: true, }); const MINIMAX_FAST_MODE_STREAM_HOOKS = buildProviderStreamFamilyHooks("minimax-fast-mode"); - -function resolveMinimaxReasoningOutputMode(): "native" { - return "native"; -} +const MINIMAX_PROVIDER_HOOKS = { + ...HYBRID_ANTHROPIC_OPENAI_REPLAY_HOOKS, + ...MINIMAX_FAST_MODE_STREAM_HOOKS, + resolveReasoningOutputMode: () => "native" as const, +}; function getDefaultBaseUrl(region: MiniMaxRegion): string { return region === "cn" ? DEFAULT_BASE_URL_CN : DEFAULT_BASE_URL_GLOBAL; @@ -240,9 +241,7 @@ export function registerMinimaxProviders(api: OpenClawPluginApi) { }); return apiKey ? { token: apiKey } : null; }, - ...HYBRID_ANTHROPIC_OPENAI_REPLAY_HOOKS, - ...MINIMAX_FAST_MODE_STREAM_HOOKS, - resolveReasoningOutputMode: () => resolveMinimaxReasoningOutputMode(), + ...MINIMAX_PROVIDER_HOOKS, isModernModelRef: ({ modelId }) => isMiniMaxModernModelId(modelId), fetchUsageSnapshot: async (ctx) => await fetchMinimaxUsage(ctx.token, ctx.timeoutMs, ctx.fetchFn), @@ -289,9 +288,7 @@ export function registerMinimaxProviders(api: OpenClawPluginApi) { run: createOAuthHandler("cn"), }, ], - ...HYBRID_ANTHROPIC_OPENAI_REPLAY_HOOKS, - ...MINIMAX_FAST_MODE_STREAM_HOOKS, - resolveReasoningOutputMode: () => resolveMinimaxReasoningOutputMode(), + ...MINIMAX_PROVIDER_HOOKS, isModernModelRef: ({ modelId }) => isMiniMaxModernModelId(modelId), }); }