llm-checker 3.1.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.
- package/LICENSE +21 -0
- package/README.md +418 -0
- package/analyzer/compatibility.js +584 -0
- package/analyzer/performance.js +505 -0
- package/bin/CLAUDE.md +12 -0
- package/bin/enhanced_cli.js +3118 -0
- package/bin/test-deterministic.js +41 -0
- package/package.json +96 -0
- package/src/CLAUDE.md +12 -0
- package/src/ai/intelligent-selector.js +615 -0
- package/src/ai/model-selector.js +312 -0
- package/src/ai/multi-objective-selector.js +820 -0
- package/src/commands/check.js +58 -0
- package/src/data/CLAUDE.md +11 -0
- package/src/data/model-database.js +637 -0
- package/src/data/sync-manager.js +279 -0
- package/src/hardware/CLAUDE.md +12 -0
- package/src/hardware/backends/CLAUDE.md +11 -0
- package/src/hardware/backends/apple-silicon.js +318 -0
- package/src/hardware/backends/cpu-detector.js +490 -0
- package/src/hardware/backends/cuda-detector.js +417 -0
- package/src/hardware/backends/intel-detector.js +436 -0
- package/src/hardware/backends/rocm-detector.js +440 -0
- package/src/hardware/detector.js +573 -0
- package/src/hardware/pc-optimizer.js +635 -0
- package/src/hardware/specs.js +286 -0
- package/src/hardware/unified-detector.js +442 -0
- package/src/index.js +2289 -0
- package/src/models/CLAUDE.md +17 -0
- package/src/models/ai-check-selector.js +806 -0
- package/src/models/catalog.json +426 -0
- package/src/models/deterministic-selector.js +1145 -0
- package/src/models/expanded_database.js +1142 -0
- package/src/models/intelligent-selector.js +532 -0
- package/src/models/requirements.js +310 -0
- package/src/models/scoring-config.js +57 -0
- package/src/models/scoring-engine.js +715 -0
- package/src/ollama/.cache/README.md +33 -0
- package/src/ollama/CLAUDE.md +24 -0
- package/src/ollama/client.js +438 -0
- package/src/ollama/enhanced-client.js +113 -0
- package/src/ollama/enhanced-scraper.js +634 -0
- package/src/ollama/manager.js +357 -0
- package/src/ollama/native-scraper.js +776 -0
- package/src/plugins/CLAUDE.md +11 -0
- package/src/plugins/examples/custom_model_plugin.js +87 -0
- package/src/plugins/index.js +295 -0
- package/src/utils/CLAUDE.md +11 -0
- package/src/utils/config.js +359 -0
- package/src/utils/formatter.js +315 -0
- package/src/utils/logger.js +272 -0
- package/src/utils/model-classifier.js +167 -0
- package/src/utils/verbose-progress.js +266 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
|
|
2
|
+
class HardwareSpecs {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.cpuBenchmarks = this.initializeCPUBenchmarks();
|
|
5
|
+
this.gpuBenchmarks = this.initializeGPUBenchmarks();
|
|
6
|
+
this.memorySpecs = this.initializeMemorySpecs();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
initializeCPUBenchmarks() {
|
|
10
|
+
return {
|
|
11
|
+
// Apple Silicon
|
|
12
|
+
'Apple M3 Max': { score: 95, cores: 16, tdp: 30 },
|
|
13
|
+
'Apple M3 Pro': { score: 90, cores: 12, tdp: 25 },
|
|
14
|
+
'Apple M3': { score: 85, cores: 8, tdp: 20 },
|
|
15
|
+
'Apple M2 Ultra': { score: 98, cores: 24, tdp: 60 },
|
|
16
|
+
'Apple M2 Max': { score: 92, cores: 12, tdp: 30 },
|
|
17
|
+
'Apple M2 Pro': { score: 88, cores: 10, tdp: 25 },
|
|
18
|
+
'Apple M2': { score: 82, cores: 8, tdp: 20 },
|
|
19
|
+
'Apple M1 Ultra': { score: 94, cores: 20, tdp: 60 },
|
|
20
|
+
'Apple M1 Max': { score: 88, cores: 10, tdp: 30 },
|
|
21
|
+
'Apple M1 Pro': { score: 84, cores: 8, tdp: 20 },
|
|
22
|
+
'Apple M1': { score: 78, cores: 8, tdp: 15 },
|
|
23
|
+
|
|
24
|
+
// Intel Desktop
|
|
25
|
+
'Intel Core i9-13900K': { score: 95, cores: 24, tdp: 125 },
|
|
26
|
+
'Intel Core i7-13700K': { score: 90, cores: 16, tdp: 125 },
|
|
27
|
+
'Intel Core i5-13600K': { score: 85, cores: 14, tdp: 125 },
|
|
28
|
+
'Intel Core i9-12900K': { score: 92, cores: 16, tdp: 125 },
|
|
29
|
+
'Intel Core i7-12700K': { score: 87, cores: 12, tdp: 125 },
|
|
30
|
+
'Intel Core i5-12600K': { score: 82, cores: 10, tdp: 125 },
|
|
31
|
+
|
|
32
|
+
// AMD Desktop
|
|
33
|
+
'AMD Ryzen 9 7950X': { score: 98, cores: 16, tdp: 170 },
|
|
34
|
+
'AMD Ryzen 9 7900X': { score: 95, cores: 12, tdp: 170 },
|
|
35
|
+
'AMD Ryzen 7 7700X': { score: 90, cores: 8, tdp: 105 },
|
|
36
|
+
'AMD Ryzen 5 7600X': { score: 85, cores: 6, tdp: 105 },
|
|
37
|
+
'AMD Ryzen 9 5950X': { score: 94, cores: 16, tdp: 105 },
|
|
38
|
+
'AMD Ryzen 9 5900X': { score: 90, cores: 12, tdp: 105 },
|
|
39
|
+
'AMD Ryzen 7 5800X': { score: 86, cores: 8, tdp: 105 },
|
|
40
|
+
'AMD Ryzen 5 5600X': { score: 80, cores: 6, tdp: 65 },
|
|
41
|
+
|
|
42
|
+
// Intel Mobile
|
|
43
|
+
'Intel Core i9-13980HX': { score: 90, cores: 24, tdp: 55 },
|
|
44
|
+
'Intel Core i7-13700H': { score: 85, cores: 14, tdp: 45 },
|
|
45
|
+
'Intel Core i5-13500H': { score: 78, cores: 12, tdp: 45 },
|
|
46
|
+
|
|
47
|
+
// AMD Mobile
|
|
48
|
+
'AMD Ryzen 9 7945HX': { score: 92, cores: 16, tdp: 55 },
|
|
49
|
+
'AMD Ryzen 7 7735HS': { score: 85, cores: 8, tdp: 35 },
|
|
50
|
+
'AMD Ryzen 5 7535HS': { score: 78, cores: 6, tdp: 35 }
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
initializeGPUBenchmarks() {
|
|
55
|
+
return {
|
|
56
|
+
// NVIDIA RTX 40 Series
|
|
57
|
+
'NVIDIA GeForce RTX 4090': { score: 100, vram: 24, tdp: 450, dedicated: true },
|
|
58
|
+
'NVIDIA GeForce RTX 4080': { score: 90, vram: 16, tdp: 320, dedicated: true },
|
|
59
|
+
'NVIDIA GeForce RTX 4070 Ti': { score: 85, vram: 12, tdp: 285, dedicated: true },
|
|
60
|
+
'NVIDIA GeForce RTX 4070': { score: 80, vram: 12, tdp: 200, dedicated: true },
|
|
61
|
+
'NVIDIA GeForce RTX 4060 Ti': { score: 75, vram: 16, tdp: 165, dedicated: true },
|
|
62
|
+
'NVIDIA GeForce RTX 4060': { score: 70, vram: 8, tdp: 115, dedicated: true },
|
|
63
|
+
|
|
64
|
+
// NVIDIA RTX 30 Series
|
|
65
|
+
'NVIDIA GeForce RTX 3090 Ti': { score: 95, vram: 24, tdp: 450, dedicated: true },
|
|
66
|
+
'NVIDIA GeForce RTX 3090': { score: 92, vram: 24, tdp: 350, dedicated: true },
|
|
67
|
+
'NVIDIA GeForce RTX 3080 Ti': { score: 88, vram: 12, tdp: 350, dedicated: true },
|
|
68
|
+
'NVIDIA GeForce RTX 3080': { score: 85, vram: 10, tdp: 320, dedicated: true },
|
|
69
|
+
'NVIDIA GeForce RTX 3070 Ti': { score: 80, vram: 8, tdp: 290, dedicated: true },
|
|
70
|
+
'NVIDIA GeForce RTX 3070': { score: 78, vram: 8, tdp: 220, dedicated: true },
|
|
71
|
+
'NVIDIA GeForce RTX 3060 Ti': { score: 75, vram: 8, tdp: 200, dedicated: true },
|
|
72
|
+
'NVIDIA GeForce RTX 3060': { score: 70, vram: 12, tdp: 170, dedicated: true },
|
|
73
|
+
|
|
74
|
+
// AMD RX 7000 Series
|
|
75
|
+
'AMD Radeon RX 7900 XTX': { score: 92, vram: 24, tdp: 355, dedicated: true },
|
|
76
|
+
'AMD Radeon RX 7900 XT': { score: 88, vram: 20, tdp: 300, dedicated: true },
|
|
77
|
+
'AMD Radeon RX 7800 XT': { score: 82, vram: 16, tdp: 263, dedicated: true },
|
|
78
|
+
'AMD Radeon RX 7700 XT': { score: 78, vram: 12, tdp: 245, dedicated: true },
|
|
79
|
+
'AMD Radeon RX 7600': { score: 70, vram: 8, tdp: 165, dedicated: true },
|
|
80
|
+
|
|
81
|
+
// Apple GPU (integrated)
|
|
82
|
+
'Apple M3 Max GPU': { score: 85, vram: 0, tdp: 30, dedicated: false, unified: true },
|
|
83
|
+
'Apple M3 Pro GPU': { score: 75, vram: 0, tdp: 25, dedicated: false, unified: true },
|
|
84
|
+
'Apple M3 GPU': { score: 65, vram: 0, tdp: 20, dedicated: false, unified: true },
|
|
85
|
+
'Apple M2 Ultra GPU': { score: 90, vram: 0, tdp: 60, dedicated: false, unified: true },
|
|
86
|
+
'Apple M2 Max GPU': { score: 80, vram: 0, tdp: 30, dedicated: false, unified: true },
|
|
87
|
+
'Apple M2 Pro GPU': { score: 70, vram: 0, tdp: 25, dedicated: false, unified: true },
|
|
88
|
+
'Apple M2 GPU': { score: 60, vram: 0, tdp: 20, dedicated: false, unified: true },
|
|
89
|
+
|
|
90
|
+
// Intel Integrated
|
|
91
|
+
'Intel Iris Xe Graphics': { score: 35, vram: 0, tdp: 15, dedicated: false },
|
|
92
|
+
'Intel UHD Graphics 770': { score: 25, vram: 0, tdp: 15, dedicated: false },
|
|
93
|
+
'Intel UHD Graphics 630': { score: 20, vram: 0, tdp: 15, dedicated: false },
|
|
94
|
+
|
|
95
|
+
// AMD Integrated
|
|
96
|
+
'AMD Radeon 780M': { score: 45, vram: 0, tdp: 15, dedicated: false },
|
|
97
|
+
'AMD Radeon 680M': { score: 40, vram: 0, tdp: 15, dedicated: false },
|
|
98
|
+
'AMD Radeon Graphics': { score: 30, vram: 0, tdp: 15, dedicated: false }
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
initializeMemorySpecs() {
|
|
103
|
+
return {
|
|
104
|
+
ddr5: {
|
|
105
|
+
speeds: [4800, 5600, 6400, 7200, 8000],
|
|
106
|
+
efficiency: 1.2,
|
|
107
|
+
powerConsumption: 1.1
|
|
108
|
+
},
|
|
109
|
+
ddr4: {
|
|
110
|
+
speeds: [2133, 2400, 2666, 3200, 3600],
|
|
111
|
+
efficiency: 1.0,
|
|
112
|
+
powerConsumption: 1.0
|
|
113
|
+
},
|
|
114
|
+
lpddr5: {
|
|
115
|
+
speeds: [6400, 7500, 8533],
|
|
116
|
+
efficiency: 1.3,
|
|
117
|
+
powerConsumption: 0.8
|
|
118
|
+
},
|
|
119
|
+
lpddr4: {
|
|
120
|
+
speeds: [3200, 4266],
|
|
121
|
+
efficiency: 1.1,
|
|
122
|
+
powerConsumption: 0.9
|
|
123
|
+
},
|
|
124
|
+
unified: { // Apple Silicon
|
|
125
|
+
speeds: [6400, 7500, 8000],
|
|
126
|
+
efficiency: 1.5,
|
|
127
|
+
powerConsumption: 0.7
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
getCPUScore(cpuModel) {
|
|
133
|
+
|
|
134
|
+
if (this.cpuBenchmarks[cpuModel]) {
|
|
135
|
+
return this.cpuBenchmarks[cpuModel];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
const modelLower = cpuModel.toLowerCase();
|
|
140
|
+
for (const [benchmark, specs] of Object.entries(this.cpuBenchmarks)) {
|
|
141
|
+
if (modelLower.includes(benchmark.toLowerCase()) ||
|
|
142
|
+
benchmark.toLowerCase().includes(modelLower)) {
|
|
143
|
+
return specs;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return this.estimateCPUScore(cpuModel);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
getGPUScore(gpuModel) {
|
|
151
|
+
|
|
152
|
+
if (this.gpuBenchmarks[gpuModel]) {
|
|
153
|
+
return this.gpuBenchmarks[gpuModel];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
const modelLower = gpuModel.toLowerCase();
|
|
158
|
+
for (const [benchmark, specs] of Object.entries(this.gpuBenchmarks)) {
|
|
159
|
+
if (modelLower.includes(benchmark.toLowerCase()) ||
|
|
160
|
+
benchmark.toLowerCase().includes(modelLower)) {
|
|
161
|
+
return specs;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Score estimado basado en patrones
|
|
166
|
+
return this.estimateGPUScore(gpuModel);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
estimateCPUScore(cpuModel) {
|
|
170
|
+
const modelLower = cpuModel.toLowerCase();
|
|
171
|
+
let score = 50; // Base score
|
|
172
|
+
let cores = 4; // Default cores
|
|
173
|
+
let tdp = 65; // Default TDP
|
|
174
|
+
|
|
175
|
+
// Detectar marca
|
|
176
|
+
if (modelLower.includes('apple')) {
|
|
177
|
+
score += 20;
|
|
178
|
+
tdp = 25;
|
|
179
|
+
if (modelLower.includes('m3')) score += 15;
|
|
180
|
+
else if (modelLower.includes('m2')) score += 10;
|
|
181
|
+
else if (modelLower.includes('m1')) score += 5;
|
|
182
|
+
} else if (modelLower.includes('intel')) {
|
|
183
|
+
if (modelLower.includes('i9')) { score += 25; cores = 16; }
|
|
184
|
+
else if (modelLower.includes('i7')) { score += 20; cores = 8; }
|
|
185
|
+
else if (modelLower.includes('i5')) { score += 15; cores = 6; }
|
|
186
|
+
else if (modelLower.includes('i3')) { score += 10; cores = 4; }
|
|
187
|
+
} else if (modelLower.includes('amd')) {
|
|
188
|
+
if (modelLower.includes('ryzen 9')) { score += 25; cores = 12; }
|
|
189
|
+
else if (modelLower.includes('ryzen 7')) { score += 20; cores = 8; }
|
|
190
|
+
else if (modelLower.includes('ryzen 5')) { score += 15; cores = 6; }
|
|
191
|
+
else if (modelLower.includes('ryzen 3')) { score += 10; cores = 4; }
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Detectar generación
|
|
195
|
+
if (modelLower.includes('13th') || modelLower.includes('7000')) score += 10;
|
|
196
|
+
else if (modelLower.includes('12th') || modelLower.includes('6000')) score += 5;
|
|
197
|
+
|
|
198
|
+
return { score: Math.min(score, 100), cores, tdp };
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
estimateGPUScore(gpuModel) {
|
|
202
|
+
const modelLower = gpuModel.toLowerCase();
|
|
203
|
+
let score = 30; // Base score
|
|
204
|
+
let vram = 4; // Default VRAM
|
|
205
|
+
let dedicated = !this.isIntegratedGPU(gpuModel);
|
|
206
|
+
let tdp = dedicated ? 200 : 15;
|
|
207
|
+
|
|
208
|
+
if (modelLower.includes('rtx')) {
|
|
209
|
+
dedicated = true;
|
|
210
|
+
if (modelLower.includes('4090')) { score = 100; vram = 24; }
|
|
211
|
+
else if (modelLower.includes('4080')) { score = 90; vram = 16; }
|
|
212
|
+
else if (modelLower.includes('4070')) { score = 82; vram = 12; }
|
|
213
|
+
else if (modelLower.includes('4060')) { score = 72; vram = 8; }
|
|
214
|
+
else if (modelLower.includes('30')) { score += 20; vram = 8; }
|
|
215
|
+
else if (modelLower.includes('20')) { score += 15; vram = 6; }
|
|
216
|
+
} else if (modelLower.includes('apple')) {
|
|
217
|
+
dedicated = false;
|
|
218
|
+
vram = 0; // Unified memory
|
|
219
|
+
if (modelLower.includes('ultra')) score = 90;
|
|
220
|
+
else if (modelLower.includes('max')) score = 80;
|
|
221
|
+
else if (modelLower.includes('pro')) score = 70;
|
|
222
|
+
else score = 60;
|
|
223
|
+
} else if (modelLower.includes('radeon rx')) {
|
|
224
|
+
dedicated = true;
|
|
225
|
+
if (modelLower.includes('7900')) { score = 90; vram = 20; }
|
|
226
|
+
else if (modelLower.includes('7800')) { score = 82; vram = 16; }
|
|
227
|
+
else if (modelLower.includes('7700')) { score = 78; vram = 12; }
|
|
228
|
+
else if (modelLower.includes('6000')) { score += 15; vram = 8; }
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return {
|
|
232
|
+
score: Math.min(score, 100),
|
|
233
|
+
vram,
|
|
234
|
+
tdp,
|
|
235
|
+
dedicated,
|
|
236
|
+
unified: modelLower.includes('apple')
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
isIntegratedGPU(gpuModel) {
|
|
241
|
+
const modelLower = gpuModel.toLowerCase();
|
|
242
|
+
const integratedKeywords = [
|
|
243
|
+
'intel', 'iris', 'uhd', 'hd graphics',
|
|
244
|
+
'amd radeon graphics', 'radeon 680m', 'radeon 780m',
|
|
245
|
+
'apple', 'qualcomm', 'adreno'
|
|
246
|
+
];
|
|
247
|
+
|
|
248
|
+
return integratedKeywords.some(keyword => modelLower.includes(keyword)) &&
|
|
249
|
+
!modelLower.includes('rx ') && // Exclude dedicated AMD RX cards
|
|
250
|
+
!modelLower.includes('rtx') && // Exclude NVIDIA RTX
|
|
251
|
+
!modelLower.includes('gtx'); // Exclude NVIDIA GTX
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
getMemoryEfficiency(memoryType) {
|
|
255
|
+
const type = memoryType.toLowerCase();
|
|
256
|
+
|
|
257
|
+
if (type.includes('lpddr5') || type.includes('unified')) {
|
|
258
|
+
return this.memorySpecs.lpddr5 || this.memorySpecs.unified;
|
|
259
|
+
} else if (type.includes('lpddr4')) {
|
|
260
|
+
return this.memorySpecs.lpddr4;
|
|
261
|
+
} else if (type.includes('ddr5')) {
|
|
262
|
+
return this.memorySpecs.ddr5;
|
|
263
|
+
} else {
|
|
264
|
+
return this.memorySpecs.ddr4;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
calculateSystemEfficiency(cpu, gpu, memory) {
|
|
269
|
+
const cpuSpecs = this.getCPUScore(cpu.brand);
|
|
270
|
+
const gpuSpecs = this.getGPUScore(gpu.model);
|
|
271
|
+
const memSpecs = this.getMemoryEfficiency('ddr4'); // Default
|
|
272
|
+
|
|
273
|
+
const efficiency = {
|
|
274
|
+
cpu: cpuSpecs.score / cpuSpecs.tdp,
|
|
275
|
+
gpu: gpuSpecs.score / gpuSpecs.tdp,
|
|
276
|
+
memory: memSpecs.efficiency,
|
|
277
|
+
overall: 0
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
efficiency.overall = (efficiency.cpu + efficiency.gpu + efficiency.memory) / 3;
|
|
281
|
+
|
|
282
|
+
return efficiency;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
module.exports = HardwareSpecs;
|