Skip to content

Commit 0395099

Browse files
danny-avilaxycjscs
authored andcommitted
🔀 feat: moonshotai/kimi Context and OpenRouter Endpoint Token Config (danny-avila#8604)
* ✨ feat: Enhance agent initialization with endpoint token configuration and round max context tokens * feat: recognize moonshot/kimi model context window * chore: remove unused i18n key
1 parent 03e356b commit 0395099

File tree

5 files changed

+55
-6
lines changed

5 files changed

+55
-6
lines changed

‎api/server/services/Endpoints/agents/agent.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ const initializeAgent = async ({
131131
);
132132
const agentMaxContextTokens = optionalChainWithEmptyCheck(
133133
maxContextTokens,
134-
getModelMaxTokens(tokensModel, providerEndpointMap[provider]),
134+
getModelMaxTokens(tokensModel, providerEndpointMap[provider], options.endpointTokenConfig),
135135
4096,
136136
);
137137

@@ -191,7 +191,7 @@ const initializeAgent = async ({
191191
resendFiles,
192192
toolContextMap,
193193
useLegacyContent: !!options.useLegacyContent,
194-
maxContextTokens: (agentMaxContextTokens - maxTokens) * 0.9,
194+
maxContextTokens: Math.round((agentMaxContextTokens - maxTokens) * 0.9),
195195
};
196196
};
197197

‎api/server/services/Endpoints/custom/initialize.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ const initializeClient = async ({ req, res, endpointOption, optionsOnly, overrid
141141
const options = getOpenAIConfig(apiKey, clientOptions, endpoint);
142142
if (options != null) {
143143
options.useLegacyContent = true;
144+
options.endpointTokenConfig = endpointTokenConfig;
144145
}
145-
if (!customOptions.streamRate) {
146+
if (!clientOptions.streamRate) {
146147
return options;
147148
}
148149
options.llmConfig.callbacks = [

‎api/utils/tokens.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,14 @@ const xAIModels = {
246246
'grok-4': 256000, // 256K context
247247
};
248248

249-
const aggregateModels = { ...openAIModels, ...googleModels, ...bedrockModels, ...xAIModels };
249+
const aggregateModels = {
250+
...openAIModels,
251+
...googleModels,
252+
...bedrockModels,
253+
...xAIModels,
254+
// misc.
255+
kimi: 131000,
256+
};
250257

251258
const maxTokensMap = {
252259
[EModelEndpoint.azureOpenAI]: openAIModels,

‎api/utils/tokens.spec.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,3 +714,45 @@ describe('Claude Model Tests', () => {
714714
});
715715
});
716716
});
717+
718+
describe('Kimi Model Tests', () => {
719+
describe('getModelMaxTokens', () => {
720+
test('should return correct tokens for Kimi models', () => {
721+
expect(getModelMaxTokens('kimi')).toBe(131000);
722+
expect(getModelMaxTokens('kimi-k2')).toBe(131000);
723+
expect(getModelMaxTokens('kimi-vl')).toBe(131000);
724+
});
725+
726+
test('should return correct tokens for Kimi models with provider prefix', () => {
727+
expect(getModelMaxTokens('moonshotai/kimi-k2')).toBe(131000);
728+
expect(getModelMaxTokens('moonshotai/kimi')).toBe(131000);
729+
expect(getModelMaxTokens('moonshotai/kimi-vl')).toBe(131000);
730+
});
731+
732+
test('should handle partial matches for Kimi models', () => {
733+
expect(getModelMaxTokens('kimi-k2-latest')).toBe(131000);
734+
expect(getModelMaxTokens('kimi-vl-preview')).toBe(131000);
735+
expect(getModelMaxTokens('kimi-2024')).toBe(131000);
736+
});
737+
});
738+
739+
describe('matchModelName', () => {
740+
test('should match exact Kimi model names', () => {
741+
expect(matchModelName('kimi')).toBe('kimi');
742+
expect(matchModelName('kimi-k2')).toBe('kimi');
743+
expect(matchModelName('kimi-vl')).toBe('kimi');
744+
});
745+
746+
test('should match Kimi model variations with provider prefix', () => {
747+
expect(matchModelName('moonshotai/kimi')).toBe('kimi');
748+
expect(matchModelName('moonshotai/kimi-k2')).toBe('kimi');
749+
expect(matchModelName('moonshotai/kimi-vl')).toBe('kimi');
750+
});
751+
752+
test('should match Kimi model variations with suffixes', () => {
753+
expect(matchModelName('kimi-k2-latest')).toBe('kimi');
754+
expect(matchModelName('kimi-vl-preview')).toBe('kimi');
755+
expect(matchModelName('kimi-2024')).toBe('kimi');
756+
});
757+
});
758+
});

‎client/src/locales/en/translation.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,6 @@
466466
"com_nav_send_message": "Send message",
467467
"com_nav_setting_account": "Account",
468468
"com_nav_setting_balance": "Balance",
469-
"com_nav_setting_beta": "Beta features",
470469
"com_nav_setting_chat": "Chat",
471470
"com_nav_setting_data": "Data controls",
472471
"com_nav_setting_general": "General",
@@ -1090,4 +1089,4 @@
10901089
"com_ui_yes": "Yes",
10911090
"com_ui_zoom": "Zoom",
10921091
"com_user_message": "You"
1093-
}
1092+
}

0 commit comments

Comments
 (0)