This commit is contained in:
chenhuanjie
2025-11-05 15:10:52 +08:00
parent 7e827833bf
commit 55a3b69a8e
5 changed files with 65 additions and 7 deletions

View File

@@ -64,6 +64,12 @@ describe('normalize', () => {
expect(normalize('qwen-vl-max-latest')).toBe('qwen-vl-max-latest');
});
it('should preserve date suffixes for Kimi K2 models', () => {
expect(normalize('kimi-k2-0905-preview')).toBe('kimi-k2-0905');
expect(normalize('kimi-k2-0711-preview')).toBe('kimi-k2-0711');
expect(normalize('kimi-k2-turbo-preview')).toBe('kimi-k2-turbo');
});
it('should remove date like suffixes', () => {
expect(normalize('deepseek-r1-0528')).toBe('deepseek-r1');
});
@@ -213,7 +219,7 @@ describe('tokenLimit', () => {
});
});
describe('Other models', () => {
describe('DeepSeek', () => {
it('should return the correct limit for deepseek-r1', () => {
expect(tokenLimit('deepseek-r1')).toBe(131072);
});
@@ -226,9 +232,27 @@ describe('tokenLimit', () => {
it('should return the correct limit for deepseek-v3.2', () => {
expect(tokenLimit('deepseek-v3.2-exp')).toBe(131072);
});
it('should return the correct limit for kimi-k2-instruct', () => {
expect(tokenLimit('kimi-k2-instruct')).toBe(131072);
});
describe('Moonshot Kimi', () => {
it('should return the correct limit for kimi-k2-0905-preview', () => {
expect(tokenLimit('kimi-k2-0905-preview')).toBe(262144); // 256K
expect(tokenLimit('kimi-k2-0905')).toBe(262144);
});
it('should return the correct limit for kimi-k2-turbo-preview', () => {
expect(tokenLimit('kimi-k2-turbo-preview')).toBe(262144); // 256K
expect(tokenLimit('kimi-k2-turbo')).toBe(262144);
});
it('should return the correct limit for kimi-k2-0711-preview', () => {
expect(tokenLimit('kimi-k2-0711-preview')).toBe(131072); // 128K
expect(tokenLimit('kimi-k2-0711')).toBe(131072);
});
it('should return the correct limit for kimi-k2-instruct', () => {
expect(tokenLimit('kimi-k2-instruct')).toBe(131072); // 128K
});
});
describe('Other models', () => {
it('should return the correct limit for gpt-oss', () => {
expect(tokenLimit('gpt-oss')).toBe(131072);
});

View File

@@ -47,8 +47,13 @@ export function normalize(model: string): string {
// remove trailing build / date / revision suffixes:
// - dates (e.g., -20250219), -v1, version numbers, 'latest', 'preview' etc.
s = s.replace(/-preview/g, '');
// Special handling for Qwen model names that include "-latest" as part of the model name
if (!s.match(/^qwen-(?:plus|flash|vl-max)-latest$/)) {
// Special handling for model names that include date/version as part of the model identifier
// - Qwen models: qwen-plus-latest, qwen-flash-latest, qwen-vl-max-latest
// - Kimi models: kimi-k2-0905, kimi-k2-0711, etc. (keep date for version distinction)
if (
!s.match(/^qwen-(?:plus|flash|vl-max)-latest$/) &&
!s.match(/^kimi-k2-\d{4}$/)
) {
// Regex breakdown:
// -(?:...)$ - Non-capturing group for suffixes at the end of the string
// The following patterns are matched within the group:
@@ -165,9 +170,16 @@ const PATTERNS: Array<[RegExp, TokenCount]> = [
[/^deepseek-v3(?:\.\d+)?(?:-.*)?$/, LIMITS['128k']],
// -------------------
// GPT-OSS / Kimi / Llama & Mistral examples
// Moonshot / Kimi
// -------------------
[/^kimi-k2-0905$/, LIMITS['256k']], // Kimi-k2-0905-preview: 256K context
[/^kimi-k2-turbo.*$/, LIMITS['256k']], // Kimi-k2-turbo-preview: 256K context
[/^kimi-k2-0711$/, LIMITS['128k']], // Kimi-k2-0711-preview: 128K context
[/^kimi-k2-instruct.*$/, LIMITS['128k']], // Kimi-k2-instruct: 128K context
// -------------------
// GPT-OSS / Llama & Mistral examples
// -------------------
[/^kimi-k2-instruct.*$/, LIMITS['128k']],
[/^gpt-oss.*$/, LIMITS['128k']],
[/^llama-4-scout.*$/, LIMITS['10m']],
[/^mistral-large-2.*$/, LIMITS['128k']],