@uptimizr/agent-core 0.2.1 → 0.2.2
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/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/loop.d.ts +36 -0
- package/dist/loop.d.ts.map +1 -1
- package/dist/loop.js +76 -3
- package/dist/loop.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +11 -5
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/hosted.js +6 -2
- package/dist/providers/hosted.js.map +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/webllm.d.ts +62 -1
- package/dist/providers/webllm.d.ts.map +1 -1
- package/dist/providers/webllm.js +157 -16
- package/dist/providers/webllm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createCollectorClient, CollectorError, type CollectorClient, type CollectorClientConfig, type QueryParams, } from "./client.js";
|
|
2
2
|
export { readTools, type ReadTool, type ReadToolRequest } from "./tools.js";
|
|
3
3
|
export type { AgentMessage, AgentToolCall, AgentToolSchema, LlmProvider, ProviderRequest, ProviderResponse, } from "./provider.js";
|
|
4
|
-
export { runAgent, toToolSchemas, DEFAULT_MAX_STEPS, type RunAgentOptions, type RunAgentResult, } from "./loop.js";
|
|
4
|
+
export { runAgent, toToolSchemas, truncateToolResult, DEFAULT_MAX_STEPS, DEFAULT_MAX_TOOL_RESULT_CHARS, type RunAgentOptions, type RunAgentResult, } from "./loop.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,6BAA6B,EAC7B,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createCollectorClient, CollectorError, } from "./client.js";
|
|
2
2
|
export { readTools } from "./tools.js";
|
|
3
|
-
export { runAgent, toToolSchemas, DEFAULT_MAX_STEPS, } from "./loop.js";
|
|
3
|
+
export { runAgent, toToolSchemas, truncateToolResult, DEFAULT_MAX_STEPS, DEFAULT_MAX_TOOL_RESULT_CHARS, } from "./loop.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,GAIf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAuC,MAAM,YAAY,CAAC;AAS5E,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,GAIf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAuC,MAAM,YAAY,CAAC;AAS5E,OAAO,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,6BAA6B,GAG9B,MAAM,WAAW,CAAC"}
|
package/dist/loop.d.ts
CHANGED
|
@@ -3,6 +3,21 @@ import type { AgentMessage, AgentToolSchema, LlmProvider } from "./provider.js";
|
|
|
3
3
|
import { type ReadTool } from "./tools.js";
|
|
4
4
|
/** Default cap on provider turns before the loop gives up (guards against loops). */
|
|
5
5
|
export declare const DEFAULT_MAX_STEPS = 8;
|
|
6
|
+
/**
|
|
7
|
+
* Default cap on the number of characters of a single tool result fed back to
|
|
8
|
+
* the model. Large analytics JSON blobs can blow a small local model's context
|
|
9
|
+
* window (8192 tokens for the curated Hermes records) and degrade it into
|
|
10
|
+
* empty/looping output, so results above this length are truncated with a clear
|
|
11
|
+
* marker. Chosen to comfortably fit several tool results plus the prompt.
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_MAX_TOOL_RESULT_CHARS = 8000;
|
|
14
|
+
/**
|
|
15
|
+
* Truncate an over-long tool result to `max` characters, appending a clear
|
|
16
|
+
* marker noting how many characters were dropped. Below the cap the content is
|
|
17
|
+
* returned untouched (full fidelity). Plain string slicing only — no regex, so
|
|
18
|
+
* there is no ReDoS surface on model-influenced tool output.
|
|
19
|
+
*/
|
|
20
|
+
export declare function truncateToolResult(content: string, max: number): string;
|
|
6
21
|
/**
|
|
7
22
|
* Convert the read-only tool catalog into provider-facing tool schemas. Each
|
|
8
23
|
* tool's Zod raw shape becomes a JSON-Schema object the model can reason about.
|
|
@@ -20,6 +35,21 @@ export interface RunAgentOptions {
|
|
|
20
35
|
tools?: readonly ReadTool[];
|
|
21
36
|
/** Maximum provider turns before returning. Defaults to {@link DEFAULT_MAX_STEPS}. */
|
|
22
37
|
maxSteps?: number;
|
|
38
|
+
/**
|
|
39
|
+
* When the model ends a run without a usable answer — either an empty `final`
|
|
40
|
+
* or by exhausting `maxSteps` while still tool-calling — make ONE extra
|
|
41
|
+
* `provider.complete()` with tools disabled, forcing it to synthesize a plain
|
|
42
|
+
* prose answer from the tool results it already gathered. At most one such
|
|
43
|
+
* forced turn per run. Defaults to `true`. Set `false` to keep the old
|
|
44
|
+
* empty-answer behavior. Benefits every consumer (dashboard assistant, MCP).
|
|
45
|
+
*/
|
|
46
|
+
forceFinalAnswer?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Maximum characters of a single tool result fed back to the model; longer
|
|
49
|
+
* results are truncated with a marker to protect small models' context.
|
|
50
|
+
* Defaults to {@link DEFAULT_MAX_TOOL_RESULT_CHARS}.
|
|
51
|
+
*/
|
|
52
|
+
maxToolResultChars?: number;
|
|
23
53
|
/** Optional cancellation signal forwarded to the provider. */
|
|
24
54
|
signal?: AbortSignal;
|
|
25
55
|
}
|
|
@@ -42,6 +72,12 @@ export interface RunAgentResult {
|
|
|
42
72
|
*
|
|
43
73
|
* The loop only ever issues collector `GET`s through the catalog's
|
|
44
74
|
* `buildRequest` — it can neither ingest nor mutate data (ADR 0003 / 0017).
|
|
75
|
+
*
|
|
76
|
+
* When a run would otherwise end without a usable answer (an empty `final`, or
|
|
77
|
+
* the step cap reached while still tool-calling) and `forceFinalAnswer` is on
|
|
78
|
+
* (default), it makes ONE extra tools-disabled `provider.complete()` so the
|
|
79
|
+
* model synthesizes a prose answer from the tool results it already gathered —
|
|
80
|
+
* at most one such forced turn per run.
|
|
45
81
|
*/
|
|
46
82
|
export declare function runAgent(options: RunAgentOptions): Promise<RunAgentResult>;
|
|
47
83
|
//# sourceMappingURL=loop.d.ts.map
|
package/dist/loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAiB,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,SAAS,QAAQ,EAAc,GAAG,eAAe,EAAE,CAMvF;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,EAAE,WAAW,CAAC;IACtB,6DAA6D;IAC7D,MAAM,EAAE,eAAe,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,wEAAwE;IACxE,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAiB,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtD,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAYlD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,SAAS,QAAQ,EAAc,GAAG,eAAe,EAAE,CAMvF;AAED,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,EAAE,WAAW,CAAC;IACtB,6DAA6D;IAC7D,MAAM,EAAE,eAAe,CAAC;IACxB,4EAA4E;IAC5E,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,wEAAwE;IACxE,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA0EhF"}
|
package/dist/loop.js
CHANGED
|
@@ -2,6 +2,34 @@ import { z } from "zod";
|
|
|
2
2
|
import { readTools } from "./tools.js";
|
|
3
3
|
/** Default cap on provider turns before the loop gives up (guards against loops). */
|
|
4
4
|
export const DEFAULT_MAX_STEPS = 8;
|
|
5
|
+
/**
|
|
6
|
+
* Default cap on the number of characters of a single tool result fed back to
|
|
7
|
+
* the model. Large analytics JSON blobs can blow a small local model's context
|
|
8
|
+
* window (8192 tokens for the curated Hermes records) and degrade it into
|
|
9
|
+
* empty/looping output, so results above this length are truncated with a clear
|
|
10
|
+
* marker. Chosen to comfortably fit several tool results plus the prompt.
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_MAX_TOOL_RESULT_CHARS = 8000;
|
|
13
|
+
/**
|
|
14
|
+
* Directive sent — as a trailing `user` message — on the forced, tools-disabled
|
|
15
|
+
* synthesis turn (see {@link runAgent}). It tells the model to stop calling
|
|
16
|
+
* tools and answer in plain prose from the data it already gathered. Kept out of
|
|
17
|
+
* the returned transcript: only the resulting answer is persisted.
|
|
18
|
+
*/
|
|
19
|
+
const FORCE_FINAL_DIRECTIVE = "Now answer the user's question directly in plain text, using the tool results already " +
|
|
20
|
+
"gathered above. Do not call any tools. If the data is insufficient, say so briefly.";
|
|
21
|
+
/**
|
|
22
|
+
* Truncate an over-long tool result to `max` characters, appending a clear
|
|
23
|
+
* marker noting how many characters were dropped. Below the cap the content is
|
|
24
|
+
* returned untouched (full fidelity). Plain string slicing only — no regex, so
|
|
25
|
+
* there is no ReDoS surface on model-influenced tool output.
|
|
26
|
+
*/
|
|
27
|
+
export function truncateToolResult(content, max) {
|
|
28
|
+
if (content.length <= max)
|
|
29
|
+
return content;
|
|
30
|
+
const dropped = content.length - max;
|
|
31
|
+
return `${content.slice(0, max)}…[truncated ${dropped} chars]`;
|
|
32
|
+
}
|
|
5
33
|
/**
|
|
6
34
|
* Convert the read-only tool catalog into provider-facing tool schemas. Each
|
|
7
35
|
* tool's Zod raw shape becomes a JSON-Schema object the model can reason about.
|
|
@@ -21,19 +49,54 @@ export function toToolSchemas(tools = readTools) {
|
|
|
21
49
|
*
|
|
22
50
|
* The loop only ever issues collector `GET`s through the catalog's
|
|
23
51
|
* `buildRequest` — it can neither ingest nor mutate data (ADR 0003 / 0017).
|
|
52
|
+
*
|
|
53
|
+
* When a run would otherwise end without a usable answer (an empty `final`, or
|
|
54
|
+
* the step cap reached while still tool-calling) and `forceFinalAnswer` is on
|
|
55
|
+
* (default), it makes ONE extra tools-disabled `provider.complete()` so the
|
|
56
|
+
* model synthesizes a prose answer from the tool results it already gathered —
|
|
57
|
+
* at most one such forced turn per run.
|
|
24
58
|
*/
|
|
25
59
|
export async function runAgent(options) {
|
|
26
60
|
const { provider, client, signal } = options;
|
|
27
61
|
const tools = options.tools ?? readTools;
|
|
28
62
|
const maxSteps = options.maxSteps ?? DEFAULT_MAX_STEPS;
|
|
63
|
+
const forceFinalAnswer = options.forceFinalAnswer ?? true;
|
|
64
|
+
const maxToolResultChars = options.maxToolResultChars ?? DEFAULT_MAX_TOOL_RESULT_CHARS;
|
|
29
65
|
const toolsByName = new Map(tools.map((t) => [t.name, t]));
|
|
30
66
|
const toolSchemas = toToolSchemas(tools);
|
|
31
67
|
const messages = [...options.messages];
|
|
32
68
|
let steps = 0;
|
|
69
|
+
let alreadyForced = false;
|
|
70
|
+
/**
|
|
71
|
+
* One tools-disabled synthesis turn: ask the provider to answer in prose from
|
|
72
|
+
* the tool results already in `messages`. Sends no tools (so adapters omit
|
|
73
|
+
* function-calling entirely) plus a trailing directive that is NOT persisted
|
|
74
|
+
* into the transcript. Returns the answer text (possibly empty). Runs at most
|
|
75
|
+
* once per {@link runAgent} call via the shared `alreadyForced` guard.
|
|
76
|
+
*/
|
|
77
|
+
async function forceFinalSynthesis() {
|
|
78
|
+
alreadyForced = true;
|
|
79
|
+
const forcedMessages = [
|
|
80
|
+
...messages,
|
|
81
|
+
{ role: "user", content: FORCE_FINAL_DIRECTIVE },
|
|
82
|
+
];
|
|
83
|
+
const response = await provider.complete({ messages: forcedMessages, tools: [], signal });
|
|
84
|
+
return response.kind === "final" ? response.content : (response.content ?? "");
|
|
85
|
+
}
|
|
33
86
|
while (steps < maxSteps) {
|
|
34
87
|
steps += 1;
|
|
35
88
|
const response = await provider.complete({ messages, tools: toolSchemas, signal });
|
|
36
89
|
if (response.kind === "final") {
|
|
90
|
+
// The model may emit an empty final early — the reported failure where the
|
|
91
|
+
// user sees no answer. Force one tools-disabled synthesis pass to recover a
|
|
92
|
+
// real answer from any gathered tool results before returning empty.
|
|
93
|
+
if (response.content.trim() === "" && forceFinalAnswer && !alreadyForced) {
|
|
94
|
+
const forced = await forceFinalSynthesis();
|
|
95
|
+
if (forced.trim() !== "") {
|
|
96
|
+
messages.push({ role: "assistant", content: forced });
|
|
97
|
+
return { content: forced, messages, steps, stoppedOnMaxSteps: false };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
37
100
|
messages.push({ role: "assistant", content: response.content });
|
|
38
101
|
return { content: response.content, messages, steps, stoppedOnMaxSteps: false };
|
|
39
102
|
}
|
|
@@ -43,7 +106,17 @@ export async function runAgent(options) {
|
|
|
43
106
|
toolCalls: response.toolCalls,
|
|
44
107
|
});
|
|
45
108
|
for (const call of response.toolCalls) {
|
|
46
|
-
messages.push(await executeToolCall(client, toolsByName.get(call.name), call));
|
|
109
|
+
messages.push(await executeToolCall(client, toolsByName.get(call.name), call, maxToolResultChars));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Hit the step cap while still tool-calling: force one tools-disabled synthesis
|
|
113
|
+
// pass so the model composes an answer from what it gathered instead of the
|
|
114
|
+
// loop returning nothing.
|
|
115
|
+
if (forceFinalAnswer && !alreadyForced) {
|
|
116
|
+
const forced = await forceFinalSynthesis();
|
|
117
|
+
if (forced.trim() !== "") {
|
|
118
|
+
messages.push({ role: "assistant", content: forced });
|
|
119
|
+
return { content: forced, messages, steps, stoppedOnMaxSteps: true };
|
|
47
120
|
}
|
|
48
121
|
}
|
|
49
122
|
return { content: "", messages, steps, stoppedOnMaxSteps: true };
|
|
@@ -54,7 +127,7 @@ export async function runAgent(options) {
|
|
|
54
127
|
* can see the failure and recover on the next turn. Collector errors are
|
|
55
128
|
* likewise surfaced as text.
|
|
56
129
|
*/
|
|
57
|
-
async function executeToolCall(client, tool, call) {
|
|
130
|
+
async function executeToolCall(client, tool, call, maxToolResultChars) {
|
|
58
131
|
const result = (content) => ({
|
|
59
132
|
role: "tool",
|
|
60
133
|
toolCallId: call.id,
|
|
@@ -74,7 +147,7 @@ async function executeToolCall(client, tool, call) {
|
|
|
74
147
|
try {
|
|
75
148
|
const { path, params } = tool.buildRequest(parsed.data);
|
|
76
149
|
const data = await client.get(path, params);
|
|
77
|
-
return result(JSON.stringify(data));
|
|
150
|
+
return result(truncateToolResult(JSON.stringify(data), maxToolResultChars));
|
|
78
151
|
}
|
|
79
152
|
catch (err) {
|
|
80
153
|
const message = err instanceof Error ? err.message : String(err);
|
package/dist/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAiB,MAAM,YAAY,CAAC;AAEtD,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAA6B,SAAS;IAClE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAA4B;KAClF,CAAC,CAAC,CAAC;AACN,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,8 @@ export interface AnthropicTool {
|
|
|
36
36
|
export interface AnthropicRequestBody {
|
|
37
37
|
system?: string;
|
|
38
38
|
messages: AnthropicMessage[];
|
|
39
|
-
tools
|
|
39
|
+
/** Omitted when no tools are advertised (e.g. a forced plain-text turn). */
|
|
40
|
+
tools?: AnthropicTool[];
|
|
40
41
|
}
|
|
41
42
|
/** The subset of an Anthropic Messages response this module reads. */
|
|
42
43
|
export interface AnthropicCompletion {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB,yDAAyD;AACzD,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB,yDAAyD;AACzD,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,KAAK,EAAE,SAAS,eAAe,EAAE,GAChC,oBAAoB,CA6CtB;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,mBAAmB,GAAG,gBAAgB,CAc1F"}
|
|
@@ -43,11 +43,17 @@ export function toAnthropicRequest(messages, tools) {
|
|
|
43
43
|
return {
|
|
44
44
|
...(systemParts.length > 0 ? { system: systemParts.join("\n\n") } : {}),
|
|
45
45
|
messages: out,
|
|
46
|
-
tools
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
// Omit `tools` when there are none (e.g. the loop's forced synthesis pass)
|
|
47
|
+
// so the model answers in plain text instead of being offered functions.
|
|
48
|
+
...(tools.length > 0
|
|
49
|
+
? {
|
|
50
|
+
tools: tools.map((tool) => ({
|
|
51
|
+
name: tool.name,
|
|
52
|
+
description: tool.description,
|
|
53
|
+
input_schema: tool.parameters,
|
|
54
|
+
})),
|
|
55
|
+
}
|
|
56
|
+
: {}),
|
|
51
57
|
};
|
|
52
58
|
}
|
|
53
59
|
function toToolUse(call) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/hosted.js
CHANGED
|
@@ -51,11 +51,15 @@ export function createHostedProvider(config) {
|
|
|
51
51
|
}
|
|
52
52
|
async function completeOpenAi(config, fetchImpl, request) {
|
|
53
53
|
const url = joinUrl(config.endpoint, "/chat/completions");
|
|
54
|
+
// No tools this turn (e.g. the loop's forced synthesis pass) → omit `tools`
|
|
55
|
+
// and `tool_choice` entirely so the model answers in plain text rather than
|
|
56
|
+
// being nudged to keep calling functions.
|
|
54
57
|
const body = {
|
|
55
58
|
model: config.model,
|
|
56
59
|
messages: toOpenAiMessages(request.messages),
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
...(request.tools.length > 0
|
|
61
|
+
? { tools: toOpenAiTools(request.tools), tool_choice: "auto" }
|
|
62
|
+
: {}),
|
|
59
63
|
};
|
|
60
64
|
const res = await fetchImpl(url, {
|
|
61
65
|
method: "POST",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted.js","sourceRoot":"","sources":["../../src/providers/hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AAuBxB,sEAAsE;AACtE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAGjC;IAFX,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAE/C,SAAS,OAAO,CAAC,IAAY,EAAE,MAAc;IAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,GAAG,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,OAAO;QACL,QAAQ,CAAC,OAAwB;YAC/B,OAAO,MAAM,CAAC,GAAG,KAAK,WAAW;gBAC/B,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;gBAC/C,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,MAA4B,EAC5B,SAAuB,EACvB,OAAwB;IAExB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC5C,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC
|
|
1
|
+
{"version":3,"file":"hosted.js","sourceRoot":"","sources":["../../src/providers/hosted.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { type AssistantBackendConfig, type BackendKind, type HostedApi, type HostedBackendConfig, type KeyValueStorage, type WebLlmBackendConfig, BACKEND_CONFIG_STORAGE_KEY, clearBackendConfig, defaultBackendKind, isWebGpuAvailable, loadBackendConfig, saveBackendConfig, } from "./config.js";
|
|
14
14
|
export { type HostedProviderConfig, HostedProviderError, createHostedProvider } from "./hosted.js";
|
|
15
|
-
export { type CuratedModel, type InitProgress, type WebLlmEngine, type WebLlmProvider, type WebLlmProviderOptions, type WebLlmRuntime, CURATED_MODELS, SUPPORTED_TOOL_CALLING_MODELS, UnsupportedToolCallingModelError, WebGpuUnavailableError, WebLlmConsentError, createWebLlmProvider, } from "./webllm.js";
|
|
15
|
+
export { type CuratedModel, type InitProgress, type WebLlmEngine, type WebLlmProvider, type WebLlmProviderOptions, type WebLlmRuntime, CURATED_MODELS, SUPPORTED_TOOL_CALLING_MODELS, UnsupportedToolCallingModelError, WebGpuUnavailableError, WebLlmConsentError, WebLlmStorageError, createWebLlmProvider, isQuotaExceededError, } from "./webllm.js";
|
|
16
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnG,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,cAAc,EACd,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,KAAK,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnG,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,cAAc,EACd,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
package/dist/providers/index.js
CHANGED
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { BACKEND_CONFIG_STORAGE_KEY, clearBackendConfig, defaultBackendKind, isWebGpuAvailable, loadBackendConfig, saveBackendConfig, } from "./config.js";
|
|
14
14
|
export { HostedProviderError, createHostedProvider } from "./hosted.js";
|
|
15
|
-
export { CURATED_MODELS, SUPPORTED_TOOL_CALLING_MODELS, UnsupportedToolCallingModelError, WebGpuUnavailableError, WebLlmConsentError, createWebLlmProvider, } from "./webllm.js";
|
|
15
|
+
export { CURATED_MODELS, SUPPORTED_TOOL_CALLING_MODELS, UnsupportedToolCallingModelError, WebGpuUnavailableError, WebLlmConsentError, WebLlmStorageError, createWebLlmProvider, isQuotaExceededError, } from "./webllm.js";
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAOL,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAA6B,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnG,OAAO,EAOL,cAAc,EACd,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAOL,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAA6B,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnG,OAAO,EAOL,cAAc,EACd,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -19,6 +19,12 @@ export interface CuratedModel {
|
|
|
19
19
|
label: string;
|
|
20
20
|
/** Approximate download size, for the consent disclosure. */
|
|
21
21
|
downloadSize: string;
|
|
22
|
+
/**
|
|
23
|
+
* Approximate download size in **bytes** — the numeric counterpart to
|
|
24
|
+
* {@link downloadSize}. Used by the storage preflight to compare against
|
|
25
|
+
* `navigator.storage.estimate()` without parsing the human string.
|
|
26
|
+
*/
|
|
27
|
+
downloadBytes: number;
|
|
22
28
|
/** Approximate GPU memory (VRAM) required. */
|
|
23
29
|
vram: string;
|
|
24
30
|
/** One-line description of the trade-off. */
|
|
@@ -45,6 +51,33 @@ export declare const SUPPORTED_TOOL_CALLING_MODELS: readonly string[];
|
|
|
45
51
|
* before any download.
|
|
46
52
|
*/
|
|
47
53
|
export declare const CURATED_MODELS: readonly CuratedModel[];
|
|
54
|
+
/**
|
|
55
|
+
* Context window (in tokens) the adapter requests when initialising a local
|
|
56
|
+
* model, overriding WebLLM's model-record default (which is 4096 for the curated
|
|
57
|
+
* Hermes records). The analytics assistant's prompt — its system instructions
|
|
58
|
+
* plus the tool JSON schemas and any tool results — runs well past 4096 tokens
|
|
59
|
+
* (~5.9k observed on the demo), so the model errored with
|
|
60
|
+
* "Prompt tokens exceed context window size". Every curated Hermes 7–8B model
|
|
61
|
+
* natively supports 8k+ context, so 8192 comfortably fits the prompt with
|
|
62
|
+
* headroom while staying within the models' real limits. Passed through as
|
|
63
|
+
* `chatOpts.context_window_size` (see {@link WebLlmChatOptions}); the
|
|
64
|
+
* mutually-exclusive `sliding_window_size` keeps its model-record default (-1).
|
|
65
|
+
*/
|
|
66
|
+
export declare const DEFAULT_LOCAL_CONTEXT_WINDOW = 8192;
|
|
67
|
+
/**
|
|
68
|
+
* The subset of `@mlc-ai/web-llm`'s `ChatOptions` (`Partial<ChatConfig>`) this
|
|
69
|
+
* adapter sets to override a model record's defaults. Verified against
|
|
70
|
+
* `@mlc-ai/web-llm` v0.2.84: `CreateMLCEngine(modelId, engineConfig?, chatOpts?)`
|
|
71
|
+
* and `ChatConfig` exposes `context_window_size` / `sliding_window_size`. We only
|
|
72
|
+
* ever set `context_window_size`; the field is declared optional so the object is
|
|
73
|
+
* a valid partial override.
|
|
74
|
+
*/
|
|
75
|
+
export interface WebLlmChatOptions {
|
|
76
|
+
/** Token context window to load the model with. */
|
|
77
|
+
context_window_size?: number;
|
|
78
|
+
/** Sliding-window size; mutually exclusive with `context_window_size` in mlc. */
|
|
79
|
+
sliding_window_size?: number;
|
|
80
|
+
}
|
|
48
81
|
/** Progress report emitted while weights download / the engine initialises. */
|
|
49
82
|
export interface InitProgress {
|
|
50
83
|
/** Fraction complete in [0, 1]. */
|
|
@@ -73,7 +106,7 @@ export interface WebLlmRuntime {
|
|
|
73
106
|
progress: number;
|
|
74
107
|
text: string;
|
|
75
108
|
}) => void;
|
|
76
|
-
}): Promise<WebLlmEngine>;
|
|
109
|
+
}, chatOpts?: WebLlmChatOptions): Promise<WebLlmEngine>;
|
|
77
110
|
}
|
|
78
111
|
/** Options for {@link createWebLlmProvider}. */
|
|
79
112
|
export interface WebLlmProviderOptions {
|
|
@@ -87,6 +120,13 @@ export interface WebLlmProviderOptions {
|
|
|
87
120
|
confirmDownload?: (model: CuratedModel) => boolean | Promise<boolean>;
|
|
88
121
|
/** Called with download/initialise progress. */
|
|
89
122
|
onInitProgress?: (progress: InitProgress) => void;
|
|
123
|
+
/**
|
|
124
|
+
* Token context window to load the local model with, overriding the model
|
|
125
|
+
* record's default. Defaults to {@link DEFAULT_LOCAL_CONTEXT_WINDOW} (8192),
|
|
126
|
+
* which fits the assistant's prompt on every curated Hermes model. Raise it
|
|
127
|
+
* only up to a value the selected model actually supports.
|
|
128
|
+
*/
|
|
129
|
+
contextWindowSize?: number;
|
|
90
130
|
/**
|
|
91
131
|
* Injectable runtime loader (for tests / custom hosting). Defaults to a lazy
|
|
92
132
|
* `import("@mlc-ai/web-llm")`.
|
|
@@ -118,6 +158,27 @@ export declare class WebLlmConsentError extends Error {
|
|
|
118
158
|
export declare class UnsupportedToolCallingModelError extends Error {
|
|
119
159
|
constructor(modelId: string);
|
|
120
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Thrown when the browser is out of storage for the local model. WebLLM caches
|
|
163
|
+
* each curated model's ~4 GB of weights in the origin's **Cache Storage**;
|
|
164
|
+
* loading or switching among several curated models accumulates multiple copies
|
|
165
|
+
* until the per-origin storage quota is exceeded, at which point the Cache API
|
|
166
|
+
* `put` throws a `QuotaExceededError` DOMException. That is a **browser storage**
|
|
167
|
+
* limit — never an LLM API quota (the local backend has zero network egress), so
|
|
168
|
+
* the raw "Quota exceeded." message is misleading. This typed error carries an
|
|
169
|
+
* actionable remedy instead. See {@link isQuotaExceededError} for classification
|
|
170
|
+
* (by `instanceof`/`.name` only — never a regex over the message, per ADR/CodeQL).
|
|
171
|
+
*/
|
|
172
|
+
export declare class WebLlmStorageError extends Error {
|
|
173
|
+
constructor(message?: string);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Classify a thrown value as a browser storage-quota error **without** parsing
|
|
177
|
+
* its message (no regex — avoids CodeQL ReDoS on attacker-influenced text). A
|
|
178
|
+
* quota failure surfaces as a `DOMException` named `"QuotaExceededError"`; some
|
|
179
|
+
* non-DOM runtimes throw a plain object with the same `name`, so accept that too.
|
|
180
|
+
*/
|
|
181
|
+
export declare function isQuotaExceededError(err: unknown): boolean;
|
|
121
182
|
/**
|
|
122
183
|
* Fold any `system` message into the first `user` turn for WebLLM's Hermes
|
|
123
184
|
* function-calling path.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webllm.d.ts","sourceRoot":"","sources":["../../src/providers/webllm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAqC,MAAM,gBAAgB,CAAC;AAEnG,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAErB,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,MAAM,EAM1D,CAAC;
|
|
1
|
+
{"version":3,"file":"webllm.d.ts","sourceRoot":"","sources":["../../src/providers/webllm.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/webllm.js
CHANGED
|
@@ -28,6 +28,10 @@ export const SUPPORTED_TOOL_CALLING_MODELS = [
|
|
|
28
28
|
"Hermes-3-Llama-3.1-8B-q4f32_1-MLC",
|
|
29
29
|
"Hermes-3-Llama-3.1-8B-q4f16_1-MLC",
|
|
30
30
|
];
|
|
31
|
+
/** Bytes per binary gigabyte (GiB) — the unit browsers report cache usage in. */
|
|
32
|
+
const BYTES_PER_GIB = 1024 ** 3;
|
|
33
|
+
/** Extra free space (beyond the raw download) the storage preflight insists on. */
|
|
34
|
+
const STORAGE_HEADROOM_BYTES = Math.round(0.5 * BYTES_PER_GIB);
|
|
31
35
|
/**
|
|
32
36
|
* A small, curated set of **tool-calling-capable** models (ADR 0050 §4). WebLLM
|
|
33
37
|
* only supports function calling on the 7–8B Hermes family (see
|
|
@@ -42,6 +46,7 @@ export const CURATED_MODELS = [
|
|
|
42
46
|
id: "Hermes-2-Pro-Mistral-7B-q4f16_1-MLC",
|
|
43
47
|
label: "Hermes 2 Pro (Mistral 7B)",
|
|
44
48
|
downloadSize: "~3.9 GB",
|
|
49
|
+
downloadBytes: Math.round(3.9 * BYTES_PER_GIB),
|
|
45
50
|
vram: "~4.0 GB",
|
|
46
51
|
description: "Smallest tool-calling model; the least-friction default.",
|
|
47
52
|
},
|
|
@@ -49,6 +54,7 @@ export const CURATED_MODELS = [
|
|
|
49
54
|
id: "Hermes-2-Pro-Llama-3-8B-q4f16_1-MLC",
|
|
50
55
|
label: "Hermes 2 Pro (Llama 3 8B)",
|
|
51
56
|
downloadSize: "~4.6 GB",
|
|
57
|
+
downloadBytes: Math.round(4.6 * BYTES_PER_GIB),
|
|
52
58
|
vram: "~5.0 GB",
|
|
53
59
|
description: "Stronger Llama-3 base; needs a capable GPU.",
|
|
54
60
|
},
|
|
@@ -56,10 +62,24 @@ export const CURATED_MODELS = [
|
|
|
56
62
|
id: "Hermes-3-Llama-3.1-8B-q4f16_1-MLC",
|
|
57
63
|
label: "Hermes 3 (Llama 3.1 8B)",
|
|
58
64
|
downloadSize: "~4.5 GB",
|
|
65
|
+
downloadBytes: Math.round(4.5 * BYTES_PER_GIB),
|
|
59
66
|
vram: "~4.9 GB",
|
|
60
67
|
description: "Highest quality; needs a capable GPU (~5 GB VRAM).",
|
|
61
68
|
},
|
|
62
69
|
];
|
|
70
|
+
/**
|
|
71
|
+
* Context window (in tokens) the adapter requests when initialising a local
|
|
72
|
+
* model, overriding WebLLM's model-record default (which is 4096 for the curated
|
|
73
|
+
* Hermes records). The analytics assistant's prompt — its system instructions
|
|
74
|
+
* plus the tool JSON schemas and any tool results — runs well past 4096 tokens
|
|
75
|
+
* (~5.9k observed on the demo), so the model errored with
|
|
76
|
+
* "Prompt tokens exceed context window size". Every curated Hermes 7–8B model
|
|
77
|
+
* natively supports 8k+ context, so 8192 comfortably fits the prompt with
|
|
78
|
+
* headroom while staying within the models' real limits. Passed through as
|
|
79
|
+
* `chatOpts.context_window_size` (see {@link WebLlmChatOptions}); the
|
|
80
|
+
* mutually-exclusive `sliding_window_size` keeps its model-record default (-1).
|
|
81
|
+
*/
|
|
82
|
+
export const DEFAULT_LOCAL_CONTEXT_WINDOW = 8192;
|
|
63
83
|
/** Thrown when the local backend is used on a browser without WebGPU. */
|
|
64
84
|
export class WebGpuUnavailableError extends Error {
|
|
65
85
|
constructor() {
|
|
@@ -88,6 +108,95 @@ export class UnsupportedToolCallingModelError extends Error {
|
|
|
88
108
|
this.name = "UnsupportedToolCallingModelError";
|
|
89
109
|
}
|
|
90
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Thrown when the browser is out of storage for the local model. WebLLM caches
|
|
113
|
+
* each curated model's ~4 GB of weights in the origin's **Cache Storage**;
|
|
114
|
+
* loading or switching among several curated models accumulates multiple copies
|
|
115
|
+
* until the per-origin storage quota is exceeded, at which point the Cache API
|
|
116
|
+
* `put` throws a `QuotaExceededError` DOMException. That is a **browser storage**
|
|
117
|
+
* limit — never an LLM API quota (the local backend has zero network egress), so
|
|
118
|
+
* the raw "Quota exceeded." message is misleading. This typed error carries an
|
|
119
|
+
* actionable remedy instead. See {@link isQuotaExceededError} for classification
|
|
120
|
+
* (by `instanceof`/`.name` only — never a regex over the message, per ADR/CodeQL).
|
|
121
|
+
*/
|
|
122
|
+
export class WebLlmStorageError extends Error {
|
|
123
|
+
constructor(message) {
|
|
124
|
+
super(message ??
|
|
125
|
+
"Your browser is out of storage for the local model (each model needs ~4 GB of cache). " +
|
|
126
|
+
"Free up disk space, clear this site's cached data, or switch to a hosted backend, then retry.");
|
|
127
|
+
this.name = "WebLlmStorageError";
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Classify a thrown value as a browser storage-quota error **without** parsing
|
|
132
|
+
* its message (no regex — avoids CodeQL ReDoS on attacker-influenced text). A
|
|
133
|
+
* quota failure surfaces as a `DOMException` named `"QuotaExceededError"`; some
|
|
134
|
+
* non-DOM runtimes throw a plain object with the same `name`, so accept that too.
|
|
135
|
+
*/
|
|
136
|
+
export function isQuotaExceededError(err) {
|
|
137
|
+
if (typeof DOMException !== "undefined" && err instanceof DOMException) {
|
|
138
|
+
return err.name === "QuotaExceededError";
|
|
139
|
+
}
|
|
140
|
+
return (typeof err === "object" &&
|
|
141
|
+
err !== null &&
|
|
142
|
+
"name" in err &&
|
|
143
|
+
err.name === "QuotaExceededError");
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Map a caught value to a {@link WebLlmStorageError} when — and only when — it is
|
|
147
|
+
* a browser storage-quota failure; otherwise return it unchanged so genuine
|
|
148
|
+
* WebGPU/network/model errors propagate. Never swallows non-quota errors.
|
|
149
|
+
*/
|
|
150
|
+
function mapStorageError(err) {
|
|
151
|
+
return isQuotaExceededError(err) ? new WebLlmStorageError() : err;
|
|
152
|
+
}
|
|
153
|
+
function getStorageEstimator() {
|
|
154
|
+
const storage = typeof navigator !== "undefined"
|
|
155
|
+
? navigator.storage
|
|
156
|
+
: undefined;
|
|
157
|
+
if (storage && typeof storage.estimate === "function") {
|
|
158
|
+
return storage;
|
|
159
|
+
}
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Best-effort, **soft** preflight: fail fast with a {@link WebLlmStorageError}
|
|
164
|
+
* *before* a multi-GB download when free storage is unambiguously too small,
|
|
165
|
+
* which otherwise produces a corrupt half-download (silent "no response").
|
|
166
|
+
*
|
|
167
|
+
* `navigator.storage.estimate()` is imprecise and often reports a large origin
|
|
168
|
+
* budget even when the disk is nearly full, so this only throws when the numbers
|
|
169
|
+
* clearly show insufficient headroom, and is skipped entirely when the API is
|
|
170
|
+
* unavailable — the real quota error is still caught and classified at write time.
|
|
171
|
+
*/
|
|
172
|
+
async function preflightStorage(model) {
|
|
173
|
+
const estimator = getStorageEstimator();
|
|
174
|
+
if (!estimator)
|
|
175
|
+
return;
|
|
176
|
+
let estimate;
|
|
177
|
+
try {
|
|
178
|
+
estimate = await estimator.estimate();
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// An estimate failure is non-fatal — proceed and let the write-time
|
|
182
|
+
// classifier handle a real quota error.
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const quota = estimate.quota;
|
|
186
|
+
const usage = estimate.usage ?? 0;
|
|
187
|
+
if (typeof quota !== "number" || quota <= 0)
|
|
188
|
+
return;
|
|
189
|
+
const free = quota - usage;
|
|
190
|
+
// Require the download plus a small headroom margin; only throw when the
|
|
191
|
+
// estimate is confident there is not enough room.
|
|
192
|
+
const needed = model.downloadBytes + STORAGE_HEADROOM_BYTES;
|
|
193
|
+
if (free < needed) {
|
|
194
|
+
const neededGib = (model.downloadBytes / BYTES_PER_GIB).toFixed(1);
|
|
195
|
+
throw new WebLlmStorageError(`Not enough browser storage for ${model.label}: it needs about ${neededGib} GB of free ` +
|
|
196
|
+
"cache space. Free up disk space or clear this site's cached data, then retry — " +
|
|
197
|
+
"or switch to a hosted backend.");
|
|
198
|
+
}
|
|
199
|
+
}
|
|
91
200
|
/** A separator between the folded system instructions and the user's question. */
|
|
92
201
|
const SYSTEM_FOLD_SEPARATOR = "\n\n";
|
|
93
202
|
/**
|
|
@@ -145,7 +254,14 @@ export function foldSystemPromptForHermes(messages) {
|
|
|
145
254
|
}
|
|
146
255
|
function resolveModel(id) {
|
|
147
256
|
const model = id ? CURATED_MODELS.find((m) => m.id === id) : CURATED_MODELS[0];
|
|
148
|
-
return model ?? {
|
|
257
|
+
return (model ?? {
|
|
258
|
+
id: id ?? "",
|
|
259
|
+
label: id ?? "",
|
|
260
|
+
downloadSize: "?",
|
|
261
|
+
downloadBytes: 0,
|
|
262
|
+
vram: "?",
|
|
263
|
+
description: "",
|
|
264
|
+
});
|
|
149
265
|
}
|
|
150
266
|
const defaultLoadRuntime = () => import("@mlc-ai/web-llm");
|
|
151
267
|
/**
|
|
@@ -163,6 +279,7 @@ export function createWebLlmProvider(options = {}) {
|
|
|
163
279
|
}
|
|
164
280
|
const loadRuntime = options.loadRuntime ?? defaultLoadRuntime;
|
|
165
281
|
const hasWebGpu = options.hasWebGpu ?? (() => isWebGpuAvailable());
|
|
282
|
+
const contextWindowSize = options.contextWindowSize ?? DEFAULT_LOCAL_CONTEXT_WINDOW;
|
|
166
283
|
let enginePromise;
|
|
167
284
|
function ensureEngine() {
|
|
168
285
|
if (!enginePromise) {
|
|
@@ -182,29 +299,53 @@ export function createWebLlmProvider(options = {}) {
|
|
|
182
299
|
if (!ok)
|
|
183
300
|
throw new WebLlmConsentError();
|
|
184
301
|
}
|
|
302
|
+
// Fail fast if free browser storage is unambiguously too small for the
|
|
303
|
+
// multi-GB download, avoiding a corrupt half-download (silent no-response).
|
|
304
|
+
await preflightStorage(model);
|
|
185
305
|
const runtime = await loadRuntime();
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
306
|
+
// Override the model record's default context window (4096 for the curated
|
|
307
|
+
// Hermes records) so the assistant's system prompt + tool schemas + results
|
|
308
|
+
// fit. `sliding_window_size` is left at its model-record default (-1); the
|
|
309
|
+
// two are mutually exclusive in mlc.
|
|
310
|
+
try {
|
|
311
|
+
return await runtime.CreateMLCEngine(model.id, {
|
|
312
|
+
initProgressCallback: options.onInitProgress
|
|
313
|
+
? (report) => options.onInitProgress?.({ progress: report.progress, text: report.text })
|
|
314
|
+
: undefined,
|
|
315
|
+
}, { context_window_size: contextWindowSize });
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
// Weights are written to Cache Storage during init; a full origin quota
|
|
319
|
+
// surfaces as a QuotaExceededError. Reclassify only that — everything else
|
|
320
|
+
// (WebGPU, network, model errors) propagates unchanged.
|
|
321
|
+
throw mapStorageError(err);
|
|
322
|
+
}
|
|
191
323
|
}
|
|
192
324
|
return {
|
|
193
325
|
async complete(request) {
|
|
194
326
|
const engine = await ensureEngine();
|
|
327
|
+
const hasTools = request.tools.length > 0;
|
|
195
328
|
// WebLLM's Hermes tool-calling path injects its own system prompt and
|
|
196
329
|
// rejects a caller-supplied `system` message when `tools` are present, so
|
|
197
330
|
// fold our system instructions into the first user turn for that case.
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
331
|
+
// Without tools (e.g. the loop's forced synthesis pass) a custom `system`
|
|
332
|
+
// message is allowed, so we keep it and send no function-calling at all.
|
|
333
|
+
const messages = hasTools ? foldSystemPromptForHermes(request.messages) : request.messages;
|
|
334
|
+
try {
|
|
335
|
+
const completion = await engine.chat.completions.create({
|
|
336
|
+
messages: toOpenAiMessages(messages),
|
|
337
|
+
...(hasTools
|
|
338
|
+
? { tools: toOpenAiTools(request.tools), tool_choice: "auto" }
|
|
339
|
+
: {}),
|
|
340
|
+
stream: false,
|
|
341
|
+
});
|
|
342
|
+
return parseOpenAiCompletion(completion);
|
|
343
|
+
}
|
|
344
|
+
catch (err) {
|
|
345
|
+
// Generation can also write to Cache Storage (e.g. lazily fetched shards),
|
|
346
|
+
// so a quota failure here maps to the same actionable storage error.
|
|
347
|
+
throw mapStorageError(err);
|
|
348
|
+
}
|
|
208
349
|
},
|
|
209
350
|
async unload() {
|
|
210
351
|
const promise = enginePromise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webllm.js","sourceRoot":"","sources":["../../src/providers/webllm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GAId,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"webllm.js","sourceRoot":"","sources":["../../src/providers/webllm.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uptimizr/agent-core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Framework-agnostic, browser-safe core for Uptimizr analytics agents — the single read-only tool catalog over the collector query API, a headless LLM provider-adapter interface, and the tool-calling loop.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uptimizr",
|