diff --git a/packages/app/src/components/inference/utils/tooltip-utils.test.ts b/packages/app/src/components/inference/utils/tooltip-utils.test.ts index daa48b26..f3814bad 100644 --- a/packages/app/src/components/inference/utils/tooltip-utils.test.ts +++ b/packages/app/src/components/inference/utils/tooltip-utils.test.ts @@ -524,6 +524,21 @@ describe('generateOverlayTooltipContent', () => { expect(standardZh).toContain('投机解码: 关闭'); }); + it('labels Kimi-K3 speculative decoding "DSpark" rather than the generic MTP', () => { + const html = generateOverlayTooltipContent( + overlayConfig({ + data: pt({ + benchmark_type: 'agentic_traces', + model: 'Kimi-K3', + spec_decoding: 'mtp', + }), + }), + ); + + expect(html).toContain('Speculative Decoding: DSpark'); + expect(html).not.toContain('Speculative Decoding: MTP'); + }); + it('hides stale CPU cache hits for unofficial overlays without offload', () => { const html = generateOverlayTooltipContent( overlayConfig({ diff --git a/packages/constants/src/framework-aliases.test.ts b/packages/constants/src/framework-aliases.test.ts index 3acee7b0..469ef3cc 100644 --- a/packages/constants/src/framework-aliases.test.ts +++ b/packages/constants/src/framework-aliases.test.ts @@ -31,6 +31,10 @@ describe('MODEL_SPEC_METHOD_LABELS', () => { it('maps MiniMax-M3 mtp to "M3 EAGLE"', () => { expect(MODEL_SPEC_METHOD_LABELS['MiniMax-M3']?.mtp).toBe('M3 EAGLE'); }); + + it('maps Kimi-K3 mtp to "DSpark"', () => { + expect(MODEL_SPEC_METHOD_LABELS['Kimi-K3']?.mtp).toBe('DSpark'); + }); }); describe('resolveFrameworkPartLabel', () => { @@ -38,6 +42,10 @@ describe('resolveFrameworkPartLabel', () => { expect(resolveFrameworkPartLabel('MiniMax-M3', 'mtp')).toBe('M3 EAGLE'); }); + it('renders K3 mtp as "DSpark"', () => { + expect(resolveFrameworkPartLabel('Kimi-K3', 'mtp')).toBe('DSpark'); + }); + it('keeps the generic MTP label for other models', () => { expect(resolveFrameworkPartLabel('DeepSeek-R1-0528', 'mtp')).toBe('MTP'); }); @@ -46,6 +54,10 @@ describe('resolveFrameworkPartLabel', () => { expect(resolveFrameworkPartLabel(undefined, 'mtp')).toBe('MTP'); }); + it('keeps the generic MTP label for sibling Kimi models', () => { + expect(resolveFrameworkPartLabel('Kimi-K2.5', 'mtp')).toBe('MTP'); + }); + it('falls back to FRAMEWORK_LABELS for non-overridden parts even for M3', () => { expect(resolveFrameworkPartLabel('MiniMax-M3', 'vllm')).toBe('vLLM'); }); diff --git a/packages/constants/src/framework-aliases.ts b/packages/constants/src/framework-aliases.ts index 076f5cb2..902ddf22 100644 --- a/packages/constants/src/framework-aliases.ts +++ b/packages/constants/src/framework-aliases.ts @@ -55,12 +55,13 @@ export const FRAMEWORK_LABELS: Record = { * Per-model display overrides for hwKey suffix parts (framework / spec_method * tokens), keyed by frontend display model name → token → label. * - * M3's speculative-decoding runs are ingested under the generic `mtp` token but - * actually use EAGLE, so for MiniMax-M3 the suffix reads "EAGLE" while every - * other model keeps the generic "MTP" label. + * Some models are ingested under the generic `mtp` token but ship a + * differently-named method: M3 uses EAGLE, and K3 uses DSpark. Those models get + * their own label while every other model keeps the generic "MTP" label. */ export const MODEL_SPEC_METHOD_LABELS: Record> = { 'MiniMax-M3': { mtp: 'M3 EAGLE' }, + 'Kimi-K3': { mtp: 'DSpark' }, }; /**