@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.
- package/CHANGELOG.md +54 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/arithmetic.py +364 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/context.py +2 -1
- package/dist/bundled-resources/runtimes/pi-shell-engine/errors.py +16 -0
- package/dist/bundled-resources/runtimes/pi-shell-engine/exec.py +137 -14
- package/dist/bundled-resources/runtimes/pi-shell-engine/nodes.py +23 -2
- package/dist/bundled-resources/runtimes/pi-shell-engine/parser.py +134 -6
- package/dist/bundled-resources/runtimes/pi-shell-engine/tokens.py +25 -2
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +6 -5
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +84 -87
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js +3 -0
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +2 -0
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +4 -3
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +4 -0
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +2 -0
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +12 -7
- package/dist/core/background-tool-task-controller.d.ts.map +1 -1
- package/dist/core/background-tool-task-controller.js +55 -19
- package/dist/core/background-tool-task-controller.js.map +1 -1
- package/dist/core/bedrock-scope.d.ts +26 -0
- package/dist/core/bedrock-scope.d.ts.map +1 -0
- package/dist/core/bedrock-scope.js +178 -0
- package/dist/core/bedrock-scope.js.map +1 -0
- package/dist/core/compaction-controller.d.ts +2 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +35 -13
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +6 -0
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +3 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/failure-corpus.d.ts +26 -1
- package/dist/core/failure-corpus.d.ts.map +1 -1
- package/dist/core/failure-corpus.js +17 -0
- package/dist/core/failure-corpus.js.map +1 -1
- package/dist/core/foreground-recovery-controller.d.ts +25 -2
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
- package/dist/core/foreground-recovery-controller.js +111 -2
- package/dist/core/foreground-recovery-controller.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +27 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -0
- package/dist/core/foreground-terminal-handoff-controller.js +56 -0
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -0
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +5 -0
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts +3 -0
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.js +28 -7
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
- package/dist/core/human-input-controller.d.ts +9 -0
- package/dist/core/human-input-controller.d.ts.map +1 -1
- package/dist/core/human-input-controller.js +60 -5
- package/dist/core/human-input-controller.js.map +1 -1
- package/dist/core/human-input.d.ts +12 -0
- package/dist/core/human-input.d.ts.map +1 -1
- package/dist/core/human-input.js +59 -12
- package/dist/core/human-input.js.map +1 -1
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js +15 -9
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/memory/providers/file-store.d.ts +1 -0
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +252 -125
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/model-capability.d.ts +15 -1
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +24 -1
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +18 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +6 -6
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +5 -5
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-tool-protocol.d.ts +3 -2
- package/dist/core/model-tool-protocol.d.ts.map +1 -1
- package/dist/core/model-tool-protocol.js +5 -1
- package/dist/core/model-tool-protocol.js.map +1 -1
- package/dist/core/models/context-sizing.d.ts +1 -0
- package/dist/core/models/context-sizing.d.ts.map +1 -1
- package/dist/core/models/context-sizing.js +4 -1
- package/dist/core/models/context-sizing.js.map +1 -1
- package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
- package/dist/core/models/default-model-suggestions.js +20 -10
- package/dist/core/models/default-model-suggestions.js.map +1 -1
- package/dist/core/models/llamacpp-runtime.d.ts +32 -11
- package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
- package/dist/core/models/llamacpp-runtime.js +79 -28
- package/dist/core/models/llamacpp-runtime.js.map +1 -1
- package/dist/core/models/local-execution-planner.d.ts +24 -0
- package/dist/core/models/local-execution-planner.d.ts.map +1 -0
- package/dist/core/models/local-execution-planner.js +119 -0
- package/dist/core/models/local-execution-planner.js.map +1 -0
- package/dist/core/models/local-inference-profile.d.ts +34 -0
- package/dist/core/models/local-inference-profile.d.ts.map +1 -0
- package/dist/core/models/local-inference-profile.js +74 -0
- package/dist/core/models/local-inference-profile.js.map +1 -0
- package/dist/core/models/local-runtime.d.ts +23 -4
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +11 -8
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/models/managed-ollama-model.d.ts +26 -0
- package/dist/core/models/managed-ollama-model.d.ts.map +1 -0
- package/dist/core/models/managed-ollama-model.js +59 -0
- package/dist/core/models/managed-ollama-model.js.map +1 -0
- package/dist/core/models/model-ref.js +11 -11
- package/dist/core/models/model-ref.js.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts +10 -20
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.js +11 -31
- package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
- package/dist/core/models/prism-llamacpp-server-probe.d.ts +10 -0
- package/dist/core/models/prism-llamacpp-server-probe.d.ts.map +1 -0
- package/dist/core/models/prism-llamacpp-server-probe.js +36 -0
- package/dist/core/models/prism-llamacpp-server-probe.js.map +1 -0
- package/dist/core/models/runtime-arbiter.d.ts +3 -0
- package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
- package/dist/core/models/runtime-arbiter.js +2 -1
- package/dist/core/models/runtime-arbiter.js.map +1 -1
- package/dist/core/models/runtime-process.d.ts +7 -1
- package/dist/core/models/runtime-process.d.ts.map +1 -1
- package/dist/core/models/runtime-process.js +4 -2
- package/dist/core/models/runtime-process.js.map +1 -1
- package/dist/core/process-matrix/runtime.js +43 -11
- package/dist/core/process-matrix/runtime.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +14 -5
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +18 -6
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +5 -1
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +37 -4
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/scout-controller.d.ts +3 -2
- package/dist/core/scout-controller.d.ts.map +1 -1
- package/dist/core/scout-controller.js +1 -0
- package/dist/core/scout-controller.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +10 -8
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +59 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +5 -2
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +22 -10
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts +3 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +181 -55
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts.map +1 -1
- package/dist/core/tool-protocol-controller.js +5 -3
- package/dist/core/tool-protocol-controller.js.map +1 -1
- package/dist/core/tool-recovery-log-records.d.ts +33 -1
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
- package/dist/core/tool-recovery-log-records.js +59 -12
- package/dist/core/tool-recovery-log-records.js.map +1 -1
- package/dist/core/tool-recovery-logger.d.ts +12 -1
- package/dist/core/tool-recovery-logger.d.ts.map +1 -1
- package/dist/core/tool-recovery-logger.js +24 -1
- package/dist/core/tool-recovery-logger.js.map +1 -1
- package/dist/core/tool-repair-health.d.ts.map +1 -1
- package/dist/core/tool-repair-health.js +6 -0
- package/dist/core/tool-repair-health.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +2 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +9 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +5 -8
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +88 -55
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-intent.d.ts +42 -15
- package/dist/core/tools/file-mutation-intent.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-intent.js +271 -77
- package/dist/core/tools/file-mutation-intent.js.map +1 -1
- package/dist/core/tools/find.d.ts +2 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +2 -6
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +2 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +2 -6
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/managed-search-tool.d.ts +8 -0
- package/dist/core/tools/managed-search-tool.d.ts.map +1 -0
- package/dist/core/tools/managed-search-tool.js +10 -0
- package/dist/core/tools/managed-search-tool.js.map +1 -0
- package/dist/core/tools/shell-command-parser.d.ts +4 -3
- package/dist/core/tools/shell-command-parser.d.ts.map +1 -1
- package/dist/core/tools/shell-command-parser.js +32 -7
- package/dist/core/tools/shell-command-parser.js.map +1 -1
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +23 -1
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/windows-shell-engine.js +1 -1
- package/dist/core/tools/windows-shell-engine.js.map +1 -1
- package/dist/core/tools/write.d.ts +5 -10
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +92 -73
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +6 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +59 -12
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
- package/dist/modes/interactive/local-model-commands.js +51 -8
- package/dist/modes/interactive/local-model-commands.js.map +1 -1
- package/dist/utils/paths.js +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +18 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +73 -43
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/models.md +1 -1
- package/docs/providers.md +34 -10
- package/docs/settings.md +1 -1
- package/docs/tool-boundary-performance-roadmap-2026-08-02.md +21 -18
- package/docs/tool-repair.md +3 -3
- package/docs/windows.md +7 -5
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/prompt-customizer.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/ssh.ts +17 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +240 -260
- 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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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:
|
|
590
|
+
body: JSON.stringify({ model: name, ...definition, stream: false }),
|
|
588
591
|
signal: AbortSignal.timeout(60_000),
|
|
589
592
|
}, "create");
|
|
590
593
|
}
|