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 +1 -1
- package/src/ui/banner-profesional-v2.txt +36 -0
- package/src/ui/cli-theme.js +4 -64
package/package.json
CHANGED
|
@@ -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
|
+
+--------------------------------------------------------------------------------------------------------------------------------------------------+
|
package/src/ui/cli-theme.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|