basant307/AI_Governance_Project
045
1/**2 * @license3 * Copyright 2025 Qwen Team4 * SPDX-License-Identifier: Apache-2.05 */6 7import { describe, it, expect } from 'vitest';8import { defaultModalities } from './modalityDefaults.js';9 10describe('defaultModalities', () => {11 describe('Google Gemini', () => {12 it('returns full multimodal for gemini-3-pro', () => {13 expect(defaultModalities('gemini-3-pro-preview')).toEqual({14 image: true,15 pdf: true,16 audio: true,17 video: true,18 });19 });20 21 it('returns full multimodal for gemini-3-flash', () => {22 expect(defaultModalities('gemini-3-flash-preview')).toEqual({23 image: true,24 pdf: true,25 audio: true,26 video: true,27 });28 });29 30 it('returns full multimodal for gemini-3.1-pro', () => {31 expect(defaultModalities('gemini-3.1-pro-preview')).toEqual({32 image: true,33 pdf: true,34 audio: true,35 video: true,36 });37 });38 39 it('returns full multimodal for gemini-2.5-pro', () => {40 expect(defaultModalities('gemini-2.5-pro')).toEqual({41 image: true,42 pdf: true,43 audio: true,44 video: true,45 });46 });47 48 it('returns full multimodal for gemini-1.5-flash', () => {49 expect(defaultModalities('gemini-1.5-flash')).toEqual({50 image: true,51 pdf: true,52 audio: true,53 video: true,54 });55 });56 });57 58 describe('OpenAI', () => {59 it('returns image for gpt-5.2', () => {60 const m = defaultModalities('gpt-5.2');61 expect(m.image).toBe(true);62 expect(m.audio).toBeUndefined();63 expect(m.pdf).toBeUndefined();64 expect(m.video).toBeUndefined();65 });66 67 it('returns image for gpt-5-mini', () => {68 expect(defaultModalities('gpt-5-mini').image).toBe(true);69 });70 71 it('returns image for gpt-4o', () => {72 expect(defaultModalities('gpt-4o').image).toBe(true);73 });74 75 it('returns image for o3', () => {76 expect(defaultModalities('o3').image).toBe(true);77 });78 });79 80 describe('Anthropic Claude', () => {81 it('returns image + pdf for claude-opus-4-6', () => {82 const m = defaultModalities('claude-opus-4-6');83 expect(m.image).toBe(true);84 expect(m.pdf).toBe(true);85 expect(m.audio).toBeUndefined();86 expect(m.video).toBeUndefined();87 });88 89 it('returns image + pdf for claude-sonnet-4-6', () => {90 const m = defaultModalities('claude-sonnet-4-6');91 expect(m.image).toBe(true);92 expect(m.pdf).toBe(true);93 });94 95 it('returns image + pdf for claude-sonnet-4', () => {96 const m = defaultModalities('claude-sonnet-4');97 expect(m.image).toBe(true);98 expect(m.pdf).toBe(true);99 });100 101 it('returns image + pdf for claude-3.5-sonnet', () => {102 const m = defaultModalities('claude-3.5-sonnet');103 expect(m.image).toBe(true);104 expect(m.pdf).toBe(true);105 });106 });107 108 describe('Qwen', () => {109 it('returns image + video for qwen-vl-max', () => {110 const m = defaultModalities('qwen-vl-max');111 expect(m.image).toBe(true);112 expect(m.video).toBe(true);113 expect(m.pdf).toBeUndefined();114 expect(m.audio).toBeUndefined();115 });116 117 it('returns image + video for qwen3-vl-plus', () => {118 const m = defaultModalities('qwen3-vl-plus');119 expect(m.image).toBe(true);120 expect(m.video).toBe(true);121 });122 123 it('returns text-only for qwen3-coder-plus', () => {124 expect(defaultModalities('qwen3-coder-plus')).toEqual({});125 });126 127 it('returns image + video for coder-model (same as qwen3.5-plus)', () => {128 expect(defaultModalities('coder-model')).toEqual({129 image: true,130 video: true,131 });132 });133 134 it('returns image + video for qwen3.5-plus', () => {135 const m = defaultModalities('qwen3.5-plus');136 expect(m.image).toBe(true);137 expect(m.video).toBe(true);138 expect(m.pdf).toBeUndefined();139 expect(m.audio).toBeUndefined();140 });141 142 it('returns image + video for qwen3.7-plus', () => {143 const m = defaultModalities('qwen3.7-plus');144 expect(m.image).toBe(true);145 expect(m.video).toBe(true);146 expect(m.pdf).toBeUndefined();147 expect(m.audio).toBeUndefined();148 });149 150 it('returns text-only for qwen3.7-max', () => {151 expect(defaultModalities('qwen3.7-max')).toEqual({});152 });153 154 it('returns image + video for qwen3.6-35b variants', () => {155 const m = defaultModalities('qwen3.6-35b-a3b-nvfp4');156 expect(m.image).toBe(true);157 expect(m.video).toBe(true);158 expect(m.pdf).toBeUndefined();159 expect(m.audio).toBeUndefined();160 });161 162 it('returns text-only for qwen-turbo', () => {163 expect(defaultModalities('qwen-turbo')).toEqual({});164 });165 });166 167 describe('DeepSeek', () => {168 it('returns text-only for deepseek-chat', () => {169 expect(defaultModalities('deepseek-chat')).toEqual({});170 });171 172 it('returns text-only for deepseek-reasoner', () => {173 expect(defaultModalities('deepseek-reasoner')).toEqual({});174 });175 });176 177 describe('Zhipu GLM', () => {178 it('returns image for glm-4.5v', () => {179 const m = defaultModalities('glm-4.5v');180 expect(m.image).toBe(true);181 expect(m.pdf).toBeUndefined();182 });183 184 it('returns text-only for glm-5', () => {185 expect(defaultModalities('glm-5')).toEqual({});186 });187 188 it('returns text-only for glm-4.7', () => {189 expect(defaultModalities('glm-4.7')).toEqual({});190 });191 });192 193 describe('MiniMax', () => {194 it('returns image + video for MiniMax-M3', () => {195 const m = defaultModalities('MiniMax-M3');196 expect(m.image).toBe(true);197 expect(m.video).toBe(true);198 expect(m.pdf).toBeUndefined();199 expect(m.audio).toBeUndefined();200 });201 202 it('returns text-only for MiniMax-M2.5', () => {203 expect(defaultModalities('MiniMax-M2.5')).toEqual({});204 });205 });206 207 describe('Kimi', () => {208 it('returns image + video for kimi-k2.5', () => {209 const m = defaultModalities('kimi-k2.5');210 expect(m.image).toBe(true);211 expect(m.video).toBe(true);212 expect(m.pdf).toBeUndefined();213 expect(m.audio).toBeUndefined();214 });215 216 it('returns text-only for kimi-k2', () => {217 expect(defaultModalities('kimi-k2')).toEqual({});218 });219 });220 221 describe('ByteDance Doubao', () => {222 it('returns image for doubao-seed-2.0-pro (issue #4876)', () => {223 const m = defaultModalities('doubao-seed-2.0-pro');224 expect(m.image).toBe(true);225 expect(m.video).toBeUndefined();226 expect(m.audio).toBeUndefined();227 });228 229 it('returns image for doubao-seed-1.6', () => {230 expect(defaultModalities('doubao-seed-1.6').image).toBe(true);231 });232 233 it('returns image for doubao-1.5-vision-pro', () => {234 expect(defaultModalities('doubao-1.5-vision-pro').image).toBe(true);235 });236 237 it('returns image for doubao-vision', () => {238 expect(defaultModalities('doubao-vision').image).toBe(true);239 });240 241 it('returns text-only for doubao-seedance (text→video generation model)', () => {242 expect(defaultModalities('doubao-seedance-1.0-pro')).toEqual({});243 });244 245 it('returns text-only for doubao-seedream (text→image generation model)', () => {246 expect(defaultModalities('doubao-seedream-3.0')).toEqual({});247 });248 249 it('returns text-only for doubao-pro-32k', () => {250 expect(defaultModalities('doubao-pro-32k')).toEqual({});251 });252 253 it('returns text-only for doubao-lite-4k', () => {254 expect(defaultModalities('doubao-lite-4k')).toEqual({});255 });256 });257 258 describe('unknown models', () => {259 it('returns text-only for unrecognized models', () => {260 expect(defaultModalities('some-random-model-xyz')).toEqual({});261 });262 });263 264 describe('normalization', () => {265 it('normalizes provider prefixes', () => {266 expect(defaultModalities('openai/gpt-4o')).toEqual(267 defaultModalities('gpt-4o'),268 );269 });270 271 it('returns a fresh copy each time', () => {272 const a = defaultModalities('gemini-2.5-pro');273 const b = defaultModalities('gemini-2.5-pro');274 expect(a).toEqual(b);275 expect(a).not.toBe(b);276 });277 });278});279 