@huggingface/tasks 0.20.22 → 0.20.24
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/dist/commonjs/eval.d.ts +5 -0
- package/dist/commonjs/eval.d.ts.map +1 -1
- package/dist/commonjs/eval.js +5 -0
- package/dist/commonjs/hardware-amd.d.ts.map +1 -1
- package/dist/commonjs/hardware-amd.js +15 -0
- package/dist/commonjs/hardware-nvidia.d.ts.map +1 -1
- package/dist/commonjs/hardware-nvidia.js +30 -0
- package/dist/commonjs/hardware.d.ts +3 -0
- package/dist/commonjs/hardware.d.ts.map +1 -1
- package/dist/commonjs/hardware.js +3 -0
- package/dist/commonjs/local-apps.d.ts +9 -1
- package/dist/commonjs/local-apps.d.ts.map +1 -1
- package/dist/commonjs/local-apps.js +47 -11
- package/dist/commonjs/local-apps.spec.js +36 -2
- package/dist/esm/eval.d.ts +5 -0
- package/dist/esm/eval.d.ts.map +1 -1
- package/dist/esm/eval.js +5 -0
- package/dist/esm/hardware-amd.d.ts.map +1 -1
- package/dist/esm/hardware-amd.js +15 -0
- package/dist/esm/hardware-nvidia.d.ts.map +1 -1
- package/dist/esm/hardware-nvidia.js +30 -0
- package/dist/esm/hardware.d.ts +3 -0
- package/dist/esm/hardware.d.ts.map +1 -1
- package/dist/esm/hardware.js +3 -0
- package/dist/esm/local-apps.d.ts +9 -1
- package/dist/esm/local-apps.d.ts.map +1 -1
- package/dist/esm/local-apps.js +47 -11
- package/dist/esm/local-apps.spec.js +36 -2
- package/package.json +1 -1
- package/src/eval.ts +6 -0
- package/src/hardware-amd.ts +15 -0
- package/src/hardware-nvidia.ts +30 -0
- package/src/hardware.ts +3 -0
- package/src/local-apps.spec.ts +42 -2
- package/src/local-apps.ts +53 -13
package/dist/commonjs/eval.d.ts
CHANGED
|
@@ -87,5 +87,10 @@ export declare const EVALUATION_FRAMEWORKS: {
|
|
|
87
87
|
readonly description: "Video-MME-v2 is a benchmark for evaluating the next stage of video understanding capabilities of multimodal large language models.";
|
|
88
88
|
readonly url: "https://github.com/MME-Benchmarks/Video-MME-v2";
|
|
89
89
|
};
|
|
90
|
+
readonly "claw-eval": {
|
|
91
|
+
readonly name: "claw-eval";
|
|
92
|
+
readonly description: "CLAW-Eval is an evaluation framework for assessing LLMs as autonomous agents across 300 human-verified tasks covering communication, finance, and productivity domains.";
|
|
93
|
+
readonly url: "https://github.com/claw-eval/claw-eval";
|
|
94
|
+
};
|
|
90
95
|
};
|
|
91
96
|
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGxB,CAAC"}
|
package/dist/commonjs/eval.js
CHANGED
|
@@ -90,4 +90,9 @@ exports.EVALUATION_FRAMEWORKS = {
|
|
|
90
90
|
description: "Video-MME-v2 is a benchmark for evaluating the next stage of video understanding capabilities of multimodal large language models.",
|
|
91
91
|
url: "https://github.com/MME-Benchmarks/Video-MME-v2",
|
|
92
92
|
},
|
|
93
|
+
"claw-eval": {
|
|
94
|
+
name: "claw-eval",
|
|
95
|
+
description: "CLAW-Eval is an evaluation framework for assessing LLMs as autonomous agents across 300 human-verified tasks covering communication, finance, and productivity domains.",
|
|
96
|
+
url: "https://github.com/claw-eval/claw-eval",
|
|
97
|
+
},
|
|
93
98
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware-amd.d.ts","sourceRoot":"","sources":["../../src/hardware-amd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hardware-amd.d.ts","sourceRoot":"","sources":["../../src/hardware-amd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAkJ3D,CAAC"}
|
|
@@ -52,6 +52,16 @@ exports.AMD_GPU_SKUS = {
|
|
|
52
52
|
memory: [8, 16],
|
|
53
53
|
gfxVersion: "gfx1200",
|
|
54
54
|
},
|
|
55
|
+
"PRO W7900": {
|
|
56
|
+
tflops: 122.6,
|
|
57
|
+
memory: [48],
|
|
58
|
+
gfxVersion: "gfx1100",
|
|
59
|
+
},
|
|
60
|
+
"PRO W7800": {
|
|
61
|
+
tflops: 90.5,
|
|
62
|
+
memory: [32, 48],
|
|
63
|
+
gfxVersion: "gfx1100",
|
|
64
|
+
},
|
|
55
65
|
"RX 7900 XTX": {
|
|
56
66
|
tflops: 122.8,
|
|
57
67
|
memory: [24],
|
|
@@ -122,6 +132,11 @@ exports.AMD_GPU_SKUS = {
|
|
|
122
132
|
memory: [4, 8],
|
|
123
133
|
gfxVersion: "gfx1012",
|
|
124
134
|
},
|
|
135
|
+
"Radeon Pro V620": {
|
|
136
|
+
tflops: 40.55,
|
|
137
|
+
memory: [32],
|
|
138
|
+
gfxVersion: "gfx1030",
|
|
139
|
+
},
|
|
125
140
|
"Radeon Pro VII": {
|
|
126
141
|
tflops: 26.11,
|
|
127
142
|
memory: [16, 32],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware-nvidia.d.ts","sourceRoot":"","sources":["../../src/hardware-nvidia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,yBAAyB;IACpC,eAAe,OAAO;IACtB,aAAa,KAAO;IACpB,SAAS,KAAO;IAChB,MAAM,IAAM;IACZ,YAAY,MAAM;IAClB,IAAI,MAAM;IACV,UAAU,MAAM;IAChB,MAAM,IAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,KAAK,IAAM;IACX,YAAY,MAAM;IAClB,MAAM,MAAM;IACZ,iBAAiB,IAAM;IACvB,OAAO,MAAM;CACb;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hardware-nvidia.d.ts","sourceRoot":"","sources":["../../src/hardware-nvidia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,yBAAyB;IACpC,eAAe,OAAO;IACtB,aAAa,KAAO;IACpB,SAAS,KAAO;IAChB,MAAM,IAAM;IACZ,YAAY,MAAM;IAClB,IAAI,MAAM;IACV,UAAU,MAAM;IAChB,MAAM,IAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,KAAK,IAAM;IACX,YAAY,MAAM;IAClB,MAAM,MAAM;IACZ,iBAAiB,IAAM;IACvB,OAAO,MAAM;CACb;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAsjB1D,CAAC"}
|
|
@@ -70,6 +70,31 @@ exports.NVIDIA_SKUS = {
|
|
|
70
70
|
memory: [96],
|
|
71
71
|
computeCapability: 12.0,
|
|
72
72
|
},
|
|
73
|
+
"RTX PRO 5000": {
|
|
74
|
+
tflops: 66.94,
|
|
75
|
+
memory: [48, 72],
|
|
76
|
+
computeCapability: 12.0,
|
|
77
|
+
},
|
|
78
|
+
"RTX PRO 4500 WS": {
|
|
79
|
+
tflops: 50.53,
|
|
80
|
+
memory: [32],
|
|
81
|
+
computeCapability: 12.0,
|
|
82
|
+
},
|
|
83
|
+
"RTX PRO 4000": {
|
|
84
|
+
tflops: 36.83,
|
|
85
|
+
memory: [24],
|
|
86
|
+
computeCapability: 12.0,
|
|
87
|
+
},
|
|
88
|
+
"RTX PRO 4000 SFF": {
|
|
89
|
+
tflops: 24.05,
|
|
90
|
+
memory: [24],
|
|
91
|
+
computeCapability: 12.0,
|
|
92
|
+
},
|
|
93
|
+
"RTX PRO 2000": {
|
|
94
|
+
tflops: 17.03,
|
|
95
|
+
memory: [16],
|
|
96
|
+
computeCapability: 12.0,
|
|
97
|
+
},
|
|
73
98
|
"RTX 6000 Ada": {
|
|
74
99
|
tflops: 91.1,
|
|
75
100
|
memory: [48],
|
|
@@ -440,6 +465,11 @@ exports.NVIDIA_SKUS = {
|
|
|
440
465
|
memory: [6],
|
|
441
466
|
computeCapability: 7.5,
|
|
442
467
|
},
|
|
468
|
+
"RTX 2050 Mobile": {
|
|
469
|
+
tflops: 10.2,
|
|
470
|
+
memory: [4],
|
|
471
|
+
computeCapability: 8.6, // Ampere (outlier GPU in the 20xx series)
|
|
472
|
+
},
|
|
443
473
|
"GTX 1080 Ti": {
|
|
444
474
|
tflops: 11.34, // float32 (GPU does not support native float16)
|
|
445
475
|
memory: [11],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/hardware.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,iDAAiD,QAAW,CAAC;AAC1E,eAAO,MAAM,yDAAyD,QAAW,CAAC;AAClF,eAAO,MAAM,oCAAoC,QAAU,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,+CAA+C,QAAW,CAAC;AAExE,MAAM,WAAW,YAAY;IAC5B;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB,UAElC,CAAC;AAEF,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/hardware.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,iDAAiD,QAAW,CAAC;AAC1E,eAAO,MAAM,yDAAyD,QAAW,CAAC;AAClF,eAAO,MAAM,oCAAoC,QAAU,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,+CAA+C,QAAW,CAAC;AAExE,MAAM,WAAW,YAAY;IAC5B;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB,UAElC,CAAC;AAEF,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqSuD,CAAC;AAEzE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAC"}
|
|
@@ -67,6 +67,7 @@ declare function isLlamaCppGgufModel(model: ModelData): boolean;
|
|
|
67
67
|
declare function isVllmModel(model: ModelData): boolean;
|
|
68
68
|
declare function isDockerModelRunnerModel(model: ModelData): boolean;
|
|
69
69
|
declare function isUnslothModel(model: ModelData): boolean;
|
|
70
|
+
declare function isToolCallingLocalAgentModel(model: ModelData): boolean;
|
|
70
71
|
/**
|
|
71
72
|
* Add your new local app here.
|
|
72
73
|
*
|
|
@@ -241,7 +242,14 @@ export declare const LOCAL_APPS: {
|
|
|
241
242
|
prettyLabel: string;
|
|
242
243
|
docsUrl: string;
|
|
243
244
|
mainTask: "text-generation";
|
|
244
|
-
displayOnModelPage:
|
|
245
|
+
displayOnModelPage: typeof isToolCallingLocalAgentModel;
|
|
246
|
+
snippet: (model: ModelData, filepath?: string) => LocalAppSnippet[];
|
|
247
|
+
};
|
|
248
|
+
"hermes-agent": {
|
|
249
|
+
prettyLabel: string;
|
|
250
|
+
docsUrl: string;
|
|
251
|
+
mainTask: "text-generation";
|
|
252
|
+
displayOnModelPage: typeof isToolCallingLocalAgentModel;
|
|
245
253
|
snippet: (model: ModelData, filepath?: string) => LocalAppSnippet[];
|
|
246
254
|
};
|
|
247
255
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-apps.d.ts","sourceRoot":"","sources":["../../src/local-apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACpG;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,GAAG,CACD;IACA;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;CACtD,GACD;IACA;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;CACzG,CACH,CAAC;AAsBF,iBAAS,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE7C;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAE5C;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAU9C;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE3D;AA0BD,iBAAS,cAAc,CAAC,KAAK,EAAE,SAAS,WAEvC;
|
|
1
|
+
{"version":3,"file":"local-apps.d.ts","sourceRoot":"","sources":["../../src/local-apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACpG;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,GAAG,CACD;IACA;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;CACtD,GACD;IACA;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;CACzG,CACH,CAAC;AAsBF,iBAAS,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE7C;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAE5C;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAU9C;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE3D;AA0BD,iBAAS,cAAc,CAAC,KAAK,EAAE,SAAS,WAEvC;AAED,iBAAS,4BAA4B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAM/D;AA6bD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;;yBA3bS,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAiDzC,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBA2F3D,SAAS,KAAG,eAAe,EAAE;;;;;;oCAyU3B,SAAS;yBAnRT,SAAS,KAAG,eAAe,EAAE;;;;;;;yBAoF9B,SAAS,KAAG,eAAe,EAAE;;;;;;;yBA7B/B,SAAS,KAAG,eAAe,EAAE;;;;;;;;;;;;;;yBApIzB,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAtDjD,SAAS,aAAa,MAAM,KAAG,MAAM;;;;;;;yBAIpC,SAAS,KAAG,eAAe,EAAE;;;;;;;yBAiUnB,SAAS,aAAa,MAAM,KAAG,MAAM;;;;;;;yBAM9C,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAnEtD,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAkCvC,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;CA0R/C,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -60,6 +60,11 @@ function getChatTemplate(model) {
|
|
|
60
60
|
function isUnslothModel(model) {
|
|
61
61
|
return model.tags.includes("unsloth") || isLlamaCppGgufModel(model);
|
|
62
62
|
}
|
|
63
|
+
function isToolCallingLocalAgentModel(model) {
|
|
64
|
+
return ((isLlamaCppGgufModel(model) || isMlxModel(model)) &&
|
|
65
|
+
model.tags.includes("conversational") &&
|
|
66
|
+
!!getChatTemplate(model)?.includes("tools"));
|
|
67
|
+
}
|
|
63
68
|
function getQuantTag(filepath) {
|
|
64
69
|
const defaultTag = ":{{QUANT_TAG}}";
|
|
65
70
|
if (!filepath) {
|
|
@@ -357,11 +362,8 @@ const snippetMlxLm = (model) => {
|
|
|
357
362
|
: []),
|
|
358
363
|
];
|
|
359
364
|
};
|
|
360
|
-
const
|
|
361
|
-
|
|
362
|
-
const isMLX = isMlxModel(model);
|
|
363
|
-
// Step 1: Server — differs by backend
|
|
364
|
-
const serverStep = isMLX
|
|
365
|
+
const getLocalServerStep = (model, filepath) => {
|
|
366
|
+
return isMlxModel(model)
|
|
365
367
|
? {
|
|
366
368
|
title: "Start the MLX server",
|
|
367
369
|
setup: "# Install MLX LM:\nuv tool install mlx-lm",
|
|
@@ -370,16 +372,20 @@ const snippetPi = (model, filepath) => {
|
|
|
370
372
|
: {
|
|
371
373
|
title: "Start the llama.cpp server",
|
|
372
374
|
setup: "# Install llama.cpp:\nbrew install llama.cpp",
|
|
373
|
-
content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}
|
|
375
|
+
content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}`,
|
|
374
376
|
};
|
|
375
|
-
|
|
377
|
+
};
|
|
378
|
+
const snippetPi = (model, filepath) => {
|
|
379
|
+
const isMLX = isMlxModel(model);
|
|
380
|
+
const modelId = isMLX ? model.id : `${model.id}${getQuantTag(filepath)}`;
|
|
381
|
+
const serverStep = getLocalServerStep(model, filepath);
|
|
376
382
|
const modelsJson = JSON.stringify({
|
|
377
383
|
providers: {
|
|
378
384
|
[isMLX ? "mlx-lm" : "llama-cpp"]: {
|
|
379
385
|
baseUrl: "http://localhost:8080/v1",
|
|
380
386
|
api: "openai-completions",
|
|
381
387
|
apiKey: "none",
|
|
382
|
-
models: [{ id:
|
|
388
|
+
models: [{ id: modelId }],
|
|
383
389
|
},
|
|
384
390
|
},
|
|
385
391
|
}, null, 2);
|
|
@@ -396,6 +402,31 @@ const snippetPi = (model, filepath) => {
|
|
|
396
402
|
},
|
|
397
403
|
];
|
|
398
404
|
};
|
|
405
|
+
const snippetHermesAgent = (model, filepath) => {
|
|
406
|
+
const modelId = isMlxModel(model) ? model.id : `${model.id}${getQuantTag(filepath)}`;
|
|
407
|
+
const serverStep = getLocalServerStep(model, filepath);
|
|
408
|
+
return [
|
|
409
|
+
serverStep,
|
|
410
|
+
{
|
|
411
|
+
title: "Configure Hermes",
|
|
412
|
+
setup: [
|
|
413
|
+
"# Install Hermes:",
|
|
414
|
+
"curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash",
|
|
415
|
+
"hermes setup",
|
|
416
|
+
].join("\n"),
|
|
417
|
+
content: [
|
|
418
|
+
"# Point Hermes at the local server:",
|
|
419
|
+
"hermes config set model.provider custom",
|
|
420
|
+
"hermes config set model.base_url http://127.0.0.1:8080/v1",
|
|
421
|
+
`hermes config set model.default ${modelId}`,
|
|
422
|
+
].join("\n"),
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
title: "Run Hermes",
|
|
426
|
+
content: "hermes",
|
|
427
|
+
},
|
|
428
|
+
];
|
|
429
|
+
};
|
|
399
430
|
const snippetDockerModelRunner = (model, filepath) => {
|
|
400
431
|
// Only add quant tag for GGUF models, not safetensors
|
|
401
432
|
const quantTag = isLlamaCppGgufModel(model) ? getQuantTag(filepath) : "";
|
|
@@ -636,9 +667,14 @@ exports.LOCAL_APPS = {
|
|
|
636
667
|
prettyLabel: "Pi",
|
|
637
668
|
docsUrl: "https://github.com/badlogic/pi-mono",
|
|
638
669
|
mainTask: "text-generation",
|
|
639
|
-
displayOnModelPage:
|
|
640
|
-
model.tags.includes("conversational") &&
|
|
641
|
-
!!getChatTemplate(model)?.includes("tools"),
|
|
670
|
+
displayOnModelPage: isToolCallingLocalAgentModel,
|
|
642
671
|
snippet: snippetPi,
|
|
643
672
|
},
|
|
673
|
+
"hermes-agent": {
|
|
674
|
+
prettyLabel: "Hermes Agent",
|
|
675
|
+
docsUrl: "https://hermes-agent.nousresearch.com/",
|
|
676
|
+
mainTask: "text-generation",
|
|
677
|
+
displayOnModelPage: isToolCallingLocalAgentModel,
|
|
678
|
+
snippet: snippetHermesAgent,
|
|
679
|
+
},
|
|
644
680
|
};
|
|
@@ -121,9 +121,9 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
121
121
|
inference: "",
|
|
122
122
|
};
|
|
123
123
|
const snippet = snippetFunc(model);
|
|
124
|
-
(0, vitest_1.expect)(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}
|
|
124
|
+
(0, vitest_1.expect)(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}`);
|
|
125
125
|
(0, vitest_1.expect)(snippet[1].setup).toContain("npm install -g @mariozechner/pi-coding-agent");
|
|
126
|
-
(0, vitest_1.expect)(snippet[1].content).toContain(`"id": "Llama-3.2-3B-Instruct-GGUF"`);
|
|
126
|
+
(0, vitest_1.expect)(snippet[1].content).toContain(`"id": "bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}"`);
|
|
127
127
|
(0, vitest_1.expect)(snippet[2].content).toContain("pi");
|
|
128
128
|
});
|
|
129
129
|
(0, vitest_1.it)("pi - mlx", async () => {
|
|
@@ -147,6 +147,40 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
147
147
|
(0, vitest_1.expect)(snippet[1].content).toContain('"id": "mlx-community/Llama-3.2-3B-Instruct-mlx"');
|
|
148
148
|
(0, vitest_1.expect)(snippet[2].content).toContain("pi");
|
|
149
149
|
});
|
|
150
|
+
(0, vitest_1.it)("hermes-agent", async () => {
|
|
151
|
+
const { snippet: snippetFunc } = local_apps_js_1.LOCAL_APPS["hermes-agent"];
|
|
152
|
+
const model = {
|
|
153
|
+
id: "bartowski/Llama-3.2-3B-Instruct-GGUF",
|
|
154
|
+
tags: ["conversational"],
|
|
155
|
+
gguf: { total: 1, context_length: 4096, chat_template: "{% if tools %}" },
|
|
156
|
+
inference: "",
|
|
157
|
+
};
|
|
158
|
+
const snippet = snippetFunc(model);
|
|
159
|
+
(0, vitest_1.expect)(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}`);
|
|
160
|
+
(0, vitest_1.expect)(snippet[1].content).toContain("hermes config set model.provider custom");
|
|
161
|
+
(0, vitest_1.expect)(snippet[1].content).toContain("hermes config set model.base_url http://127.0.0.1:8080/v1");
|
|
162
|
+
(0, vitest_1.expect)(snippet[1].content).toContain("hermes config set model.default bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}");
|
|
163
|
+
(0, vitest_1.expect)(snippet[2].content).toContain("hermes");
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.it)("hermes-agent - mlx", async () => {
|
|
166
|
+
const { snippet: snippetFunc } = local_apps_js_1.LOCAL_APPS["hermes-agent"];
|
|
167
|
+
const model = {
|
|
168
|
+
id: "mlx-community/Llama-3.2-3B-Instruct-mlx",
|
|
169
|
+
tags: ["mlx", "conversational"],
|
|
170
|
+
pipeline_tag: "text-generation",
|
|
171
|
+
config: {
|
|
172
|
+
tokenizer_config: {
|
|
173
|
+
chat_template: "{% if tools %}...{% endif %}",
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
inference: "",
|
|
177
|
+
};
|
|
178
|
+
const snippet = snippetFunc(model);
|
|
179
|
+
(0, vitest_1.expect)(snippet[0].setup).toContain("uv tool install mlx-lm");
|
|
180
|
+
(0, vitest_1.expect)(snippet[1].content).toContain("hermes config set model.provider custom");
|
|
181
|
+
(0, vitest_1.expect)(snippet[1].content).toContain("hermes config set model.default mlx-community/Llama-3.2-3B-Instruct-mlx");
|
|
182
|
+
(0, vitest_1.expect)(snippet[2].content).toContain("hermes");
|
|
183
|
+
});
|
|
150
184
|
(0, vitest_1.it)("docker model runner", async () => {
|
|
151
185
|
const { snippet: snippetFunc } = local_apps_js_1.LOCAL_APPS["docker-model-runner"];
|
|
152
186
|
const model = {
|
package/dist/esm/eval.d.ts
CHANGED
|
@@ -87,5 +87,10 @@ export declare const EVALUATION_FRAMEWORKS: {
|
|
|
87
87
|
readonly description: "Video-MME-v2 is a benchmark for evaluating the next stage of video understanding capabilities of multimodal large language models.";
|
|
88
88
|
readonly url: "https://github.com/MME-Benchmarks/Video-MME-v2";
|
|
89
89
|
};
|
|
90
|
+
readonly "claw-eval": {
|
|
91
|
+
readonly name: "claw-eval";
|
|
92
|
+
readonly description: "CLAW-Eval is an evaluation framework for assessing LLMs as autonomous agents across 300 human-verified tasks covering communication, finance, and productivity domains.";
|
|
93
|
+
readonly url: "https://github.com/claw-eval/claw-eval";
|
|
94
|
+
};
|
|
90
95
|
};
|
|
91
96
|
//# sourceMappingURL=eval.d.ts.map
|
package/dist/esm/eval.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGxB,CAAC"}
|
package/dist/esm/eval.js
CHANGED
|
@@ -87,4 +87,9 @@ export const EVALUATION_FRAMEWORKS = {
|
|
|
87
87
|
description: "Video-MME-v2 is a benchmark for evaluating the next stage of video understanding capabilities of multimodal large language models.",
|
|
88
88
|
url: "https://github.com/MME-Benchmarks/Video-MME-v2",
|
|
89
89
|
},
|
|
90
|
+
"claw-eval": {
|
|
91
|
+
name: "claw-eval",
|
|
92
|
+
description: "CLAW-Eval is an evaluation framework for assessing LLMs as autonomous agents across 300 human-verified tasks covering communication, finance, and productivity domains.",
|
|
93
|
+
url: "https://github.com/claw-eval/claw-eval",
|
|
94
|
+
},
|
|
90
95
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware-amd.d.ts","sourceRoot":"","sources":["../../src/hardware-amd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hardware-amd.d.ts","sourceRoot":"","sources":["../../src/hardware-amd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAkJ3D,CAAC"}
|
package/dist/esm/hardware-amd.js
CHANGED
|
@@ -49,6 +49,16 @@ export const AMD_GPU_SKUS = {
|
|
|
49
49
|
memory: [8, 16],
|
|
50
50
|
gfxVersion: "gfx1200",
|
|
51
51
|
},
|
|
52
|
+
"PRO W7900": {
|
|
53
|
+
tflops: 122.6,
|
|
54
|
+
memory: [48],
|
|
55
|
+
gfxVersion: "gfx1100",
|
|
56
|
+
},
|
|
57
|
+
"PRO W7800": {
|
|
58
|
+
tflops: 90.5,
|
|
59
|
+
memory: [32, 48],
|
|
60
|
+
gfxVersion: "gfx1100",
|
|
61
|
+
},
|
|
52
62
|
"RX 7900 XTX": {
|
|
53
63
|
tflops: 122.8,
|
|
54
64
|
memory: [24],
|
|
@@ -119,6 +129,11 @@ export const AMD_GPU_SKUS = {
|
|
|
119
129
|
memory: [4, 8],
|
|
120
130
|
gfxVersion: "gfx1012",
|
|
121
131
|
},
|
|
132
|
+
"Radeon Pro V620": {
|
|
133
|
+
tflops: 40.55,
|
|
134
|
+
memory: [32],
|
|
135
|
+
gfxVersion: "gfx1030",
|
|
136
|
+
},
|
|
122
137
|
"Radeon Pro VII": {
|
|
123
138
|
tflops: 26.11,
|
|
124
139
|
memory: [16, 32],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware-nvidia.d.ts","sourceRoot":"","sources":["../../src/hardware-nvidia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,yBAAyB;IACpC,eAAe,OAAO;IACtB,aAAa,KAAO;IACpB,SAAS,KAAO;IAChB,MAAM,IAAM;IACZ,YAAY,MAAM;IAClB,IAAI,MAAM;IACV,UAAU,MAAM;IAChB,MAAM,IAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,KAAK,IAAM;IACX,YAAY,MAAM;IAClB,MAAM,MAAM;IACZ,iBAAiB,IAAM;IACvB,OAAO,MAAM;CACb;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hardware-nvidia.d.ts","sourceRoot":"","sources":["../../src/hardware-nvidia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACvD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,oBAAY,yBAAyB;IACpC,eAAe,OAAO;IACtB,aAAa,KAAO;IACpB,SAAS,KAAO;IAChB,MAAM,IAAM;IACZ,YAAY,MAAM;IAClB,IAAI,MAAM;IACV,UAAU,MAAM;IAChB,MAAM,IAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,KAAK,IAAM;IACX,YAAY,MAAM;IAClB,MAAM,MAAM;IACZ,iBAAiB,IAAM;IACvB,OAAO,MAAM;CACb;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAsjB1D,CAAC"}
|
|
@@ -67,6 +67,31 @@ export const NVIDIA_SKUS = {
|
|
|
67
67
|
memory: [96],
|
|
68
68
|
computeCapability: 12.0,
|
|
69
69
|
},
|
|
70
|
+
"RTX PRO 5000": {
|
|
71
|
+
tflops: 66.94,
|
|
72
|
+
memory: [48, 72],
|
|
73
|
+
computeCapability: 12.0,
|
|
74
|
+
},
|
|
75
|
+
"RTX PRO 4500 WS": {
|
|
76
|
+
tflops: 50.53,
|
|
77
|
+
memory: [32],
|
|
78
|
+
computeCapability: 12.0,
|
|
79
|
+
},
|
|
80
|
+
"RTX PRO 4000": {
|
|
81
|
+
tflops: 36.83,
|
|
82
|
+
memory: [24],
|
|
83
|
+
computeCapability: 12.0,
|
|
84
|
+
},
|
|
85
|
+
"RTX PRO 4000 SFF": {
|
|
86
|
+
tflops: 24.05,
|
|
87
|
+
memory: [24],
|
|
88
|
+
computeCapability: 12.0,
|
|
89
|
+
},
|
|
90
|
+
"RTX PRO 2000": {
|
|
91
|
+
tflops: 17.03,
|
|
92
|
+
memory: [16],
|
|
93
|
+
computeCapability: 12.0,
|
|
94
|
+
},
|
|
70
95
|
"RTX 6000 Ada": {
|
|
71
96
|
tflops: 91.1,
|
|
72
97
|
memory: [48],
|
|
@@ -437,6 +462,11 @@ export const NVIDIA_SKUS = {
|
|
|
437
462
|
memory: [6],
|
|
438
463
|
computeCapability: 7.5,
|
|
439
464
|
},
|
|
465
|
+
"RTX 2050 Mobile": {
|
|
466
|
+
tflops: 10.2,
|
|
467
|
+
memory: [4],
|
|
468
|
+
computeCapability: 8.6, // Ampere (outlier GPU in the 20xx series)
|
|
469
|
+
},
|
|
440
470
|
"GTX 1080 Ti": {
|
|
441
471
|
tflops: 11.34, // float32 (GPU does not support native float16)
|
|
442
472
|
memory: [11],
|
package/dist/esm/hardware.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/hardware.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,iDAAiD,QAAW,CAAC;AAC1E,eAAO,MAAM,yDAAyD,QAAW,CAAC;AAClF,eAAO,MAAM,oCAAoC,QAAU,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,+CAA+C,QAAW,CAAC;AAExE,MAAM,WAAW,YAAY;IAC5B;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB,UAElC,CAAC;AAEF,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/hardware.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,iDAAiD,QAAW,CAAC;AAC1E,eAAO,MAAM,yDAAyD,QAAW,CAAC;AAClF,eAAO,MAAM,oCAAoC,QAAU,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,+CAA+C,QAAW,CAAC;AAExE,MAAM,WAAW,YAAY;IAC5B;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB,UAElC,CAAC;AAEF,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqSuD,CAAC;AAEzE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAC"}
|
package/dist/esm/hardware.js
CHANGED
package/dist/esm/local-apps.d.ts
CHANGED
|
@@ -67,6 +67,7 @@ declare function isLlamaCppGgufModel(model: ModelData): boolean;
|
|
|
67
67
|
declare function isVllmModel(model: ModelData): boolean;
|
|
68
68
|
declare function isDockerModelRunnerModel(model: ModelData): boolean;
|
|
69
69
|
declare function isUnslothModel(model: ModelData): boolean;
|
|
70
|
+
declare function isToolCallingLocalAgentModel(model: ModelData): boolean;
|
|
70
71
|
/**
|
|
71
72
|
* Add your new local app here.
|
|
72
73
|
*
|
|
@@ -241,7 +242,14 @@ export declare const LOCAL_APPS: {
|
|
|
241
242
|
prettyLabel: string;
|
|
242
243
|
docsUrl: string;
|
|
243
244
|
mainTask: "text-generation";
|
|
244
|
-
displayOnModelPage:
|
|
245
|
+
displayOnModelPage: typeof isToolCallingLocalAgentModel;
|
|
246
|
+
snippet: (model: ModelData, filepath?: string) => LocalAppSnippet[];
|
|
247
|
+
};
|
|
248
|
+
"hermes-agent": {
|
|
249
|
+
prettyLabel: string;
|
|
250
|
+
docsUrl: string;
|
|
251
|
+
mainTask: "text-generation";
|
|
252
|
+
displayOnModelPage: typeof isToolCallingLocalAgentModel;
|
|
245
253
|
snippet: (model: ModelData, filepath?: string) => LocalAppSnippet[];
|
|
246
254
|
};
|
|
247
255
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-apps.d.ts","sourceRoot":"","sources":["../../src/local-apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACpG;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,GAAG,CACD;IACA;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;CACtD,GACD;IACA;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;CACzG,CACH,CAAC;AAsBF,iBAAS,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE7C;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAE5C;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAU9C;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE3D;AA0BD,iBAAS,cAAc,CAAC,KAAK,EAAE,SAAS,WAEvC;
|
|
1
|
+
{"version":3,"file":"local-apps.d.ts","sourceRoot":"","sources":["../../src/local-apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACpG;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,GAAG,CACD;IACA;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;CACtD,GACD;IACA;;;;OAIG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;CACzG,CACH,CAAC;AAsBF,iBAAS,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE7C;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAE5C;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAU9C;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE3D;AA0BD,iBAAS,cAAc,CAAC,KAAK,EAAE,SAAS,WAEvC;AAED,iBAAS,4BAA4B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAM/D;AA6bD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;;yBA3bS,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAiDzC,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBA2F3D,SAAS,KAAG,eAAe,EAAE;;;;;;oCAyU3B,SAAS;yBAnRT,SAAS,KAAG,eAAe,EAAE;;;;;;;yBAoF9B,SAAS,KAAG,eAAe,EAAE;;;;;;;yBA7B/B,SAAS,KAAG,eAAe,EAAE;;;;;;;;;;;;;;yBApIzB,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAtDjD,SAAS,aAAa,MAAM,KAAG,MAAM;;;;;;;yBAIpC,SAAS,KAAG,eAAe,EAAE;;;;;;;yBAiUnB,SAAS,aAAa,MAAM,KAAG,MAAM;;;;;;;yBAM9C,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAnEtD,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAkCvC,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;CA0R/C,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/esm/local-apps.js
CHANGED
|
@@ -57,6 +57,11 @@ function getChatTemplate(model) {
|
|
|
57
57
|
function isUnslothModel(model) {
|
|
58
58
|
return model.tags.includes("unsloth") || isLlamaCppGgufModel(model);
|
|
59
59
|
}
|
|
60
|
+
function isToolCallingLocalAgentModel(model) {
|
|
61
|
+
return ((isLlamaCppGgufModel(model) || isMlxModel(model)) &&
|
|
62
|
+
model.tags.includes("conversational") &&
|
|
63
|
+
!!getChatTemplate(model)?.includes("tools"));
|
|
64
|
+
}
|
|
60
65
|
function getQuantTag(filepath) {
|
|
61
66
|
const defaultTag = ":{{QUANT_TAG}}";
|
|
62
67
|
if (!filepath) {
|
|
@@ -354,11 +359,8 @@ const snippetMlxLm = (model) => {
|
|
|
354
359
|
: []),
|
|
355
360
|
];
|
|
356
361
|
};
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
const isMLX = isMlxModel(model);
|
|
360
|
-
// Step 1: Server — differs by backend
|
|
361
|
-
const serverStep = isMLX
|
|
362
|
+
const getLocalServerStep = (model, filepath) => {
|
|
363
|
+
return isMlxModel(model)
|
|
362
364
|
? {
|
|
363
365
|
title: "Start the MLX server",
|
|
364
366
|
setup: "# Install MLX LM:\nuv tool install mlx-lm",
|
|
@@ -367,16 +369,20 @@ const snippetPi = (model, filepath) => {
|
|
|
367
369
|
: {
|
|
368
370
|
title: "Start the llama.cpp server",
|
|
369
371
|
setup: "# Install llama.cpp:\nbrew install llama.cpp",
|
|
370
|
-
content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}
|
|
372
|
+
content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}`,
|
|
371
373
|
};
|
|
372
|
-
|
|
374
|
+
};
|
|
375
|
+
const snippetPi = (model, filepath) => {
|
|
376
|
+
const isMLX = isMlxModel(model);
|
|
377
|
+
const modelId = isMLX ? model.id : `${model.id}${getQuantTag(filepath)}`;
|
|
378
|
+
const serverStep = getLocalServerStep(model, filepath);
|
|
373
379
|
const modelsJson = JSON.stringify({
|
|
374
380
|
providers: {
|
|
375
381
|
[isMLX ? "mlx-lm" : "llama-cpp"]: {
|
|
376
382
|
baseUrl: "http://localhost:8080/v1",
|
|
377
383
|
api: "openai-completions",
|
|
378
384
|
apiKey: "none",
|
|
379
|
-
models: [{ id:
|
|
385
|
+
models: [{ id: modelId }],
|
|
380
386
|
},
|
|
381
387
|
},
|
|
382
388
|
}, null, 2);
|
|
@@ -393,6 +399,31 @@ const snippetPi = (model, filepath) => {
|
|
|
393
399
|
},
|
|
394
400
|
];
|
|
395
401
|
};
|
|
402
|
+
const snippetHermesAgent = (model, filepath) => {
|
|
403
|
+
const modelId = isMlxModel(model) ? model.id : `${model.id}${getQuantTag(filepath)}`;
|
|
404
|
+
const serverStep = getLocalServerStep(model, filepath);
|
|
405
|
+
return [
|
|
406
|
+
serverStep,
|
|
407
|
+
{
|
|
408
|
+
title: "Configure Hermes",
|
|
409
|
+
setup: [
|
|
410
|
+
"# Install Hermes:",
|
|
411
|
+
"curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash",
|
|
412
|
+
"hermes setup",
|
|
413
|
+
].join("\n"),
|
|
414
|
+
content: [
|
|
415
|
+
"# Point Hermes at the local server:",
|
|
416
|
+
"hermes config set model.provider custom",
|
|
417
|
+
"hermes config set model.base_url http://127.0.0.1:8080/v1",
|
|
418
|
+
`hermes config set model.default ${modelId}`,
|
|
419
|
+
].join("\n"),
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
title: "Run Hermes",
|
|
423
|
+
content: "hermes",
|
|
424
|
+
},
|
|
425
|
+
];
|
|
426
|
+
};
|
|
396
427
|
const snippetDockerModelRunner = (model, filepath) => {
|
|
397
428
|
// Only add quant tag for GGUF models, not safetensors
|
|
398
429
|
const quantTag = isLlamaCppGgufModel(model) ? getQuantTag(filepath) : "";
|
|
@@ -633,9 +664,14 @@ export const LOCAL_APPS = {
|
|
|
633
664
|
prettyLabel: "Pi",
|
|
634
665
|
docsUrl: "https://github.com/badlogic/pi-mono",
|
|
635
666
|
mainTask: "text-generation",
|
|
636
|
-
displayOnModelPage:
|
|
637
|
-
model.tags.includes("conversational") &&
|
|
638
|
-
!!getChatTemplate(model)?.includes("tools"),
|
|
667
|
+
displayOnModelPage: isToolCallingLocalAgentModel,
|
|
639
668
|
snippet: snippetPi,
|
|
640
669
|
},
|
|
670
|
+
"hermes-agent": {
|
|
671
|
+
prettyLabel: "Hermes Agent",
|
|
672
|
+
docsUrl: "https://hermes-agent.nousresearch.com/",
|
|
673
|
+
mainTask: "text-generation",
|
|
674
|
+
displayOnModelPage: isToolCallingLocalAgentModel,
|
|
675
|
+
snippet: snippetHermesAgent,
|
|
676
|
+
},
|
|
641
677
|
};
|
|
@@ -119,9 +119,9 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
119
119
|
inference: "",
|
|
120
120
|
};
|
|
121
121
|
const snippet = snippetFunc(model);
|
|
122
|
-
expect(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}
|
|
122
|
+
expect(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}`);
|
|
123
123
|
expect(snippet[1].setup).toContain("npm install -g @mariozechner/pi-coding-agent");
|
|
124
|
-
expect(snippet[1].content).toContain(`"id": "Llama-3.2-3B-Instruct-GGUF"`);
|
|
124
|
+
expect(snippet[1].content).toContain(`"id": "bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}"`);
|
|
125
125
|
expect(snippet[2].content).toContain("pi");
|
|
126
126
|
});
|
|
127
127
|
it("pi - mlx", async () => {
|
|
@@ -145,6 +145,40 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
145
145
|
expect(snippet[1].content).toContain('"id": "mlx-community/Llama-3.2-3B-Instruct-mlx"');
|
|
146
146
|
expect(snippet[2].content).toContain("pi");
|
|
147
147
|
});
|
|
148
|
+
it("hermes-agent", async () => {
|
|
149
|
+
const { snippet: snippetFunc } = LOCAL_APPS["hermes-agent"];
|
|
150
|
+
const model = {
|
|
151
|
+
id: "bartowski/Llama-3.2-3B-Instruct-GGUF",
|
|
152
|
+
tags: ["conversational"],
|
|
153
|
+
gguf: { total: 1, context_length: 4096, chat_template: "{% if tools %}" },
|
|
154
|
+
inference: "",
|
|
155
|
+
};
|
|
156
|
+
const snippet = snippetFunc(model);
|
|
157
|
+
expect(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}`);
|
|
158
|
+
expect(snippet[1].content).toContain("hermes config set model.provider custom");
|
|
159
|
+
expect(snippet[1].content).toContain("hermes config set model.base_url http://127.0.0.1:8080/v1");
|
|
160
|
+
expect(snippet[1].content).toContain("hermes config set model.default bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}");
|
|
161
|
+
expect(snippet[2].content).toContain("hermes");
|
|
162
|
+
});
|
|
163
|
+
it("hermes-agent - mlx", async () => {
|
|
164
|
+
const { snippet: snippetFunc } = LOCAL_APPS["hermes-agent"];
|
|
165
|
+
const model = {
|
|
166
|
+
id: "mlx-community/Llama-3.2-3B-Instruct-mlx",
|
|
167
|
+
tags: ["mlx", "conversational"],
|
|
168
|
+
pipeline_tag: "text-generation",
|
|
169
|
+
config: {
|
|
170
|
+
tokenizer_config: {
|
|
171
|
+
chat_template: "{% if tools %}...{% endif %}",
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
inference: "",
|
|
175
|
+
};
|
|
176
|
+
const snippet = snippetFunc(model);
|
|
177
|
+
expect(snippet[0].setup).toContain("uv tool install mlx-lm");
|
|
178
|
+
expect(snippet[1].content).toContain("hermes config set model.provider custom");
|
|
179
|
+
expect(snippet[1].content).toContain("hermes config set model.default mlx-community/Llama-3.2-3B-Instruct-mlx");
|
|
180
|
+
expect(snippet[2].content).toContain("hermes");
|
|
181
|
+
});
|
|
148
182
|
it("docker model runner", async () => {
|
|
149
183
|
const { snippet: snippetFunc } = LOCAL_APPS["docker-model-runner"];
|
|
150
184
|
const model = {
|
package/package.json
CHANGED
package/src/eval.ts
CHANGED
|
@@ -95,4 +95,10 @@ export const EVALUATION_FRAMEWORKS = {
|
|
|
95
95
|
"Video-MME-v2 is a benchmark for evaluating the next stage of video understanding capabilities of multimodal large language models.",
|
|
96
96
|
url: "https://github.com/MME-Benchmarks/Video-MME-v2",
|
|
97
97
|
},
|
|
98
|
+
"claw-eval": {
|
|
99
|
+
name: "claw-eval",
|
|
100
|
+
description:
|
|
101
|
+
"CLAW-Eval is an evaluation framework for assessing LLMs as autonomous agents across 300 human-verified tasks covering communication, finance, and productivity domains.",
|
|
102
|
+
url: "https://github.com/claw-eval/claw-eval",
|
|
103
|
+
},
|
|
98
104
|
} as const;
|
package/src/hardware-amd.ts
CHANGED
|
@@ -60,6 +60,16 @@ export const AMD_GPU_SKUS: Record<string, AmdGpuHardwareSpec> = {
|
|
|
60
60
|
memory: [8, 16],
|
|
61
61
|
gfxVersion: "gfx1200",
|
|
62
62
|
},
|
|
63
|
+
"PRO W7900": {
|
|
64
|
+
tflops: 122.6,
|
|
65
|
+
memory: [48],
|
|
66
|
+
gfxVersion: "gfx1100",
|
|
67
|
+
},
|
|
68
|
+
"PRO W7800": {
|
|
69
|
+
tflops: 90.5,
|
|
70
|
+
memory: [32, 48],
|
|
71
|
+
gfxVersion: "gfx1100",
|
|
72
|
+
},
|
|
63
73
|
"RX 7900 XTX": {
|
|
64
74
|
tflops: 122.8,
|
|
65
75
|
memory: [24],
|
|
@@ -130,6 +140,11 @@ export const AMD_GPU_SKUS: Record<string, AmdGpuHardwareSpec> = {
|
|
|
130
140
|
memory: [4, 8],
|
|
131
141
|
gfxVersion: "gfx1012",
|
|
132
142
|
},
|
|
143
|
+
"Radeon Pro V620": {
|
|
144
|
+
tflops: 40.55,
|
|
145
|
+
memory: [32],
|
|
146
|
+
gfxVersion: "gfx1030",
|
|
147
|
+
},
|
|
133
148
|
"Radeon Pro VII": {
|
|
134
149
|
tflops: 26.11,
|
|
135
150
|
memory: [16, 32],
|
package/src/hardware-nvidia.ts
CHANGED
|
@@ -78,6 +78,31 @@ export const NVIDIA_SKUS: Record<string, NvidiaHardwareSpec> = {
|
|
|
78
78
|
memory: [96],
|
|
79
79
|
computeCapability: 12.0,
|
|
80
80
|
},
|
|
81
|
+
"RTX PRO 5000": {
|
|
82
|
+
tflops: 66.94,
|
|
83
|
+
memory: [48, 72],
|
|
84
|
+
computeCapability: 12.0,
|
|
85
|
+
},
|
|
86
|
+
"RTX PRO 4500 WS": {
|
|
87
|
+
tflops: 50.53,
|
|
88
|
+
memory: [32],
|
|
89
|
+
computeCapability: 12.0,
|
|
90
|
+
},
|
|
91
|
+
"RTX PRO 4000": {
|
|
92
|
+
tflops: 36.83,
|
|
93
|
+
memory: [24],
|
|
94
|
+
computeCapability: 12.0,
|
|
95
|
+
},
|
|
96
|
+
"RTX PRO 4000 SFF": {
|
|
97
|
+
tflops: 24.05,
|
|
98
|
+
memory: [24],
|
|
99
|
+
computeCapability: 12.0,
|
|
100
|
+
},
|
|
101
|
+
"RTX PRO 2000": {
|
|
102
|
+
tflops: 17.03,
|
|
103
|
+
memory: [16],
|
|
104
|
+
computeCapability: 12.0,
|
|
105
|
+
},
|
|
81
106
|
"RTX 6000 Ada": {
|
|
82
107
|
tflops: 91.1,
|
|
83
108
|
memory: [48],
|
|
@@ -448,6 +473,11 @@ export const NVIDIA_SKUS: Record<string, NvidiaHardwareSpec> = {
|
|
|
448
473
|
memory: [6],
|
|
449
474
|
computeCapability: 7.5,
|
|
450
475
|
},
|
|
476
|
+
"RTX 2050 Mobile": {
|
|
477
|
+
tflops: 10.2,
|
|
478
|
+
memory: [4],
|
|
479
|
+
computeCapability: 8.6, // Ampere (outlier GPU in the 20xx series)
|
|
480
|
+
},
|
|
451
481
|
"GTX 1080 Ti": {
|
|
452
482
|
tflops: 11.34, // float32 (GPU does not support native float16)
|
|
453
483
|
memory: [11],
|
package/src/hardware.ts
CHANGED
package/src/local-apps.spec.ts
CHANGED
|
@@ -132,9 +132,9 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
132
132
|
};
|
|
133
133
|
const snippet = snippetFunc(model);
|
|
134
134
|
|
|
135
|
-
expect(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}
|
|
135
|
+
expect(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}`);
|
|
136
136
|
expect(snippet[1].setup).toContain("npm install -g @mariozechner/pi-coding-agent");
|
|
137
|
-
expect(snippet[1].content).toContain(`"id": "Llama-3.2-3B-Instruct-GGUF"`);
|
|
137
|
+
expect(snippet[1].content).toContain(`"id": "bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}"`);
|
|
138
138
|
expect(snippet[2].content).toContain("pi");
|
|
139
139
|
});
|
|
140
140
|
|
|
@@ -161,6 +161,46 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
161
161
|
expect(snippet[2].content).toContain("pi");
|
|
162
162
|
});
|
|
163
163
|
|
|
164
|
+
it("hermes-agent", async () => {
|
|
165
|
+
const { snippet: snippetFunc } = LOCAL_APPS["hermes-agent"];
|
|
166
|
+
const model: ModelData = {
|
|
167
|
+
id: "bartowski/Llama-3.2-3B-Instruct-GGUF",
|
|
168
|
+
tags: ["conversational"],
|
|
169
|
+
gguf: { total: 1, context_length: 4096, chat_template: "{% if tools %}" },
|
|
170
|
+
inference: "",
|
|
171
|
+
};
|
|
172
|
+
const snippet = snippetFunc(model);
|
|
173
|
+
|
|
174
|
+
expect(snippet[0].content).toContain(`llama-server -hf bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}`);
|
|
175
|
+
expect(snippet[1].content).toContain("hermes config set model.provider custom");
|
|
176
|
+
expect(snippet[1].content).toContain("hermes config set model.base_url http://127.0.0.1:8080/v1");
|
|
177
|
+
expect(snippet[1].content).toContain(
|
|
178
|
+
"hermes config set model.default bartowski/Llama-3.2-3B-Instruct-GGUF:{{QUANT_TAG}}",
|
|
179
|
+
);
|
|
180
|
+
expect(snippet[2].content).toContain("hermes");
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("hermes-agent - mlx", async () => {
|
|
184
|
+
const { snippet: snippetFunc } = LOCAL_APPS["hermes-agent"];
|
|
185
|
+
const model: ModelData = {
|
|
186
|
+
id: "mlx-community/Llama-3.2-3B-Instruct-mlx",
|
|
187
|
+
tags: ["mlx", "conversational"],
|
|
188
|
+
pipeline_tag: "text-generation",
|
|
189
|
+
config: {
|
|
190
|
+
tokenizer_config: {
|
|
191
|
+
chat_template: "{% if tools %}...{% endif %}",
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
inference: "",
|
|
195
|
+
};
|
|
196
|
+
const snippet = snippetFunc(model);
|
|
197
|
+
|
|
198
|
+
expect(snippet[0].setup).toContain("uv tool install mlx-lm");
|
|
199
|
+
expect(snippet[1].content).toContain("hermes config set model.provider custom");
|
|
200
|
+
expect(snippet[1].content).toContain("hermes config set model.default mlx-community/Llama-3.2-3B-Instruct-mlx");
|
|
201
|
+
expect(snippet[2].content).toContain("hermes");
|
|
202
|
+
});
|
|
203
|
+
|
|
164
204
|
it("docker model runner", async () => {
|
|
165
205
|
const { snippet: snippetFunc } = LOCAL_APPS["docker-model-runner"];
|
|
166
206
|
const model: ModelData = {
|
package/src/local-apps.ts
CHANGED
|
@@ -139,6 +139,14 @@ function isUnslothModel(model: ModelData) {
|
|
|
139
139
|
return model.tags.includes("unsloth") || isLlamaCppGgufModel(model);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
function isToolCallingLocalAgentModel(model: ModelData): boolean {
|
|
143
|
+
return (
|
|
144
|
+
(isLlamaCppGgufModel(model) || isMlxModel(model)) &&
|
|
145
|
+
model.tags.includes("conversational") &&
|
|
146
|
+
!!getChatTemplate(model)?.includes("tools")
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
142
150
|
function getQuantTag(filepath?: string): string {
|
|
143
151
|
const defaultTag = ":{{QUANT_TAG}}";
|
|
144
152
|
|
|
@@ -463,12 +471,8 @@ const snippetMlxLm = (model: ModelData): LocalAppSnippet[] => {
|
|
|
463
471
|
];
|
|
464
472
|
};
|
|
465
473
|
|
|
466
|
-
const
|
|
467
|
-
|
|
468
|
-
const isMLX = isMlxModel(model);
|
|
469
|
-
|
|
470
|
-
// Step 1: Server — differs by backend
|
|
471
|
-
const serverStep: LocalAppSnippet = isMLX
|
|
474
|
+
const getLocalServerStep = (model: ModelData, filepath?: string): LocalAppSnippet => {
|
|
475
|
+
return isMlxModel(model)
|
|
472
476
|
? {
|
|
473
477
|
title: "Start the MLX server",
|
|
474
478
|
setup: "# Install MLX LM:\nuv tool install mlx-lm",
|
|
@@ -477,10 +481,15 @@ const snippetPi = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
|
|
|
477
481
|
: {
|
|
478
482
|
title: "Start the llama.cpp server",
|
|
479
483
|
setup: "# Install llama.cpp:\nbrew install llama.cpp",
|
|
480
|
-
content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}
|
|
484
|
+
content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}`,
|
|
481
485
|
};
|
|
486
|
+
};
|
|
487
|
+
|
|
488
|
+
const snippetPi = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
|
|
489
|
+
const isMLX = isMlxModel(model);
|
|
490
|
+
const modelId = isMLX ? model.id : `${model.id}${getQuantTag(filepath)}`;
|
|
491
|
+
const serverStep = getLocalServerStep(model, filepath);
|
|
482
492
|
|
|
483
|
-
// Step 2: Pi config — port and provider name differ
|
|
484
493
|
const modelsJson = JSON.stringify(
|
|
485
494
|
{
|
|
486
495
|
providers: {
|
|
@@ -488,7 +497,7 @@ const snippetPi = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
|
|
|
488
497
|
baseUrl: "http://localhost:8080/v1",
|
|
489
498
|
api: "openai-completions",
|
|
490
499
|
apiKey: "none",
|
|
491
|
-
models: [{ id:
|
|
500
|
+
models: [{ id: modelId }],
|
|
492
501
|
},
|
|
493
502
|
},
|
|
494
503
|
},
|
|
@@ -510,6 +519,33 @@ const snippetPi = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
|
|
|
510
519
|
];
|
|
511
520
|
};
|
|
512
521
|
|
|
522
|
+
const snippetHermesAgent = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
|
|
523
|
+
const modelId = isMlxModel(model) ? model.id : `${model.id}${getQuantTag(filepath)}`;
|
|
524
|
+
const serverStep = getLocalServerStep(model, filepath);
|
|
525
|
+
|
|
526
|
+
return [
|
|
527
|
+
serverStep,
|
|
528
|
+
{
|
|
529
|
+
title: "Configure Hermes",
|
|
530
|
+
setup: [
|
|
531
|
+
"# Install Hermes:",
|
|
532
|
+
"curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash",
|
|
533
|
+
"hermes setup",
|
|
534
|
+
].join("\n"),
|
|
535
|
+
content: [
|
|
536
|
+
"# Point Hermes at the local server:",
|
|
537
|
+
"hermes config set model.provider custom",
|
|
538
|
+
"hermes config set model.base_url http://127.0.0.1:8080/v1",
|
|
539
|
+
`hermes config set model.default ${modelId}`,
|
|
540
|
+
].join("\n"),
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
title: "Run Hermes",
|
|
544
|
+
content: "hermes",
|
|
545
|
+
},
|
|
546
|
+
];
|
|
547
|
+
};
|
|
548
|
+
|
|
513
549
|
const snippetDockerModelRunner = (model: ModelData, filepath?: string): string => {
|
|
514
550
|
// Only add quant tag for GGUF models, not safetensors
|
|
515
551
|
const quantTag = isLlamaCppGgufModel(model) ? getQuantTag(filepath) : "";
|
|
@@ -755,12 +791,16 @@ export const LOCAL_APPS = {
|
|
|
755
791
|
prettyLabel: "Pi",
|
|
756
792
|
docsUrl: "https://github.com/badlogic/pi-mono",
|
|
757
793
|
mainTask: "text-generation",
|
|
758
|
-
displayOnModelPage:
|
|
759
|
-
(isLlamaCppGgufModel(model) || isMlxModel(model)) &&
|
|
760
|
-
model.tags.includes("conversational") &&
|
|
761
|
-
!!getChatTemplate(model)?.includes("tools"),
|
|
794
|
+
displayOnModelPage: isToolCallingLocalAgentModel,
|
|
762
795
|
snippet: snippetPi,
|
|
763
796
|
},
|
|
797
|
+
"hermes-agent": {
|
|
798
|
+
prettyLabel: "Hermes Agent",
|
|
799
|
+
docsUrl: "https://hermes-agent.nousresearch.com/",
|
|
800
|
+
mainTask: "text-generation",
|
|
801
|
+
displayOnModelPage: isToolCallingLocalAgentModel,
|
|
802
|
+
snippet: snippetHermesAgent,
|
|
803
|
+
},
|
|
764
804
|
} satisfies Record<string, LocalApp>;
|
|
765
805
|
|
|
766
806
|
export type LocalAppKey = keyof typeof LOCAL_APPS;
|