llm-checker 3.6.1 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2342,6 +2342,9 @@ class DeterministicModelSelector {
2342
2342
  estimatedRAM: candidate.requiredGB,
2343
2343
  reasoning: candidate.rationale,
2344
2344
  runtime: candidate.runtime || candidate.speed?.runtime || 'ollama',
2345
+ installCommand: candidate.meta.installCommand || provenance.install_command || '',
2346
+ downloadUrl: candidate.meta.downloadUrl || provenance.download_url || '',
2347
+ artifactFormat: candidate.meta.artifact?.format || '',
2345
2348
  memoryAssumptionSource: candidate.memory?.assumptionSource || 'dense_params',
2346
2349
  speedAssumptions: candidate.speed?.moe ? {
2347
2350
  applied: Boolean(candidate.speed.moe.applied),
@@ -2523,19 +2526,24 @@ class DeterministicModelSelector {
2523
2526
  Object.entries(recommendations).forEach(([category, data]) => {
2524
2527
  const bestModel = data.bestModels[0];
2525
2528
  if (bestModel) {
2529
+ const command = bestModel.installCommand ||
2530
+ bestModel.provenance?.install_command ||
2531
+ `ollama pull ${bestModel.model_identifier}`;
2526
2532
  summary.by_category[category] = {
2527
2533
  name: bestModel.model_name || bestModel.name,
2528
2534
  identifier: bestModel.model_identifier,
2529
2535
  score: Math.round(bestModel.categoryScore || bestModel.score),
2530
- command: `ollama pull ${bestModel.model_identifier}`,
2536
+ command,
2531
2537
  size: this.formatModelSize(bestModel),
2532
2538
  quantization: bestModel.quantization || bestModel.quant || 'Q4_K_M',
2539
+ runtime: bestModel.runtime || bestModel.provenance?.runtime || 'ollama',
2533
2540
  pulls: bestModel.pulls || 0,
2534
2541
  source: bestModel.source || bestModel.provenance?.source || 'unknown',
2535
2542
  registry: bestModel.registry || bestModel.provenance?.registry || 'unknown',
2536
2543
  version: bestModel.version || bestModel.provenance?.version || 'unknown',
2537
2544
  license: bestModel.license || bestModel.provenance?.license || 'unknown',
2538
2545
  digest: bestModel.digest || bestModel.provenance?.digest || 'unknown',
2546
+ download_url: bestModel.downloadUrl || bestModel.provenance?.download_url || '',
2539
2547
  provenance: bestModel.provenance || {
2540
2548
  source: bestModel.source || 'unknown',
2541
2549
  registry: bestModel.registry || 'unknown',
@@ -2545,7 +2553,7 @@ class DeterministicModelSelector {
2545
2553
  }
2546
2554
  };
2547
2555
 
2548
- summary.quick_commands.push(`ollama pull ${bestModel.model_identifier}`);
2556
+ summary.quick_commands.push(command);
2549
2557
 
2550
2558
  const isGeneralCategory = ['general', 'coding', 'talking', 'reading'].includes(category);
2551
2559
  const score = bestModel.categoryScore || bestModel.score || 0;
@@ -2559,18 +2567,23 @@ class DeterministicModelSelector {
2559
2567
  });
2560
2568
 
2561
2569
  if (bestOverallModel) {
2570
+ const command = bestOverallModel.installCommand ||
2571
+ bestOverallModel.provenance?.install_command ||
2572
+ `ollama pull ${bestOverallModel.model_identifier}`;
2562
2573
  summary.best_overall = {
2563
2574
  name: bestOverallModel.model_name || bestOverallModel.name,
2564
2575
  identifier: bestOverallModel.model_identifier,
2565
2576
  category: bestOverallCategory,
2566
2577
  score: Math.round(bestOverallScore),
2567
- command: `ollama pull ${bestOverallModel.model_identifier}`,
2578
+ command,
2568
2579
  quantization: bestOverallModel.quantization || bestOverallModel.quant || 'Q4_K_M',
2580
+ runtime: bestOverallModel.runtime || bestOverallModel.provenance?.runtime || 'ollama',
2569
2581
  source: bestOverallModel.source || bestOverallModel.provenance?.source || 'unknown',
2570
2582
  registry: bestOverallModel.registry || bestOverallModel.provenance?.registry || 'unknown',
2571
2583
  version: bestOverallModel.version || bestOverallModel.provenance?.version || 'unknown',
2572
2584
  license: bestOverallModel.license || bestOverallModel.provenance?.license || 'unknown',
2573
2585
  digest: bestOverallModel.digest || bestOverallModel.provenance?.digest || 'unknown',
2586
+ download_url: bestOverallModel.downloadUrl || bestOverallModel.provenance?.download_url || '',
2574
2587
  provenance: bestOverallModel.provenance || {
2575
2588
  source: bestOverallModel.source || 'unknown',
2576
2589
  registry: bestOverallModel.registry || 'unknown',
@@ -24,6 +24,14 @@ const MOE_RUNTIME_PROFILES = Object.freeze({
24
24
  maxEffectiveGain: 2.65,
25
25
  notes: ['optimized scheduler', 'better expert batching', 'lower offload pressure']
26
26
  }),
27
+ transformers: Object.freeze({
28
+ runtime: 'transformers',
29
+ routingOverhead: 0.15,
30
+ communicationOverhead: 0.10,
31
+ offloadOverhead: 0.06,
32
+ maxEffectiveGain: 2.45,
33
+ notes: ['general Hugging Face path', 'broad architecture support', 'higher Python overhead than vLLM']
34
+ }),
27
35
  mlx: Object.freeze({
28
36
  runtime: 'mlx',
29
37
  routingOverhead: 0.16,
@@ -45,6 +53,9 @@ const MOE_RUNTIME_PROFILES = Object.freeze({
45
53
  const RUNTIME_ALIASES = Object.freeze({
46
54
  ollama: 'ollama',
47
55
  vllm: 'vllm',
56
+ transformers: 'transformers',
57
+ 'huggingface-transformers': 'transformers',
58
+ hf: 'transformers',
48
59
  mlx: 'mlx',
49
60
  'mlx-lm': 'mlx',
50
61
  mlx_lm: 'mlx',