dsh-plugin-local-infer 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/README.md +22 -4
  2. package/cordis.patch.yml +7 -0
  3. package/docs/zh/README.md +14 -2
  4. package/dsh/client.js +4195 -4522
  5. package/package.json +28 -11
  6. package/packages/core/lib/adapter.d.ts +133 -9
  7. package/packages/core/lib/adapter.js +74 -1
  8. package/packages/core/lib/config.d.ts +1 -1
  9. package/packages/core/lib/config.js +1 -1
  10. package/packages/core/lib/debug.d.ts +1 -1
  11. package/packages/core/lib/debug.js +1 -1
  12. package/packages/core/lib/defaults.d.ts +1 -1
  13. package/packages/core/lib/defaults.js +1 -1
  14. package/packages/core/lib/deps.d.ts +44 -17
  15. package/packages/core/lib/deps.js +24 -8
  16. package/packages/core/lib/estimator.d.ts +1 -1
  17. package/packages/core/lib/estimator.js +1 -1
  18. package/packages/core/lib/guideline.d.ts +1 -1
  19. package/packages/core/lib/guideline.js +1 -1
  20. package/packages/core/lib/hardware.d.ts +1 -1
  21. package/packages/core/lib/hardware.js +1 -1
  22. package/packages/core/lib/hf-cache.d.ts +70 -0
  23. package/packages/core/lib/hf-cache.js +83 -0
  24. package/packages/core/lib/index.d.ts +16 -9
  25. package/packages/core/lib/index.js +10 -6
  26. package/packages/core/lib/infer-cache.d.ts +39 -0
  27. package/packages/core/lib/infer-cache.js +53 -0
  28. package/packages/core/lib/launch-command.d.ts +8 -4
  29. package/packages/core/lib/launch-command.js +13 -6
  30. package/packages/core/lib/launch-record.d.ts +1 -1
  31. package/packages/core/lib/launch-record.js +1 -1
  32. package/packages/core/lib/logs.d.ts +8 -1
  33. package/packages/core/lib/logs.js +12 -4
  34. package/packages/core/lib/models.d.ts +120 -14
  35. package/packages/core/lib/models.js +209 -17
  36. package/packages/core/lib/parameter.d.ts +31 -3
  37. package/packages/core/lib/parameter.js +1 -1
  38. package/packages/core/lib/progress.d.ts +54 -0
  39. package/packages/core/lib/progress.js +120 -0
  40. package/packages/core/lib/registrar.d.ts +20 -9
  41. package/packages/core/lib/registrar.js +27 -7
  42. package/packages/core/lib/reserve.d.ts +11 -3
  43. package/packages/core/lib/reserve.js +6 -4
  44. package/packages/core/lib/status.d.ts +12 -6
  45. package/packages/core/lib/status.js +21 -10
  46. package/packages/core/lib/sudo.d.ts +80 -0
  47. package/packages/core/lib/sudo.js +78 -0
  48. package/packages/core/package.json +1 -1
  49. package/packages/orchestrator/lib/config.d.ts +63 -0
  50. package/packages/orchestrator/lib/config.js +111 -0
  51. package/packages/orchestrator/lib/index.d.ts +51 -0
  52. package/packages/orchestrator/lib/index.js +73 -0
  53. package/packages/orchestrator/lib/route.d.ts +60 -0
  54. package/packages/orchestrator/lib/route.js +159 -0
  55. package/packages/orchestrator/locale/en.json +6 -0
  56. package/packages/orchestrator/package.json +39 -0
  57. package/packages/orchestrator/prompt.md +87 -0
  58. package/packages/providers/lib/acquire.d.ts +92 -14
  59. package/packages/providers/lib/acquire.js +215 -37
  60. package/packages/providers/lib/adapters.d.ts +136 -12
  61. package/packages/providers/lib/adapters.js +597 -70
  62. package/packages/providers/lib/debug.d.ts +1 -1
  63. package/packages/providers/lib/debug.js +1 -1
  64. package/packages/providers/lib/deps.d.ts +27 -230
  65. package/packages/providers/lib/deps.js +61 -214
  66. package/packages/providers/lib/engines/basalt/basalt.d.ts +130 -0
  67. package/packages/providers/lib/engines/basalt/basalt.js +304 -0
  68. package/packages/providers/lib/engines/basalt/basaltAdapter.d.ts +85 -0
  69. package/packages/providers/lib/engines/basalt/basaltAdapter.js +439 -0
  70. package/packages/providers/lib/engines/basalt/basaltLinux.d.ts +23 -0
  71. package/packages/providers/lib/engines/basalt/basaltLinux.js +47 -0
  72. package/packages/providers/lib/engines/basalt/basaltMacOS.d.ts +17 -0
  73. package/packages/providers/lib/engines/basalt/basaltMacOS.js +19 -0
  74. package/packages/providers/lib/engines/basalt/basaltWindows.d.ts +24 -0
  75. package/packages/providers/lib/engines/basalt/basaltWindows.js +49 -0
  76. package/packages/providers/lib/engines/engineOs.d.ts +24 -0
  77. package/packages/providers/lib/engines/engineOs.js +17 -0
  78. package/packages/providers/lib/engines/{hyperqwen.d.ts → hyperqwen/hyperqwen.d.ts} +2 -2
  79. package/packages/providers/lib/engines/{hyperqwen.js → hyperqwen/hyperqwen.js} +14 -2
  80. package/packages/providers/lib/engines/{hyperqwenAdapter.d.ts → hyperqwen/hyperqwenAdapter.d.ts} +6 -6
  81. package/packages/providers/lib/engines/{hyperqwenAdapter.js → hyperqwen/hyperqwenAdapter.js} +24 -14
  82. package/packages/providers/lib/engines/hyperqwen/hyperqwenArch.d.ts +9 -0
  83. package/packages/providers/lib/engines/hyperqwen/hyperqwenArch.js +9 -0
  84. package/packages/providers/lib/engines/hyperqwen/hyperqwenDebian.d.ts +9 -0
  85. package/packages/providers/lib/engines/hyperqwen/hyperqwenDebian.js +9 -0
  86. package/packages/providers/lib/engines/hyperqwen/hyperqwenFedora.d.ts +9 -0
  87. package/packages/providers/lib/engines/hyperqwen/hyperqwenFedora.js +9 -0
  88. package/packages/providers/lib/engines/hyperqwen/hyperqwenLinux.d.ts +10 -0
  89. package/packages/providers/lib/engines/hyperqwen/hyperqwenLinux.js +14 -0
  90. package/packages/providers/lib/engines/hyperqwen/hyperqwenMacOS.d.ts +9 -0
  91. package/packages/providers/lib/engines/hyperqwen/hyperqwenMacOS.js +9 -0
  92. package/packages/providers/lib/engines/hyperqwen/hyperqwenWindows.d.ts +9 -0
  93. package/packages/providers/lib/engines/hyperqwen/hyperqwenWindows.js +9 -0
  94. package/packages/providers/lib/engines/{infernix.d.ts → infernix/infernix.d.ts} +7 -4
  95. package/packages/providers/lib/engines/{infernix.js → infernix/infernix.js} +52 -7
  96. package/packages/providers/lib/engines/{infernixAdapter.d.ts → infernix/infernixAdapter.d.ts} +5 -6
  97. package/packages/providers/lib/engines/{infernixAdapter.js → infernix/infernixAdapter.js} +75 -42
  98. package/packages/providers/lib/engines/infernix/infernixArch.d.ts +9 -0
  99. package/packages/providers/lib/engines/infernix/infernixArch.js +9 -0
  100. package/packages/providers/lib/engines/infernix/infernixDebian.d.ts +9 -0
  101. package/packages/providers/lib/engines/infernix/infernixDebian.js +9 -0
  102. package/packages/providers/lib/engines/infernix/infernixFedora.d.ts +9 -0
  103. package/packages/providers/lib/engines/infernix/infernixFedora.js +9 -0
  104. package/packages/providers/lib/engines/infernix/infernixLinux.d.ts +17 -0
  105. package/packages/providers/lib/engines/infernix/infernixLinux.js +35 -0
  106. package/packages/providers/lib/engines/infernix/infernixMacOS.d.ts +16 -0
  107. package/packages/providers/lib/engines/infernix/infernixMacOS.js +18 -0
  108. package/packages/providers/lib/engines/infernix/infernixWindows.d.ts +16 -0
  109. package/packages/providers/lib/engines/infernix/infernixWindows.js +34 -0
  110. package/packages/providers/lib/engines/{llamacpp.d.ts → llamacpp/llamacpp.d.ts} +2 -2
  111. package/packages/providers/lib/engines/{llamacpp.js → llamacpp/llamacpp.js} +12 -2
  112. package/packages/providers/lib/engines/{llamacppAdapter.d.ts → llamacpp/llamacppAdapter.d.ts} +5 -6
  113. package/packages/providers/lib/engines/{llamacppAdapter.js → llamacpp/llamacppAdapter.js} +87 -45
  114. package/packages/providers/lib/engines/llamacpp/llamacppArch.d.ts +9 -0
  115. package/packages/providers/lib/engines/llamacpp/llamacppArch.js +9 -0
  116. package/packages/providers/lib/engines/llamacpp/llamacppDebian.d.ts +9 -0
  117. package/packages/providers/lib/engines/llamacpp/llamacppDebian.js +9 -0
  118. package/packages/providers/lib/engines/llamacpp/llamacppFedora.d.ts +9 -0
  119. package/packages/providers/lib/engines/llamacpp/llamacppFedora.js +9 -0
  120. package/packages/providers/lib/engines/llamacpp/llamacppLinux.d.ts +17 -0
  121. package/packages/providers/lib/engines/llamacpp/llamacppLinux.js +28 -0
  122. package/packages/providers/lib/engines/llamacpp/llamacppMacOS.d.ts +15 -0
  123. package/packages/providers/lib/engines/llamacpp/llamacppMacOS.js +17 -0
  124. package/packages/providers/lib/engines/llamacpp/llamacppWindows.d.ts +15 -0
  125. package/packages/providers/lib/engines/llamacpp/llamacppWindows.js +26 -0
  126. package/packages/providers/lib/engines/{ninfer.d.ts → ninfer/ninfer.d.ts} +2 -2
  127. package/packages/providers/lib/engines/{ninfer.js → ninfer/ninfer.js} +24 -2
  128. package/packages/providers/lib/engines/{ninferAdapter.d.ts → ninfer/ninferAdapter.d.ts} +5 -6
  129. package/packages/providers/lib/engines/{ninferAdapter.js → ninfer/ninferAdapter.js} +123 -55
  130. package/packages/providers/lib/engines/ninfer/ninferArch.d.ts +9 -0
  131. package/packages/providers/lib/engines/ninfer/ninferArch.js +9 -0
  132. package/packages/providers/lib/engines/ninfer/ninferDebian.d.ts +9 -0
  133. package/packages/providers/lib/engines/ninfer/ninferDebian.js +9 -0
  134. package/packages/providers/lib/engines/ninfer/ninferFedora.d.ts +9 -0
  135. package/packages/providers/lib/engines/ninfer/ninferFedora.js +9 -0
  136. package/packages/providers/lib/engines/ninfer/ninferLinux.d.ts +17 -0
  137. package/packages/providers/lib/engines/ninfer/ninferLinux.js +37 -0
  138. package/packages/providers/lib/engines/ninfer/ninferMacOS.d.ts +15 -0
  139. package/packages/providers/lib/engines/ninfer/ninferMacOS.js +17 -0
  140. package/packages/providers/lib/engines/ninfer/ninferWindows.d.ts +29 -0
  141. package/packages/providers/lib/engines/ninfer/ninferWindows.js +59 -0
  142. package/packages/providers/lib/engines/strata/strata.d.ts +1 -0
  143. package/packages/providers/lib/engines/{strata.js → strata/strata.js} +70 -3
  144. package/packages/providers/lib/engines/{strataAdapter.d.ts → strata/strataAdapter.d.ts} +5 -6
  145. package/packages/providers/lib/engines/{strataAdapter.js → strata/strataAdapter.js} +147 -111
  146. package/packages/providers/lib/engines/strata/strataArch.d.ts +9 -0
  147. package/packages/providers/lib/engines/strata/strataArch.js +9 -0
  148. package/packages/providers/lib/engines/strata/strataDebian.d.ts +9 -0
  149. package/packages/providers/lib/engines/strata/strataDebian.js +9 -0
  150. package/packages/providers/lib/engines/strata/strataFedora.d.ts +9 -0
  151. package/packages/providers/lib/engines/strata/strataFedora.js +9 -0
  152. package/packages/providers/lib/engines/strata/strataLinux.d.ts +21 -0
  153. package/packages/providers/lib/engines/strata/strataLinux.js +30 -0
  154. package/packages/providers/lib/engines/strata/strataMacOS.d.ts +16 -0
  155. package/packages/providers/lib/engines/strata/strataMacOS.js +17 -0
  156. package/packages/providers/lib/engines/strata/strataWindows.d.ts +27 -0
  157. package/packages/providers/lib/engines/strata/strataWindows.js +37 -0
  158. package/packages/providers/lib/engines.d.ts +7 -5
  159. package/packages/providers/lib/engines.js +21 -10
  160. package/packages/providers/lib/guidelines.d.ts +5 -4
  161. package/packages/providers/lib/guidelines.js +18 -5
  162. package/packages/providers/lib/index.d.ts +33 -29
  163. package/packages/providers/lib/index.js +45 -33
  164. package/packages/providers/lib/model-defaults.d.ts +5 -1
  165. package/packages/providers/lib/model-defaults.js +25 -1
  166. package/packages/providers/lib/platform.d.ts +8 -5
  167. package/packages/providers/lib/platform.js +23 -9
  168. package/packages/providers/lib/presets.d.ts +6 -4
  169. package/packages/providers/lib/presets.js +53 -5
  170. package/packages/providers/lib/systemDeps.d.ts +313 -0
  171. package/packages/providers/lib/systemDeps.js +284 -0
  172. package/packages/providers/lib/vram.d.ts +34 -8
  173. package/packages/providers/lib/vram.js +81 -8
  174. package/packages/providers/package.json +2 -2
  175. package/packages/service/lib/index.d.ts +176 -21
  176. package/packages/service/lib/index.js +589 -86
  177. package/packages/service/lib/launch-target.d.ts +19 -0
  178. package/packages/service/lib/launch-target.js +28 -0
  179. package/packages/service/lib/run-logs.d.ts +72 -0
  180. package/packages/service/lib/run-logs.js +125 -0
  181. package/packages/service/lib/types.d.ts +163 -6
  182. package/packages/service/lib/types.js +1 -1
  183. package/packages/service/package.json +2 -2
  184. package/packages/tool/lib/index.d.ts +1 -1
  185. package/packages/tool/lib/index.js +1 -1
  186. package/packages/tool/package.json +2 -2
  187. package/packages/ui/lib/config.d.ts +12 -2
  188. package/packages/ui/lib/config.js +18 -2
  189. package/packages/ui/lib/deps.d.ts +1 -1
  190. package/packages/ui/lib/deps.js +1 -1
  191. package/packages/ui/lib/form.d.ts +1 -1
  192. package/packages/ui/lib/form.js +1 -1
  193. package/packages/ui/lib/index.d.ts +7 -1
  194. package/packages/ui/lib/index.js +12 -2
  195. package/packages/ui/lib/meter.d.ts +1 -1
  196. package/packages/ui/lib/meter.js +1 -1
  197. package/packages/ui/lib/ops/engine.d.ts +142 -34
  198. package/packages/ui/lib/ops/engine.js +469 -265
  199. package/packages/ui/lib/ops/get-steps.d.ts +98 -0
  200. package/packages/ui/lib/ops/get-steps.js +359 -0
  201. package/packages/ui/lib/ops/hf.d.ts +26 -11
  202. package/packages/ui/lib/ops/hf.js +115 -25
  203. package/packages/ui/lib/ops/logs.d.ts +70 -15
  204. package/packages/ui/lib/ops/logs.js +96 -35
  205. package/packages/ui/lib/ops/model.d.ts +2 -10
  206. package/packages/ui/lib/ops/model.js +9 -16
  207. package/packages/ui/lib/request.d.ts +1 -1
  208. package/packages/ui/lib/request.js +1 -1
  209. package/packages/ui/lib/route.d.ts +22 -6
  210. package/packages/ui/lib/route.js +32 -9
  211. package/packages/ui/lib/routes/chat-template.d.ts +1 -14
  212. package/packages/ui/lib/routes/chat-template.js +1 -37
  213. package/packages/ui/lib/routes/deps.d.ts +1 -16
  214. package/packages/ui/lib/routes/deps.js +1 -27
  215. package/packages/ui/lib/routes/download.d.ts +1 -16
  216. package/packages/ui/lib/routes/download.js +1 -48
  217. package/packages/ui/lib/routes/get.d.ts +1 -18
  218. package/packages/ui/lib/routes/get.js +66 -17
  219. package/packages/ui/lib/routes/install.d.ts +1 -1
  220. package/packages/ui/lib/routes/install.js +1 -1
  221. package/packages/ui/lib/routes/launch.d.ts +13 -7
  222. package/packages/ui/lib/routes/launch.js +33 -9
  223. package/packages/ui/lib/routes/logs.d.ts +57 -0
  224. package/packages/ui/lib/routes/logs.js +117 -0
  225. package/packages/ui/lib/routes/provider-delete.d.ts +1 -1
  226. package/packages/ui/lib/routes/provider-delete.js +1 -1
  227. package/packages/ui/lib/routes/register.d.ts +1 -1
  228. package/packages/ui/lib/routes/register.js +1 -1
  229. package/packages/ui/lib/routes/save.d.ts +1 -1
  230. package/packages/ui/lib/routes/save.js +22 -2
  231. package/packages/ui/lib/routes/stop.d.ts +7 -4
  232. package/packages/ui/lib/routes/stop.js +7 -4
  233. package/packages/ui/lib/routes/stream.d.ts +40 -0
  234. package/packages/ui/lib/routes/stream.js +68 -0
  235. package/packages/ui/lib/routes/summary.d.ts +1 -1
  236. package/packages/ui/lib/routes/summary.js +1 -1
  237. package/packages/ui/lib/routes/unregister.d.ts +1 -1
  238. package/packages/ui/lib/routes/unregister.js +1 -1
  239. package/packages/ui/lib/viewmodels/deps.d.ts +1 -31
  240. package/packages/ui/lib/viewmodels/deps.js +1 -89
  241. package/packages/ui/lib/viewmodels/depsHelpers.d.ts +1 -28
  242. package/packages/ui/lib/viewmodels/depsHelpers.js +72 -11
  243. package/packages/ui/lib/viewmodels/summary.d.ts +7 -2
  244. package/packages/ui/lib/viewmodels/summary.js +55 -35
  245. package/packages/ui/lib/viewmodels/summaryHelpers.d.ts +1 -1
  246. package/packages/ui/lib/viewmodels/summaryHelpers.js +1 -1
  247. package/packages/ui/lib/warnings.d.ts +1 -1
  248. package/packages/ui/lib/warnings.js +1 -1
  249. package/packages/ui/package.json +4 -4
  250. package/packages/providers/lib/engines/strata.d.ts +0 -53
@@ -7,17 +7,20 @@
7
7
  * here, never a rewire of the card.
8
8
  * @module dsh-plugin-local-infer/providers/engines
9
9
  */
10
- import { HYPERQWEN_PARAMETERS } from "./engines/hyperqwen.js";
11
- import { INFERNIX_PARAMETERS } from "./engines/infernix.js";
12
- import { LLAMACPP_PARAMETERS } from "./engines/llamacpp.js";
13
- import { NINFER_PARAMETERS } from "./engines/ninfer.js";
14
- import { STRATA_PARAMETERS } from "./engines/strata.js";
10
+ import { BASALT_PARAMETERS } from "./engines/basalt/basalt.js";
11
+ import { HYPERQWEN_PARAMETERS } from "./engines/hyperqwen/hyperqwen.js";
12
+ import { INFERNIX_PARAMETERS } from "./engines/infernix/infernix.js";
13
+ import { LLAMACPP_PARAMETERS } from "./engines/llamacpp/llamacpp.js";
14
+ import { NINFER_PARAMETERS } from "./engines/ninfer/ninfer.js";
15
+ import { STRATA_PARAMETERS } from "./engines/strata/strata.js";
15
16
  /**
16
17
  * The engines the Web card offers, in the order the card lists them. NInfer,
17
- * Hyper-Qwen, Infernix, llama.cpp, and Strata all carry parameter surfaces
18
- * (llama.cpp's is the specified set the plan names, verified when the binary
19
- * lands); Strata's surface is the `strata launch` flags and it supports all
20
- * three build modes (docker, source build, and the binary install).
18
+ * Hyper-Qwen, Infernix, llama.cpp, Strata, and Basalt all carry parameter
19
+ * surfaces (llama.cpp's is the specified set the plan names, verified when the
20
+ * binary lands); Strata's surface is the `strata launch` flags and it supports
21
+ * all three build modes (docker, source build, and the binary install);
22
+ * Basalt's surface is the `basalt_config.json` settings and it is local-build
23
+ * only (the C++/CUDA engine ships no container image).
21
24
  */
22
25
  export const ENGINES = [
23
26
  {
@@ -50,5 +53,13 @@ export const ENGINES = [
50
53
  supports: { docker: true, local: true, binary: true },
51
54
  parameters: STRATA_PARAMETERS,
52
55
  },
56
+ {
57
+ // Basalt is the C++/CUDA engine for the Qwen3.8-Flash-Next MoE model,
58
+ // Blackwell-only: a local source build, no container image.
59
+ id: 'basalt',
60
+ label: 'Basalt',
61
+ supports: { docker: false, local: true },
62
+ parameters: BASALT_PARAMETERS,
63
+ },
53
64
  ];
54
- //# sourceMappingURL=engines.js.map
65
+ //# sourceMappingURL=engines.js.map
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Built-in hardware guidelines. The rules that every engine shares, expressed
3
3
  * as `Guideline` data over (config, hardware): the docker-availability gate,
4
- * the host RAM tier ceiling, and the WSL2 pin-memory boot abort. Each is
5
- * registered with `ctx.localInfer` by the provider `apply`, so a per-engine
6
- * override or an extra rule composes on top without touching these.
4
+ * the host RAM tier ceiling, the WSL2 pin-memory boot abort, and the Basalt
5
+ * Blackwell (sm_120) gate. Each is registered with `ctx.localInfer` by the
6
+ * provider `apply`, so a per-engine override or an extra rule composes on top
7
+ * without touching these.
7
8
  *
8
9
  * The rules that need the registered VramModel (the estimator-backed
9
10
  * "exceeds usable VRAM" and "spec needs draft weights" rules) live in the
@@ -26,4 +27,4 @@ export declare const HOST_STATE_IMAGE_BYTES = 195897344;
26
27
  * degrades before it breaks.
27
28
  */
28
29
  export declare const BUILTIN_GUIDELINES: readonly Guideline[];
29
- //# sourceMappingURL=guidelines.d.ts.map
30
+ //# sourceMappingURL=guidelines.d.ts.map
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Built-in hardware guidelines. The rules that every engine shares, expressed
3
3
  * as `Guideline` data over (config, hardware): the docker-availability gate,
4
- * the host RAM tier ceiling, and the WSL2 pin-memory boot abort. Each is
5
- * registered with `ctx.localInfer` by the provider `apply`, so a per-engine
6
- * override or an extra rule composes on top without touching these.
4
+ * the host RAM tier ceiling, the WSL2 pin-memory boot abort, and the Basalt
5
+ * Blackwell (sm_120) gate. Each is registered with `ctx.localInfer` by the
6
+ * provider `apply`, so a per-engine override or an extra rule composes on top
7
+ * without touching these.
7
8
  *
8
9
  * The rules that need the registered VramModel (the estimator-backed
9
10
  * "exceeds usable VRAM" and "spec needs draft weights" rules) live in the
@@ -11,7 +12,7 @@
11
12
  * a model, not against the hardware alone.
12
13
  * @module dsh-plugin-local-infer/providers/guidelines
13
14
  */
14
- import { infernixDraftModelPath } from "./engines/infernix.js";
15
+ import { infernixDraftModelPath } from "./engines/infernix/infernix.js";
15
16
  /**
16
17
  * One pinned Host StateImage, in bytes. The NInfer measured figure for the
17
18
  * 27B artifact (195,897,344 B, the README's Host StateImage size), used as
@@ -73,5 +74,17 @@ export const BUILTIN_GUIDELINES = [
73
74
  'draftModelPreset' in config &&
74
75
  infernixDraftModelPath(config) === null,
75
76
  },
77
+ {
78
+ // Basalt is Blackwell-only: the engine is compiled for sm_120 and its
79
+ // NVFP4 expert kernels need it. A basalt config on a card that reports a
80
+ // different SM number (or no card at all) cannot boot, so the rule names
81
+ // the fix before the engine starts. It is basalt-specific: only basalt
82
+ // configs carry the engine key, so every other engine stays silent.
83
+ id: 'basalt-needs-blackwell',
84
+ level: 'error',
85
+ message: 'Basalt needs an NVIDIA Blackwell GPU (SM 120). This machine reports a different SM number, or no GPU at all.',
86
+ anchors: ['gpu'],
87
+ when: (config, hw) => config.engine === 'basalt' && hw.gpu?.sm !== 120,
88
+ },
76
89
  ];
77
- //# sourceMappingURL=guidelines.js.map
90
+ //# sourceMappingURL=guidelines.js.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The concrete providers for the local-inference capability: the engine
3
- * adapters (ninfer, hyperqwen, llamacpp, infernix, strata), the NInfer
3
+ * adapters (ninfer, hyperqwen, llamacpp, infernix, strata, basalt), the NInfer
4
4
  * VramModel, the built-in presets, the built-in guidelines, and the per-OS
5
5
  * SystemDep install command data. Each registers itself with `ctx.localInfer`.
6
6
  *
@@ -18,41 +18,45 @@ export declare const inject: string[];
18
18
  * Phase 5 adapters. NInfer's surface is CLI flags (`toArgv`); Hyper-Qwen's is
19
19
  * `.env` keys (`toEnv`).
20
20
  */
21
- export { CTX_OPTIONS, HYPERQWEN_PARAMETERS, KV_OPTIONS, SPEC_OPTIONS as HYPERQWEN_SPEC_OPTIONS, } from './engines/hyperqwen.ts';
22
- export { CHAT_TEMPLATE_OPTIONS, DEVICE_PROFILE_OPTIONS, KV_DTYPE_OPTIONS, NINFER_PARAMETERS, SPEC_OPTIONS as NINFER_SPEC_OPTIONS, } from './engines/ninfer.ts';
23
- export { NINFER_VRAM_MODELS, ninferVramModel } from './vram.ts';
21
+ export { CTX_OPTIONS, HYPERQWEN_PARAMETERS, KV_OPTIONS, SPEC_OPTIONS as HYPERQWEN_SPEC_OPTIONS, } from './engines/hyperqwen/hyperqwen.ts';
22
+ export { CHAT_TEMPLATE_OPTIONS, DEVICE_PROFILE_OPTIONS, KV_DTYPE_OPTIONS, NINFER_PARAMETERS, SPEC_OPTIONS as NINFER_SPEC_OPTIONS, } from './engines/ninfer/ninfer.ts';
23
+ export { BASALT_VRAM_MODELS, NINFER_VRAM_MODELS, basaltVramModel, ninferVramModel, } from './vram.ts';
24
24
  export { BUILTIN_GUIDELINES, HOST_STATE_IMAGE_BYTES } from './guidelines.ts';
25
25
  export { ENGINES } from './engines.ts';
26
26
  export type { EngineInfo } from './engines.ts';
27
- export { ENGINE_SOURCES, FORK_REMOTE, buildEngineRepo, engineBuildSteps, engineSource, syncAndRebuildEngine, syncEngineRepo, } from './acquire.ts';
28
- export type { AcquireLog, EngineSource, EngineStepResult, SyncRebuildRequest, SyncRebuildResult, } from './acquire.ts';
29
- export { ENGINE_DEP_PLANS, SYSTEM_DEPS } from './deps.ts';
27
+ export { ENGINE_SOURCES, FORK_REMOTE, buildEngineRepo, engineBuildSteps, engineSource, syncAndRebuildEngine, syncEngineForDeploy, syncEngineRepo, } from './acquire.ts';
28
+ export type { AcquireLog, EngineDeploySync, EngineSource, EngineStepResult, SyncRebuildRequest, SyncRebuildResult, SyncStepResult, } from './acquire.ts';
29
+ export { ENGINE_DEP_PLANS, SYSTEM_DEPS, engineLocalDeps } from './deps.ts';
30
30
  export { ENGINE_PLATFORM_DEFAULTS, enginePlatformDefaults } from './platform.ts';
31
31
  export type { EnginePlatformDefaults } from './platform.ts';
32
32
  export { BUILTIN_PRESETS, PRESET_SOURCES, extractJsonBlock } from './presets.ts';
33
33
  export { DEFAULT_MODELS, defaultModelFor, defaultModelsForEngine } from './model-defaults.ts';
34
- export { customArgEnv, customArgFlags, envFromSpecs, flagsFromSpecs, nodeLifecycleHost, pollHealth, } from './adapters.ts';
35
- export { HyperQwenAdapter } from './engines/hyperqwenAdapter.ts';
36
- export { InfernixAdapter } from './engines/infernixAdapter.ts';
37
- export { LLAMACPP_DOCKER_IMAGE, LlamaCppAdapter } from './engines/llamacppAdapter.ts';
38
- export { NINFER_DOCKER_IMAGE, NINFER_MODEL_ARTIFACTS, NInferAdapter } from './engines/ninferAdapter.ts';
39
- export { STRATA_DOCKER_IMAGE, StrataAdapter } from './engines/strataAdapter.ts';
40
- export type { NInferModelArtifact } from './engines/ninferAdapter.ts';
41
- export { KV_CACHE_TYPE_OPTIONS, LLAMACPP_MODEL_ARTIFACTS, LLAMACPP_PARAMETERS, llamaCppModelKey, } from './engines/llamacpp.ts';
42
- export type { LlamaCppModelArtifact } from './engines/llamacpp.ts';
43
- export { DFLASH2_CUSTOM_VALUE, DFLASH2_GATE_MESSAGE, INFERNIX_DFLASH2_MODELS, INFERNIX_KV_DTYPE_OPTIONS, INFERNIX_MODEL_ARTIFACTS, INFERNIX_NGRAM_RESIDENCY_OPTIONS, INFERNIX_NGRAM_VOLUMES, INFERNIX_PARAMETERS, INFERNIX_REASONING_LOOP_OPTIONS, INFERNIX_SPEC_OPTIONS, SPEC_GATE_MESSAGE as INFERNIX_SPEC_GATE_MESSAGE, dflash2PresetOptions, infernixArtifactFor, infernixDraftModelPath, infernixGetDownloads, infernixModelKey, } from './engines/infernix.ts';
44
- export type { InfernixDFlash2Model, InfernixModelArtifact, InfernixNgramVolume, } from './engines/infernix.ts';
45
- export { STRATA_PARAMETERS } from './engines/strata.ts';
34
+ export { createNodeLifecycleHost, customArgEnv, customArgFlags, envFromSpecs, flagsFromSpecs, nodeLifecycleHost, pollHealth, resolveLaunchArgv, } from './adapters.ts';
35
+ export type { SudoHook } from './adapters.ts';
36
+ export { HyperQwenAdapter } from './engines/hyperqwen/hyperqwenAdapter.ts';
37
+ export { InfernixAdapter } from './engines/infernix/infernixAdapter.ts';
38
+ export { LLAMACPP_DOCKER_IMAGE, LlamaCppAdapter } from './engines/llamacpp/llamacppAdapter.ts';
39
+ export { NINFER_DOCKER_IMAGE, NINFER_MODEL_ARTIFACTS, NInferAdapter } from './engines/ninfer/ninferAdapter.ts';
40
+ export { STRATA_DOCKER_IMAGE, StrataAdapter } from './engines/strata/strataAdapter.ts';
41
+ export type { NInferModelArtifact } from './engines/ninfer/ninferAdapter.ts';
42
+ export { KV_CACHE_TYPE_OPTIONS, LLAMACPP_MODEL_ARTIFACTS, LLAMACPP_PARAMETERS, llamaCppModelKey, } from './engines/llamacpp/llamacpp.ts';
43
+ export type { LlamaCppModelArtifact } from './engines/llamacpp/llamacpp.ts';
44
+ export { DFLASH2_CUSTOM_VALUE, DFLASH2_GATE_MESSAGE, INFERNIX_DFLASH2_MODELS, INFERNIX_KV_DTYPE_OPTIONS, INFERNIX_MODEL_ARTIFACTS, INFERNIX_NGRAM_RESIDENCY_OPTIONS, INFERNIX_NGRAM_VOLUMES, INFERNIX_PARAMETERS, INFERNIX_REASONING_LOOP_OPTIONS, INFERNIX_SPEC_OPTIONS, SPEC_GATE_MESSAGE as INFERNIX_SPEC_GATE_MESSAGE, dflash2PresetOptions, infernixArtifactFor, infernixDraftModelPath, infernixGetDownloads, infernixModelKey, } from './engines/infernix/infernix.ts';
45
+ export type { InfernixDFlash2Model, InfernixModelArtifact, InfernixNgramVolume, } from './engines/infernix/infernix.ts';
46
+ export { STRATA_PARAMETERS } from './engines/strata/strata.ts';
47
+ export { BASALT_PARAMETERS } from './engines/basalt/basalt.ts';
48
+ export { BasaltAdapter } from './engines/basalt/basaltAdapter.ts';
46
49
  /**
47
- * Mount the providers. The NInfer measured VramModels register here so the
48
- * service's estimate prices a named model; the built-in hardware guidelines
49
- * register so the guideline engine warns on docker, host RAM, and WSL2
50
- * before the engine boots; the per-engine dep plans register so the deps,
51
- * installString, and runInstall entry points resolve a plan for every engine
52
- * the card offers; the built-in presets register so the defaults resolver
53
- * resolves a sane starting config for the detected hardware class; and the
54
- * engine adapters register so the launch, stop, and register entry points
55
- * route a plan to the adapter that rendered it.
50
+ * Mount the providers. The NInfer measured VramModels and the Basalt
51
+ * estimated VramModel register here so the service's estimate prices a named
52
+ * model; the built-in hardware guidelines register so the guideline engine
53
+ * warns on docker, host RAM, WSL2, and the Basalt Blackwell gate before the
54
+ * engine boots; the per-engine dep plans register so the deps, installString,
55
+ * and runInstall entry points resolve a plan for every engine the card
56
+ * offers; the built-in presets register so the defaults resolver resolves a
57
+ * sane starting config for the detected hardware class; and the engine
58
+ * adapters register so the launch, stop, and register entry points route a
59
+ * plan to the adapter that rendered it.
56
60
  */
57
61
  export declare function apply(ctx: Context): void;
58
62
  declare const plugin: {
@@ -61,4 +65,4 @@ declare const plugin: {
61
65
  apply: typeof apply;
62
66
  };
63
67
  export default plugin;
64
- //# sourceMappingURL=index.d.ts.map
68
+ //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The concrete providers for the local-inference capability: the engine
3
- * adapters (ninfer, hyperqwen, llamacpp, infernix, strata), the NInfer
3
+ * adapters (ninfer, hyperqwen, llamacpp, infernix, strata, basalt), the NInfer
4
4
  * VramModel, the built-in presets, the built-in guidelines, and the per-OS
5
5
  * SystemDep install command data. Each registers itself with `ctx.localInfer`.
6
6
  *
@@ -11,16 +11,17 @@
11
11
  * @module dsh-plugin-local-infer/providers
12
12
  */
13
13
  import { createNodeLifecycleHost } from "./adapters.js";
14
- import { HyperQwenAdapter } from "./engines/hyperqwenAdapter.js";
15
- import { InfernixAdapter } from "./engines/infernixAdapter.js";
16
- import { LlamaCppAdapter } from "./engines/llamacppAdapter.js";
17
- import { NInferAdapter } from "./engines/ninferAdapter.js";
18
- import { StrataAdapter } from "./engines/strataAdapter.js";
14
+ import { BasaltAdapter } from "./engines/basalt/basaltAdapter.js";
15
+ import { HyperQwenAdapter } from "./engines/hyperqwen/hyperqwenAdapter.js";
16
+ import { InfernixAdapter } from "./engines/infernix/infernixAdapter.js";
17
+ import { LlamaCppAdapter } from "./engines/llamacpp/llamacppAdapter.js";
18
+ import { NInferAdapter } from "./engines/ninfer/ninferAdapter.js";
19
+ import { StrataAdapter } from "./engines/strata/strataAdapter.js";
19
20
  import { createDshDebugLogger } from "./debug.js";
20
21
  import { ENGINE_DEP_PLANS } from "./deps.js";
21
22
  import { BUILTIN_GUIDELINES } from "./guidelines.js";
22
23
  import { BUILTIN_PRESETS } from "./presets.js";
23
- import { NINFER_VRAM_MODELS } from "./vram.js";
24
+ import { BASALT_VRAM_MODELS, NINFER_VRAM_MODELS } from "./vram.js";
24
25
  export const name = 'local-infer-providers';
25
26
  export const inject = ['localInfer'];
26
27
  /**
@@ -28,41 +29,47 @@ export const inject = ['localInfer'];
28
29
  * Phase 5 adapters. NInfer's surface is CLI flags (`toArgv`); Hyper-Qwen's is
29
30
  * `.env` keys (`toEnv`).
30
31
  */
31
- export { CTX_OPTIONS, HYPERQWEN_PARAMETERS, KV_OPTIONS, SPEC_OPTIONS as HYPERQWEN_SPEC_OPTIONS, } from "./engines/hyperqwen.js";
32
- export { CHAT_TEMPLATE_OPTIONS, DEVICE_PROFILE_OPTIONS, KV_DTYPE_OPTIONS, NINFER_PARAMETERS, SPEC_OPTIONS as NINFER_SPEC_OPTIONS, } from "./engines/ninfer.js";
33
- export { NINFER_VRAM_MODELS, ninferVramModel } from "./vram.js";
32
+ export { CTX_OPTIONS, HYPERQWEN_PARAMETERS, KV_OPTIONS, SPEC_OPTIONS as HYPERQWEN_SPEC_OPTIONS, } from "./engines/hyperqwen/hyperqwen.js";
33
+ export { CHAT_TEMPLATE_OPTIONS, DEVICE_PROFILE_OPTIONS, KV_DTYPE_OPTIONS, NINFER_PARAMETERS, SPEC_OPTIONS as NINFER_SPEC_OPTIONS, } from "./engines/ninfer/ninfer.js";
34
+ export { BASALT_VRAM_MODELS, NINFER_VRAM_MODELS, basaltVramModel, ninferVramModel, } from "./vram.js";
34
35
  export { BUILTIN_GUIDELINES, HOST_STATE_IMAGE_BYTES } from "./guidelines.js";
35
36
  export { ENGINES } from "./engines.js";
36
- export { ENGINE_SOURCES, FORK_REMOTE, buildEngineRepo, engineBuildSteps, engineSource, syncAndRebuildEngine, syncEngineRepo, } from "./acquire.js";
37
- export { ENGINE_DEP_PLANS, SYSTEM_DEPS } from "./deps.js";
37
+ export { ENGINE_SOURCES, FORK_REMOTE, buildEngineRepo, engineBuildSteps, engineSource, syncAndRebuildEngine, syncEngineForDeploy, syncEngineRepo, } from "./acquire.js";
38
+ export { ENGINE_DEP_PLANS, SYSTEM_DEPS, engineLocalDeps } from "./deps.js";
38
39
  export { ENGINE_PLATFORM_DEFAULTS, enginePlatformDefaults } from "./platform.js";
39
40
  export { BUILTIN_PRESETS, PRESET_SOURCES, extractJsonBlock } from "./presets.js";
40
41
  export { DEFAULT_MODELS, defaultModelFor, defaultModelsForEngine } from "./model-defaults.js";
41
- export { customArgEnv, customArgFlags, envFromSpecs, flagsFromSpecs, nodeLifecycleHost, pollHealth, } from "./adapters.js";
42
- export { HyperQwenAdapter } from "./engines/hyperqwenAdapter.js";
43
- export { InfernixAdapter } from "./engines/infernixAdapter.js";
44
- export { LLAMACPP_DOCKER_IMAGE, LlamaCppAdapter } from "./engines/llamacppAdapter.js";
45
- export { NINFER_DOCKER_IMAGE, NINFER_MODEL_ARTIFACTS, NInferAdapter } from "./engines/ninferAdapter.js";
46
- export { STRATA_DOCKER_IMAGE, StrataAdapter } from "./engines/strataAdapter.js";
47
- export { KV_CACHE_TYPE_OPTIONS, LLAMACPP_MODEL_ARTIFACTS, LLAMACPP_PARAMETERS, llamaCppModelKey, } from "./engines/llamacpp.js";
48
- export { DFLASH2_CUSTOM_VALUE, DFLASH2_GATE_MESSAGE, INFERNIX_DFLASH2_MODELS, INFERNIX_KV_DTYPE_OPTIONS, INFERNIX_MODEL_ARTIFACTS, INFERNIX_NGRAM_RESIDENCY_OPTIONS, INFERNIX_NGRAM_VOLUMES, INFERNIX_PARAMETERS, INFERNIX_REASONING_LOOP_OPTIONS, INFERNIX_SPEC_OPTIONS, SPEC_GATE_MESSAGE as INFERNIX_SPEC_GATE_MESSAGE, dflash2PresetOptions, infernixArtifactFor, infernixDraftModelPath, infernixGetDownloads, infernixModelKey, } from "./engines/infernix.js";
49
- export { STRATA_PARAMETERS } from "./engines/strata.js";
42
+ export { createNodeLifecycleHost, customArgEnv, customArgFlags, envFromSpecs, flagsFromSpecs, nodeLifecycleHost, pollHealth, resolveLaunchArgv, } from "./adapters.js";
43
+ export { HyperQwenAdapter } from "./engines/hyperqwen/hyperqwenAdapter.js";
44
+ export { InfernixAdapter } from "./engines/infernix/infernixAdapter.js";
45
+ export { LLAMACPP_DOCKER_IMAGE, LlamaCppAdapter } from "./engines/llamacpp/llamacppAdapter.js";
46
+ export { NINFER_DOCKER_IMAGE, NINFER_MODEL_ARTIFACTS, NInferAdapter } from "./engines/ninfer/ninferAdapter.js";
47
+ export { STRATA_DOCKER_IMAGE, StrataAdapter } from "./engines/strata/strataAdapter.js";
48
+ export { KV_CACHE_TYPE_OPTIONS, LLAMACPP_MODEL_ARTIFACTS, LLAMACPP_PARAMETERS, llamaCppModelKey, } from "./engines/llamacpp/llamacpp.js";
49
+ export { DFLASH2_CUSTOM_VALUE, DFLASH2_GATE_MESSAGE, INFERNIX_DFLASH2_MODELS, INFERNIX_KV_DTYPE_OPTIONS, INFERNIX_MODEL_ARTIFACTS, INFERNIX_NGRAM_RESIDENCY_OPTIONS, INFERNIX_NGRAM_VOLUMES, INFERNIX_PARAMETERS, INFERNIX_REASONING_LOOP_OPTIONS, INFERNIX_SPEC_OPTIONS, SPEC_GATE_MESSAGE as INFERNIX_SPEC_GATE_MESSAGE, dflash2PresetOptions, infernixArtifactFor, infernixDraftModelPath, infernixGetDownloads, infernixModelKey, } from "./engines/infernix/infernix.js";
50
+ export { STRATA_PARAMETERS } from "./engines/strata/strata.js";
51
+ export { BASALT_PARAMETERS } from "./engines/basalt/basalt.js";
52
+ export { BasaltAdapter } from "./engines/basalt/basaltAdapter.js";
50
53
  /**
51
- * Mount the providers. The NInfer measured VramModels register here so the
52
- * service's estimate prices a named model; the built-in hardware guidelines
53
- * register so the guideline engine warns on docker, host RAM, and WSL2
54
- * before the engine boots; the per-engine dep plans register so the deps,
55
- * installString, and runInstall entry points resolve a plan for every engine
56
- * the card offers; the built-in presets register so the defaults resolver
57
- * resolves a sane starting config for the detected hardware class; and the
58
- * engine adapters register so the launch, stop, and register entry points
59
- * route a plan to the adapter that rendered it.
54
+ * Mount the providers. The NInfer measured VramModels and the Basalt
55
+ * estimated VramModel register here so the service's estimate prices a named
56
+ * model; the built-in hardware guidelines register so the guideline engine
57
+ * warns on docker, host RAM, WSL2, and the Basalt Blackwell gate before the
58
+ * engine boots; the per-engine dep plans register so the deps, installString,
59
+ * and runInstall entry points resolve a plan for every engine the card
60
+ * offers; the built-in presets register so the defaults resolver resolves a
61
+ * sane starting config for the detected hardware class; and the engine
62
+ * adapters register so the launch, stop, and register entry points route a
63
+ * plan to the adapter that rendered it.
60
64
  */
61
65
  export function apply(ctx) {
62
66
  const localInfer = ctx.localInfer;
63
67
  for (const model of NINFER_VRAM_MODELS) {
64
68
  localInfer.registerVramModel(model);
65
69
  }
70
+ for (const model of BASALT_VRAM_MODELS) {
71
+ localInfer.registerVramModel(model);
72
+ }
66
73
  for (const guideline of BUILTIN_GUIDELINES) {
67
74
  localInfer.registerGuideline(guideline);
68
75
  }
@@ -76,14 +83,19 @@ export function apply(ctx) {
76
83
  // (the HARNESS_LOG_LEVEL env var or the DSH logger level config), the host
77
84
  // logs every command it issues to an engine, from build to launch, through
78
85
  // the cordis logger's debug method. A normal run wires the no-debug host, so
79
- // the command path stays quiet.
80
- const host = createNodeLifecycleHost(createDshDebugLogger(ctx));
86
+ // the command path stays quiet. The sudo hook reports a waiting
87
+ // `sudo ln -sf ...` deploy link through the service's notifySudoNeeded, so
88
+ // the route-registered observer can show the CLI note while the card waits.
89
+ const host = createNodeLifecycleHost(createDshDebugLogger(ctx), {
90
+ notify: (command) => localInfer.notifySudoNeeded(command),
91
+ });
81
92
  localInfer.registerEngine(new NInferAdapter(host));
82
93
  localInfer.registerEngine(new HyperQwenAdapter(host));
83
94
  localInfer.registerEngine(new LlamaCppAdapter(host));
84
95
  localInfer.registerEngine(new InfernixAdapter(host));
85
96
  localInfer.registerEngine(new StrataAdapter(host));
97
+ localInfer.registerEngine(new BasaltAdapter(host));
86
98
  }
87
99
  const plugin = { name, inject, apply };
88
100
  export default plugin;
89
- //# sourceMappingURL=index.js.map
101
+ //# sourceMappingURL=index.js.map
@@ -7,6 +7,10 @@
7
7
  * n-gram volume the `--ngram-volume` flag reads). Strata carries the two
8
8
  * models the README's Models section links (Gyro and DeepSeek V4.1-Flash),
9
9
  * each named by the model the engine accepts and the repo it downloads.
10
+ * Basalt carries the two `.basalt` artifacts the engine serves (the
11
+ * Qwen3.8-Flash-Next NVFP4 conversion and the DeepSeek-V4.1-Flash UD-IQ1_M
12
+ * pack, each named by the repo and file the adapter's deploy step
13
+ * downloads).
10
14
  *
11
15
  * The list is the single source the card's Model dropdown, the model
12
16
  * presence check, and the hf CLI download route read. Adding a model is a
@@ -33,4 +37,4 @@ export declare function defaultModelsForEngine(engineId: string): readonly Defau
33
37
  * undefined entry with a 404, so a model no default names never downloads.
34
38
  */
35
39
  export declare function defaultModelFor(engineId: string, modelId: string): DefaultModel | undefined;
36
- //# sourceMappingURL=model-defaults.d.ts.map
40
+ //# sourceMappingURL=model-defaults.d.ts.map
@@ -7,12 +7,17 @@
7
7
  * n-gram volume the `--ngram-volume` flag reads). Strata carries the two
8
8
  * models the README's Models section links (Gyro and DeepSeek V4.1-Flash),
9
9
  * each named by the model the engine accepts and the repo it downloads.
10
+ * Basalt carries the two `.basalt` artifacts the engine serves (the
11
+ * Qwen3.8-Flash-Next NVFP4 conversion and the DeepSeek-V4.1-Flash UD-IQ1_M
12
+ * pack, each named by the repo and file the adapter's deploy step
13
+ * downloads).
10
14
  *
11
15
  * The list is the single source the card's Model dropdown, the model
12
16
  * presence check, and the hf CLI download route read. Adding a model is a
13
17
  * data edit here, never a route or card rewire.
14
18
  * @module dsh-plugin-local-infer/providers/model-defaults
15
19
  */
20
+ import { BASALT_DEFAULT_MODEL_ID, BASALT_MODEL_FILE, BASALT_MODEL_REPO, BASALT_DEEPSEEK_MODEL_FILE, BASALT_DEEPSEEK_MODEL_ID, BASALT_DEEPSEEK_MODEL_REPO, } from "./engines/basalt/basalt.js";
16
21
  /**
17
22
  * DEFAULT_MODELS is the default model list, in the order the card lists them.
18
23
  * The 27B keys reuse the VramModel registry ids; the 35B-A3B entries use the
@@ -106,6 +111,25 @@ export const DEFAULT_MODELS = [
106
111
  label: 'Strata DeepSeek V4.1-Flash (2.00 bpw)',
107
112
  url: 'https://huggingface.co/ISTA-DASLab/DeepSeek-V4.1-Flash-1017-GSQ-RCO-GGUF',
108
113
  },
114
+ // The two `.basalt` artifacts the engine serves: for each, the weights,
115
+ // tokenizer, chat template, drafter, vision projector, and default
116
+ // sampling all come from the one file. The repos and files ride the
117
+ // adapter constants, so the download route and the deploy step share one
118
+ // source.
119
+ {
120
+ engineId: 'basalt',
121
+ modelId: BASALT_DEFAULT_MODEL_ID,
122
+ label: 'Basalt Qwen3.8-Flash-Next (NVFP4 DQ6_K)',
123
+ url: `https://huggingface.co/${BASALT_MODEL_REPO}`,
124
+ file: BASALT_MODEL_FILE,
125
+ },
126
+ {
127
+ engineId: 'basalt',
128
+ modelId: BASALT_DEEPSEEK_MODEL_ID,
129
+ label: 'Basalt DeepSeek-V4.1-Flash (UD-IQ1_M)',
130
+ url: `https://huggingface.co/${BASALT_DEEPSEEK_MODEL_REPO}`,
131
+ file: BASALT_DEEPSEEK_MODEL_FILE,
132
+ },
109
133
  ];
110
134
  /**
111
135
  * defaultModelsForEngine reads the default list for one engine id, in list
@@ -123,4 +147,4 @@ export function defaultModelsForEngine(engineId) {
123
147
  export function defaultModelFor(engineId, modelId) {
124
148
  return DEFAULT_MODELS.find((entry) => entry.engineId === engineId && entry.modelId === modelId);
125
149
  }
126
- //# sourceMappingURL=model-defaults.js.map
150
+ //# sourceMappingURL=model-defaults.js.map
@@ -19,13 +19,16 @@ export interface EnginePlatformDefaults {
19
19
  * The per-engine platform defaults, keyed by engine id. The build command is
20
20
  * the engine's first acquisition build step; the docker tag is the upstream
21
21
  * image the adapter pulls. Hyper-Qwen is compose-driven, so its docker tag is
22
- * the vLLM OpenAI server image; Infernix ships no docker image, so it carries
23
- * a build command only.
22
+ * the vLLM OpenAI server image; Infernix and Basalt ship no docker image, so
23
+ * they carry a build command only.
24
24
  */
25
25
  export declare const ENGINE_PLATFORM_DEFAULTS: Record<string, EnginePlatformDefaults>;
26
26
  /**
27
27
  * enginePlatformDefaults reads the registered platform defaults for an engine
28
- * id, or an empty object when none is registered.
28
+ * id on an OS, or an empty object when none is registered. The build command
29
+ * is the engine's first build step for the OS (the Windows vcpkg route on a
30
+ * Windows host), so the card's placeholder seeds the OS-appropriate default.
31
+ * The docker tag is OS-independent and rides the registered entry.
29
32
  */
30
- export declare function enginePlatformDefaults(engineId: string): EnginePlatformDefaults;
31
- //# sourceMappingURL=platform.d.ts.map
33
+ export declare function enginePlatformDefaults(engineId: string, os?: 'linux' | 'windows' | 'macos'): EnginePlatformDefaults;
34
+ //# sourceMappingURL=platform.d.ts.map
@@ -5,9 +5,9 @@
5
5
  * defaults are a data edit here, never a card rewire.
6
6
  * @module dsh-plugin-local-infer/providers/platform
7
7
  */
8
- import { LLAMACPP_DOCKER_IMAGE } from "./engines/llamacppAdapter.js";
9
- import { NINFER_DOCKER_IMAGE } from "./engines/ninferAdapter.js";
10
- import { STRATA_DOCKER_IMAGE } from "./engines/strataAdapter.js";
8
+ import { LLAMACPP_DOCKER_IMAGE } from "./engines/llamacpp/llamacppAdapter.js";
9
+ import { NINFER_DOCKER_IMAGE } from "./engines/ninfer/ninferAdapter.js";
10
+ import { STRATA_DOCKER_IMAGE } from "./engines/strata/strataAdapter.js";
11
11
  import { engineBuildSteps } from "./acquire.js";
12
12
  // The local build command is the engine's first acquisition build step (the
13
13
  // cmake build the deploy step runs in the checkout), read through
@@ -18,12 +18,13 @@ const NINFER_BUILD_COMMAND = engineBuildSteps('ninfer')[0];
18
18
  const LLAMACPP_BUILD_COMMAND = engineBuildSteps('llamacpp')[0];
19
19
  const INFERNIX_BUILD_COMMAND = engineBuildSteps('infernix')[0];
20
20
  const STRATA_BUILD_COMMAND = engineBuildSteps('strata')[0];
21
+ const BASALT_BUILD_COMMAND = engineBuildSteps('basalt')[0];
21
22
  /**
22
23
  * The per-engine platform defaults, keyed by engine id. The build command is
23
24
  * the engine's first acquisition build step; the docker tag is the upstream
24
25
  * image the adapter pulls. Hyper-Qwen is compose-driven, so its docker tag is
25
- * the vLLM OpenAI server image; Infernix ships no docker image, so it carries
26
- * a build command only.
26
+ * the vLLM OpenAI server image; Infernix and Basalt ship no docker image, so
27
+ * they carry a build command only.
27
28
  */
28
29
  export const ENGINE_PLATFORM_DEFAULTS = {
29
30
  ninfer: {
@@ -53,12 +54,25 @@ export const ENGINE_PLATFORM_DEFAULTS = {
53
54
  : {}),
54
55
  defaultDockerTag: STRATA_DOCKER_IMAGE,
55
56
  },
57
+ basalt: {
58
+ // The CMake build command the deploy step runs in the checkout; the
59
+ // engine ships no container image, so no docker tag.
60
+ ...(BASALT_BUILD_COMMAND !== undefined ? { defaultBuildCommand: BASALT_BUILD_COMMAND } : {}),
61
+ },
56
62
  };
57
63
  /**
58
64
  * enginePlatformDefaults reads the registered platform defaults for an engine
59
- * id, or an empty object when none is registered.
65
+ * id on an OS, or an empty object when none is registered. The build command
66
+ * is the engine's first build step for the OS (the Windows vcpkg route on a
67
+ * Windows host), so the card's placeholder seeds the OS-appropriate default.
68
+ * The docker tag is OS-independent and rides the registered entry.
60
69
  */
61
- export function enginePlatformDefaults(engineId) {
62
- return ENGINE_PLATFORM_DEFAULTS[engineId] ?? {};
70
+ export function enginePlatformDefaults(engineId, os = 'linux') {
71
+ const base = ENGINE_PLATFORM_DEFAULTS[engineId] ?? {};
72
+ const buildCommand = engineBuildSteps(engineId, os)[0];
73
+ return {
74
+ ...base,
75
+ ...(buildCommand !== undefined ? { defaultBuildCommand: buildCommand } : {}),
76
+ };
63
77
  }
64
- //# sourceMappingURL=platform.js.map
78
+ //# sourceMappingURL=platform.js.map
@@ -2,10 +2,12 @@
2
2
  * Built-in preset data for the local-inference defaults layer. The presets are
3
3
  * the offline floor the DefaultsResolver resolves against: the NInfer
4
4
  * measured configs (the `config-calculator.html` figures and the
5
- * `qwen-ninfer` launcher, on a 24 GiB sm86 card) and the Hyper-Qwen `.env`
5
+ * `qwen-ninfer` launcher, on a 24 GiB sm86 card), the Hyper-Qwen `.env`
6
6
  * profiles (the single-user speed, long-context, and huge-context tiers from
7
- * `.env.example`). Each preset is keyed by its exact (engine, model, hardware
8
- * class) triple, so it is only trusted for the hardware it was sourced for.
7
+ * `.env.example`), and the Basalt Blackwell long-context starting config
8
+ * (keyed to the wildcard class, since Basalt runs on any Blackwell card).
9
+ * Each preset is keyed by its exact (engine, model, hardware class) triple, so
10
+ * it is only trusted for the hardware it was sourced for.
9
11
  *
10
12
  * The `PRESET_SOURCES` list names the mod-search fetch path: the URL the
11
13
  * bridge pulls and the pure extractor that turns the fetched page into a
@@ -32,4 +34,4 @@ export declare function extractJsonBlock(content: string): Config;
32
34
  * block the docs embed, so a page without one degrades to an empty config.
33
35
  */
34
36
  export declare const PRESET_SOURCES: readonly PresetSource[];
35
- //# sourceMappingURL=presets.d.ts.map
37
+ //# sourceMappingURL=presets.d.ts.map
@@ -2,10 +2,12 @@
2
2
  * Built-in preset data for the local-inference defaults layer. The presets are
3
3
  * the offline floor the DefaultsResolver resolves against: the NInfer
4
4
  * measured configs (the `config-calculator.html` figures and the
5
- * `qwen-ninfer` launcher, on a 24 GiB sm86 card) and the Hyper-Qwen `.env`
5
+ * `qwen-ninfer` launcher, on a 24 GiB sm86 card), the Hyper-Qwen `.env`
6
6
  * profiles (the single-user speed, long-context, and huge-context tiers from
7
- * `.env.example`). Each preset is keyed by its exact (engine, model, hardware
8
- * class) triple, so it is only trusted for the hardware it was sourced for.
7
+ * `.env.example`), and the Basalt Blackwell long-context starting config
8
+ * (keyed to the wildcard class, since Basalt runs on any Blackwell card).
9
+ * Each preset is keyed by its exact (engine, model, hardware class) triple, so
10
+ * it is only trusted for the hardware it was sourced for.
9
11
  *
10
12
  * The `PRESET_SOURCES` list names the mod-search fetch path: the URL the
11
13
  * bridge pulls and the pure extractor that turns the fetched page into a
@@ -13,6 +15,8 @@
13
15
  * fetch date.
14
16
  * @module dsh-plugin-local-infer/providers/presets
15
17
  */
18
+ import { WILDCARD_HARDWARE_CLASS } from '../../core/lib/index.js';
19
+ import { BASALT_DEEPSEEK_MODEL_ID, BASALT_DEFAULT_MODEL_ID, } from "./engines/basalt/basalt.js";
16
20
  /**
17
21
  * The hardware class every built-in preset is sourced for: a 24 GiB Ampere
18
22
  * (sm86) card, the card the NInfer constants were measured on and the card the
@@ -118,11 +122,55 @@ const HYPERQWEN_PRESETS = [
118
122
  label: 'huge-context',
119
123
  },
120
124
  ];
125
+ /**
126
+ * The Basalt built-in presets, keyed to the wildcard hardware class. Basalt
127
+ * is Blackwell-only, so each row is the sane long-context starting config
128
+ * the resolver offers for one artifact on any detected Blackwell card, and
129
+ * each model's own row is its default (the resolver keys presets by the
130
+ * exact engine/model/class triple). The Qwen3.8-Flash-Next NVFP4 row sets
131
+ * int8 KV (half the bytes of the fp16 default) and a 32k context; the
132
+ * DeepSeek-V4.1-Flash UD-IQ1_M row sets only the 32k context, because the
133
+ * pack has no KV-format choice. The engine's own spec defaults (the
134
+ * drafter window, the expert cache, the resident experts) stay at their
135
+ * surface defaults.
136
+ */
137
+ const BASALT_PRESETS = [
138
+ {
139
+ engineId: 'basalt',
140
+ modelId: BASALT_DEFAULT_MODEL_ID,
141
+ hardwareClass: WILDCARD_HARDWARE_CLASS,
142
+ values: {
143
+ kv: 'int8',
144
+ maxContext: 32768,
145
+ },
146
+ source: 'Basalt built-in (Blackwell long-context starting config)',
147
+ label: 'long-context',
148
+ isDefault: true,
149
+ },
150
+ {
151
+ engineId: 'basalt',
152
+ modelId: BASALT_DEEPSEEK_MODEL_ID,
153
+ hardwareClass: WILDCARD_HARDWARE_CLASS,
154
+ // No kv: the DeepSeek pack has no KV-format choice, and a flag the
155
+ // model lacks stops the start from a model entry (the surface keeps kv
156
+ // in the shared engine block, where it is skipped for this model).
157
+ values: {
158
+ maxContext: 32768,
159
+ },
160
+ source: 'Basalt built-in (Blackwell long-context starting config)',
161
+ label: 'long-context',
162
+ isDefault: true,
163
+ },
164
+ ];
121
165
  /**
122
166
  * BUILTIN_PRESETS is the combined preset list the providers register with the
123
167
  * seam. Adding a preset is a data edit here, never a resolver change.
124
168
  */
125
- export const BUILTIN_PRESETS = [...NINFER_PRESETS, ...HYPERQWEN_PRESETS];
169
+ export const BUILTIN_PRESETS = [
170
+ ...NINFER_PRESETS,
171
+ ...HYPERQWEN_PRESETS,
172
+ ...BASALT_PRESETS,
173
+ ];
126
174
  /**
127
175
  * extractJsonBlock reads the first fenced ```json block out of a fetched page
128
176
  * and parses it as the preset values. A page with no json block (or a broken
@@ -158,4 +206,4 @@ export const PRESET_SOURCES = [
158
206
  extract: extractJsonBlock,
159
207
  },
160
208
  ];
161
- //# sourceMappingURL=presets.js.map
209
+ //# sourceMappingURL=presets.js.map