llm-checker 3.5.13 → 3.5.14

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llm-checker",
3
- "version": "3.5.13",
3
+ "version": "3.5.14",
4
4
  "description": "Intelligent CLI tool with AI-powered model selection that analyzes your hardware and recommends optimal LLM models for your system",
5
5
  "bin": {
6
6
  "llm-checker": "bin/cli.js",
@@ -0,0 +1,36 @@
1
+ +--------------------------------------------------------------------------------------------------------------------------------------------------+
2
+ | |
3
+ | [ INTELLIGENT OLLAMA MODEL SELECTOR ] |
4
+ | -------------------------------------------------------------------------------------- |
5
+ | |
6
+ | █████ █████ ██████ ██████ |
7
+ | ▒▒███ ▒▒███ ▒▒██████ ██████ |
8
+ | ▒███ ▒███ ▒███▒█████▒███ |
9
+ | ▒███ ▒███ ▒███▒▒███ ▒███ |
10
+ | ▒███ ▒███ ▒███ ▒▒▒ ▒███ |
11
+ | ▒███ █ ▒███ █ ▒███ ▒███ |
12
+ | ███████████ ███████████ █████ █████ |
13
+ | ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒ |
14
+ | |
15
+ | █████████ █████ █████ ██████████ █████████ █████ ████ ██████████ ███████████ |
16
+ | ███▒▒▒▒▒███▒▒███ ▒▒███ ▒▒███▒▒▒▒▒█ ███▒▒▒▒▒███▒▒███ ███▒ ▒▒███▒▒▒▒▒█▒▒███▒▒▒▒▒███ |
17
+ | ███ ▒▒▒ ▒███ ▒███ ▒███ █ ▒ ███ ▒▒▒ ▒███ ███ ▒███ █ ▒ ▒███ ▒███ |
18
+ |▒███ ▒███████████ ▒██████ ▒███ ▒███████ ▒██████ ▒██████████ |
19
+ |▒███ ▒███▒▒▒▒▒███ ▒███▒▒█ ▒███ ▒███▒▒███ ▒███▒▒█ ▒███▒▒▒▒▒███ |
20
+ |▒▒███ ███ ▒███ ▒███ ▒███ ▒ █▒▒███ ███ ▒███ ▒▒███ ▒███ ▒ █ ▒███ ▒███ |
21
+ | ▒▒█████████ █████ █████ ██████████ ▒▒█████████ █████ ▒▒████ ██████████ █████ █████ |
22
+ | ▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒ |
23
+ | |
24
+ | AI-powered CLI for hardware-aware local LLM recommendations |
25
+ | Deterministic scoring across 200+ dynamic models (35+ curated fallback) |
26
+ | |
27
+ | [200+ DYNAMIC MODELS] [35+ FALLBACK] [4D SCORING] [MCP SERVER] |
28
+ | |
29
+ | ---------------------------------------------------------------------------------------------- |
30
+ | |
31
+ | Install: npm install -g llm-checker |
32
+ | Run: llm-checker recommend |
33
+ | |
34
+ | github.com/Pavelevich/llm-checker | npmjs.com/package/llm-checker |
35
+ | |
36
+ +--------------------------------------------------------------------------------------------------------------------------------------------------+
@@ -3,7 +3,6 @@
3
3
  const chalk = require('chalk');
4
4
  const { execFileSync } = require('child_process');
5
5
  const fs = require('fs');
6
- const os = require('os');
7
6
  const path = require('path');
8
7
 
9
8
  // Adapted from /Users/pchmirenko/Downloads/ascii-motion-cli.tsx frame model.
@@ -37,32 +36,14 @@ const LOGO_LINES = [
37
36
  '|_____||_____||_| |_| \\____|_| |_|\\___|\\___|_|\\_\\___|_| '
38
37
  ];
39
38
 
40
- const MASCOT_MASK = [
41
- ' /\\_/\\ ',
42
- ' / o o \\ ',
43
- ' ( ^ ) ',
44
- ' \\ _ / ',
45
- ' /___\\ ',
46
- ' / \\ ',
47
- ' (_/ \\_) '
48
- ];
49
-
50
39
  const DEFAULT_LOOP = true;
51
40
  const FRAMES_PER_SECOND = 14;
52
41
  // Security: do not auto-load executable-style banner sources from user-writable folders.
53
42
  // External banner loading is opt-in via LLM_CHECKER_BANNER_SOURCE and supports JSON only.
54
43
  const DEFAULT_BANNER_SOURCE = null;
44
+ const BUNDLED_TEXT_BANNER_SOURCE = path.join(__dirname, 'banner-profesional-v2.txt');
55
45
  const DEFAULT_TEXT_BANNER_SOURCES = [
56
- path.join(os.homedir(), 'Desktop', 'llm-checker', 'banner-profesional-v2.txt'),
57
- path.join(
58
- os.homedir(),
59
- 'Library',
60
- 'Mobile Documents',
61
- 'com~apple~CloudDocs',
62
- 'Desktop',
63
- 'llm-checker',
64
- 'banner-profesional-v2.txt'
65
- )
46
+ BUNDLED_TEXT_BANNER_SOURCE
66
47
  ];
67
48
  let cachedExternalBanner = null;
68
49
  let cachedTextBanner = null;
@@ -484,41 +465,9 @@ function drawTextBanner(lines, options = {}) {
484
465
  }
485
466
  }
486
467
 
487
- function buildScanline(width, row, phase) {
488
- const stripe = (row + phase) % 2 === 0 ? '=' : '-';
489
- return stripe.repeat(width);
490
- }
491
-
492
- function applyMask(baseLine, maskLine) {
493
- if (!maskLine) return baseLine;
494
-
495
- const result = baseLine.split('');
496
- const limit = Math.min(baseLine.length, maskLine.length);
497
- for (let index = 0; index < limit; index += 1) {
498
- const symbol = maskLine[index];
499
- if (symbol !== ' ') result[index] = symbol;
500
- }
501
-
502
- return result.join('');
503
- }
504
-
505
- function buildMascotLines(phase) {
506
- const width = 34;
507
- const rows = 11;
508
- const maskOffset = 2;
509
- const lines = [];
510
-
511
- for (let row = 0; row < rows; row += 1) {
512
- const maskLine = MASCOT_MASK[row - maskOffset];
513
- lines.push(applyMask(buildScanline(width, row, phase), maskLine));
514
- }
515
-
516
- return lines;
517
- }
518
-
519
468
  function buildRows(phase) {
469
+ void phase;
520
470
  return [
521
- ...buildMascotLines(phase).map((text) => ({ kind: 'mascot', text })),
522
471
  { kind: 'blank', text: '' },
523
472
  ...LOGO_LINES.map((text) => ({ kind: 'logo', text })),
524
473
  { kind: 'blank', text: '' },
@@ -527,23 +476,14 @@ function buildRows(phase) {
527
476
  ];
528
477
  }
529
478
 
530
- function classifyMascotColor(char) {
531
- if (char === '=' || char === '-') return 'scan';
532
- if (char === 'o' || char === '^') return 'accent';
533
- if (char === '/' || char === '\\' || char === '(' || char === ')' || char === '_') {
534
- return 'outline';
535
- }
536
- return 'outline';
537
- }
538
-
539
479
  function colorKeyForChar(kind, char, visible) {
480
+ void char;
540
481
  if (!visible) return 'muted';
541
482
 
542
483
  if (kind === 'blank') return 'muted';
543
484
  if (kind === 'logo') return 'logo';
544
485
  if (kind === 'byline') return 'byline';
545
486
  if (kind === 'subtitle') return 'subtitle';
546
- if (kind === 'mascot') return classifyMascotColor(char);
547
487
  return 'logo';
548
488
  }
549
489