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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +418 -0
  3. package/analyzer/compatibility.js +584 -0
  4. package/analyzer/performance.js +505 -0
  5. package/bin/CLAUDE.md +12 -0
  6. package/bin/enhanced_cli.js +3118 -0
  7. package/bin/test-deterministic.js +41 -0
  8. package/package.json +96 -0
  9. package/src/CLAUDE.md +12 -0
  10. package/src/ai/intelligent-selector.js +615 -0
  11. package/src/ai/model-selector.js +312 -0
  12. package/src/ai/multi-objective-selector.js +820 -0
  13. package/src/commands/check.js +58 -0
  14. package/src/data/CLAUDE.md +11 -0
  15. package/src/data/model-database.js +637 -0
  16. package/src/data/sync-manager.js +279 -0
  17. package/src/hardware/CLAUDE.md +12 -0
  18. package/src/hardware/backends/CLAUDE.md +11 -0
  19. package/src/hardware/backends/apple-silicon.js +318 -0
  20. package/src/hardware/backends/cpu-detector.js +490 -0
  21. package/src/hardware/backends/cuda-detector.js +417 -0
  22. package/src/hardware/backends/intel-detector.js +436 -0
  23. package/src/hardware/backends/rocm-detector.js +440 -0
  24. package/src/hardware/detector.js +573 -0
  25. package/src/hardware/pc-optimizer.js +635 -0
  26. package/src/hardware/specs.js +286 -0
  27. package/src/hardware/unified-detector.js +442 -0
  28. package/src/index.js +2289 -0
  29. package/src/models/CLAUDE.md +17 -0
  30. package/src/models/ai-check-selector.js +806 -0
  31. package/src/models/catalog.json +426 -0
  32. package/src/models/deterministic-selector.js +1145 -0
  33. package/src/models/expanded_database.js +1142 -0
  34. package/src/models/intelligent-selector.js +532 -0
  35. package/src/models/requirements.js +310 -0
  36. package/src/models/scoring-config.js +57 -0
  37. package/src/models/scoring-engine.js +715 -0
  38. package/src/ollama/.cache/README.md +33 -0
  39. package/src/ollama/CLAUDE.md +24 -0
  40. package/src/ollama/client.js +438 -0
  41. package/src/ollama/enhanced-client.js +113 -0
  42. package/src/ollama/enhanced-scraper.js +634 -0
  43. package/src/ollama/manager.js +357 -0
  44. package/src/ollama/native-scraper.js +776 -0
  45. package/src/plugins/CLAUDE.md +11 -0
  46. package/src/plugins/examples/custom_model_plugin.js +87 -0
  47. package/src/plugins/index.js +295 -0
  48. package/src/utils/CLAUDE.md +11 -0
  49. package/src/utils/config.js +359 -0
  50. package/src/utils/formatter.js +315 -0
  51. package/src/utils/logger.js +272 -0
  52. package/src/utils/model-classifier.js +167 -0
  53. 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;