char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
cae63579b
char/aliceai-t5-moe
1import { ModelsService } from '$lib/services/models.service' ; 2import { describe , expect , it } from 'vitest' ; 3 4const { parseModelId} = ModelsService ; 5 6describe ( 'parseModelId' , () => { 7it ( 'handles unknown patterns correctly' , () => { 8expect ( parseModelId ( 'model-name-1' )). toStrictEqual ({ 9activatedParams :null , 10modelName :'model-name-1' , 11orgName :null , 12params :null , 13quantization :null , 14raw :'model-name-1' , 15tags :[] 16}); 17 18expect ( parseModelId ( 'org/model-name-2' )). toStrictEqual ({ 19activatedParams :null , 20modelName :'model-name-2' , 21orgName :'org' , 22params :null , 23quantization :null , 24raw :'org/model-name-2' , 25tags :[] 26}); 27}); 28 29it ( 'extracts model parameters correctly' , () => { 30expect ( parseModelId ( 'model-100B-BF16' )). toMatchObject ({ params :'100B' }); 31expect ( parseModelId ( 'model-100B:Q4_K_M' )). toMatchObject ({ params :'100B' }); 32}); 33 34it ( 'extracts model parameters correctly in lowercase' , () => { 35expect ( parseModelId ( 'model-100b-bf16' )). toMatchObject ({ params :'100B' }); 36expect ( parseModelId ( 'model-100b:q4_k_m' )). toMatchObject ({ params :'100B' }); 37}); 38 39it ( 'extracts effective parameters correctly' , () => { 40expect ( parseModelId ( 'model-E4B-BF16' )). toMatchObject ({ params :'E4B' }); 41expect ( parseModelId ( 'model-e2b:q4_k_m' )). toMatchObject ({ params :'E2B' }); 42}); 43 44it ( 'extracts activated parameters correctly' , () => { 45expect ( parseModelId ( 'model-100B-A10B-BF16' )). toMatchObject ({ activatedParams :'A10B' }); 46expect ( parseModelId ( 'model-100B-A10B:Q4_K_M' )). toMatchObject ({ activatedParams :'A10B' }); 47}); 48 49it ( 'extracts activated parameters correctly in lowercase' , () => { 50expect ( parseModelId ( 'model-100b-a10b-bf16' )). toMatchObject ({ activatedParams :'A10B' }); 51expect ( parseModelId ( 'model-100b-a10b:q4_k_m' )). toMatchObject ({ activatedParams :'A10B' }); 52}); 53 54it ( 'extracts quantization correctly' , () => { 55// Dash-separated quantization 56expect ( parseModelId ( 'model-100B-UD-IQ1_S' )). toMatchObject ({ quantization :'UD-IQ1_S' }); 57expect ( parseModelId ( 'model-100B-IQ4_XS' )). toMatchObject ({ quantization :'IQ4_XS' }); 58expect ( parseModelId ( 'model-100B-Q4_K_M' )). toMatchObject ({ quantization :'Q4_K_M' }); 59expect ( parseModelId ( 'model-100B-Q8_0' )). toMatchObject ({ quantization :'Q8_0' }); 60expect ( parseModelId ( 'model-100B-UD-Q8_K_XL' )). toMatchObject ({ quantization :'UD-Q8_K_XL' }); 61expect ( parseModelId ( 'model-100B-F16' )). toMatchObject ({ quantization :'F16' }); 62expect ( parseModelId ( 'model-100B-BF16' )). toMatchObject ({ quantization :'BF16' }); 63expect ( parseModelId ( 'model-100B-MXFP4' )). toMatchObject ({ quantization :'MXFP4' }); 64 65// Colon-separated quantization 66expect ( parseModelId ( 'model-100B:UD-IQ1_S' )). toMatchObject ({ quantization :'UD-IQ1_S' }); 67expect ( parseModelId ( 'model-100B:IQ4_XS' )). toMatchObject ({ quantization :'IQ4_XS' }); 68expect ( parseModelId ( 'model-100B:Q4_K_M' )). toMatchObject ({ quantization :'Q4_K_M' }); 69expect ( parseModelId ( 'model-100B:Q8_0' )). toMatchObject ({ quantization :'Q8_0' }); 70expect ( parseModelId ( 'model-100B:UD-Q8_K_XL' )). toMatchObject ({ quantization :'UD-Q8_K_XL' }); 71expect ( parseModelId ( 'model-100B:F16' )). toMatchObject ({ quantization :'F16' }); 72expect ( parseModelId ( 'model-100B:BF16' )). toMatchObject ({ quantization :'BF16' }); 73expect ( parseModelId ( 'model-100B:MXFP4' )). toMatchObject ({ quantization :'MXFP4' }); 74 75// Dot-separated quantization 76expect ( parseModelId ( 'nomic-embed-text-v2-moe.Q4_K_M' )). toMatchObject ({ 77quantization :'Q4_K_M' 78}); 79}); 80 81it ( 'extracts additional tags correctly' , () => { 82expect ( parseModelId ( 'model-100B-foobar-Q4_K_M' )). toMatchObject ({ tags :[ 'foobar' ] }); 83expect ( parseModelId ( 'model-100B-A10B-foobar-1M-BF16' )). toMatchObject ({ 84tags :[ 'foobar' , '1M' ] 85}); 86expect ( parseModelId ( 'model-100B-1M-foobar:UD-Q8_K_XL' )). toMatchObject ({ 87tags :[ '1M' , 'foobar' ] 88}); 89}); 90 91it ( 'filters out container format segments from tags' , () => { 92expect ( parseModelId ( 'model-100B-GGUF-Instruct-BF16' )). toMatchObject ({ 93tags :[ 'Instruct' ] 94}); 95expect ( parseModelId ( 'model-100B-GGML-Instruct:Q4_K_M' )). toMatchObject ({ 96tags :[ 'Instruct' ] 97}); 98}); 99 100it ( 'strips trailing container format segments from model names' , () => { 101expect ( parseModelId ( 'unsloth/DeepSeek-V4-Flash-0731-GGUF:Q2_K_XL' )). toStrictEqual ({ 102activatedParams :null , 103modelName :'DeepSeek-V4-Flash-0731' , 104orgName :'unsloth' , 105params :null , 106quantization :'Q2_K_XL' , 107raw :'unsloth/DeepSeek-V4-Flash-0731-GGUF:Q2_K_XL' , 108tags :[] 109}); 110 111expect ( parseModelId ( 'unsloth/Laguna-S-2.1-GGUF:Q4_K_XL' )). toStrictEqual ({ 112activatedParams :null , 113modelName :'Laguna-S-2.1' , 114orgName :'unsloth' , 115params :null , 116quantization :'Q4_K_XL' , 117raw :'unsloth/Laguna-S-2.1-GGUF:Q4_K_XL' , 118tags :[] 119}); 120 121expect ( parseModelId ( 'org/Model-Name-GGUF' )). toStrictEqual ({ 122activatedParams :null , 123modelName :'Model-Name' , 124orgName :'org' , 125params :null , 126quantization :null , 127raw :'org/Model-Name-GGUF' , 128tags :[] 129}); 130}); 131 132it ( 'handles real-world examples correctly' , () => { 133expect ( parseModelId ( 'meta-llama/Llama-3.1-8B' )). toStrictEqual ({ 134activatedParams :null , 135modelName :'Llama-3.1' , 136orgName :'meta-llama' , 137params :'8B' , 138quantization :null , 139raw :'meta-llama/Llama-3.1-8B' , 140tags :[] 141}); 142 143expect ( parseModelId ( 'openai/gpt-oss-120b-MXFP4' )). toStrictEqual ({ 144activatedParams :null , 145modelName :'gpt-oss' , 146orgName :'openai' , 147params :'120B' , 148quantization :'MXFP4' , 149raw :'openai/gpt-oss-120b-MXFP4' , 150tags :[] 151}); 152 153expect ( parseModelId ( 'openai/gpt-oss-20b:Q4_K_M' )). toStrictEqual ({ 154activatedParams :null , 155modelName :'gpt-oss' , 156orgName :'openai' , 157params :'20B' , 158quantization :'Q4_K_M' , 159raw :'openai/gpt-oss-20b:Q4_K_M' , 160tags :[] 161}); 162 163expect ( parseModelId ( 'Qwen/Qwen3-Coder-30B-A3B-Instruct-1M-BF16' )). toStrictEqual ({ 164activatedParams :'A3B' , 165modelName :'Qwen3-Coder' , 166orgName :'Qwen' , 167params :'30B' , 168quantization :'BF16' , 169raw :'Qwen/Qwen3-Coder-30B-A3B-Instruct-1M-BF16' , 170tags :[ 'Instruct' , '1M' ] 171}); 172}); 173 174it ( 'handles real-world examples with quantization in segments' , () => { 175expect ( parseModelId ( 'meta-llama/Llama-4-Scout-17B-16E-Instruct-Q4_K_M' )). toStrictEqual ({ 176activatedParams :null , 177modelName :'Llama-4-Scout' , 178orgName :'meta-llama' , 179params :'17B' , 180quantization :'Q4_K_M' , 181raw :'meta-llama/Llama-4-Scout-17B-16E-Instruct-Q4_K_M' , 182tags :[ '16E' , 'Instruct' ] 183}); 184 185expect ( parseModelId ( 'MiniMaxAI/MiniMax-M2-IQ4_XS' )). toStrictEqual ({ 186activatedParams :null , 187modelName :'MiniMax-M2' , 188orgName :'MiniMaxAI' , 189params :null , 190quantization :'IQ4_XS' , 191raw :'MiniMaxAI/MiniMax-M2-IQ4_XS' , 192tags :[] 193}); 194 195expect ( parseModelId ( 'MiniMaxAI/MiniMax-M2-UD-Q3_K_XL' )). toStrictEqual ({ 196activatedParams :null , 197modelName :'MiniMax-M2' , 198orgName :'MiniMaxAI' , 199params :null , 200quantization :'UD-Q3_K_XL' , 201raw :'MiniMaxAI/MiniMax-M2-UD-Q3_K_XL' , 202tags :[] 203}); 204 205expect ( parseModelId ( 'mistralai/Devstral-2-123B-Instruct-2512-Q4_K_M' )). toStrictEqual ({ 206activatedParams :null , 207modelName :'Devstral-2' , 208orgName :'mistralai' , 209params :'123B' , 210quantization :'Q4_K_M' , 211raw :'mistralai/Devstral-2-123B-Instruct-2512-Q4_K_M' , 212tags :[ 'Instruct' , '2512' ] 213}); 214 215expect ( parseModelId ( 'mistralai/Devstral-Small-2-24B-Instruct-2512-Q8_0' )). toStrictEqual ({ 216activatedParams :null , 217modelName :'Devstral-Small-2' , 218orgName :'mistralai' , 219params :'24B' , 220quantization :'Q8_0' , 221raw :'mistralai/Devstral-Small-2-24B-Instruct-2512-Q8_0' , 222tags :[ 'Instruct' , '2512' ] 223}); 224 225expect ( parseModelId ( 'noctrex/GLM-4.7-Flash-MXFP4_MOE' )). toStrictEqual ({ 226activatedParams :null , 227modelName :'GLM-4.7-Flash' , 228orgName :'noctrex' , 229params :null , 230quantization :'MXFP4_MOE' , 231raw :'noctrex/GLM-4.7-Flash-MXFP4_MOE' , 232tags :[] 233}); 234 235expect ( parseModelId ( 'Qwen/Qwen3-Coder-Next-Q4_K_M' )). toStrictEqual ({ 236activatedParams :null , 237modelName :'Qwen3-Coder-Next' , 238orgName :'Qwen' , 239params :null , 240quantization :'Q4_K_M' , 241raw :'Qwen/Qwen3-Coder-Next-Q4_K_M' , 242tags :[] 243}); 244 245expect ( parseModelId ( 'openai/gpt-oss-120b-Q4_K_M' )). toStrictEqual ({ 246activatedParams :null , 247modelName :'gpt-oss' , 248orgName :'openai' , 249params :'120B' , 250quantization :'Q4_K_M' , 251raw :'openai/gpt-oss-120b-Q4_K_M' , 252tags :[] 253}); 254 255expect ( parseModelId ( 'openai/gpt-oss-20b-F16' )). toStrictEqual ({ 256activatedParams :null , 257modelName :'gpt-oss' , 258orgName :'openai' , 259params :'20B' , 260quantization :'F16' , 261raw :'openai/gpt-oss-20b-F16' , 262tags :[] 263}); 264 265expect ( parseModelId ( 'nomic-embed-text-v2-moe.Q4_K_M' )). toStrictEqual ({ 266activatedParams :null , 267modelName :'nomic-embed-text-v2-moe' , 268orgName :null , 269params :null , 270quantization :'Q4_K_M' , 271raw :'nomic-embed-text-v2-moe.Q4_K_M' , 272tags :[] 273}); 274}); 275 276it ( 'handles ambiguous model names' , () => { 277// Qwen3.5 Instruct vs Thinking — tags should distinguish them 278expect ( parseModelId ( 'Qwen/Qwen3.5-30B-A3B-Instruct' )). toMatchObject ({ 279activatedParams :'A3B' , 280modelName :'Qwen3.5' , 281params :'30B' , 282tags :[ 'Instruct' ] 283}); 284 285expect ( parseModelId ( 'Qwen/Qwen3.5-30B-A3B-Thinking' )). toMatchObject ({ 286activatedParams :'A3B' , 287modelName :'Qwen3.5' , 288params :'30B' , 289tags :[ 'Thinking' ] 290}); 291 292// Dot-separated quantization with variant suffixes 293expect ( parseModelId ( 'gemma-3-27b-it-heretic-v2.Q8_0' )). toMatchObject ({ 294modelName :'gemma-3' , 295params :'27B' , 296quantization :'Q8_0' , 297tags :[ 'it' , 'heretic' , 'v2' ] 298}); 299 300expect ( parseModelId ( 'gemma-3-27b-it.Q8_0' )). toMatchObject ({ 301modelName :'gemma-3' , 302params :'27B' , 303quantization :'Q8_0' , 304tags :[ 'it' ] 305}); 306}); 307});