mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
🔀 feat: moonshotai/kimi Context and OpenRouter Endpoint Token Config (#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
This commit is contained in:
parent
259224d986
commit
f797e90d79
5 changed files with 55 additions and 6 deletions
|
|
@ -131,7 +131,7 @@ const initializeAgent = async ({
|
||||||
);
|
);
|
||||||
const agentMaxContextTokens = optionalChainWithEmptyCheck(
|
const agentMaxContextTokens = optionalChainWithEmptyCheck(
|
||||||
maxContextTokens,
|
maxContextTokens,
|
||||||
getModelMaxTokens(tokensModel, providerEndpointMap[provider]),
|
getModelMaxTokens(tokensModel, providerEndpointMap[provider], options.endpointTokenConfig),
|
||||||
4096,
|
4096,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -191,7 +191,7 @@ const initializeAgent = async ({
|
||||||
resendFiles,
|
resendFiles,
|
||||||
toolContextMap,
|
toolContextMap,
|
||||||
useLegacyContent: !!options.useLegacyContent,
|
useLegacyContent: !!options.useLegacyContent,
|
||||||
maxContextTokens: (agentMaxContextTokens - maxTokens) * 0.9,
|
maxContextTokens: Math.round((agentMaxContextTokens - maxTokens) * 0.9),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,8 +141,9 @@ const initializeClient = async ({ req, res, endpointOption, optionsOnly, overrid
|
||||||
const options = getOpenAIConfig(apiKey, clientOptions, endpoint);
|
const options = getOpenAIConfig(apiKey, clientOptions, endpoint);
|
||||||
if (options != null) {
|
if (options != null) {
|
||||||
options.useLegacyContent = true;
|
options.useLegacyContent = true;
|
||||||
|
options.endpointTokenConfig = endpointTokenConfig;
|
||||||
}
|
}
|
||||||
if (!customOptions.streamRate) {
|
if (!clientOptions.streamRate) {
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
options.llmConfig.callbacks = [
|
options.llmConfig.callbacks = [
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,14 @@ const xAIModels = {
|
||||||
'grok-4': 256000, // 256K context
|
'grok-4': 256000, // 256K context
|
||||||
};
|
};
|
||||||
|
|
||||||
const aggregateModels = { ...openAIModels, ...googleModels, ...bedrockModels, ...xAIModels };
|
const aggregateModels = {
|
||||||
|
...openAIModels,
|
||||||
|
...googleModels,
|
||||||
|
...bedrockModels,
|
||||||
|
...xAIModels,
|
||||||
|
// misc.
|
||||||
|
kimi: 131000,
|
||||||
|
};
|
||||||
|
|
||||||
const maxTokensMap = {
|
const maxTokensMap = {
|
||||||
[EModelEndpoint.azureOpenAI]: openAIModels,
|
[EModelEndpoint.azureOpenAI]: openAIModels,
|
||||||
|
|
|
||||||
|
|
@ -714,3 +714,45 @@ describe('Claude Model Tests', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Kimi Model Tests', () => {
|
||||||
|
describe('getModelMaxTokens', () => {
|
||||||
|
test('should return correct tokens for Kimi models', () => {
|
||||||
|
expect(getModelMaxTokens('kimi')).toBe(131000);
|
||||||
|
expect(getModelMaxTokens('kimi-k2')).toBe(131000);
|
||||||
|
expect(getModelMaxTokens('kimi-vl')).toBe(131000);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return correct tokens for Kimi models with provider prefix', () => {
|
||||||
|
expect(getModelMaxTokens('moonshotai/kimi-k2')).toBe(131000);
|
||||||
|
expect(getModelMaxTokens('moonshotai/kimi')).toBe(131000);
|
||||||
|
expect(getModelMaxTokens('moonshotai/kimi-vl')).toBe(131000);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should handle partial matches for Kimi models', () => {
|
||||||
|
expect(getModelMaxTokens('kimi-k2-latest')).toBe(131000);
|
||||||
|
expect(getModelMaxTokens('kimi-vl-preview')).toBe(131000);
|
||||||
|
expect(getModelMaxTokens('kimi-2024')).toBe(131000);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('matchModelName', () => {
|
||||||
|
test('should match exact Kimi model names', () => {
|
||||||
|
expect(matchModelName('kimi')).toBe('kimi');
|
||||||
|
expect(matchModelName('kimi-k2')).toBe('kimi');
|
||||||
|
expect(matchModelName('kimi-vl')).toBe('kimi');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should match Kimi model variations with provider prefix', () => {
|
||||||
|
expect(matchModelName('moonshotai/kimi')).toBe('kimi');
|
||||||
|
expect(matchModelName('moonshotai/kimi-k2')).toBe('kimi');
|
||||||
|
expect(matchModelName('moonshotai/kimi-vl')).toBe('kimi');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should match Kimi model variations with suffixes', () => {
|
||||||
|
expect(matchModelName('kimi-k2-latest')).toBe('kimi');
|
||||||
|
expect(matchModelName('kimi-vl-preview')).toBe('kimi');
|
||||||
|
expect(matchModelName('kimi-2024')).toBe('kimi');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -466,7 +466,6 @@
|
||||||
"com_nav_send_message": "Send message",
|
"com_nav_send_message": "Send message",
|
||||||
"com_nav_setting_account": "Account",
|
"com_nav_setting_account": "Account",
|
||||||
"com_nav_setting_balance": "Balance",
|
"com_nav_setting_balance": "Balance",
|
||||||
"com_nav_setting_beta": "Beta features",
|
|
||||||
"com_nav_setting_chat": "Chat",
|
"com_nav_setting_chat": "Chat",
|
||||||
"com_nav_setting_data": "Data controls",
|
"com_nav_setting_data": "Data controls",
|
||||||
"com_nav_setting_general": "General",
|
"com_nav_setting_general": "General",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue