| 179 | // ── Model recommendations ──────────────────────────────────────────────────── |
| 180 | |
| 181 | function recommendModels(tier: HardwareTier, appleSilicon: boolean): string[] { |
| 182 | // Order: most-suitable first. We bias toward Qwen-coder (best for tool calling at each |
| 183 | // size) but list runners-up so users with different preferences see options. |
| 184 | // Apple Silicon gets MoE candidates earlier since unified memory tolerates them well. |
| 185 | switch (tier) { |
| 186 | case 'small': |
| 187 | return ['qwen2.5-coder:7b', 'deepseek-coder-v2:lite', 'qwen2.5-coder:3b']; |
| 188 | case 'medium': |
| 189 | return ['qwen2.5-coder:14b', 'qwen2.5-coder:7b', 'deepseek-coder-v2:lite']; |
| 190 | case 'large': |
| 191 | return ['qwen2.5-coder:32b', 'qwen2.5-coder:14b', 'deepseek-coder-v2:16b']; |
| 192 | case 'xl': |
| 193 | return appleSilicon |
| 194 | ? ['qwen2.5-coder:32b', 'deepseek-v3', 'qwen2.5:72b', 'mixtral:8x22b'] |
| 195 | : ['qwen2.5-coder:32b', 'qwen2.5:72b', 'deepseek-coder-v2:236b', 'mixtral:8x22b']; |
| 196 | } |
| 197 | } |
| 198 | |
| 199 | // ── tiny spawnSync helper ──────────────────────────────────────────────────── |
| 200 | |