@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.
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8FxB,CAAC"}
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGxB,CAAC"}
@@ -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,CAmI3D,CAAC"}
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,CAwhB1D,CAAC"}
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],
@@ -97,6 +97,9 @@ export declare const SKUS: {
97
97
  "Xeon E5v2 (Ivy Bridge)": {
98
98
  tflops: number;
99
99
  };
100
+ "Intel Core Ultra 9 275HX": {
101
+ tflops: number;
102
+ };
100
103
  "Intel Core Ultra 7 265KF": {
101
104
  tflops: number;
102
105
  };
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkSuD,CAAC;AAEzE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAC"}
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"}
@@ -86,6 +86,9 @@ exports.SKUS = {
86
86
  "Xeon E5v2 (Ivy Bridge)": {
87
87
  tflops: 0.15,
88
88
  },
89
+ "Intel Core Ultra 9 275HX": {
90
+ tflops: 1.89,
91
+ },
89
92
  "Intel Core Ultra 7 265KF": {
90
93
  tflops: 1.53,
91
94
  },
@@ -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: (model: ModelData) => boolean;
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;AAiaD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;;yBA/ZS,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAiDzC,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBA2F3D,SAAS,KAAG,eAAe,EAAE;;;;;;oCA6S3B,SAAS;yBAvPT,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;;;;;;;yBAqSnB,SAAS,aAAa,MAAM,KAAG,MAAM;;;;;;;yBAM9C,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBArDtD,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;CA0StC,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,UAAU,CAAC"}
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 snippetPi = (model, filepath) => {
361
- const modelName = model.id.split("/").pop() ?? model.id;
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)} --jinja`,
375
+ content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}`,
374
376
  };
375
- // Step 2: Pi config — port and provider name differ
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: isMLX ? model.id : modelName }],
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: (model) => (isLlamaCppGgufModel(model) || isMlxModel(model)) &&
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}} --jinja`);
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 = {
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8FxB,CAAC"}
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,CAmI3D,CAAC"}
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"}
@@ -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,CAwhB1D,CAAC"}
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],
@@ -97,6 +97,9 @@ export declare const SKUS: {
97
97
  "Xeon E5v2 (Ivy Bridge)": {
98
98
  tflops: number;
99
99
  };
100
+ "Intel Core Ultra 9 275HX": {
101
+ tflops: number;
102
+ };
100
103
  "Intel Core Ultra 7 265KF": {
101
104
  tflops: number;
102
105
  };
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkSuD,CAAC;AAEzE,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAC"}
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"}
@@ -83,6 +83,9 @@ export const SKUS = {
83
83
  "Xeon E5v2 (Ivy Bridge)": {
84
84
  tflops: 0.15,
85
85
  },
86
+ "Intel Core Ultra 9 275HX": {
87
+ tflops: 1.89,
88
+ },
86
89
  "Intel Core Ultra 7 265KF": {
87
90
  tflops: 1.53,
88
91
  },
@@ -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: (model: ModelData) => boolean;
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;AAiaD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU;;;;;;yBA/ZS,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBAiDzC,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBA2F3D,SAAS,KAAG,eAAe,EAAE;;;;;;oCA6S3B,SAAS;yBAvPT,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;;;;;;;yBAqSnB,SAAS,aAAa,MAAM,KAAG,MAAM;;;;;;;yBAM9C,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;;;;;;yBArDtD,SAAS,aAAa,MAAM,KAAG,eAAe,EAAE;;CA0StC,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,UAAU,CAAC"}
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"}
@@ -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 snippetPi = (model, filepath) => {
358
- const modelName = model.id.split("/").pop() ?? model.id;
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)} --jinja`,
372
+ content: `# Start a local OpenAI-compatible server:\nllama-server -hf ${model.id}${getQuantTag(filepath)}`,
371
373
  };
372
- // Step 2: Pi config — port and provider name differ
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: isMLX ? model.id : modelName }],
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: (model) => (isLlamaCppGgufModel(model) || isMlxModel(model)) &&
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}} --jinja`);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huggingface/tasks",
3
- "version": "0.20.22",
3
+ "version": "0.20.24",
4
4
  "description": "List of ML tasks for huggingface.co/tasks",
5
5
  "keywords": [
6
6
  "hub",
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;
@@ -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],
@@ -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
@@ -106,6 +106,9 @@ export const SKUS = {
106
106
  "Xeon E5v2 (Ivy Bridge)": {
107
107
  tflops: 0.15,
108
108
  },
109
+ "Intel Core Ultra 9 275HX": {
110
+ tflops: 1.89,
111
+ },
109
112
  "Intel Core Ultra 7 265KF": {
110
113
  tflops: 1.53,
111
114
  },
@@ -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}} --jinja`);
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 snippetPi = (model: ModelData, filepath?: string): LocalAppSnippet[] => {
467
- const modelName = model.id.split("/").pop() ?? model.id;
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)} --jinja`,
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: isMLX ? model.id : modelName }],
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: (model) =>
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;