From 200377947e2a7bf2de69586548a312ff44025f18 Mon Sep 17 00:00:00 2001 From: Karthikeyan N Date: Sun, 11 Jan 2026 00:56:19 +0530 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=99=20feat:=20Add=20Moonshot=20Kimi=20?= =?UTF-8?q?K2=20Bedrock=20Support=20(#11288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(bedrock): add Moonshot Kimi K2 Thinking model support - Add Moonshot provider to BedrockProviders enum - Add Moonshot-specific parameter settings with 16384 default max tokens - Add conditional for anthropic_beta to only apply to Anthropic models - Kimi K2 Thinking model: moonshot.kimi-k2-thinking (256K context) * Delete add-kimi-bedrock.md * Remove comment on anthropic_beta condition Remove comment about adding anthropic_beta for Anthropic models. * chore: enum order * feat(bedrock): add tests to ensure anthropic_beta is not added to Moonshot Kimi K2 and DeepSeek models --------- Co-authored-by: Danny Avila Co-authored-by: Danny Avila --- packages/data-provider/specs/bedrock.spec.ts | 22 +++++++++++ packages/data-provider/src/bedrock.ts | 4 +- .../data-provider/src/parameterSettings.ts | 39 +++++++++++++++++++ packages/data-provider/src/schemas.ts | 3 +- 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/packages/data-provider/specs/bedrock.spec.ts b/packages/data-provider/specs/bedrock.spec.ts index c569a1b5a7..2a0de6937a 100644 --- a/packages/data-provider/specs/bedrock.spec.ts +++ b/packages/data-provider/specs/bedrock.spec.ts @@ -88,6 +88,28 @@ describe('bedrockInputParser', () => { expect(result.additionalModelRequestFields).toBeUndefined(); }); + test('should not add anthropic_beta to Moonshot Kimi K2 models', () => { + const input = { + model: 'moonshot.kimi-k2-0711-thinking', + }; + const result = bedrockInputParser.parse(input) as BedrockConverseInput; + const additionalFields = result.additionalModelRequestFields as + | Record + | undefined; + expect(additionalFields?.anthropic_beta).toBeUndefined(); + }); + + test('should not add anthropic_beta to DeepSeek models', () => { + const input = { + model: 'deepseek.deepseek-r1', + }; + const result = bedrockInputParser.parse(input) as BedrockConverseInput; + const additionalFields = result.additionalModelRequestFields as + | Record + | undefined; + expect(additionalFields?.anthropic_beta).toBeUndefined(); + }); + test('should respect explicit thinking configuration', () => { const input = { model: 'anthropic.claude-sonnet-4', diff --git a/packages/data-provider/src/bedrock.ts b/packages/data-provider/src/bedrock.ts index 2a4184729f..b37fdc25e1 100644 --- a/packages/data-provider/src/bedrock.ts +++ b/packages/data-provider/src/bedrock.ts @@ -137,7 +137,9 @@ export const bedrockInputParser = s.tConversationSchema if (additionalFields.thinking === true && additionalFields.thinkingBudget === undefined) { additionalFields.thinkingBudget = 2000; } - additionalFields.anthropic_beta = ['output-128k-2025-02-19']; + if (typedData.model.includes('anthropic.')) { + additionalFields.anthropic_beta = ['output-128k-2025-02-19']; + } } else if (additionalFields.thinking != null || additionalFields.thinkingBudget != null) { delete additionalFields.thinking; delete additionalFields.thinkingBudget; diff --git a/packages/data-provider/src/parameterSettings.ts b/packages/data-provider/src/parameterSettings.ts index 3a9425bca1..ae811d3d5b 100644 --- a/packages/data-provider/src/parameterSettings.ts +++ b/packages/data-provider/src/parameterSettings.ts @@ -880,6 +880,40 @@ const bedrockGeneralCol2: SettingsConfiguration = [ librechat.fileTokenLimit, ]; +const bedrockMoonshot: SettingsConfiguration = [ + librechat.modelLabel, + bedrock.system, + librechat.maxContextTokens, + createDefinition(bedrock.maxTokens, { + default: 16384, + }), + bedrock.temperature, + bedrock.topP, + baseDefinitions.stop, + librechat.resendFiles, + bedrock.region, + librechat.fileTokenLimit, +]; + +const bedrockMoonshotCol1: SettingsConfiguration = [ + baseDefinitions.model as SettingDefinition, + librechat.modelLabel, + bedrock.system, + baseDefinitions.stop, +]; + +const bedrockMoonshotCol2: SettingsConfiguration = [ + librechat.maxContextTokens, + createDefinition(bedrock.maxTokens, { + default: 16384, + }), + bedrock.temperature, + bedrock.topP, + librechat.resendFiles, + bedrock.region, + librechat.fileTokenLimit, +]; + export const paramSettings: Record = { [EModelEndpoint.openAI]: openAI, [EModelEndpoint.azureOpenAI]: openAI, @@ -892,6 +926,7 @@ export const paramSettings: Record = [`${EModelEndpoint.bedrock}-${BedrockProviders.AI21}`]: bedrockGeneral, [`${EModelEndpoint.bedrock}-${BedrockProviders.Amazon}`]: bedrockGeneral, [`${EModelEndpoint.bedrock}-${BedrockProviders.DeepSeek}`]: bedrockGeneral, + [`${EModelEndpoint.bedrock}-${BedrockProviders.Moonshot}`]: bedrockMoonshot, [EModelEndpoint.google]: googleConfig, }; @@ -936,6 +971,10 @@ export const presetSettings: Record< [`${EModelEndpoint.bedrock}-${BedrockProviders.AI21}`]: bedrockGeneralColumns, [`${EModelEndpoint.bedrock}-${BedrockProviders.Amazon}`]: bedrockGeneralColumns, [`${EModelEndpoint.bedrock}-${BedrockProviders.DeepSeek}`]: bedrockGeneralColumns, + [`${EModelEndpoint.bedrock}-${BedrockProviders.Moonshot}`]: { + col1: bedrockMoonshotCol1, + col2: bedrockMoonshotCol2, + }, [EModelEndpoint.google]: { col1: googleCol1, col2: googleCol2, diff --git a/packages/data-provider/src/schemas.ts b/packages/data-provider/src/schemas.ts index aea1a9bf09..a3378d3340 100644 --- a/packages/data-provider/src/schemas.ts +++ b/packages/data-provider/src/schemas.ts @@ -94,10 +94,11 @@ export enum BedrockProviders { Amazon = 'amazon', Anthropic = 'anthropic', Cohere = 'cohere', + DeepSeek = 'deepseek', Meta = 'meta', MistralAI = 'mistral', + Moonshot = 'moonshot', StabilityAI = 'stability', - DeepSeek = 'deepseek', } export const getModelKey = (endpoint: EModelEndpoint | string, model: string) => {