hoomanjs 1.41.0 → 1.42.0
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/README.md +26 -701
- package/dist/acp/acp-agent.js +48 -29
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/chat/app.js +29 -27
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/components/BottomChrome.d.ts +4 -1
- package/dist/chat/components/BottomChrome.js +3 -2
- package/dist/chat/components/BottomChrome.js.map +1 -1
- package/dist/chat/components/DownloadPanel.d.ts +9 -0
- package/dist/chat/components/DownloadPanel.js +16 -0
- package/dist/chat/components/DownloadPanel.js.map +1 -0
- package/dist/chat/components/StatusBar.js +5 -5
- package/dist/chat/components/StatusBar.js.map +1 -1
- package/dist/cli.js +23 -23
- package/dist/cli.js.map +1 -1
- package/dist/configure/app.js +30 -2
- package/dist/configure/app.js.map +1 -1
- package/dist/core/agent/index.js +0 -6
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/agent/prompt-cache-plugin.d.ts +1 -1
- package/dist/core/agent/prompt-cache-plugin.js +1 -1
- package/dist/core/config.d.ts +60 -0
- package/dist/core/config.js +25 -5
- package/dist/core/config.js.map +1 -1
- package/dist/core/mcp/index.d.ts +3 -3
- package/dist/core/mcp/index.js +2 -2
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/manager.d.ts +28 -0
- package/dist/core/mcp/manager.js +171 -2
- package/dist/core/mcp/manager.js.map +1 -1
- package/dist/core/models/anthropic.d.ts +4 -3
- package/dist/core/models/anthropic.js.map +1 -1
- package/dist/core/models/download-progress.d.ts +65 -0
- package/dist/core/models/download-progress.js +154 -0
- package/dist/core/models/download-progress.js.map +1 -0
- package/dist/core/models/index.js +1 -0
- package/dist/core/models/index.js.map +1 -1
- package/dist/core/models/llama-cpp/gbnf-schema.d.ts +32 -0
- package/dist/core/models/llama-cpp/gbnf-schema.js +272 -0
- package/dist/core/models/llama-cpp/gbnf-schema.js.map +1 -0
- package/dist/core/models/llama-cpp/index.d.ts +8 -0
- package/dist/core/models/llama-cpp/index.js +37 -0
- package/dist/core/models/llama-cpp/index.js.map +1 -0
- package/dist/core/models/llama-cpp/resolve-model.d.ts +28 -0
- package/dist/core/models/llama-cpp/resolve-model.js +307 -0
- package/dist/core/models/llama-cpp/resolve-model.js.map +1 -0
- package/dist/core/models/llama-cpp/strands-llama-cpp.d.ts +40 -0
- package/dist/core/models/llama-cpp/strands-llama-cpp.js +422 -0
- package/dist/core/models/llama-cpp/strands-llama-cpp.js.map +1 -0
- package/dist/core/models/minimax.d.ts +2 -1
- package/dist/core/models/minimax.js +49 -7
- package/dist/core/models/minimax.js.map +1 -1
- package/dist/core/models/types.d.ts +125 -7
- package/dist/core/models/types.js +22 -2
- package/dist/core/models/types.js.map +1 -1
- package/dist/core/prompts/environment.d.ts +10 -1
- package/dist/core/prompts/environment.js +15 -1
- package/dist/core/prompts/environment.js.map +1 -1
- package/dist/core/prompts/static/environment.md +2 -1
- package/dist/core/prompts/static/web-search.md +1 -1
- package/dist/core/prompts/system.d.ts +6 -0
- package/dist/core/prompts/system.js +7 -1
- package/dist/core/prompts/system.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/SKILL.md +21 -5
- package/dist/core/skills/built-in/hooman-config/providers.md +2 -0
- package/dist/core/skills/built-in/hooman-mcp/SKILL.md +20 -0
- package/dist/core/tools/ask-user.d.ts +8 -0
- package/dist/core/tools/ask-user.js +8 -4
- package/dist/core/tools/ask-user.js.map +1 -1
- package/dist/core/tools/time.js +1 -1
- package/dist/core/tools/time.js.map +1 -1
- package/dist/core/utils/logging.d.ts +29 -0
- package/dist/core/utils/logging.js +64 -0
- package/dist/core/utils/logging.js.map +1 -0
- package/dist/daemon/index.js +5 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/questions.d.ts +18 -0
- package/dist/daemon/questions.js +44 -0
- package/dist/daemon/questions.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-wide progress feed for model weight downloads (currently the
|
|
3
|
+
* llama-cpp provider fetching GGUF files from the Hugging Face Hub).
|
|
4
|
+
*
|
|
5
|
+
* The provider emits {@link ModelDownloadProgress} events while a file is
|
|
6
|
+
* actually being downloaded (nothing is emitted for cache hits); frontends
|
|
7
|
+
* subscribe once per process and render however fits their surface (chat TUI
|
|
8
|
+
* chrome row, exec/daemon stderr line, ACP `_hoomanjs/model_download`
|
|
9
|
+
* notification for the VS Code extension).
|
|
10
|
+
*/
|
|
11
|
+
const listeners = new Set();
|
|
12
|
+
/** Subscribe to model download progress; returns an unsubscribe function. */
|
|
13
|
+
export function subscribeModelDownloadProgress(listener) {
|
|
14
|
+
listeners.add(listener);
|
|
15
|
+
return () => {
|
|
16
|
+
listeners.delete(listener);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** Fan an event out to all subscribers (provider-side; listener errors are swallowed). */
|
|
20
|
+
export function emitModelDownloadProgress(progress) {
|
|
21
|
+
for (const listener of [...listeners]) {
|
|
22
|
+
try {
|
|
23
|
+
listener(progress);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// A broken frontend listener must not fail the download itself.
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// ---- Formatting helpers (shared by the chat TUI and CLI loggers) -----------
|
|
31
|
+
const BYTE_UNITS = ["B", "KB", "MB", "GB", "TB"];
|
|
32
|
+
/** "512 B", "1.5 MB", "1.71 GB" — human-readable byte size. */
|
|
33
|
+
export function formatBytes(bytes) {
|
|
34
|
+
if (!Number.isFinite(bytes) || bytes < 0) {
|
|
35
|
+
return "0 B";
|
|
36
|
+
}
|
|
37
|
+
let value = bytes;
|
|
38
|
+
let unit = 0;
|
|
39
|
+
while (value >= 1024 && unit < BYTE_UNITS.length - 1) {
|
|
40
|
+
value /= 1024;
|
|
41
|
+
unit += 1;
|
|
42
|
+
}
|
|
43
|
+
const digits = unit === 0 ? 0 : value >= 100 ? 0 : value >= 10 ? 1 : 2;
|
|
44
|
+
return `${value.toFixed(digits)} ${BYTE_UNITS[unit]}`;
|
|
45
|
+
}
|
|
46
|
+
/** "12.3 MB/s" — human-readable transfer rate. */
|
|
47
|
+
export function formatBytesPerSecond(bytesPerSecond) {
|
|
48
|
+
return `${formatBytes(bytesPerSecond)}/s`;
|
|
49
|
+
}
|
|
50
|
+
/** "45s", "01:23", "1:02:03" — remaining-time estimate. */
|
|
51
|
+
export function formatEtaSeconds(seconds) {
|
|
52
|
+
const total = Math.max(0, Math.round(seconds));
|
|
53
|
+
if (total < 60) {
|
|
54
|
+
return `${total}s`;
|
|
55
|
+
}
|
|
56
|
+
const hours = Math.floor(total / 3600);
|
|
57
|
+
const minutes = Math.floor((total % 3600) / 60);
|
|
58
|
+
const secs = total % 60;
|
|
59
|
+
const mmss = `${String(minutes).padStart(2, "0")}:${String(secs).padStart(2, "0")}`;
|
|
60
|
+
return hours > 0 ? `${hours}:${mmss}` : mmss;
|
|
61
|
+
}
|
|
62
|
+
/** Completion ratio in [0, 1], or `undefined` while the total is unknown. */
|
|
63
|
+
export function downloadRatio(progress) {
|
|
64
|
+
if (progress.totalBytes === undefined || progress.totalBytes <= 0) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
return Math.min(1, progress.receivedBytes / progress.totalBytes);
|
|
68
|
+
}
|
|
69
|
+
/** "██████░░░░" — a fixed-width unicode progress bar for terminal surfaces. */
|
|
70
|
+
export function renderDownloadBar(ratio, width = 20) {
|
|
71
|
+
const filled = Math.max(0, Math.min(width, Math.round(ratio * width)));
|
|
72
|
+
return "█".repeat(filled) + "░".repeat(width - filled);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* One-line human summary, e.g.
|
|
76
|
+
* `model.gguf (shard 2/5) 42% • 730 MB / 1.71 GB • 12.3 MB/s • eta 01:23`.
|
|
77
|
+
*/
|
|
78
|
+
export function formatModelDownloadLine(progress) {
|
|
79
|
+
const shard = progress.shard
|
|
80
|
+
? ` (shard ${progress.shard.index}/${progress.shard.total})`
|
|
81
|
+
: "";
|
|
82
|
+
if (progress.status === "error") {
|
|
83
|
+
return `${progress.file}${shard} download failed: ${progress.error ?? "unknown error"}`;
|
|
84
|
+
}
|
|
85
|
+
const parts = [];
|
|
86
|
+
const ratio = downloadRatio(progress);
|
|
87
|
+
const size = progress.totalBytes !== undefined
|
|
88
|
+
? `${formatBytes(progress.receivedBytes)} / ${formatBytes(progress.totalBytes)}`
|
|
89
|
+
: formatBytes(progress.receivedBytes);
|
|
90
|
+
if (progress.status === "done") {
|
|
91
|
+
parts.push("done", size);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (ratio !== undefined) {
|
|
95
|
+
parts.push(`${Math.floor(ratio * 100)}%`);
|
|
96
|
+
}
|
|
97
|
+
parts.push(size);
|
|
98
|
+
if (progress.bytesPerSecond !== undefined) {
|
|
99
|
+
parts.push(formatBytesPerSecond(progress.bytesPerSecond));
|
|
100
|
+
}
|
|
101
|
+
if (progress.etaSeconds !== undefined) {
|
|
102
|
+
parts.push(`eta ${formatEtaSeconds(progress.etaSeconds)}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return `${progress.file}${shard} ${parts.join(" • ")}`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Progress listener that renders to a terminal stream (exec/daemon stderr).
|
|
109
|
+
* On a TTY it redraws a single status line in place (with a bar); otherwise
|
|
110
|
+
* it logs a plain line at ~10% increments plus start/done/error, so piped
|
|
111
|
+
* logs stay readable.
|
|
112
|
+
*/
|
|
113
|
+
export function createModelDownloadLogger(options) {
|
|
114
|
+
const { stream } = options;
|
|
115
|
+
const prefix = options.prefix ?? "";
|
|
116
|
+
const tty = stream.isTTY === true;
|
|
117
|
+
let lastLoggedPercent = -1;
|
|
118
|
+
let lineOpen = false;
|
|
119
|
+
return (progress) => {
|
|
120
|
+
if (tty) {
|
|
121
|
+
const ratio = downloadRatio(progress);
|
|
122
|
+
const bar = progress.status === "downloading" && ratio !== undefined
|
|
123
|
+
? `[${renderDownloadBar(ratio)}] `
|
|
124
|
+
: "";
|
|
125
|
+
const line = `${prefix}downloading ${bar}${formatModelDownloadLine(progress)}`;
|
|
126
|
+
stream.write(`\r\x1b[2K${line}`);
|
|
127
|
+
lineOpen = true;
|
|
128
|
+
if (progress.status !== "downloading") {
|
|
129
|
+
stream.write("\n");
|
|
130
|
+
lineOpen = false;
|
|
131
|
+
lastLoggedPercent = -1;
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (lineOpen) {
|
|
136
|
+
lineOpen = false;
|
|
137
|
+
}
|
|
138
|
+
if (progress.status !== "downloading") {
|
|
139
|
+
stream.write(`${prefix}model download ${formatModelDownloadLine(progress)}\n`);
|
|
140
|
+
lastLoggedPercent = -1;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const ratio = downloadRatio(progress);
|
|
144
|
+
const percent = ratio !== undefined ? Math.floor(ratio * 100) : undefined;
|
|
145
|
+
const shouldLog = lastLoggedPercent === -1 ||
|
|
146
|
+
(percent !== undefined && percent >= lastLoggedPercent + 10);
|
|
147
|
+
if (!shouldLog) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
lastLoggedPercent = percent ?? 0;
|
|
151
|
+
stream.write(`${prefix}model download ${formatModelDownloadLine(progress)}\n`);
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=download-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download-progress.js","sourceRoot":"","sources":["../../../src/core/models/download-progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyBH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiC,CAAC;AAE3D,6EAA6E;AAC7E,MAAM,UAAU,8BAA8B,CAC5C,QAAuC;IAEvC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,yBAAyB,CACvC,QAA+B;IAE/B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;IACH,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,IAAI,IAAI,CAAC;QACd,IAAI,IAAI,CAAC,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,oBAAoB,CAAC,cAAsB;IACzD,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,GAAG,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACpF,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAC3B,QAA+B;IAE/B,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAA+B;IAE/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;QAC1B,CAAC,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG;QAC5D,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,KAAK,qBAAqB,QAAQ,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC;IAC1F,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GACR,QAAQ,CAAC,UAAU,KAAK,SAAS;QAC/B,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAChF,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAKzC;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IAClC,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,GAAG,GACP,QAAQ,CAAC,MAAM,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS;gBACtD,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI;gBAClC,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,GAAG,MAAM,eAAe,GAAG,GAAG,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/E,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YACjC,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnB,QAAQ,GAAG,KAAK,CAAC;gBACjB,iBAAiB,GAAG,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CACV,GAAG,MAAM,kBAAkB,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CACjE,CAAC;YACF,iBAAiB,GAAG,CAAC,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,SAAS,GACb,iBAAiB,KAAK,CAAC,CAAC;YACxB,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,iBAAiB,GAAG,OAAO,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CACV,GAAG,MAAM,kBAAkB,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CACjE,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -4,6 +4,7 @@ export const modelProviders = {
|
|
|
4
4
|
bedrock: () => import("./bedrock.js"),
|
|
5
5
|
google: () => import("./google.js"),
|
|
6
6
|
groq: () => import("./groq.js"),
|
|
7
|
+
"llama-cpp": () => import("./llama-cpp/index.js"),
|
|
7
8
|
minimax: () => import("./minimax.js"),
|
|
8
9
|
moonshot: () => import("./moonshot.js"),
|
|
9
10
|
ollama: () => import("./ollama/index.js"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/models/index.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACzC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;IACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC3C,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;CAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/models/index.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,cAAc,GAAiD;IAC1E,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACzC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;IACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;IAC/B,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;IACjD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;IACrC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC;IACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC3C,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;CAC9B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversion from standard JSON Schema (what Strands emits for tool specs via
|
|
3
|
+
* `z.toJSONSchema`) into node-llama-cpp's GBNF JSON schema subset.
|
|
4
|
+
*
|
|
5
|
+
* The GBNF subset (see node-llama-cpp `GbnfJsonSchema`) differs from JSON
|
|
6
|
+
* Schema in ways that break real tool schemas:
|
|
7
|
+
* - `anyOf`/`allOf` are not supported (only `oneOf`); a schema without a
|
|
8
|
+
* recognized shape falls through to an "immutable type" check and throws
|
|
9
|
+
* `Unknown immutable type undefined` at generation time.
|
|
10
|
+
* - Every property listed under `properties` is treated as required — there
|
|
11
|
+
* is no way to express an optional key. We encode optionals as
|
|
12
|
+
* `oneOf: [<schema>, { type: "null" }]` and strip the `null`s from the
|
|
13
|
+
* generated params afterwards ({@link pruneOptionalNulls}).
|
|
14
|
+
* - Only `date-time`/`time`/`date` string formats are known; numeric bounds
|
|
15
|
+
* (`minimum`/`maximum`/...), `default`, `propertyNames`, etc. are not.
|
|
16
|
+
*/
|
|
17
|
+
/** Whether the original schema itself accepts `null` as a value. */
|
|
18
|
+
export declare function schemaAllowsNull(schema: unknown): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Convert a JSON Schema into node-llama-cpp's GBNF subset. Lossy where the
|
|
21
|
+
* subset cannot express the original (numeric ranges, string formats, ...);
|
|
22
|
+
* untranslatable shapes degrade to an any-JSON-value grammar rather than
|
|
23
|
+
* failing generation.
|
|
24
|
+
*/
|
|
25
|
+
export declare function jsonSchemaToGbnf(schema: unknown): object;
|
|
26
|
+
/**
|
|
27
|
+
* Remove `null` values that only exist because {@link jsonSchemaToGbnf}
|
|
28
|
+
* encodes optional properties as `oneOf: [<schema>, null]`. Walks the value
|
|
29
|
+
* together with the ORIGINAL JSON schema: a key is dropped when it is null,
|
|
30
|
+
* declared optional, and the original schema does not itself allow null.
|
|
31
|
+
*/
|
|
32
|
+
export declare function pruneOptionalNulls(value: unknown, schema: unknown): unknown;
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversion from standard JSON Schema (what Strands emits for tool specs via
|
|
3
|
+
* `z.toJSONSchema`) into node-llama-cpp's GBNF JSON schema subset.
|
|
4
|
+
*
|
|
5
|
+
* The GBNF subset (see node-llama-cpp `GbnfJsonSchema`) differs from JSON
|
|
6
|
+
* Schema in ways that break real tool schemas:
|
|
7
|
+
* - `anyOf`/`allOf` are not supported (only `oneOf`); a schema without a
|
|
8
|
+
* recognized shape falls through to an "immutable type" check and throws
|
|
9
|
+
* `Unknown immutable type undefined` at generation time.
|
|
10
|
+
* - Every property listed under `properties` is treated as required — there
|
|
11
|
+
* is no way to express an optional key. We encode optionals as
|
|
12
|
+
* `oneOf: [<schema>, { type: "null" }]` and strip the `null`s from the
|
|
13
|
+
* generated params afterwards ({@link pruneOptionalNulls}).
|
|
14
|
+
* - Only `date-time`/`time`/`date` string formats are known; numeric bounds
|
|
15
|
+
* (`minimum`/`maximum`/...), `default`, `propertyNames`, etc. are not.
|
|
16
|
+
*/
|
|
17
|
+
const IMMUTABLE_TYPES = new Set([
|
|
18
|
+
"string",
|
|
19
|
+
"number",
|
|
20
|
+
"integer",
|
|
21
|
+
"boolean",
|
|
22
|
+
"null",
|
|
23
|
+
]);
|
|
24
|
+
const GBNF_STRING_FORMATS = new Set(["date-time", "time", "date"]);
|
|
25
|
+
/** Grammar for "any JSON value" — used when a schema cannot be translated. */
|
|
26
|
+
const ANY_VALUE = {
|
|
27
|
+
oneOf: [
|
|
28
|
+
{ type: ["string", "number", "boolean", "null"] },
|
|
29
|
+
{ type: "object", additionalProperties: true },
|
|
30
|
+
{ type: "array" },
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
function isObject(value) {
|
|
34
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
|
+
}
|
|
36
|
+
function descriptionOf(schema) {
|
|
37
|
+
return typeof schema.description === "string" && schema.description.length
|
|
38
|
+
? { description: schema.description }
|
|
39
|
+
: {};
|
|
40
|
+
}
|
|
41
|
+
/** Whether the original schema itself accepts `null` as a value. */
|
|
42
|
+
export function schemaAllowsNull(schema) {
|
|
43
|
+
if (!isObject(schema)) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const type = schema.type;
|
|
47
|
+
if (type === "null" || (Array.isArray(type) && type.includes("null"))) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (schema.const === null) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(schema.enum) && schema.enum.includes(null)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
for (const key of ["anyOf", "oneOf", "allOf"]) {
|
|
57
|
+
const variants = schema[key];
|
|
58
|
+
if (Array.isArray(variants) && variants.some(schemaAllowsNull)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Convert a JSON Schema into node-llama-cpp's GBNF subset. Lossy where the
|
|
66
|
+
* subset cannot express the original (numeric ranges, string formats, ...);
|
|
67
|
+
* untranslatable shapes degrade to an any-JSON-value grammar rather than
|
|
68
|
+
* failing generation.
|
|
69
|
+
*/
|
|
70
|
+
export function jsonSchemaToGbnf(schema) {
|
|
71
|
+
if (schema === true || schema === undefined || schema === null) {
|
|
72
|
+
return ANY_VALUE;
|
|
73
|
+
}
|
|
74
|
+
if (!isObject(schema)) {
|
|
75
|
+
return ANY_VALUE;
|
|
76
|
+
}
|
|
77
|
+
if (Object.keys(schema).length === 0) {
|
|
78
|
+
return ANY_VALUE;
|
|
79
|
+
}
|
|
80
|
+
const desc = descriptionOf(schema);
|
|
81
|
+
if (schema.const !== undefined) {
|
|
82
|
+
const c = schema.const;
|
|
83
|
+
if (typeof c === "string" ||
|
|
84
|
+
typeof c === "number" ||
|
|
85
|
+
typeof c === "boolean" ||
|
|
86
|
+
c === null) {
|
|
87
|
+
return { const: c, ...desc };
|
|
88
|
+
}
|
|
89
|
+
return ANY_VALUE;
|
|
90
|
+
}
|
|
91
|
+
if (Array.isArray(schema.enum)) {
|
|
92
|
+
const values = schema.enum.filter((v) => typeof v === "string" ||
|
|
93
|
+
typeof v === "number" ||
|
|
94
|
+
typeof v === "boolean" ||
|
|
95
|
+
v === null);
|
|
96
|
+
if (values.length > 0) {
|
|
97
|
+
return { enum: values, ...desc };
|
|
98
|
+
}
|
|
99
|
+
return ANY_VALUE;
|
|
100
|
+
}
|
|
101
|
+
const variants = Array.isArray(schema.anyOf)
|
|
102
|
+
? schema.anyOf
|
|
103
|
+
: Array.isArray(schema.oneOf)
|
|
104
|
+
? schema.oneOf
|
|
105
|
+
: undefined;
|
|
106
|
+
if (variants !== undefined) {
|
|
107
|
+
if (variants.length === 0) {
|
|
108
|
+
return ANY_VALUE;
|
|
109
|
+
}
|
|
110
|
+
if (variants.length === 1) {
|
|
111
|
+
return { ...jsonSchemaToGbnf(variants[0]), ...desc };
|
|
112
|
+
}
|
|
113
|
+
return { oneOf: variants.map(jsonSchemaToGbnf), ...desc };
|
|
114
|
+
}
|
|
115
|
+
if (Array.isArray(schema.allOf)) {
|
|
116
|
+
// Proper allOf merging is out of scope; a single member is common (zod
|
|
117
|
+
// wraps descriptions this way), otherwise fall back to any-value.
|
|
118
|
+
if (schema.allOf.length === 1) {
|
|
119
|
+
return { ...jsonSchemaToGbnf(schema.allOf[0]), ...desc };
|
|
120
|
+
}
|
|
121
|
+
return ANY_VALUE;
|
|
122
|
+
}
|
|
123
|
+
const type = schema.type;
|
|
124
|
+
if (Array.isArray(type)) {
|
|
125
|
+
const types = type.filter((t) => typeof t === "string" && IMMUTABLE_TYPES.has(t));
|
|
126
|
+
if (types.length === type.length && types.length > 0) {
|
|
127
|
+
return { type: types, ...desc };
|
|
128
|
+
}
|
|
129
|
+
if (type.length > 0) {
|
|
130
|
+
return {
|
|
131
|
+
oneOf: type.map((t) => jsonSchemaToGbnf({ ...schema, type: t })),
|
|
132
|
+
...desc,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return ANY_VALUE;
|
|
136
|
+
}
|
|
137
|
+
switch (type) {
|
|
138
|
+
case "string": {
|
|
139
|
+
const out = { type: "string", ...desc };
|
|
140
|
+
if (typeof schema.minLength === "number") {
|
|
141
|
+
out.minLength = schema.minLength;
|
|
142
|
+
}
|
|
143
|
+
if (typeof schema.maxLength === "number") {
|
|
144
|
+
out.maxLength = schema.maxLength;
|
|
145
|
+
}
|
|
146
|
+
if (typeof schema.format === "string" &&
|
|
147
|
+
GBNF_STRING_FORMATS.has(schema.format)) {
|
|
148
|
+
out.format = schema.format;
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
case "number":
|
|
153
|
+
case "integer":
|
|
154
|
+
case "boolean":
|
|
155
|
+
case "null":
|
|
156
|
+
return { type, ...desc };
|
|
157
|
+
case "object": {
|
|
158
|
+
const properties = isObject(schema.properties)
|
|
159
|
+
? schema.properties
|
|
160
|
+
: undefined;
|
|
161
|
+
const required = new Set(Array.isArray(schema.required)
|
|
162
|
+
? schema.required.filter((k) => typeof k === "string")
|
|
163
|
+
: []);
|
|
164
|
+
if (properties === undefined || Object.keys(properties).length === 0) {
|
|
165
|
+
return {
|
|
166
|
+
type: "object",
|
|
167
|
+
additionalProperties: convertAdditionalProperties(schema.additionalProperties, true),
|
|
168
|
+
...desc,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const props = {};
|
|
172
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
173
|
+
const converted = jsonSchemaToGbnf(value);
|
|
174
|
+
if (required.has(key) || schemaAllowsNull(value)) {
|
|
175
|
+
props[key] = converted;
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
// GBNF grammars force every listed property to be generated, so
|
|
179
|
+
// optional keys accept null as an explicit "omitted" marker; the
|
|
180
|
+
// nulls are pruned before the tool call is emitted.
|
|
181
|
+
const note = "Optional — set to null to omit.";
|
|
182
|
+
const innerDesc = isObject(value)
|
|
183
|
+
? descriptionOf(value).description
|
|
184
|
+
: undefined;
|
|
185
|
+
props[key] = {
|
|
186
|
+
oneOf: [converted, { type: "null" }],
|
|
187
|
+
description: innerDesc ? `${innerDesc} ${note}` : note,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
type: "object",
|
|
192
|
+
properties: props,
|
|
193
|
+
additionalProperties: convertAdditionalProperties(schema.additionalProperties, false),
|
|
194
|
+
...desc,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
case "array": {
|
|
198
|
+
const out = { type: "array", ...desc };
|
|
199
|
+
if (schema.items !== undefined && schema.items !== true) {
|
|
200
|
+
out.items = jsonSchemaToGbnf(schema.items);
|
|
201
|
+
}
|
|
202
|
+
if (Array.isArray(schema.prefixItems)) {
|
|
203
|
+
out.prefixItems = schema.prefixItems.map(jsonSchemaToGbnf);
|
|
204
|
+
}
|
|
205
|
+
if (typeof schema.minItems === "number") {
|
|
206
|
+
out.minItems = schema.minItems;
|
|
207
|
+
}
|
|
208
|
+
if (typeof schema.maxItems === "number") {
|
|
209
|
+
out.maxItems = schema.maxItems;
|
|
210
|
+
}
|
|
211
|
+
return out;
|
|
212
|
+
}
|
|
213
|
+
default:
|
|
214
|
+
return ANY_VALUE;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function convertAdditionalProperties(value, fallback) {
|
|
218
|
+
if (value === true || value === false) {
|
|
219
|
+
return value;
|
|
220
|
+
}
|
|
221
|
+
if (isObject(value)) {
|
|
222
|
+
return jsonSchemaToGbnf(value);
|
|
223
|
+
}
|
|
224
|
+
return fallback;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Remove `null` values that only exist because {@link jsonSchemaToGbnf}
|
|
228
|
+
* encodes optional properties as `oneOf: [<schema>, null]`. Walks the value
|
|
229
|
+
* together with the ORIGINAL JSON schema: a key is dropped when it is null,
|
|
230
|
+
* declared optional, and the original schema does not itself allow null.
|
|
231
|
+
*/
|
|
232
|
+
export function pruneOptionalNulls(value, schema) {
|
|
233
|
+
if (value === null || typeof value !== "object") {
|
|
234
|
+
return value;
|
|
235
|
+
}
|
|
236
|
+
const s = isObject(schema) ? schema : {};
|
|
237
|
+
const variants = Array.isArray(s.anyOf)
|
|
238
|
+
? s.anyOf
|
|
239
|
+
: Array.isArray(s.oneOf)
|
|
240
|
+
? s.oneOf
|
|
241
|
+
: undefined;
|
|
242
|
+
if (variants !== undefined) {
|
|
243
|
+
const branch = variants.find((v) => isObject(v)
|
|
244
|
+
? Array.isArray(value)
|
|
245
|
+
? v.type === "array" || v.items !== undefined
|
|
246
|
+
: v.type === "object" || v.properties !== undefined
|
|
247
|
+
: false);
|
|
248
|
+
return pruneOptionalNulls(value, branch);
|
|
249
|
+
}
|
|
250
|
+
if (Array.isArray(value)) {
|
|
251
|
+
return value.map((item) => pruneOptionalNulls(item, s.items));
|
|
252
|
+
}
|
|
253
|
+
const properties = isObject(s.properties) ? s.properties : undefined;
|
|
254
|
+
const required = new Set(Array.isArray(s.required)
|
|
255
|
+
? s.required.filter((k) => typeof k === "string")
|
|
256
|
+
: []);
|
|
257
|
+
const out = {};
|
|
258
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
259
|
+
const propSchema = properties?.[key];
|
|
260
|
+
if (entry === null &&
|
|
261
|
+
properties !== undefined &&
|
|
262
|
+
propSchema !== undefined &&
|
|
263
|
+
!required.has(key) &&
|
|
264
|
+
!schemaAllowsNull(propSchema)) {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
out[key] = pruneOptionalNulls(entry, propSchema ??
|
|
268
|
+
(isObject(s.additionalProperties) ? s.additionalProperties : undefined));
|
|
269
|
+
}
|
|
270
|
+
return out;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=gbnf-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gbnf-schema.js","sourceRoot":"","sources":["../../../../src/core/models/llama-cpp/gbnf-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StrandsLlamaCppModel } from "./strands-llama-cpp.js";
|
|
2
|
+
import type { LlamaCppProviderOptions, LlmOptions } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Strands {@link Model} backed by in-process llama.cpp via `node-llama-cpp`.
|
|
5
|
+
* GGUF weights are fetched from the Hugging Face Hub (via `@huggingface/hub`)
|
|
6
|
+
* into `~/.hooman/cache/huggingface` on first use.
|
|
7
|
+
*/
|
|
8
|
+
export declare function create(providerOptions: LlamaCppProviderOptions, llmOptions: LlmOptions): StrandsLlamaCppModel;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { StrandsLlamaCppModel } from "./strands-llama-cpp.js";
|
|
2
|
+
import { REASONING_BUDGET_TOKENS } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Strands {@link Model} backed by in-process llama.cpp via `node-llama-cpp`.
|
|
5
|
+
* GGUF weights are fetched from the Hugging Face Hub (via `@huggingface/hub`)
|
|
6
|
+
* into `~/.hooman/cache/huggingface` on first use.
|
|
7
|
+
*/
|
|
8
|
+
export function create(providerOptions, llmOptions) {
|
|
9
|
+
// The shared `reasoning` option follows the usual Hooman semantics: its
|
|
10
|
+
// presence enables thinking (chat wrapper configured to allow thought
|
|
11
|
+
// segments, effort mapped to a thought-token budget and, on Harmony models,
|
|
12
|
+
// to the native reasoning-effort level); omitting it disables thinking
|
|
13
|
+
// (wrappers discourage thoughts, thought budget forced to 0).
|
|
14
|
+
const reasoning = providerOptions.reasoning;
|
|
15
|
+
const effort = reasoning?.effort;
|
|
16
|
+
return new StrandsLlamaCppModel({
|
|
17
|
+
modelId: llmOptions.model,
|
|
18
|
+
...(providerOptions.hfToken ? { hfToken: providerOptions.hfToken } : {}),
|
|
19
|
+
...(providerOptions.gpu !== undefined ? { gpu: providerOptions.gpu } : {}),
|
|
20
|
+
...(providerOptions.contextSize !== undefined
|
|
21
|
+
? { contextSize: providerOptions.contextSize }
|
|
22
|
+
: {}),
|
|
23
|
+
...(reasoning !== undefined
|
|
24
|
+
? {
|
|
25
|
+
reasoning: { ...(effort !== undefined ? { effort } : {}) },
|
|
26
|
+
thoughtBudgetTokens: REASONING_BUDGET_TOKENS[effort ?? "medium"],
|
|
27
|
+
}
|
|
28
|
+
: {}),
|
|
29
|
+
...(llmOptions.temperature !== undefined
|
|
30
|
+
? { temperature: llmOptions.temperature }
|
|
31
|
+
: {}),
|
|
32
|
+
...(llmOptions.maxTokens !== undefined
|
|
33
|
+
? { maxTokens: llmOptions.maxTokens }
|
|
34
|
+
: {}),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/models/llama-cpp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGtD;;;;GAIG;AACH,MAAM,UAAU,MAAM,CACpB,eAAwC,EACxC,UAAsB;IAEtB,wEAAwE;IACxE,sEAAsE;IACtE,4EAA4E;IAC5E,uEAAuE;IACvE,8DAA8D;IAC9D,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC;IACjC,OAAO,IAAI,oBAAoB,CAAC;QAC9B,OAAO,EAAE,UAAU,CAAC,KAAK;QACzB,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,eAAe,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,eAAe,CAAC,WAAW,KAAK,SAAS;YAC3C,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS,KAAK,SAAS;YACzB,CAAC,CAAC;gBACE,SAAS,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBAC1D,mBAAmB,EAAE,uBAAuB,CAAC,MAAM,IAAI,QAAQ,CAAC;aACjE;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE;YACrC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** GGUF files are cached under `~/.hooman/cache/huggingface` (HF cache layout). */
|
|
2
|
+
export declare const llamaCppCacheDir: () => string;
|
|
3
|
+
export type ParsedModelSpec = {
|
|
4
|
+
kind: "local";
|
|
5
|
+
path: string;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "hub";
|
|
8
|
+
repo: string;
|
|
9
|
+
filePath?: string;
|
|
10
|
+
quant?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Parse an LLM `model` value into either a local GGUF path or a Hugging Face
|
|
14
|
+
* repo designation. Accepted shapes (an optional `hf:` prefix is stripped):
|
|
15
|
+
* - `/abs/path/model.gguf`, `./rel/model.gguf`, `~/models/model.gguf`
|
|
16
|
+
* - `owner/repo` (the repo's GGUF file is auto-detected)
|
|
17
|
+
* - `owner/repo:Q8_0` (pick the variant matching a quant tag, llama.cpp style)
|
|
18
|
+
* - `owner/repo/path/to/file.gguf` (pin an exact file, e.g. a quant variant)
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseModelSpec(model: string): ParsedModelSpec;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a model spec to a local GGUF file path, downloading it from the
|
|
23
|
+
* Hugging Face Hub into the Hooman cache when needed. For sharded GGUFs all
|
|
24
|
+
* shards are fetched and the first shard's path is returned (llama.cpp finds
|
|
25
|
+
* the siblings next to it). Download progress is reported process-wide via
|
|
26
|
+
* `subscribeModelDownloadProgress` (see `../download-progress.ts`).
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveModelFile(model: string, hfToken?: string): Promise<string>;
|