@huggingface/tasks 0.20.23 → 0.20.25
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 +10 -0
- package/dist/commonjs/eval.d.ts.map +1 -1
- package/dist/commonjs/eval.js +10 -0
- package/dist/commonjs/hardware-amd.d.ts.map +1 -1
- package/dist/commonjs/hardware-amd.js +10 -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 +46 -10
- package/dist/commonjs/local-apps.spec.js +35 -1
- package/dist/esm/eval.d.ts +10 -0
- package/dist/esm/eval.d.ts.map +1 -1
- package/dist/esm/eval.js +10 -0
- package/dist/esm/hardware-amd.d.ts.map +1 -1
- package/dist/esm/hardware-amd.js +10 -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 +46 -10
- package/dist/esm/local-apps.spec.js +35 -1
- package/package.json +1 -1
- package/src/eval.ts +12 -0
- package/src/hardware-amd.ts +10 -0
- package/src/local-apps.spec.ts +41 -1
- package/src/local-apps.ts +52 -12
package/dist/commonjs/eval.d.ts
CHANGED
|
@@ -92,5 +92,15 @@ export declare const EVALUATION_FRAMEWORKS: {
|
|
|
92
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
93
|
readonly url: "https://github.com/claw-eval/claw-eval";
|
|
94
94
|
};
|
|
95
|
+
readonly pbench: {
|
|
96
|
+
readonly name: "pbench";
|
|
97
|
+
readonly description: "PBench is a multi-level referring expression segmentation benchmark for evaluating vision-language perception across a structured hierarchy of skills.";
|
|
98
|
+
readonly url: "https://github.com/tiiuae/Falcon-Perception";
|
|
99
|
+
};
|
|
100
|
+
readonly wildclawbench: {
|
|
101
|
+
readonly name: "wildclawbench";
|
|
102
|
+
readonly description: "WildClawBench is an in-the-wild benchmark for evaluating AI agents in the OpenClaw environment across 60 hand-built, end-to-end tasks spanning productivity, code intelligence, social interaction, search, creative synthesis, and safety domains.";
|
|
103
|
+
readonly url: "https://github.com/InternLM/WildClawBench";
|
|
104
|
+
};
|
|
95
105
|
};
|
|
96
106
|
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHxB,CAAC"}
|
package/dist/commonjs/eval.js
CHANGED
|
@@ -95,4 +95,14 @@ exports.EVALUATION_FRAMEWORKS = {
|
|
|
95
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
96
|
url: "https://github.com/claw-eval/claw-eval",
|
|
97
97
|
},
|
|
98
|
+
pbench: {
|
|
99
|
+
name: "pbench",
|
|
100
|
+
description: "PBench is a multi-level referring expression segmentation benchmark for evaluating vision-language perception across a structured hierarchy of skills.",
|
|
101
|
+
url: "https://github.com/tiiuae/Falcon-Perception",
|
|
102
|
+
},
|
|
103
|
+
wildclawbench: {
|
|
104
|
+
name: "wildclawbench",
|
|
105
|
+
description: "WildClawBench is an in-the-wild benchmark for evaluating AI agents in the OpenClaw environment across 60 hand-built, end-to-end tasks spanning productivity, code intelligence, social interaction, search, creative synthesis, and safety domains.",
|
|
106
|
+
url: "https://github.com/InternLM/WildClawBench",
|
|
107
|
+
},
|
|
98
108
|
};
|
|
@@ -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],
|
|
@@ -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",
|
|
@@ -372,14 +374,18 @@ const snippetPi = (model, filepath) => {
|
|
|
372
374
|
setup: "# Install llama.cpp:\nbrew install llama.cpp",
|
|
373
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
|
};
|
|
@@ -123,7 +123,7 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
123
123
|
const snippet = snippetFunc(model);
|
|
124
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
|
@@ -92,5 +92,15 @@ export declare const EVALUATION_FRAMEWORKS: {
|
|
|
92
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
93
|
readonly url: "https://github.com/claw-eval/claw-eval";
|
|
94
94
|
};
|
|
95
|
+
readonly pbench: {
|
|
96
|
+
readonly name: "pbench";
|
|
97
|
+
readonly description: "PBench is a multi-level referring expression segmentation benchmark for evaluating vision-language perception across a structured hierarchy of skills.";
|
|
98
|
+
readonly url: "https://github.com/tiiuae/Falcon-Perception";
|
|
99
|
+
};
|
|
100
|
+
readonly wildclawbench: {
|
|
101
|
+
readonly name: "wildclawbench";
|
|
102
|
+
readonly description: "WildClawBench is an in-the-wild benchmark for evaluating AI agents in the OpenClaw environment across 60 hand-built, end-to-end tasks spanning productivity, code intelligence, social interaction, search, creative synthesis, and safety domains.";
|
|
103
|
+
readonly url: "https://github.com/InternLM/WildClawBench";
|
|
104
|
+
};
|
|
95
105
|
};
|
|
96
106
|
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHxB,CAAC"}
|
package/dist/esm/eval.js
CHANGED
|
@@ -92,4 +92,14 @@ export const EVALUATION_FRAMEWORKS = {
|
|
|
92
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
93
|
url: "https://github.com/claw-eval/claw-eval",
|
|
94
94
|
},
|
|
95
|
+
pbench: {
|
|
96
|
+
name: "pbench",
|
|
97
|
+
description: "PBench is a multi-level referring expression segmentation benchmark for evaluating vision-language perception across a structured hierarchy of skills.",
|
|
98
|
+
url: "https://github.com/tiiuae/Falcon-Perception",
|
|
99
|
+
},
|
|
100
|
+
wildclawbench: {
|
|
101
|
+
name: "wildclawbench",
|
|
102
|
+
description: "WildClawBench is an in-the-wild benchmark for evaluating AI agents in the OpenClaw environment across 60 hand-built, end-to-end tasks spanning productivity, code intelligence, social interaction, search, creative synthesis, and safety domains.",
|
|
103
|
+
url: "https://github.com/InternLM/WildClawBench",
|
|
104
|
+
},
|
|
95
105
|
};
|
|
@@ -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],
|
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",
|
|
@@ -369,14 +371,18 @@ const snippetPi = (model, filepath) => {
|
|
|
369
371
|
setup: "# Install llama.cpp:\nbrew install llama.cpp",
|
|
370
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
|
};
|
|
@@ -121,7 +121,7 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
121
121
|
const snippet = snippetFunc(model);
|
|
122
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
|
@@ -101,4 +101,16 @@ export const EVALUATION_FRAMEWORKS = {
|
|
|
101
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
102
|
url: "https://github.com/claw-eval/claw-eval",
|
|
103
103
|
},
|
|
104
|
+
pbench: {
|
|
105
|
+
name: "pbench",
|
|
106
|
+
description:
|
|
107
|
+
"PBench is a multi-level referring expression segmentation benchmark for evaluating vision-language perception across a structured hierarchy of skills.",
|
|
108
|
+
url: "https://github.com/tiiuae/Falcon-Perception",
|
|
109
|
+
},
|
|
110
|
+
wildclawbench: {
|
|
111
|
+
name: "wildclawbench",
|
|
112
|
+
description:
|
|
113
|
+
"WildClawBench is an in-the-wild benchmark for evaluating AI agents in the OpenClaw environment across 60 hand-built, end-to-end tasks spanning productivity, code intelligence, social interaction, search, creative synthesis, and safety domains.",
|
|
114
|
+
url: "https://github.com/InternLM/WildClawBench",
|
|
115
|
+
},
|
|
104
116
|
} 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],
|
package/src/local-apps.spec.ts
CHANGED
|
@@ -134,7 +134,7 @@ curl -X POST "http://localhost:8000/v1/chat/completions" \\
|
|
|
134
134
|
|
|
135
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",
|
|
@@ -479,8 +483,13 @@ const snippetPi = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
|
|
|
479
483
|
setup: "# Install llama.cpp:\nbrew install llama.cpp",
|
|
480
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;
|