@caupulican/pi-adaptative 0.85.0 → 0.85.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 (267) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/bundled-resources/runtimes/pi-shell-engine/arithmetic.py +364 -0
  3. package/dist/bundled-resources/runtimes/pi-shell-engine/context.py +2 -1
  4. package/dist/bundled-resources/runtimes/pi-shell-engine/errors.py +16 -0
  5. package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +137 -14
  6. package/dist/bundled-resources/runtimes/pi-shell-engine/nodes.py +23 -2
  7. package/dist/bundled-resources/runtimes/pi-shell-engine/parser.py +134 -6
  8. package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +25 -2
  9. package/dist/core/agent-session-services.d.ts.map +1 -1
  10. package/dist/core/agent-session-services.js +2 -0
  11. package/dist/core/agent-session-services.js.map +1 -1
  12. package/dist/core/agent-session.d.ts +6 -5
  13. package/dist/core/agent-session.d.ts.map +1 -1
  14. package/dist/core/agent-session.js +84 -87
  15. package/dist/core/agent-session.js.map +1 -1
  16. package/dist/core/auth-guidance.d.ts.map +1 -1
  17. package/dist/core/auth-guidance.js +3 -0
  18. package/dist/core/auth-guidance.js.map +1 -1
  19. package/dist/core/autonomy/lane-tool-surface.d.ts +2 -0
  20. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  21. package/dist/core/autonomy/lane-tool-surface.js +4 -3
  22. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  23. package/dist/core/background-lane-controller.d.ts +4 -0
  24. package/dist/core/background-lane-controller.d.ts.map +1 -1
  25. package/dist/core/background-lane-controller.js +2 -0
  26. package/dist/core/background-lane-controller.js.map +1 -1
  27. package/dist/core/background-tool-task-controller.d.ts +12 -7
  28. package/dist/core/background-tool-task-controller.d.ts.map +1 -1
  29. package/dist/core/background-tool-task-controller.js +55 -19
  30. package/dist/core/background-tool-task-controller.js.map +1 -1
  31. package/dist/core/bedrock-scope.d.ts +26 -0
  32. package/dist/core/bedrock-scope.d.ts.map +1 -0
  33. package/dist/core/bedrock-scope.js +178 -0
  34. package/dist/core/bedrock-scope.js.map +1 -0
  35. package/dist/core/compaction-controller.d.ts +2 -0
  36. package/dist/core/compaction-controller.d.ts.map +1 -1
  37. package/dist/core/compaction-controller.js +35 -13
  38. package/dist/core/compaction-controller.js.map +1 -1
  39. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  40. package/dist/core/delegation/worker-delegation-controller.js +6 -0
  41. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  42. package/dist/core/extensions/loader.d.ts.map +1 -1
  43. package/dist/core/extensions/loader.js +3 -0
  44. package/dist/core/extensions/loader.js.map +1 -1
  45. package/dist/core/failure-corpus.d.ts +26 -1
  46. package/dist/core/failure-corpus.d.ts.map +1 -1
  47. package/dist/core/failure-corpus.js +17 -0
  48. package/dist/core/failure-corpus.js.map +1 -1
  49. package/dist/core/foreground-recovery-controller.d.ts +25 -2
  50. package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
  51. package/dist/core/foreground-recovery-controller.js +111 -2
  52. package/dist/core/foreground-recovery-controller.js.map +1 -1
  53. package/dist/core/foreground-terminal-handoff-controller.d.ts +27 -0
  54. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -0
  55. package/dist/core/foreground-terminal-handoff-controller.js +56 -0
  56. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -0
  57. package/dist/core/goal-loop-controller.d.ts.map +1 -1
  58. package/dist/core/goal-loop-controller.js +5 -0
  59. package/dist/core/goal-loop-controller.js.map +1 -1
  60. package/dist/core/goals/goal-auto-continue-controller.d.ts +3 -0
  61. package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
  62. package/dist/core/goals/goal-auto-continue-controller.js +28 -7
  63. package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
  64. package/dist/core/human-input-controller.d.ts +9 -0
  65. package/dist/core/human-input-controller.d.ts.map +1 -1
  66. package/dist/core/human-input-controller.js +60 -5
  67. package/dist/core/human-input-controller.js.map +1 -1
  68. package/dist/core/human-input.d.ts +12 -0
  69. package/dist/core/human-input.d.ts.map +1 -1
  70. package/dist/core/human-input.js +59 -12
  71. package/dist/core/human-input.js.map +1 -1
  72. package/dist/core/local-runtime-controller.d.ts.map +1 -1
  73. package/dist/core/local-runtime-controller.js +15 -9
  74. package/dist/core/local-runtime-controller.js.map +1 -1
  75. package/dist/core/memory/providers/file-store.d.ts +1 -0
  76. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  77. package/dist/core/memory/providers/file-store.js +252 -125
  78. package/dist/core/memory/providers/file-store.js.map +1 -1
  79. package/dist/core/model-capability.d.ts +15 -1
  80. package/dist/core/model-capability.d.ts.map +1 -1
  81. package/dist/core/model-capability.js +24 -1
  82. package/dist/core/model-capability.js.map +1 -1
  83. package/dist/core/model-registry.d.ts +5 -0
  84. package/dist/core/model-registry.d.ts.map +1 -1
  85. package/dist/core/model-registry.js +18 -0
  86. package/dist/core/model-registry.js.map +1 -1
  87. package/dist/core/model-router-controller.d.ts +6 -6
  88. package/dist/core/model-router-controller.d.ts.map +1 -1
  89. package/dist/core/model-router-controller.js +5 -5
  90. package/dist/core/model-router-controller.js.map +1 -1
  91. package/dist/core/model-tool-protocol.d.ts +3 -2
  92. package/dist/core/model-tool-protocol.d.ts.map +1 -1
  93. package/dist/core/model-tool-protocol.js +5 -1
  94. package/dist/core/model-tool-protocol.js.map +1 -1
  95. package/dist/core/models/context-sizing.d.ts +1 -0
  96. package/dist/core/models/context-sizing.d.ts.map +1 -1
  97. package/dist/core/models/context-sizing.js +4 -1
  98. package/dist/core/models/context-sizing.js.map +1 -1
  99. package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
  100. package/dist/core/models/default-model-suggestions.js +20 -10
  101. package/dist/core/models/default-model-suggestions.js.map +1 -1
  102. package/dist/core/models/llamacpp-runtime.d.ts +32 -11
  103. package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
  104. package/dist/core/models/llamacpp-runtime.js +79 -28
  105. package/dist/core/models/llamacpp-runtime.js.map +1 -1
  106. package/dist/core/models/local-execution-planner.d.ts +24 -0
  107. package/dist/core/models/local-execution-planner.d.ts.map +1 -0
  108. package/dist/core/models/local-execution-planner.js +119 -0
  109. package/dist/core/models/local-execution-planner.js.map +1 -0
  110. package/dist/core/models/local-inference-profile.d.ts +34 -0
  111. package/dist/core/models/local-inference-profile.d.ts.map +1 -0
  112. package/dist/core/models/local-inference-profile.js +74 -0
  113. package/dist/core/models/local-inference-profile.js.map +1 -0
  114. package/dist/core/models/local-runtime.d.ts +23 -4
  115. package/dist/core/models/local-runtime.d.ts.map +1 -1
  116. package/dist/core/models/local-runtime.js +11 -8
  117. package/dist/core/models/local-runtime.js.map +1 -1
  118. package/dist/core/models/managed-ollama-model.d.ts +26 -0
  119. package/dist/core/models/managed-ollama-model.d.ts.map +1 -0
  120. package/dist/core/models/managed-ollama-model.js +59 -0
  121. package/dist/core/models/managed-ollama-model.js.map +1 -0
  122. package/dist/core/models/model-ref.js +11 -11
  123. package/dist/core/models/model-ref.js.map +1 -1
  124. package/dist/core/models/prism-llamacpp-lifecycle.d.ts +10 -20
  125. package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
  126. package/dist/core/models/prism-llamacpp-lifecycle.js +11 -31
  127. package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
  128. package/dist/core/models/prism-llamacpp-server-probe.d.ts +10 -0
  129. package/dist/core/models/prism-llamacpp-server-probe.d.ts.map +1 -0
  130. package/dist/core/models/prism-llamacpp-server-probe.js +36 -0
  131. package/dist/core/models/prism-llamacpp-server-probe.js.map +1 -0
  132. package/dist/core/models/runtime-arbiter.d.ts +3 -0
  133. package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
  134. package/dist/core/models/runtime-arbiter.js +2 -1
  135. package/dist/core/models/runtime-arbiter.js.map +1 -1
  136. package/dist/core/models/runtime-process.d.ts +7 -1
  137. package/dist/core/models/runtime-process.d.ts.map +1 -1
  138. package/dist/core/models/runtime-process.js +4 -2
  139. package/dist/core/models/runtime-process.js.map +1 -1
  140. package/dist/core/process-matrix/runtime.js +43 -11
  141. package/dist/core/process-matrix/runtime.js.map +1 -1
  142. package/dist/core/research/research-lane-controller.d.ts.map +1 -1
  143. package/dist/core/research/research-lane-controller.js +14 -5
  144. package/dist/core/research/research-lane-controller.js.map +1 -1
  145. package/dist/core/resource-loader.d.ts +2 -0
  146. package/dist/core/resource-loader.d.ts.map +1 -1
  147. package/dist/core/resource-loader.js +18 -6
  148. package/dist/core/resource-loader.js.map +1 -1
  149. package/dist/core/runtime-builder.d.ts +5 -1
  150. package/dist/core/runtime-builder.d.ts.map +1 -1
  151. package/dist/core/runtime-builder.js +37 -4
  152. package/dist/core/runtime-builder.js.map +1 -1
  153. package/dist/core/scout-controller.d.ts +3 -2
  154. package/dist/core/scout-controller.d.ts.map +1 -1
  155. package/dist/core/scout-controller.js +1 -0
  156. package/dist/core/scout-controller.js.map +1 -1
  157. package/dist/core/sdk.d.ts.map +1 -1
  158. package/dist/core/sdk.js +10 -8
  159. package/dist/core/sdk.js.map +1 -1
  160. package/dist/core/settings-manager.d.ts +13 -0
  161. package/dist/core/settings-manager.d.ts.map +1 -1
  162. package/dist/core/settings-manager.js +59 -0
  163. package/dist/core/settings-manager.js.map +1 -1
  164. package/dist/core/system-prompt-builder.d.ts +5 -2
  165. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  166. package/dist/core/system-prompt-builder.js +22 -10
  167. package/dist/core/system-prompt-builder.js.map +1 -1
  168. package/dist/core/system-prompt.d.ts +3 -0
  169. package/dist/core/system-prompt.d.ts.map +1 -1
  170. package/dist/core/system-prompt.js +181 -55
  171. package/dist/core/system-prompt.js.map +1 -1
  172. package/dist/core/tool-protocol-controller.d.ts.map +1 -1
  173. package/dist/core/tool-protocol-controller.js +5 -3
  174. package/dist/core/tool-protocol-controller.js.map +1 -1
  175. package/dist/core/tool-recovery-log-records.d.ts +33 -1
  176. package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
  177. package/dist/core/tool-recovery-log-records.js +59 -12
  178. package/dist/core/tool-recovery-log-records.js.map +1 -1
  179. package/dist/core/tool-recovery-logger.d.ts +12 -1
  180. package/dist/core/tool-recovery-logger.d.ts.map +1 -1
  181. package/dist/core/tool-recovery-logger.js +24 -1
  182. package/dist/core/tool-recovery-logger.js.map +1 -1
  183. package/dist/core/tool-repair-health.d.ts.map +1 -1
  184. package/dist/core/tool-repair-health.js +6 -0
  185. package/dist/core/tool-repair-health.js.map +1 -1
  186. package/dist/core/tools/bash.d.ts +2 -2
  187. package/dist/core/tools/bash.d.ts.map +1 -1
  188. package/dist/core/tools/bash.js +2 -2
  189. package/dist/core/tools/bash.js.map +1 -1
  190. package/dist/core/tools/edit-diff.d.ts +2 -0
  191. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  192. package/dist/core/tools/edit-diff.js +9 -1
  193. package/dist/core/tools/edit-diff.js.map +1 -1
  194. package/dist/core/tools/edit.d.ts +5 -8
  195. package/dist/core/tools/edit.d.ts.map +1 -1
  196. package/dist/core/tools/edit.js +88 -55
  197. package/dist/core/tools/edit.js.map +1 -1
  198. package/dist/core/tools/file-mutation-intent.d.ts +42 -15
  199. package/dist/core/tools/file-mutation-intent.d.ts.map +1 -1
  200. package/dist/core/tools/file-mutation-intent.js +271 -77
  201. package/dist/core/tools/file-mutation-intent.js.map +1 -1
  202. package/dist/core/tools/find.d.ts +2 -1
  203. package/dist/core/tools/find.d.ts.map +1 -1
  204. package/dist/core/tools/find.js +2 -6
  205. package/dist/core/tools/find.js.map +1 -1
  206. package/dist/core/tools/grep.d.ts +2 -1
  207. package/dist/core/tools/grep.d.ts.map +1 -1
  208. package/dist/core/tools/grep.js +2 -6
  209. package/dist/core/tools/grep.js.map +1 -1
  210. package/dist/core/tools/index.d.ts +1 -1
  211. package/dist/core/tools/index.d.ts.map +1 -1
  212. package/dist/core/tools/index.js +1 -1
  213. package/dist/core/tools/index.js.map +1 -1
  214. package/dist/core/tools/managed-search-tool.d.ts +8 -0
  215. package/dist/core/tools/managed-search-tool.d.ts.map +1 -0
  216. package/dist/core/tools/managed-search-tool.js +10 -0
  217. package/dist/core/tools/managed-search-tool.js.map +1 -0
  218. package/dist/core/tools/shell-command-parser.d.ts +4 -3
  219. package/dist/core/tools/shell-command-parser.d.ts.map +1 -1
  220. package/dist/core/tools/shell-command-parser.js +32 -7
  221. package/dist/core/tools/shell-command-parser.js.map +1 -1
  222. package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
  223. package/dist/core/tools/shell-contract-router.js +23 -1
  224. package/dist/core/tools/shell-contract-router.js.map +1 -1
  225. package/dist/core/tools/windows-shell-engine.js +1 -1
  226. package/dist/core/tools/windows-shell-engine.js.map +1 -1
  227. package/dist/core/tools/write.d.ts +5 -10
  228. package/dist/core/tools/write.d.ts.map +1 -1
  229. package/dist/core/tools/write.js +92 -73
  230. package/dist/core/tools/write.js.map +1 -1
  231. package/dist/index.d.ts +1 -1
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +1 -1
  234. package/dist/index.js.map +1 -1
  235. package/dist/modes/interactive/auth-dialogs-controller.d.ts +6 -0
  236. package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
  237. package/dist/modes/interactive/auth-dialogs-controller.js +59 -12
  238. package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
  239. package/dist/modes/interactive/local-model-commands.d.ts +1 -1
  240. package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
  241. package/dist/modes/interactive/local-model-commands.js +51 -8
  242. package/dist/modes/interactive/local-model-commands.js.map +1 -1
  243. package/dist/utils/paths.js +1 -1
  244. package/dist/utils/paths.js.map +1 -1
  245. package/dist/utils/tools-manager.d.ts +18 -1
  246. package/dist/utils/tools-manager.d.ts.map +1 -1
  247. package/dist/utils/tools-manager.js +73 -43
  248. package/dist/utils/tools-manager.js.map +1 -1
  249. package/docs/models.md +1 -1
  250. package/docs/providers.md +34 -10
  251. package/docs/settings.md +1 -1
  252. package/docs/tool-boundary-performance-roadmap-2026-08-02.md +21 -18
  253. package/docs/tool-repair.md +3 -3
  254. package/docs/windows.md +7 -5
  255. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  256. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  257. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  258. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  259. package/examples/extensions/minimal-mode.ts +1 -1
  260. package/examples/extensions/prompt-customizer.ts +2 -2
  261. package/examples/extensions/sandbox/package-lock.json +2 -2
  262. package/examples/extensions/sandbox/package.json +1 -1
  263. package/examples/extensions/ssh.ts +17 -0
  264. package/examples/extensions/with-deps/package-lock.json +2 -2
  265. package/examples/extensions/with-deps/package.json +1 -1
  266. package/npm-shrinkwrap.json +240 -260
  267. package/package.json +6 -6
@@ -0,0 +1,119 @@
1
+ import { BONSAI_27B } from "./llamacpp-runtime.js";
2
+ function descriptor(args) {
3
+ return args;
4
+ }
5
+ const BONSAI_1_7B = descriptor({
6
+ repo: "prism-ml/Bonsai-1.7B-gguf",
7
+ file: "Bonsai-1.7B-Q1_0.gguf",
8
+ displayName: "Bonsai-1.7B (1-bit Q1_0)",
9
+ architecture: "dense",
10
+ runtime: "prism-llamacpp",
11
+ family: "bonsai",
12
+ parameterScale: "1.7B",
13
+ weightFormat: "q1_0",
14
+ });
15
+ const BONSAI_4B = descriptor({
16
+ repo: "prism-ml/Bonsai-4B-gguf",
17
+ file: "Bonsai-4B-Q1_0.gguf",
18
+ displayName: "Bonsai-4B (1-bit Q1_0)",
19
+ architecture: "dense",
20
+ runtime: "prism-llamacpp",
21
+ family: "bonsai",
22
+ parameterScale: "4B",
23
+ weightFormat: "q1_0",
24
+ });
25
+ const BONSAI_8B = descriptor({
26
+ repo: "prism-ml/Bonsai-8B-gguf",
27
+ file: "Bonsai-8B-Q1_0.gguf",
28
+ displayName: "Bonsai-8B (1-bit Q1_0)",
29
+ architecture: "dense",
30
+ runtime: "prism-llamacpp",
31
+ family: "bonsai",
32
+ parameterScale: "8B",
33
+ weightFormat: "q1_0",
34
+ });
35
+ const TERNARY_BONSAI_1_7B = descriptor({
36
+ repo: "prism-ml/Ternary-Bonsai-1.7B-gguf",
37
+ file: "Ternary-Bonsai-1.7B-Q2_0.gguf",
38
+ displayName: "Ternary-Bonsai-1.7B (Q2_0)",
39
+ architecture: "dense",
40
+ runtime: "prism-llamacpp",
41
+ family: "ternary-bonsai",
42
+ parameterScale: "1.7B",
43
+ weightFormat: "q2_0",
44
+ });
45
+ const TERNARY_BONSAI_4B = descriptor({
46
+ repo: "prism-ml/Ternary-Bonsai-4B-gguf",
47
+ file: "Ternary-Bonsai-4B-Q2_0.gguf",
48
+ displayName: "Ternary-Bonsai-4B (Q2_0)",
49
+ architecture: "dense",
50
+ runtime: "prism-llamacpp",
51
+ family: "ternary-bonsai",
52
+ parameterScale: "4B",
53
+ weightFormat: "q2_0",
54
+ });
55
+ const TERNARY_BONSAI_8B = descriptor({
56
+ repo: "prism-ml/Ternary-Bonsai-8B-gguf",
57
+ file: "Ternary-Bonsai-8B-Q2_0.gguf",
58
+ displayName: "Ternary-Bonsai-8B (Q2_0)",
59
+ architecture: "dense",
60
+ runtime: "prism-llamacpp",
61
+ family: "ternary-bonsai",
62
+ parameterScale: "8B",
63
+ weightFormat: "q2_0",
64
+ });
65
+ const TERNARY_BONSAI_27B = descriptor({
66
+ repo: "prism-ml/Ternary-Bonsai-27B-gguf",
67
+ file: "Ternary-Bonsai-27B-Q2_0.gguf",
68
+ mmprojFile: "Ternary-Bonsai-27B-mmproj-Q8_0.gguf",
69
+ displayName: "Ternary-Bonsai-27B (Q2_0 + vision)",
70
+ architecture: "dense",
71
+ runtime: "prism-llamacpp",
72
+ family: "ternary-bonsai",
73
+ parameterScale: "27B",
74
+ weightFormat: "q2_0",
75
+ matchedDrafter: {
76
+ kind: "dspark",
77
+ file: "Ternary-Bonsai-27B-dspark-Q4_1.gguf",
78
+ draftMax: 4,
79
+ minimumContext: 16_384,
80
+ validatedBackend: "cuda",
81
+ },
82
+ });
83
+ /**
84
+ * The complete model set Pi may manage through its pinned Prism llama.cpp adapter. Unknown models
85
+ * never enter this path. Every descriptor pins the exact GGUF artifact so user-provided quant
86
+ * suffixes cannot silently select a different format or runtime.
87
+ */
88
+ export const PRISM_LLAMACPP_DESCRIPTORS = Object.freeze({
89
+ [BONSAI_1_7B.repo]: BONSAI_1_7B,
90
+ [BONSAI_4B.repo]: BONSAI_4B,
91
+ [BONSAI_8B.repo]: BONSAI_8B,
92
+ [BONSAI_27B.repo]: BONSAI_27B,
93
+ [TERNARY_BONSAI_1_7B.repo]: TERNARY_BONSAI_1_7B,
94
+ [TERNARY_BONSAI_4B.repo]: TERNARY_BONSAI_4B,
95
+ [TERNARY_BONSAI_8B.repo]: TERNARY_BONSAI_8B,
96
+ [TERNARY_BONSAI_27B.repo]: TERNARY_BONSAI_27B,
97
+ });
98
+ const DESCRIPTORS_BY_LOWERCASE_ID = new Map(Object.values(PRISM_LLAMACPP_DESCRIPTORS).map((entry) => [entry.repo.toLowerCase(), entry]));
99
+ export function resolvePrismLocalModelDescriptor(modelId) {
100
+ return DESCRIPTORS_BY_LOWERCASE_ID.get(modelId.toLowerCase());
101
+ }
102
+ /** MTP is deliberately absent: Bonsai acceleration uses only the model's exact paired drafter. */
103
+ export function planPrismSpeculation(descriptor, args) {
104
+ if (!args.requested)
105
+ return { enabled: false, reason: "not-requested" };
106
+ if (!descriptor.matchedDrafter)
107
+ return { enabled: false, reason: "model-has-no-matched-drafter" };
108
+ if (args.backend !== descriptor.matchedDrafter.validatedBackend) {
109
+ return { enabled: false, reason: "backend-not-validated" };
110
+ }
111
+ return {
112
+ enabled: true,
113
+ kind: descriptor.matchedDrafter.kind,
114
+ drafterFile: descriptor.matchedDrafter.file,
115
+ draftMax: descriptor.matchedDrafter.draftMax,
116
+ minimumContext: descriptor.matchedDrafter.minimumContext,
117
+ };
118
+ }
119
+ //# sourceMappingURL=local-execution-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-execution-planner.js","sourceRoot":"","sources":["../../../src/core/models/local-execution-planner.ts"],"names":[],"mappings":"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","sourcesContent":["import { BONSAI_27B, type PrismBackend, type PrismModelDescriptor } from \"./llamacpp-runtime.ts\";\n\nfunction descriptor(args: PrismModelDescriptor): PrismModelDescriptor {\n\treturn args;\n}\n\nconst BONSAI_1_7B = descriptor({\n\trepo: \"prism-ml/Bonsai-1.7B-gguf\",\n\tfile: \"Bonsai-1.7B-Q1_0.gguf\",\n\tdisplayName: \"Bonsai-1.7B (1-bit Q1_0)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"bonsai\",\n\tparameterScale: \"1.7B\",\n\tweightFormat: \"q1_0\",\n});\n\nconst BONSAI_4B = descriptor({\n\trepo: \"prism-ml/Bonsai-4B-gguf\",\n\tfile: \"Bonsai-4B-Q1_0.gguf\",\n\tdisplayName: \"Bonsai-4B (1-bit Q1_0)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"bonsai\",\n\tparameterScale: \"4B\",\n\tweightFormat: \"q1_0\",\n});\n\nconst BONSAI_8B = descriptor({\n\trepo: \"prism-ml/Bonsai-8B-gguf\",\n\tfile: \"Bonsai-8B-Q1_0.gguf\",\n\tdisplayName: \"Bonsai-8B (1-bit Q1_0)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"bonsai\",\n\tparameterScale: \"8B\",\n\tweightFormat: \"q1_0\",\n});\n\nconst TERNARY_BONSAI_1_7B = descriptor({\n\trepo: \"prism-ml/Ternary-Bonsai-1.7B-gguf\",\n\tfile: \"Ternary-Bonsai-1.7B-Q2_0.gguf\",\n\tdisplayName: \"Ternary-Bonsai-1.7B (Q2_0)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"ternary-bonsai\",\n\tparameterScale: \"1.7B\",\n\tweightFormat: \"q2_0\",\n});\n\nconst TERNARY_BONSAI_4B = descriptor({\n\trepo: \"prism-ml/Ternary-Bonsai-4B-gguf\",\n\tfile: \"Ternary-Bonsai-4B-Q2_0.gguf\",\n\tdisplayName: \"Ternary-Bonsai-4B (Q2_0)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"ternary-bonsai\",\n\tparameterScale: \"4B\",\n\tweightFormat: \"q2_0\",\n});\n\nconst TERNARY_BONSAI_8B = descriptor({\n\trepo: \"prism-ml/Ternary-Bonsai-8B-gguf\",\n\tfile: \"Ternary-Bonsai-8B-Q2_0.gguf\",\n\tdisplayName: \"Ternary-Bonsai-8B (Q2_0)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"ternary-bonsai\",\n\tparameterScale: \"8B\",\n\tweightFormat: \"q2_0\",\n});\n\nconst TERNARY_BONSAI_27B = descriptor({\n\trepo: \"prism-ml/Ternary-Bonsai-27B-gguf\",\n\tfile: \"Ternary-Bonsai-27B-Q2_0.gguf\",\n\tmmprojFile: \"Ternary-Bonsai-27B-mmproj-Q8_0.gguf\",\n\tdisplayName: \"Ternary-Bonsai-27B (Q2_0 + vision)\",\n\tarchitecture: \"dense\",\n\truntime: \"prism-llamacpp\",\n\tfamily: \"ternary-bonsai\",\n\tparameterScale: \"27B\",\n\tweightFormat: \"q2_0\",\n\tmatchedDrafter: {\n\t\tkind: \"dspark\",\n\t\tfile: \"Ternary-Bonsai-27B-dspark-Q4_1.gguf\",\n\t\tdraftMax: 4,\n\t\tminimumContext: 16_384,\n\t\tvalidatedBackend: \"cuda\",\n\t},\n});\n\n/**\n * The complete model set Pi may manage through its pinned Prism llama.cpp adapter. Unknown models\n * never enter this path. Every descriptor pins the exact GGUF artifact so user-provided quant\n * suffixes cannot silently select a different format or runtime.\n */\nexport const PRISM_LLAMACPP_DESCRIPTORS: Readonly<Record<string, PrismModelDescriptor>> = Object.freeze({\n\t[BONSAI_1_7B.repo]: BONSAI_1_7B,\n\t[BONSAI_4B.repo]: BONSAI_4B,\n\t[BONSAI_8B.repo]: BONSAI_8B,\n\t[BONSAI_27B.repo]: BONSAI_27B,\n\t[TERNARY_BONSAI_1_7B.repo]: TERNARY_BONSAI_1_7B,\n\t[TERNARY_BONSAI_4B.repo]: TERNARY_BONSAI_4B,\n\t[TERNARY_BONSAI_8B.repo]: TERNARY_BONSAI_8B,\n\t[TERNARY_BONSAI_27B.repo]: TERNARY_BONSAI_27B,\n});\n\nconst DESCRIPTORS_BY_LOWERCASE_ID = new Map(\n\tObject.values(PRISM_LLAMACPP_DESCRIPTORS).map((entry) => [entry.repo.toLowerCase(), entry]),\n);\n\nexport function resolvePrismLocalModelDescriptor(modelId: string): PrismModelDescriptor | undefined {\n\treturn DESCRIPTORS_BY_LOWERCASE_ID.get(modelId.toLowerCase());\n}\n\nexport type PrismSpeculationPlan =\n\t| {\n\t\t\tenabled: true;\n\t\t\tkind: \"dspark\";\n\t\t\tdrafterFile: string;\n\t\t\tdraftMax: 4;\n\t\t\tminimumContext: 16_384;\n\t }\n\t| { enabled: false; reason: \"not-requested\" | \"model-has-no-matched-drafter\" | \"backend-not-validated\" };\n\n/** MTP is deliberately absent: Bonsai acceleration uses only the model's exact paired drafter. */\nexport function planPrismSpeculation(\n\tdescriptor: PrismModelDescriptor,\n\targs: { requested: boolean; backend: PrismBackend },\n): PrismSpeculationPlan {\n\tif (!args.requested) return { enabled: false, reason: \"not-requested\" };\n\tif (!descriptor.matchedDrafter) return { enabled: false, reason: \"model-has-no-matched-drafter\" };\n\tif (args.backend !== descriptor.matchedDrafter.validatedBackend) {\n\t\treturn { enabled: false, reason: \"backend-not-validated\" };\n\t}\n\treturn {\n\t\tenabled: true,\n\t\tkind: descriptor.matchedDrafter.kind,\n\t\tdrafterFile: descriptor.matchedDrafter.file,\n\t\tdraftMax: descriptor.matchedDrafter.draftMax,\n\t\tminimumContext: descriptor.matchedDrafter.minimumContext,\n\t};\n}\n"]}
@@ -0,0 +1,34 @@
1
+ export type LocalInferenceProfileMode = "balanced" | "low-impact";
2
+ export interface LocalInferenceProfile {
3
+ mode: LocalInferenceProfileMode;
4
+ promptCacheMiB: number;
5
+ maxLoadedModels: number;
6
+ parallelRequests: number;
7
+ maxQueuedRequests: number;
8
+ keepAlive: string;
9
+ kvCacheType: "q8_0";
10
+ flashAttention: boolean;
11
+ generationThreads: number;
12
+ batchThreads: number;
13
+ }
14
+ interface LocalInferenceHostCapacity {
15
+ mode: LocalInferenceProfileMode;
16
+ totalMemoryBytes: number;
17
+ logicalCpuCount: number;
18
+ }
19
+ export interface LocalInferenceHostProbes {
20
+ totalMemoryBytes?: () => number;
21
+ logicalCpuCount?: () => number;
22
+ }
23
+ /**
24
+ * One provider-neutral owner for local inference resource policy. Runtime adapters translate this
25
+ * validated profile into their native arguments; they must not invent independent cache,
26
+ * residency, concurrency, or thread defaults.
27
+ */
28
+ export declare function deriveLocalInferenceProfile(args: LocalInferenceHostCapacity): LocalInferenceProfile;
29
+ /** Resolves host capacity exactly once through the provider-neutral profile owner. Runtime
30
+ * adapters pass their injectable probes here instead of reproducing host-default selection. */
31
+ export declare function deriveHostLocalInferenceProfile(mode: LocalInferenceProfileMode, probes?: LocalInferenceHostProbes): LocalInferenceProfile;
32
+ export declare function ollamaEnvironmentForLocalInferenceProfile(profile: LocalInferenceProfile): Record<string, string>;
33
+ export {};
34
+ //# sourceMappingURL=local-inference-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-inference-profile.d.ts","sourceRoot":"","sources":["../../../src/core/models/local-inference-profile.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,yBAAyB,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,yBAAyB,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,0BAA0B;IACnC,IAAI,EAAE,yBAAyB,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACxC,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;CAC/B;AASD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,0BAA0B,GAAG,qBAAqB,CAyCnG;AAED;+FAC+F;AAC/F,wBAAgB,+BAA+B,CAC9C,IAAI,EAAE,yBAAyB,EAC/B,MAAM,GAAE,wBAA6B,GACnC,qBAAqB,CAMvB;AAED,wBAAgB,yCAAyC,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYhH"}
@@ -0,0 +1,74 @@
1
+ import { availableParallelism, totalmem } from "node:os";
2
+ const GIB = 1024 ** 3;
3
+ function boundedThreads(logicalCpuCount, maximum) {
4
+ const available = Number.isFinite(logicalCpuCount) ? Math.floor(logicalCpuCount) : 1;
5
+ return Math.max(1, Math.min(maximum, available));
6
+ }
7
+ /**
8
+ * One provider-neutral owner for local inference resource policy. Runtime adapters translate this
9
+ * validated profile into their native arguments; they must not invent independent cache,
10
+ * residency, concurrency, or thread defaults.
11
+ */
12
+ export function deriveLocalInferenceProfile(args) {
13
+ if (args.mode === "low-impact") {
14
+ const threads = boundedThreads(args.logicalCpuCount, 2);
15
+ return {
16
+ mode: args.mode,
17
+ promptCacheMiB: 256,
18
+ maxLoadedModels: 1,
19
+ parallelRequests: 1,
20
+ maxQueuedRequests: 1,
21
+ keepAlive: "2m",
22
+ kvCacheType: "q8_0",
23
+ flashAttention: true,
24
+ generationThreads: threads,
25
+ batchThreads: threads,
26
+ };
27
+ }
28
+ const memoryBytes = Number.isFinite(args.totalMemoryBytes) ? Math.max(0, args.totalMemoryBytes) : 0;
29
+ const capacity = memoryBytes >= 64 * GIB
30
+ ? { promptCacheMiB: 2_048, maxLoadedModels: 2, maximumThreads: 8 }
31
+ : memoryBytes >= 32 * GIB
32
+ ? { promptCacheMiB: 1_024, maxLoadedModels: 2, maximumThreads: 8 }
33
+ : memoryBytes >= 16 * GIB
34
+ ? { promptCacheMiB: 768, maxLoadedModels: 1, maximumThreads: 6 }
35
+ : memoryBytes >= 8 * GIB
36
+ ? { promptCacheMiB: 512, maxLoadedModels: 1, maximumThreads: 4 }
37
+ : { promptCacheMiB: 256, maxLoadedModels: 1, maximumThreads: 2 };
38
+ const threads = boundedThreads(args.logicalCpuCount, capacity.maximumThreads);
39
+ return {
40
+ mode: args.mode,
41
+ promptCacheMiB: capacity.promptCacheMiB,
42
+ maxLoadedModels: capacity.maxLoadedModels,
43
+ parallelRequests: 1,
44
+ maxQueuedRequests: 4,
45
+ keepAlive: "10m",
46
+ kvCacheType: "q8_0",
47
+ flashAttention: true,
48
+ generationThreads: threads,
49
+ batchThreads: threads,
50
+ };
51
+ }
52
+ /** Resolves host capacity exactly once through the provider-neutral profile owner. Runtime
53
+ * adapters pass their injectable probes here instead of reproducing host-default selection. */
54
+ export function deriveHostLocalInferenceProfile(mode, probes = {}) {
55
+ return deriveLocalInferenceProfile({
56
+ mode,
57
+ totalMemoryBytes: (probes.totalMemoryBytes ?? totalmem)(),
58
+ logicalCpuCount: (probes.logicalCpuCount ?? availableParallelism)(),
59
+ });
60
+ }
61
+ export function ollamaEnvironmentForLocalInferenceProfile(profile) {
62
+ return {
63
+ OLLAMA_FLASH_ATTENTION: profile.flashAttention ? "1" : "0",
64
+ OLLAMA_KV_CACHE_TYPE: profile.kvCacheType,
65
+ OLLAMA_NUM_PARALLEL: String(profile.parallelRequests),
66
+ OLLAMA_MAX_LOADED_MODELS: String(profile.maxLoadedModels),
67
+ OLLAMA_MAX_QUEUE: String(profile.maxQueuedRequests),
68
+ OLLAMA_KEEP_ALIVE: profile.keepAlive,
69
+ LLAMA_ARG_CACHE_RAM: String(profile.promptCacheMiB),
70
+ LLAMA_ARG_THREADS: String(profile.generationThreads),
71
+ LLAMA_ARG_THREADS_BATCH: String(profile.batchThreads),
72
+ };
73
+ }
74
+ //# sourceMappingURL=local-inference-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-inference-profile.js","sourceRoot":"","sources":["../../../src/core/models/local-inference-profile.ts"],"names":[],"mappings":"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","sourcesContent":["import { availableParallelism, totalmem } from \"node:os\";\n\nexport type LocalInferenceProfileMode = \"balanced\" | \"low-impact\";\n\nexport interface LocalInferenceProfile {\n\tmode: LocalInferenceProfileMode;\n\tpromptCacheMiB: number;\n\tmaxLoadedModels: number;\n\tparallelRequests: number;\n\tmaxQueuedRequests: number;\n\tkeepAlive: string;\n\tkvCacheType: \"q8_0\";\n\tflashAttention: boolean;\n\tgenerationThreads: number;\n\tbatchThreads: number;\n}\n\ninterface LocalInferenceHostCapacity {\n\tmode: LocalInferenceProfileMode;\n\ttotalMemoryBytes: number;\n\tlogicalCpuCount: number;\n}\n\nexport interface LocalInferenceHostProbes {\n\ttotalMemoryBytes?: () => number;\n\tlogicalCpuCount?: () => number;\n}\n\nconst GIB = 1024 ** 3;\n\nfunction boundedThreads(logicalCpuCount: number, maximum: number): number {\n\tconst available = Number.isFinite(logicalCpuCount) ? Math.floor(logicalCpuCount) : 1;\n\treturn Math.max(1, Math.min(maximum, available));\n}\n\n/**\n * One provider-neutral owner for local inference resource policy. Runtime adapters translate this\n * validated profile into their native arguments; they must not invent independent cache,\n * residency, concurrency, or thread defaults.\n */\nexport function deriveLocalInferenceProfile(args: LocalInferenceHostCapacity): LocalInferenceProfile {\n\tif (args.mode === \"low-impact\") {\n\t\tconst threads = boundedThreads(args.logicalCpuCount, 2);\n\t\treturn {\n\t\t\tmode: args.mode,\n\t\t\tpromptCacheMiB: 256,\n\t\t\tmaxLoadedModels: 1,\n\t\t\tparallelRequests: 1,\n\t\t\tmaxQueuedRequests: 1,\n\t\t\tkeepAlive: \"2m\",\n\t\t\tkvCacheType: \"q8_0\",\n\t\t\tflashAttention: true,\n\t\t\tgenerationThreads: threads,\n\t\t\tbatchThreads: threads,\n\t\t};\n\t}\n\n\tconst memoryBytes = Number.isFinite(args.totalMemoryBytes) ? Math.max(0, args.totalMemoryBytes) : 0;\n\tconst capacity =\n\t\tmemoryBytes >= 64 * GIB\n\t\t\t? { promptCacheMiB: 2_048, maxLoadedModels: 2, maximumThreads: 8 }\n\t\t\t: memoryBytes >= 32 * GIB\n\t\t\t\t? { promptCacheMiB: 1_024, maxLoadedModels: 2, maximumThreads: 8 }\n\t\t\t\t: memoryBytes >= 16 * GIB\n\t\t\t\t\t? { promptCacheMiB: 768, maxLoadedModels: 1, maximumThreads: 6 }\n\t\t\t\t\t: memoryBytes >= 8 * GIB\n\t\t\t\t\t\t? { promptCacheMiB: 512, maxLoadedModels: 1, maximumThreads: 4 }\n\t\t\t\t\t\t: { promptCacheMiB: 256, maxLoadedModels: 1, maximumThreads: 2 };\n\tconst threads = boundedThreads(args.logicalCpuCount, capacity.maximumThreads);\n\treturn {\n\t\tmode: args.mode,\n\t\tpromptCacheMiB: capacity.promptCacheMiB,\n\t\tmaxLoadedModels: capacity.maxLoadedModels,\n\t\tparallelRequests: 1,\n\t\tmaxQueuedRequests: 4,\n\t\tkeepAlive: \"10m\",\n\t\tkvCacheType: \"q8_0\",\n\t\tflashAttention: true,\n\t\tgenerationThreads: threads,\n\t\tbatchThreads: threads,\n\t};\n}\n\n/** Resolves host capacity exactly once through the provider-neutral profile owner. Runtime\n * adapters pass their injectable probes here instead of reproducing host-default selection. */\nexport function deriveHostLocalInferenceProfile(\n\tmode: LocalInferenceProfileMode,\n\tprobes: LocalInferenceHostProbes = {},\n): LocalInferenceProfile {\n\treturn deriveLocalInferenceProfile({\n\t\tmode,\n\t\ttotalMemoryBytes: (probes.totalMemoryBytes ?? totalmem)(),\n\t\tlogicalCpuCount: (probes.logicalCpuCount ?? availableParallelism)(),\n\t});\n}\n\nexport function ollamaEnvironmentForLocalInferenceProfile(profile: LocalInferenceProfile): Record<string, string> {\n\treturn {\n\t\tOLLAMA_FLASH_ATTENTION: profile.flashAttention ? \"1\" : \"0\",\n\t\tOLLAMA_KV_CACHE_TYPE: profile.kvCacheType,\n\t\tOLLAMA_NUM_PARALLEL: String(profile.parallelRequests),\n\t\tOLLAMA_MAX_LOADED_MODELS: String(profile.maxLoadedModels),\n\t\tOLLAMA_MAX_QUEUE: String(profile.maxQueuedRequests),\n\t\tOLLAMA_KEEP_ALIVE: profile.keepAlive,\n\t\tLLAMA_ARG_CACHE_RAM: String(profile.promptCacheMiB),\n\t\tLLAMA_ARG_THREADS: String(profile.generationThreads),\n\t\tLLAMA_ARG_THREADS_BATCH: String(profile.batchThreads),\n\t};\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { type LocalInferenceProfileMode } from "./local-inference-profile.ts";
1
2
  import { type ManagedRuntimeSpawn, type RuntimeCommandRunner } from "./runtime-process.ts";
2
3
  export type { RuntimeCommandResult, RuntimeCommandRunner } from "./runtime-process.ts";
3
4
  /**
@@ -50,6 +51,17 @@ export interface OllamaImportResult {
50
51
  export interface OllamaModelInfo {
51
52
  modelInfo: Record<string, unknown>;
52
53
  }
54
+ export type OllamaModelParameter = string | number | boolean;
55
+ /** Current structured `/api/create` contract. Keep raw Modelfile syntax out of callers so managed
56
+ * profiles and context sizing cannot drift from the runtime adapter's supported request shape. */
57
+ export interface OllamaCreateModelInput {
58
+ name: string;
59
+ from: string;
60
+ template?: string;
61
+ renderer?: string;
62
+ parser?: string;
63
+ parameters?: Readonly<Record<string, OllamaModelParameter>>;
64
+ }
53
65
  /** Pinned ollama release for the managed installer below. Bump here when needed — one constant. */
54
66
  export declare const OLLAMA_PINNED_VERSION = "0.31.1";
55
67
  export type OllamaAssetKind = "tar-zst" | "tar-gz" | "zip";
@@ -78,6 +90,9 @@ export interface LocalRuntimeDeps {
78
90
  /** os.platform()/os.arch() equivalents — injectable so asset/runtime resolution is testable per platform. */
79
91
  platform?: () => string;
80
92
  arch?: () => string;
93
+ /** Host capacity probes used once to derive the bounded local inference profile. */
94
+ totalMemoryBytes?: () => number;
95
+ logicalCpuCount?: () => number;
81
96
  /** Runs a runtime-management command (Python venv/pip/download probe). Injectable so tests never
82
97
  * install packages or hit the network. */
83
98
  runCommand?: RuntimeCommandRunner;
@@ -114,11 +129,13 @@ export declare class OllamaRuntime {
114
129
  private readonly _createZstdDecompress;
115
130
  private readonly _hasCommand;
116
131
  private readonly _extractArchiveFn;
132
+ private readonly _profile;
117
133
  private _child;
118
134
  private _childModelsDir;
119
135
  constructor(args: {
120
136
  agentDir: string;
121
137
  baseUrl?: string;
138
+ profileMode?: LocalInferenceProfileMode;
122
139
  deps?: LocalRuntimeDeps;
123
140
  });
124
141
  get baseUrl(): string;
@@ -179,6 +196,11 @@ export declare class OllamaRuntime {
179
196
  started: boolean;
180
197
  reason: string;
181
198
  }>;
199
+ /** Start against one caller-selected store; acceptance harnesses use this on an isolated port. */
200
+ startWithModelsStore(modelsDir: string): Promise<{
201
+ started: boolean;
202
+ reason: string;
203
+ }>;
182
204
  /**
183
205
  * Start a serve that REUSES the user's own existing models directory (no `OLLAMA_MODELS`
184
206
  * override — falls through to Ollama's own default, `~/.ollama`), for callers that must see the
@@ -212,10 +234,7 @@ export declare class OllamaRuntime {
212
234
  error: string;
213
235
  }>;
214
236
  private _requestModelMutation;
215
- createFromModelfile(args: {
216
- name: string;
217
- modelfile: string;
218
- }): Promise<{
237
+ createModel(args: OllamaCreateModelInput): Promise<{
219
238
  ok: true;
220
239
  } | {
221
240
  ok: false;
@@ -1 +1 @@
1
- {"version":3,"file":"local-runtime.d.ts","sourceRoot":"","sources":["../../../src/core/models/local-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-runtime.d.ts","sourceRoot":"","sources":["../../../src/core/models/local-runtime.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { StreamingLineDecoder } from "@caupulican/pi-ai";
7
7
  import { getBundledResourcesDir } from "../../config.js";
8
8
  import { spawnProcess, waitForChildProcessWithTermination, } from "../../utils/child-process.js";
9
9
  import { modelsDir as agentModelsDir, runtimesDir as agentRuntimesDir } from "../agent-paths.js";
10
+ import { deriveHostLocalInferenceProfile, ollamaEnvironmentForLocalInferenceProfile, } from "./local-inference-profile.js";
10
11
  import { createRuntimeCommandRunner, extractZipArchive, installRuntimeArchive, requireRuntimeStdin, resolveRuntimeLifecycleDependencies, runtimeCommandAvailable, } from "./runtime-process.js";
11
12
  const MAX_OLLAMA_PULL_LINE_CHARS = 64 * 1024 * 1024;
12
13
  /** Pinned ollama release for the managed installer below. Bump here when needed — one constant. */
@@ -105,6 +106,7 @@ export class OllamaRuntime {
105
106
  this._homeDir = args.deps?.homeDir ?? homedir();
106
107
  this._platform = args.deps?.platform ?? osPlatform;
107
108
  this._arch = args.deps?.arch ?? osArch;
109
+ this._profile = deriveHostLocalInferenceProfile(args.profileMode ?? "balanced", args.deps);
108
110
  // Feature-detect (not version-sniff): recent Node added zstd natively to node:zlib. Verified
109
111
  // present on this repo's minimum supported Node (>=22.19.0); still detected at runtime rather
110
112
  // than assumed, so an older/different Node correctly falls through to the system-zstd path.
@@ -464,11 +466,7 @@ export class OllamaRuntime {
464
466
  mkdirSync(modelsDir, { recursive: true });
465
467
  return this._spawnAndPoll(binary, {
466
468
  ...(modelsDir ? { OLLAMA_MODELS: modelsDir } : {}),
467
- OLLAMA_FLASH_ATTENTION: "1",
468
- OLLAMA_KV_CACHE_TYPE: "q8_0",
469
- OLLAMA_NUM_PARALLEL: "1",
470
- OLLAMA_KEEP_ALIVE: "30m",
471
- OLLAMA_MAX_LOADED_MODELS: "3",
469
+ ...ollamaEnvironmentForLocalInferenceProfile(this._profile),
472
470
  });
473
471
  }
474
472
  /**
@@ -479,6 +477,10 @@ export class OllamaRuntime {
479
477
  async start() {
480
478
  return this._startServer(this.ownedModelsDir());
481
479
  }
480
+ /** Start against one caller-selected store; acceptance harnesses use this on an isolated port. */
481
+ async startWithModelsStore(modelsDir) {
482
+ return this._startServer(modelsDir);
483
+ }
482
484
  /**
483
485
  * Start a serve that REUSES the user's own existing models directory (no `OLLAMA_MODELS`
484
486
  * override — falls through to Ollama's own default, `~/.ollama`), for callers that must see the
@@ -517,7 +519,7 @@ export class OllamaRuntime {
517
519
  .filter((model) => typeof model.name === "string" && model.name.length > 0);
518
520
  }
519
521
  async ensureResident(model) {
520
- return this._postKeepAlive(model, "30m");
522
+ return this._postKeepAlive(model, this._profile.keepAlive);
521
523
  }
522
524
  async releaseResident(model) {
523
525
  return this._postKeepAlive(model, 0);
@@ -580,11 +582,12 @@ export class OllamaRuntime {
580
582
  return { ok: false, error: error instanceof Error ? error.message : String(error) };
581
583
  }
582
584
  }
583
- async createFromModelfile(args) {
585
+ async createModel(args) {
586
+ const { name, ...definition } = args;
584
587
  return this._requestModelMutation("/api/create", {
585
588
  method: "POST",
586
589
  headers: { "content-type": "application/json" },
587
- body: JSON.stringify({ model: args.name, modelfile: args.modelfile, stream: false }),
590
+ body: JSON.stringify({ model: name, ...definition, stream: false }),
588
591
  signal: AbortSignal.timeout(60_000),
589
592
  }, "create");
590
593
  }