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,422 @@
|
|
|
1
|
+
import { ContextWindowOverflowError, Model, ModelError, } from "@strands-agents/sdk";
|
|
2
|
+
import { ModelContentBlockDeltaEvent, ModelContentBlockStartEvent, ModelContentBlockStopEvent, ModelMessageStartEvent, ModelMessageStopEvent, ModelMetadataEvent, } from "@strands-agents/sdk";
|
|
3
|
+
import { jsonSchemaToGbnf, pruneOptionalNulls } from "./gbnf-schema.js";
|
|
4
|
+
import { resolveModelFile } from "./resolve-model.js";
|
|
5
|
+
/**
|
|
6
|
+
* Loaded llama.cpp runtimes are expensive (weights in RAM/VRAM), so share them
|
|
7
|
+
* process-wide keyed by resolved GGUF path. Contexts stay per Strands model
|
|
8
|
+
* instance so concurrent agents (e.g. subagents) get independent sequences.
|
|
9
|
+
*/
|
|
10
|
+
const llamaRuntimePromises = new Map();
|
|
11
|
+
const loadedModelPromises = new Map();
|
|
12
|
+
function extractSystemText(system) {
|
|
13
|
+
if (system === undefined) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
if (typeof system === "string") {
|
|
17
|
+
return system;
|
|
18
|
+
}
|
|
19
|
+
const parts = [];
|
|
20
|
+
for (const block of system) {
|
|
21
|
+
if (block.type === "textBlock") {
|
|
22
|
+
parts.push(block.text);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const joined = parts.join("\n").trim();
|
|
26
|
+
return joined.length > 0 ? joined : undefined;
|
|
27
|
+
}
|
|
28
|
+
function contentBlockToText(block) {
|
|
29
|
+
if (block.type === "textBlock") {
|
|
30
|
+
return block.text;
|
|
31
|
+
}
|
|
32
|
+
if (block.type === "imageBlock") {
|
|
33
|
+
return "(llama.cpp: image content is not supported by this provider)";
|
|
34
|
+
}
|
|
35
|
+
if (block.type === "videoBlock" || block.type === "documentBlock") {
|
|
36
|
+
return `(llama.cpp: ${block.type} content is not supported by this provider)`;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function toolResultToText(block) {
|
|
41
|
+
const parts = [];
|
|
42
|
+
for (const c of block.content) {
|
|
43
|
+
if (c.type === "textBlock") {
|
|
44
|
+
parts.push(c.text);
|
|
45
|
+
}
|
|
46
|
+
else if (c.type === "jsonBlock") {
|
|
47
|
+
parts.push(JSON.stringify(c.json));
|
|
48
|
+
}
|
|
49
|
+
else if (c.type === "imageBlock") {
|
|
50
|
+
parts.push("(llama.cpp: image tool results are not supported)");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const joined = parts.join("\n");
|
|
54
|
+
if (joined.length > 0) {
|
|
55
|
+
return joined;
|
|
56
|
+
}
|
|
57
|
+
return block.status === "error" ? "(tool error)" : "";
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Convert Strands conversation history to node-llama-cpp `ChatHistoryItem[]`.
|
|
61
|
+
* Tool calls are paired with their results (`ChatModelFunctionCall` requires
|
|
62
|
+
* both) by `toolUseId`: the toolUse blocks live on assistant messages and the
|
|
63
|
+
* matching toolResult blocks on the following user message, so results are
|
|
64
|
+
* folded back into the preceding model response.
|
|
65
|
+
*/
|
|
66
|
+
function strandsMessagesToHistory(messages, systemText) {
|
|
67
|
+
const history = [];
|
|
68
|
+
if (systemText) {
|
|
69
|
+
history.push({ type: "system", text: systemText });
|
|
70
|
+
}
|
|
71
|
+
const pendingToolUses = new Map();
|
|
72
|
+
const lastModelResponse = () => {
|
|
73
|
+
const last = history.at(-1);
|
|
74
|
+
if (last?.type === "model") {
|
|
75
|
+
return last;
|
|
76
|
+
}
|
|
77
|
+
const created = { type: "model", response: [] };
|
|
78
|
+
history.push(created);
|
|
79
|
+
return created;
|
|
80
|
+
};
|
|
81
|
+
const pushUserText = (text) => {
|
|
82
|
+
const last = history.at(-1);
|
|
83
|
+
if (last?.type === "user") {
|
|
84
|
+
last.text = last.text.length > 0 ? `${last.text}\n${text}` : text;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
history.push({ type: "user", text });
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
for (const msg of messages) {
|
|
91
|
+
for (const block of msg.content) {
|
|
92
|
+
if (msg.role === "assistant") {
|
|
93
|
+
if (block.type === "toolUseBlock") {
|
|
94
|
+
const b = block;
|
|
95
|
+
pendingToolUses.set(b.toolUseId, b);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (block.type === "reasoningBlock") {
|
|
99
|
+
// Prior turns' chain of thought is not replayed into the context.
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const text = contentBlockToText(block);
|
|
103
|
+
if (text !== undefined && text.length > 0) {
|
|
104
|
+
lastModelResponse().response.push(text);
|
|
105
|
+
}
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// user role
|
|
109
|
+
if (block.type === "toolResultBlock") {
|
|
110
|
+
const b = block;
|
|
111
|
+
const use = pendingToolUses.get(b.toolUseId);
|
|
112
|
+
pendingToolUses.delete(b.toolUseId);
|
|
113
|
+
const call = {
|
|
114
|
+
type: "functionCall",
|
|
115
|
+
name: use?.name ?? b.toolUseId,
|
|
116
|
+
params: use?.input ?? {},
|
|
117
|
+
result: toolResultToText(b),
|
|
118
|
+
};
|
|
119
|
+
const model = lastModelResponse();
|
|
120
|
+
if (model.response.filter((item) => typeof item !== "string").length === 0) {
|
|
121
|
+
call.startsNewChunk = true;
|
|
122
|
+
}
|
|
123
|
+
model.response.push(call);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const text = contentBlockToText(block);
|
|
127
|
+
if (text !== undefined && text.length > 0) {
|
|
128
|
+
pushUserText(text);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return history;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Convert Strands tool specs to node-llama-cpp function definitions. Tool
|
|
136
|
+
* inputSchemas are standard JSON Schema (Strands emits them via
|
|
137
|
+
* `z.toJSONSchema`), while node-llama-cpp only accepts its GBNF subset —
|
|
138
|
+
* passing e.g. `anyOf` through unconverted fails generation with
|
|
139
|
+
* `Unknown immutable type undefined`. See `gbnf-schema.ts`.
|
|
140
|
+
*/
|
|
141
|
+
function strandsToolsToFunctions(toolSpecs) {
|
|
142
|
+
if (!toolSpecs?.length) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
const functions = {};
|
|
146
|
+
for (const spec of toolSpecs) {
|
|
147
|
+
functions[spec.name] = {
|
|
148
|
+
...(spec.description ? { description: spec.description } : {}),
|
|
149
|
+
...(spec.inputSchema
|
|
150
|
+
? { params: jsonSchemaToGbnf(spec.inputSchema) }
|
|
151
|
+
: {}),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return functions;
|
|
155
|
+
}
|
|
156
|
+
/** Strands {@link Model} backed by in-process llama.cpp via `node-llama-cpp`. */
|
|
157
|
+
export class StrandsLlamaCppModel extends Model {
|
|
158
|
+
config;
|
|
159
|
+
chatPromise;
|
|
160
|
+
context;
|
|
161
|
+
constructor(config) {
|
|
162
|
+
super();
|
|
163
|
+
this.config = { ...config };
|
|
164
|
+
}
|
|
165
|
+
updateConfig(modelConfig) {
|
|
166
|
+
const chatKey = (c) => JSON.stringify([c.modelId, c.gpu, c.contextSize, c.reasoning ?? null]);
|
|
167
|
+
const before = chatKey(this.config);
|
|
168
|
+
this.config = { ...this.config, ...modelConfig };
|
|
169
|
+
if (chatKey(this.config) !== before) {
|
|
170
|
+
// The chat wrapper bakes in reasoning settings and the context bakes in
|
|
171
|
+
// its size, so drop the lazily-built chat/context and rebuild on the
|
|
172
|
+
// next stream call (loaded weights are cached process-wide).
|
|
173
|
+
this.chatPromise = undefined;
|
|
174
|
+
this.context = undefined;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
getConfig() {
|
|
178
|
+
return { ...this.config };
|
|
179
|
+
}
|
|
180
|
+
getChat() {
|
|
181
|
+
this.chatPromise ??= this.initChat();
|
|
182
|
+
return this.chatPromise;
|
|
183
|
+
}
|
|
184
|
+
async initChat() {
|
|
185
|
+
const modelId = this.config.modelId;
|
|
186
|
+
if (!modelId) {
|
|
187
|
+
throw new ModelError("llama.cpp model is not configured");
|
|
188
|
+
}
|
|
189
|
+
const { getLlama, LlamaChat, LlamaLogLevel, resolveChatWrapper } = await import("node-llama-cpp");
|
|
190
|
+
const modelPath = await resolveModelFile(modelId, this.config.hfToken);
|
|
191
|
+
const gpu = this.config.gpu ?? "auto";
|
|
192
|
+
const runtimeKey = JSON.stringify(gpu);
|
|
193
|
+
let llamaPromise = llamaRuntimePromises.get(runtimeKey);
|
|
194
|
+
if (!llamaPromise) {
|
|
195
|
+
// Keep llama.cpp's native logging out of the TUI transcript.
|
|
196
|
+
llamaPromise = getLlama({ gpu, logLevel: LlamaLogLevel.error });
|
|
197
|
+
llamaRuntimePromises.set(runtimeKey, llamaPromise);
|
|
198
|
+
}
|
|
199
|
+
const llama = await llamaPromise;
|
|
200
|
+
let modelPromise = loadedModelPromises.get(modelPath);
|
|
201
|
+
if (!modelPromise) {
|
|
202
|
+
modelPromise = llama.loadModel({ modelPath });
|
|
203
|
+
loadedModelPromises.set(modelPath, modelPromise);
|
|
204
|
+
}
|
|
205
|
+
const model = await modelPromise;
|
|
206
|
+
this.context = await model.createContext({
|
|
207
|
+
...(this.config.contextSize !== undefined
|
|
208
|
+
? { contextSize: this.config.contextSize }
|
|
209
|
+
: {}),
|
|
210
|
+
});
|
|
211
|
+
// Reasoning on/off lives in the chat template, so resolve the wrapper
|
|
212
|
+
// explicitly (same auto-detection LlamaChat would do) with per-wrapper
|
|
213
|
+
// thinking settings derived from the shared `reasoning` option.
|
|
214
|
+
const reasoningEnabled = this.config.reasoning !== undefined;
|
|
215
|
+
const effort = this.config.reasoning?.effort;
|
|
216
|
+
const harmonyEffort = effort === "high" || effort === "medium" ? effort : "low";
|
|
217
|
+
const chatWrapper = resolveChatWrapper(model, {
|
|
218
|
+
customWrapperSettings: {
|
|
219
|
+
qwen: { thoughts: reasoningEnabled ? "auto" : "discourage" },
|
|
220
|
+
gemma4: { reasoning: reasoningEnabled },
|
|
221
|
+
harmony: {
|
|
222
|
+
reasoningEffort: reasoningEnabled ? harmonyEffort : "low",
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
return new LlamaChat({
|
|
227
|
+
contextSequence: this.context.getSequence(),
|
|
228
|
+
chatWrapper,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
async *stream(messages, options) {
|
|
232
|
+
let chat;
|
|
233
|
+
try {
|
|
234
|
+
chat = await this.getChat();
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
237
|
+
// Let a failed init (bad model spec, download failure) be retried.
|
|
238
|
+
this.chatPromise = undefined;
|
|
239
|
+
if (e instanceof ModelError) {
|
|
240
|
+
throw e;
|
|
241
|
+
}
|
|
242
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
243
|
+
throw new ModelError(`llama.cpp initialization failed: ${msg}`, {
|
|
244
|
+
cause: e,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
const systemText = extractSystemText(options?.systemPrompt);
|
|
248
|
+
const history = strandsMessagesToHistory(messages, systemText);
|
|
249
|
+
if (history.at(-1)?.type === "user") {
|
|
250
|
+
history.push({ type: "model", response: [] });
|
|
251
|
+
}
|
|
252
|
+
const functions = strandsToolsToFunctions(options?.toolSpecs);
|
|
253
|
+
const originalSchemas = new Map((options?.toolSpecs ?? []).map((spec) => [spec.name, spec.inputSchema]));
|
|
254
|
+
yield new ModelMessageStartEvent({
|
|
255
|
+
type: "modelMessageStartEvent",
|
|
256
|
+
role: "assistant",
|
|
257
|
+
});
|
|
258
|
+
const queue = [];
|
|
259
|
+
let wake;
|
|
260
|
+
const push = (event) => {
|
|
261
|
+
queue.push(event);
|
|
262
|
+
wake?.();
|
|
263
|
+
};
|
|
264
|
+
let textBlockOpen = false;
|
|
265
|
+
let reasoningBlockOpen = false;
|
|
266
|
+
const closeOpenBlocks = () => {
|
|
267
|
+
if (reasoningBlockOpen) {
|
|
268
|
+
push(new ModelContentBlockStopEvent({
|
|
269
|
+
type: "modelContentBlockStopEvent",
|
|
270
|
+
}));
|
|
271
|
+
reasoningBlockOpen = false;
|
|
272
|
+
}
|
|
273
|
+
if (textBlockOpen) {
|
|
274
|
+
push(new ModelContentBlockStopEvent({
|
|
275
|
+
type: "modelContentBlockStopEvent",
|
|
276
|
+
}));
|
|
277
|
+
textBlockOpen = false;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
const meterBefore = {
|
|
281
|
+
input: chat.sequence.tokenMeter.usedInputTokens,
|
|
282
|
+
output: chat.sequence.tokenMeter.usedOutputTokens,
|
|
283
|
+
};
|
|
284
|
+
// Budget 0 closes any thought segment as soon as it opens, covering models
|
|
285
|
+
// whose template ignores the wrapper's discourage setting (e.g. DeepSeek
|
|
286
|
+
// R1 distills that always think).
|
|
287
|
+
const thoughtBudget = this.config.reasoning === undefined ? 0 : this.config.thoughtBudgetTokens;
|
|
288
|
+
let done = false;
|
|
289
|
+
let failure;
|
|
290
|
+
const generation = chat
|
|
291
|
+
.generateResponse(history, {
|
|
292
|
+
...(functions ? { functions } : {}),
|
|
293
|
+
...(this.config.maxTokens !== undefined
|
|
294
|
+
? { maxTokens: this.config.maxTokens }
|
|
295
|
+
: {}),
|
|
296
|
+
...(this.config.temperature !== undefined
|
|
297
|
+
? { temperature: this.config.temperature }
|
|
298
|
+
: {}),
|
|
299
|
+
...(this.config.topP !== undefined ? { topP: this.config.topP } : {}),
|
|
300
|
+
...(thoughtBudget !== undefined
|
|
301
|
+
? { budgets: { thoughtTokens: thoughtBudget } }
|
|
302
|
+
: {}),
|
|
303
|
+
onResponseChunk: (chunk) => {
|
|
304
|
+
if (chunk.type === "segment") {
|
|
305
|
+
if (chunk.segmentType !== "thought" || chunk.text.length === 0) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (textBlockOpen) {
|
|
309
|
+
push(new ModelContentBlockStopEvent({
|
|
310
|
+
type: "modelContentBlockStopEvent",
|
|
311
|
+
}));
|
|
312
|
+
textBlockOpen = false;
|
|
313
|
+
}
|
|
314
|
+
if (!reasoningBlockOpen) {
|
|
315
|
+
push(new ModelContentBlockStartEvent({
|
|
316
|
+
type: "modelContentBlockStartEvent",
|
|
317
|
+
}));
|
|
318
|
+
reasoningBlockOpen = true;
|
|
319
|
+
}
|
|
320
|
+
push(new ModelContentBlockDeltaEvent({
|
|
321
|
+
type: "modelContentBlockDeltaEvent",
|
|
322
|
+
delta: { type: "reasoningContentDelta", text: chunk.text },
|
|
323
|
+
}));
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (chunk.text.length === 0) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
if (reasoningBlockOpen) {
|
|
330
|
+
push(new ModelContentBlockStopEvent({
|
|
331
|
+
type: "modelContentBlockStopEvent",
|
|
332
|
+
}));
|
|
333
|
+
reasoningBlockOpen = false;
|
|
334
|
+
}
|
|
335
|
+
if (!textBlockOpen) {
|
|
336
|
+
push(new ModelContentBlockStartEvent({
|
|
337
|
+
type: "modelContentBlockStartEvent",
|
|
338
|
+
}));
|
|
339
|
+
textBlockOpen = true;
|
|
340
|
+
}
|
|
341
|
+
push(new ModelContentBlockDeltaEvent({
|
|
342
|
+
type: "modelContentBlockDeltaEvent",
|
|
343
|
+
delta: { type: "textDelta", text: chunk.text },
|
|
344
|
+
}));
|
|
345
|
+
},
|
|
346
|
+
})
|
|
347
|
+
.then((res) => {
|
|
348
|
+
closeOpenBlocks();
|
|
349
|
+
const functionCalls = res.functionCalls ?? [];
|
|
350
|
+
let toolIndex = 0;
|
|
351
|
+
for (const call of functionCalls) {
|
|
352
|
+
const name = call.functionName;
|
|
353
|
+
const toolUseId = functionCalls.length > 1 ? `${name}_${toolIndex}` : name;
|
|
354
|
+
toolIndex += 1;
|
|
355
|
+
// Drop the `null` markers the GBNF grammar uses for optional keys
|
|
356
|
+
// (see gbnf-schema.ts) so tools receive clean params.
|
|
357
|
+
const params = pruneOptionalNulls(call.params ?? {}, originalSchemas.get(name));
|
|
358
|
+
push(new ModelContentBlockStartEvent({
|
|
359
|
+
type: "modelContentBlockStartEvent",
|
|
360
|
+
start: { type: "toolUseStart", name, toolUseId },
|
|
361
|
+
}));
|
|
362
|
+
push(new ModelContentBlockDeltaEvent({
|
|
363
|
+
type: "modelContentBlockDeltaEvent",
|
|
364
|
+
delta: {
|
|
365
|
+
type: "toolUseInputDelta",
|
|
366
|
+
input: JSON.stringify(params ?? {}),
|
|
367
|
+
},
|
|
368
|
+
}));
|
|
369
|
+
push(new ModelContentBlockStopEvent({
|
|
370
|
+
type: "modelContentBlockStopEvent",
|
|
371
|
+
}));
|
|
372
|
+
}
|
|
373
|
+
const stopReason = functionCalls.length > 0
|
|
374
|
+
? "toolUse"
|
|
375
|
+
: res.metadata.stopReason === "maxTokens"
|
|
376
|
+
? "maxTokens"
|
|
377
|
+
: "endTurn";
|
|
378
|
+
push(new ModelMessageStopEvent({
|
|
379
|
+
type: "modelMessageStopEvent",
|
|
380
|
+
stopReason,
|
|
381
|
+
}));
|
|
382
|
+
const inputTokens = chat.sequence.tokenMeter.usedInputTokens - meterBefore.input;
|
|
383
|
+
const outputTokens = chat.sequence.tokenMeter.usedOutputTokens - meterBefore.output;
|
|
384
|
+
push(new ModelMetadataEvent({
|
|
385
|
+
type: "modelMetadataEvent",
|
|
386
|
+
usage: {
|
|
387
|
+
inputTokens,
|
|
388
|
+
outputTokens,
|
|
389
|
+
totalTokens: inputTokens + outputTokens,
|
|
390
|
+
},
|
|
391
|
+
}));
|
|
392
|
+
})
|
|
393
|
+
.catch((e) => {
|
|
394
|
+
failure = e;
|
|
395
|
+
})
|
|
396
|
+
.finally(() => {
|
|
397
|
+
done = true;
|
|
398
|
+
wake?.();
|
|
399
|
+
});
|
|
400
|
+
while (!done || queue.length > 0) {
|
|
401
|
+
if (queue.length > 0) {
|
|
402
|
+
yield queue.shift();
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
await new Promise((resolve) => {
|
|
406
|
+
wake = resolve;
|
|
407
|
+
});
|
|
408
|
+
wake = undefined;
|
|
409
|
+
}
|
|
410
|
+
await generation;
|
|
411
|
+
if (failure !== undefined) {
|
|
412
|
+
const msg = failure instanceof Error ? failure.message : String(failure);
|
|
413
|
+
if (msg.toLowerCase().includes("context size")) {
|
|
414
|
+
throw new ContextWindowOverflowError(msg);
|
|
415
|
+
}
|
|
416
|
+
throw new ModelError(`llama.cpp generation error: ${msg}`, {
|
|
417
|
+
cause: failure,
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=strands-llama-cpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strands-llama-cpp.js","sourceRoot":"","sources":["../../../../src/core/models/llama-cpp/strands-llama-cpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import { VercelModel } from "@strands-agents/sdk/models/vercel";
|
|
1
2
|
import type { LlmOptions, MinimaxProviderOptions } from "./types.js";
|
|
2
|
-
export declare function create(providerOptions: MinimaxProviderOptions, llmOptions: LlmOptions):
|
|
3
|
+
export declare function create(providerOptions: MinimaxProviderOptions, llmOptions: LlmOptions): VercelModel;
|
|
@@ -1,11 +1,53 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createAnthropic } from "@ai-sdk/anthropic";
|
|
2
|
+
import { VercelModel } from "@strands-agents/sdk/models/vercel";
|
|
3
|
+
import { markTotalInclusiveInputUsage } from "./usage.js";
|
|
2
4
|
const DEFAULT_BASE_URL = "https://api.minimax.io/anthropic";
|
|
5
|
+
// MiniMax's adaptive thinking accepts effort via `output_config.effort`, which
|
|
6
|
+
// only takes low/medium/high; `minimal` collapses to `low`.
|
|
7
|
+
const OUTPUT_CONFIG_EFFORT = {
|
|
8
|
+
minimal: "low",
|
|
9
|
+
low: "low",
|
|
10
|
+
medium: "medium",
|
|
11
|
+
high: "high",
|
|
12
|
+
};
|
|
3
13
|
export function create(providerOptions, llmOptions) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
headers: providerOptions.headers,
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
const provider = createAnthropic({
|
|
15
|
+
baseURL: providerOptions.baseURL ?? DEFAULT_BASE_URL,
|
|
16
|
+
...(providerOptions.apiKey ? { apiKey: providerOptions.apiKey } : {}),
|
|
17
|
+
...(providerOptions.headers ? { headers: providerOptions.headers } : {}),
|
|
18
|
+
});
|
|
19
|
+
// Providing `reasoning` enables MiniMax thinking via the adaptive scheme
|
|
20
|
+
// (`thinking: { type: "adaptive" }` + `output_config.effort`); effort defaults
|
|
21
|
+
// to `medium`. `display` is forwarded when set. Omitting `reasoning` leaves
|
|
22
|
+
// thinking at the model default.
|
|
23
|
+
const reasoning = providerOptions.reasoning;
|
|
24
|
+
const anthropicProviderOptions = reasoning
|
|
25
|
+
? {
|
|
26
|
+
thinking: {
|
|
27
|
+
type: "adaptive",
|
|
28
|
+
...(reasoning.display ? { display: reasoning.display } : {}),
|
|
29
|
+
},
|
|
30
|
+
effort: OUTPUT_CONFIG_EFFORT[reasoning.effort ?? "medium"],
|
|
31
|
+
}
|
|
32
|
+
: undefined;
|
|
33
|
+
const config = {
|
|
34
|
+
...(llmOptions.temperature !== undefined
|
|
35
|
+
? { temperature: llmOptions.temperature }
|
|
36
|
+
: {}),
|
|
37
|
+
...(llmOptions.maxTokens !== undefined
|
|
38
|
+
? { maxTokens: llmOptions.maxTokens }
|
|
39
|
+
: {}),
|
|
40
|
+
...(anthropicProviderOptions
|
|
41
|
+
? { providerOptions: { anthropic: anthropicProviderOptions } }
|
|
42
|
+
: {}),
|
|
43
|
+
};
|
|
44
|
+
const model = new VercelModel({
|
|
45
|
+
provider: provider(llmOptions.model),
|
|
46
|
+
...config,
|
|
47
|
+
});
|
|
48
|
+
// The AI SDK Anthropic provider reports `inputTokens.total` inclusive of cache
|
|
49
|
+
// reads/writes (unlike the native Anthropic-style additive shape).
|
|
50
|
+
markTotalInclusiveInputUsage(model);
|
|
51
|
+
return model;
|
|
10
52
|
}
|
|
11
53
|
//# sourceMappingURL=minimax.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../../src/core/models/minimax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../../src/core/models/minimax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAE5D,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,oBAAoB,GAGtB;IACF,OAAO,EAAE,KAAK;IACd,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,MAAM,UAAU,MAAM,CACpB,eAAuC,EACvC,UAAsB;IAEtB,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,OAAO,EAAE,eAAe,CAAC,OAAO,IAAI,gBAAgB;QACpD,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC,CAAC;IAEH,yEAAyE;IACzE,+EAA+E;IAC/E,4EAA4E;IAC5E,iCAAiC;IACjC,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;IAC5C,MAAM,wBAAwB,GAAG,SAAS;QACxC,CAAC,CAAC;YACE,QAAQ,EAAE;gBACR,IAAI,EAAE,UAAmB;gBACzB,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;YACD,MAAM,EAAE,oBAAoB,CAAC,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC;SAC3D;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,MAAM,GAA+B;QACzC,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;QACP,GAAG,CAAC,wBAAwB;YAC1B,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,EAAE;YAC9D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,GAAG,MAAM;KACV,CAAC,CAAC;IACH,+EAA+E;IAC/E,mEAAmE;IACnE,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACf,CAAC"}
|