import { describe, expect, it } from 'vitest'; import { estimateImportedModelVisionTokens, getImportedModelProfile, } from '../../shared/imported-model-profile'; import { getKnownModelCapabilityKind, getModelCapabilityLabel, isKnownImageInputModelId, } from '../../shared/model-capabilities'; describe('getImportedModelProfile', () => { it.each([ 'qwen3.6-plus', 'qwen3.6-plus-2026-04-02', ])('returns verified limits and hybrid-thinking support for %s', (modelId) => { expect(getImportedModelProfile(modelId)).toEqual({ modalities: { input: ['text', 'image'], output: ['text'], }, limit: { context: 1_000_000, output: 65_536, }, visionTokenEstimator: 'qwen-32px-grid', pi: { reasoning: true, thinkingLevelMap: { minimal: null, low: null, medium: null, high: 'high', }, compat: { thinkingFormat: 'qwen', supportsDeveloperRole: false, supportsReasoningEffort: false, supportsStore: false, }, }, }); }); it.each([ 'qwen3.7-plus', 'qwen3.7-plus-2026-05-26', ])('returns verified limits for %s without guessing its Pi reasoning map', (modelId) => { expect(getImportedModelProfile(modelId)).toEqual({ modalities: { input: ['text', 'image'], output: ['text'], }, limit: { context: 1_000_000, output: 65_536, }, visionTokenEstimator: 'qwen-32px-grid', }); }); it('returns the verified Qwen3.8 Max Pi reasoning levels', () => { expect(getImportedModelProfile('qwen3.8-max')).toEqual({ modalities: { input: ['text', 'image'], output: ['text'], }, limit: { context: 1_000_000, output: 131_072, }, pi: { reasoning: true, thinkingLevelMap: { minimal: null, low: 'low', medium: 'medium', high: 'xhigh', }, compat: { thinkingFormat: 'qwen', supportsDeveloperRole: false, supportsReasoningEffort: true, supportsStore: false, }, }, }); }); it.each(['qwen-vl-max', 'qwen2.5-vl-72b-instruct', 'qwen-omni-turbo'])( 'keeps image modalities without guessed limits for %s', (modelId) => { const profile = getImportedModelProfile(modelId); expect(profile?.modalities.input).toEqual(['text', 'image']); expect(profile).not.toHaveProperty('limit'); expect(profile).not.toHaveProperty('visionTokenEstimator'); }, ); it.each([ 'qwen3.8-plus', 'qwen3.7-plus-latest', 'qwen3.7-plus-2026-06-15', 'qwen3.6-plus-2026-04-03', 'qwen3.7-plus-2026-99-99', 'deepseek-chat', '', ])('does not guess metadata for %s', (modelId) => { expect(getImportedModelProfile(modelId)).toBeNull(); }); it('estimates only profiles with the verified Qwen grid formula', () => { expect(estimateImportedModelVisionTokens('qwen3.7-plus', 1930, 1086)).toBe(2049); expect(estimateImportedModelVisionTokens('qwen-vl-max', 1930, 1086)).toBeNull(); }); it('keeps the legacy capability helpers delegated to the same profile', () => { expect(isKnownImageInputModelId('qwen3.7-plus')).toBe(true); expect(isKnownImageInputModelId('deepseek-chat')).toBe(false); expect(getKnownModelCapabilityKind('qwen-vl-max')).toBe('multimodal'); expect(getKnownModelCapabilityKind('deepseek-chat')).toBe('text'); expect(getModelCapabilityLabel('multimodal')).toBe('多模态'); expect(getModelCapabilityLabel('text')).toBe('文本'); }); });