@animalabs/agent-framework 0.16.0 → 0.18.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/dist/src/framework.d.ts +5 -0
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +87 -10
- package/dist/src/framework.js.map +1 -1
- package/dist/src/thinking-token-stamp.d.ts +7 -0
- package/dist/src/thinking-token-stamp.d.ts.map +1 -0
- package/dist/src/thinking-token-stamp.js +103 -0
- package/dist/src/thinking-token-stamp.js.map +1 -0
- package/dist/src/types/framework.d.ts +32 -0
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/test/liveness-watchdog.test.js +18 -2
- package/dist/test/liveness-watchdog.test.js.map +1 -1
- package/dist/test/provider-acceleration-cooldown.test.js +145 -0
- package/dist/test/provider-acceleration-cooldown.test.js.map +1 -1
- package/dist/test/thinking-token-stamp.test.d.ts +12 -0
- package/dist/test/thinking-token-stamp.test.d.ts.map +1 -0
- package/dist/test/thinking-token-stamp.test.js +129 -0
- package/dist/test/thinking-token-stamp.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/framework.ts +89 -10
- package/src/thinking-token-stamp.ts +95 -0
- package/src/types/framework.ts +36 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ContentBlock } from '@animalabs/membrane';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a new array; carrier blocks are shallow-copied with `tokenEstimate`
|
|
4
|
+
* set, every other block is the same object.
|
|
5
|
+
*/
|
|
6
|
+
export declare function stampThinkingTokenEstimates(blocks: ContentBlock[], outputTokens: number): ContentBlock[];
|
|
7
|
+
//# sourceMappingURL=thinking-token-stamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-token-stamp.d.ts","sourceRoot":"","sources":["../../src/thinking-token-stamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAiExD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE,CAyBxG"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stamp signed thinking blocks with the tokens they will cost when replayed.
|
|
3
|
+
*
|
|
4
|
+
* On keep-all models (Opus >= 4.5, Sonnet >= 4.6, Fable/Mythos) every prior
|
|
5
|
+
* assistant thinking block is sent back and billed as INPUT at the size of
|
|
6
|
+
* the full hidden chain of thought — whatever its visible text says (empty
|
|
7
|
+
* under `display: "omitted"`, a short summary under `"summarized"`). The
|
|
8
|
+
* signature encodes that chain but its length is not a reliable measure
|
|
9
|
+
* (2.8–8.7 chars/token measured on Opus 4.8), and the stored block carries
|
|
10
|
+
* no other trace of the size. The response DOES: `usage.output_tokens` is
|
|
11
|
+
* the visible blocks plus the hidden thinking. So at creation, price each
|
|
12
|
+
* carrier block from the residual of this call's output tokens over its
|
|
13
|
+
* visible blocks, split across carriers by signature length, and stamp it
|
|
14
|
+
* as `tokenEstimate` — the field context-manager already prefers over any
|
|
15
|
+
* heuristic for thinking, redacted_thinking and image blocks.
|
|
16
|
+
*
|
|
17
|
+
* Carriers: `thinking` with a non-empty `signature`, `redacted_thinking`
|
|
18
|
+
* with `data`. Blocks that already carry a `tokenEstimate` keep it. When the
|
|
19
|
+
* residual is not positive (no thinking, or the visible estimate over-
|
|
20
|
+
* shoots) nothing is stamped and context-manager's own fallback applies.
|
|
21
|
+
*
|
|
22
|
+
* The visible-block rates mirror context-manager's estimator (prose 2.9,
|
|
23
|
+
* JSON 2.3 chars/token); their precision matters little — on agentic turns
|
|
24
|
+
* the hidden thinking is the bulk of the output, and this stamp is what makes
|
|
25
|
+
* the compiled budget honest (see context-manager `SIGNATURE_CHARS_PER_TOKEN`).
|
|
26
|
+
*
|
|
27
|
+
* Wire safety: membrane's Anthropic formatter builds thinking blocks field
|
|
28
|
+
* by field (`type`, `thinking`, `signature`), so the stamp never reaches the
|
|
29
|
+
* provider; the signature itself is copied, never edited.
|
|
30
|
+
*/
|
|
31
|
+
const PROSE_CHARS_PER_TOKEN = 2.9;
|
|
32
|
+
const DENSE_CHARS_PER_TOKEN = 2.3;
|
|
33
|
+
function carrierWeight(block) {
|
|
34
|
+
if (block.type === 'thinking') {
|
|
35
|
+
const sig = block.signature;
|
|
36
|
+
return typeof sig === 'string' ? sig.length : 0;
|
|
37
|
+
}
|
|
38
|
+
if (block.type === 'redacted_thinking') {
|
|
39
|
+
const data = block.data;
|
|
40
|
+
return typeof data === 'string' ? data.length : 0;
|
|
41
|
+
}
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
function visibleTokens(block) {
|
|
45
|
+
switch (block.type) {
|
|
46
|
+
case 'text':
|
|
47
|
+
return Math.ceil((block.text ?? '').length / PROSE_CHARS_PER_TOKEN);
|
|
48
|
+
case 'tool_use': {
|
|
49
|
+
let json = '';
|
|
50
|
+
try {
|
|
51
|
+
json = JSON.stringify(block.input ?? {});
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
json = '';
|
|
55
|
+
}
|
|
56
|
+
return Math.ceil(json.length / DENSE_CHARS_PER_TOKEN) + 20;
|
|
57
|
+
}
|
|
58
|
+
case 'thinking':
|
|
59
|
+
// Unsigned thinking (text-only providers, XML mode): the text is the
|
|
60
|
+
// whole cost and is priced by context-manager as text.
|
|
61
|
+
return carrierWeight(block) > 0 ? 0 : Math.ceil((block.thinking ?? '').length / PROSE_CHARS_PER_TOKEN);
|
|
62
|
+
default:
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns a new array; carrier blocks are shallow-copied with `tokenEstimate`
|
|
68
|
+
* set, every other block is the same object.
|
|
69
|
+
*/
|
|
70
|
+
export function stampThinkingTokenEstimates(blocks, outputTokens) {
|
|
71
|
+
if (!Array.isArray(blocks) || blocks.length === 0)
|
|
72
|
+
return blocks;
|
|
73
|
+
if (!Number.isFinite(outputTokens) || outputTokens <= 0)
|
|
74
|
+
return blocks;
|
|
75
|
+
let totalWeight = 0;
|
|
76
|
+
let visible = 0;
|
|
77
|
+
for (const block of blocks) {
|
|
78
|
+
const already = block.tokenEstimate;
|
|
79
|
+
const w = typeof already === 'number' ? 0 : carrierWeight(block);
|
|
80
|
+
if (w > 0)
|
|
81
|
+
totalWeight += w;
|
|
82
|
+
else
|
|
83
|
+
visible += visibleTokens(block);
|
|
84
|
+
if (typeof already === 'number')
|
|
85
|
+
visible += already;
|
|
86
|
+
}
|
|
87
|
+
if (totalWeight <= 0)
|
|
88
|
+
return blocks;
|
|
89
|
+
const residual = outputTokens - visible;
|
|
90
|
+
if (residual <= 0)
|
|
91
|
+
return blocks;
|
|
92
|
+
return blocks.map((block) => {
|
|
93
|
+
const already = block.tokenEstimate;
|
|
94
|
+
if (typeof already === 'number')
|
|
95
|
+
return block;
|
|
96
|
+
const w = carrierWeight(block);
|
|
97
|
+
if (w <= 0)
|
|
98
|
+
return block;
|
|
99
|
+
const tokenEstimate = Math.max(1, Math.round((residual * w) / totalWeight));
|
|
100
|
+
return { ...block, tokenEstimate };
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=thinking-token-stamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-token-stamp.js","sourceRoot":"","sources":["../../src/thinking-token-stamp.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,SAAS,aAAa,CAAC,KAAmB;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAI,KAAiC,CAAC,SAAS,CAAC;QACzD,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACvC,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;QAChD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB;IACxC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC;QACtE,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,GAAG,EAAE,CAAC;YAAC,CAAC;YACtE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC;QAC7D,CAAC;QACD,KAAK,UAAU;YACb,qEAAqE;YACrE,uDAAuD;YACvD,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC;QACzG;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAsB,EAAE,YAAoB;IACtF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAI,KAAqC,CAAC,aAAa,CAAC;QACrE,MAAM,CAAC,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC;YAAE,WAAW,IAAI,CAAC,CAAC;;YACvB,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,OAAO,CAAC;IACtD,CAAC;IACD,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACxC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAEjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAI,KAAqC,CAAC,aAAa,CAAC;QACrE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9C,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC5E,OAAO,EAAE,GAAG,KAAK,EAAE,aAAa,EAAkB,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -64,6 +64,18 @@ export interface CodeExecutionConfig {
|
|
|
64
64
|
* calls raise RuntimeError inside the script. */
|
|
65
65
|
maxWakesPerScript?: number;
|
|
66
66
|
}
|
|
67
|
+
/** See `FrameworkConfig.providerHold`. */
|
|
68
|
+
export interface ProviderHold {
|
|
69
|
+
holdMs: number;
|
|
70
|
+
/** Operator-facing explanation, logged with the hold. */
|
|
71
|
+
reason?: string;
|
|
72
|
+
}
|
|
73
|
+
/** What the framework knows about the failing call. */
|
|
74
|
+
export interface ProviderHoldContext {
|
|
75
|
+
/** Model of the agent whose call failed — a quota window may be model-scoped. */
|
|
76
|
+
model?: string;
|
|
77
|
+
}
|
|
78
|
+
export type ProviderHoldHook = (error: Error, agentName: string, context: ProviderHoldContext) => ProviderHold | undefined;
|
|
67
79
|
export interface FrameworkConfig {
|
|
68
80
|
/**
|
|
69
81
|
* The subconscious resident (issue #77): a persistent side-agent that
|
|
@@ -129,6 +141,26 @@ export interface FrameworkConfig {
|
|
|
129
141
|
inferencePolicy?: InferencePolicy;
|
|
130
142
|
/** Custom error policy */
|
|
131
143
|
errorPolicy?: ErrorPolicy;
|
|
144
|
+
/**
|
|
145
|
+
* Host verdict on a failed inference: "this cannot succeed until later".
|
|
146
|
+
* Consulted before the error policy and before the built-in
|
|
147
|
+
* organization-acceleration classification, for a persistent agent's
|
|
148
|
+
* primary inference and for its auxiliary (compression) calls. Ephemeral
|
|
149
|
+
* runs (subagents) and conversation forks are NOT covered: they have no
|
|
150
|
+
* provider-admission gate and keep the ordinary error policy. A hold parks the agent's provider
|
|
151
|
+
* admission (primary and auxiliary) instead of retrying, and — like the
|
|
152
|
+
* built-in organization-acceleration cooldown — records no failed turn and
|
|
153
|
+
* does not feed the hard-down streak. The motivating case is a subscription
|
|
154
|
+
* credential whose quota window is spent: its 429 looks like a throttle,
|
|
155
|
+
* but retrying cannot help until the window resets.
|
|
156
|
+
*
|
|
157
|
+
* Holds are served in slices of at most 10 minutes. When a slice expires
|
|
158
|
+
* the hook is consulted again with the same error, before any inference is
|
|
159
|
+
* attempted; it extends the hold by returning another, or releases it by
|
|
160
|
+
* returning undefined. Must be synchronous and cheap; a throwing hook is
|
|
161
|
+
* treated as "no hold".
|
|
162
|
+
*/
|
|
163
|
+
providerHold?: ProviderHoldHook;
|
|
132
164
|
/** Interval for periodic store sync in milliseconds (default: 1000ms, 0 to disable) */
|
|
133
165
|
syncIntervalMs?: number;
|
|
134
166
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../../src/types/framework.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../../src/types/framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
import { test } from 'node:test';
|
|
2
2
|
import assert from 'node:assert';
|
|
3
|
-
import { spawn } from 'node:child_process';
|
|
3
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
4
4
|
import { mkdtempSync, writeFileSync, rmSync, existsSync, readFileSync } from 'node:fs';
|
|
5
5
|
import { tmpdir } from 'node:os';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import { pathToFileURL } from 'node:url';
|
|
8
8
|
const WATCHDOG = pathToFileURL(join(import.meta.dirname, '../src/runtime/liveness-watchdog.js')).href;
|
|
9
|
+
/** On Linux desktops the kernel pipes every SIGABRT of a packaged binary to a
|
|
10
|
+
* crash handler (apport), so the 'abort' case below produces a crash report
|
|
11
|
+
* and a desktop popup per run. RLIMIT_CORE == 1 is a kernel sentinel that
|
|
12
|
+
* disables piped core handling for the process, so wrap the child in
|
|
13
|
+
* `prlimit --core=1:1` when that tool is available. The child still dies by
|
|
14
|
+
* SIGABRT, which is all the test asserts. */
|
|
15
|
+
const PRLIMIT_PREFIX = (() => {
|
|
16
|
+
if (process.platform !== 'linux')
|
|
17
|
+
return [];
|
|
18
|
+
const r = spawnSync('prlimit', ['--version'], { stdio: 'ignore' });
|
|
19
|
+
return r.error ? [] : ['prlimit', '--core=1:1', '--'];
|
|
20
|
+
})();
|
|
21
|
+
function spawnChild(script) {
|
|
22
|
+
const argv = [...PRLIMIT_PREFIX, process.execPath, script];
|
|
23
|
+
return spawn(argv[0], argv.slice(1), { stdio: 'ignore' });
|
|
24
|
+
}
|
|
9
25
|
/** Spawn a child that starts the watchdog then wedges its main thread; resolve
|
|
10
26
|
* with how it died. */
|
|
11
27
|
function runWedgedChild(action, reportPath) {
|
|
@@ -24,7 +40,7 @@ function runWedgedChild(action, reportPath) {
|
|
|
24
40
|
setTimeout(() => { const end = Date.now() + 30000; while (Date.now() < end) {} }, 300);
|
|
25
41
|
`);
|
|
26
42
|
return new Promise((resolve) => {
|
|
27
|
-
const child =
|
|
43
|
+
const child = spawnChild(script);
|
|
28
44
|
const killTimer = setTimeout(() => child.kill('SIGTERM'), 8000); // safety net
|
|
29
45
|
child.on('exit', (code, signal) => {
|
|
30
46
|
clearTimeout(killTimer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liveness-watchdog.test.js","sourceRoot":"","sources":["../../test/liveness-watchdog.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"liveness-watchdog.test.js","sourceRoot":"","sources":["../../test/liveness-watchdog.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -283,4 +283,149 @@ test('local provider gate settles in-flight auxiliary work and parks later auxil
|
|
|
283
283
|
rmSync(dir, { recursive: true, force: true });
|
|
284
284
|
}
|
|
285
285
|
});
|
|
286
|
+
class SpentQuotaThenSuccessMembrane extends MockMembrane {
|
|
287
|
+
failing = true;
|
|
288
|
+
streamYielding(request) {
|
|
289
|
+
this.calls.push(request);
|
|
290
|
+
if (this.failing)
|
|
291
|
+
return new ErrorStream(new MembraneError({
|
|
292
|
+
type: 'rate_limit', retryable: true, httpStatus: 429,
|
|
293
|
+
message: "This request would exceed your account's rate limit. Please try again later.",
|
|
294
|
+
rawError: { status: 429 }, rawRequest: request,
|
|
295
|
+
}));
|
|
296
|
+
return new MockYieldingStream([createMockResponse([{ type: 'text', text: 'window reset' }])]);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
test('providerHold parks a spent-quota 429, re-consults the host per slice without inferring, and records no failure', async () => {
|
|
300
|
+
const dir = mkdtempSync(join(tmpdir(), 'af-provider-host-hold-'));
|
|
301
|
+
const membrane = new SpentQuotaThenSuccessMembrane();
|
|
302
|
+
let spent = true;
|
|
303
|
+
const consulted = [];
|
|
304
|
+
const framework = await AgentFramework.create({
|
|
305
|
+
storePath: join(dir, 'store.chronicle'), membrane: membrane.asMembrane(),
|
|
306
|
+
agents: [{ name: 'resident', model: 'test-model', systemPrompt: 'system' }],
|
|
307
|
+
modules: [new InputModule()], syncIntervalMs: 0, maintenanceIntervalMs: 0,
|
|
308
|
+
providerHold: (error, agentName) => {
|
|
309
|
+
consulted.push(`${agentName}:${error.type}`);
|
|
310
|
+
return spent ? { holdMs: 1_000, reason: 'weekly quota spent' } : undefined;
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
const internal = framework;
|
|
314
|
+
try {
|
|
315
|
+
framework.pushEvent({ type: 'external-message', source: 'test', content: 'first', metadata: {} });
|
|
316
|
+
await framework.runUntilIdle();
|
|
317
|
+
assert.equal(membrane.calls.length, 1, 'no retry into a spent quota');
|
|
318
|
+
assert.deepEqual(consulted, ['resident:rate_limit']);
|
|
319
|
+
assert.equal(internal.providerAccelerationCooldowns.get('resident')?.reason, 'weekly quota spent');
|
|
320
|
+
assert.equal(internal.consecutiveInferenceFailures.get('resident') ?? 0, 0, 'a spent quota is not a hard-down streak');
|
|
321
|
+
// Slice expires while the window is still spent: the host is asked again
|
|
322
|
+
// and the hold extends — no inference is burned finding out.
|
|
323
|
+
await sleep(1_200);
|
|
324
|
+
await framework.runUntilIdle();
|
|
325
|
+
assert.equal(membrane.calls.length, 1, 'slice expiry does not infer while the host still holds');
|
|
326
|
+
assert.ok(consulted.length >= 2, 'host re-consulted at slice expiry');
|
|
327
|
+
assert.equal(internal.providerAccelerationCooldowns.size, 1);
|
|
328
|
+
spent = false;
|
|
329
|
+
membrane.failing = false;
|
|
330
|
+
await sleep(1_200);
|
|
331
|
+
await framework.runUntilIdle();
|
|
332
|
+
assert.equal(membrane.calls.length, 2, 'released once the host stops holding');
|
|
333
|
+
assert.match(textOf(membrane.calls[1]), /first/);
|
|
334
|
+
assert.equal(internal.providerAccelerationCooldowns.size, 0);
|
|
335
|
+
const messages = framework.getAgent('resident').getContextManager().queryMessages({}).messages;
|
|
336
|
+
const failed = messages.filter((m) => m.metadata?.kind === 'inference-failed');
|
|
337
|
+
assert.equal(failed.length, 0, 'no [inference-failed] marker accumulates while parked');
|
|
338
|
+
}
|
|
339
|
+
finally {
|
|
340
|
+
await framework.stop();
|
|
341
|
+
rmSync(dir, { recursive: true, force: true });
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
test('providerHold returning nothing, or throwing, leaves the ordinary retry path untouched', async () => {
|
|
345
|
+
const dir = mkdtempSync(join(tmpdir(), 'af-provider-host-nohold-'));
|
|
346
|
+
const membrane = new GenericRateLimitThenSuccessMembrane();
|
|
347
|
+
const framework = await AgentFramework.create({
|
|
348
|
+
storePath: join(dir, 'store.chronicle'), membrane: membrane.asMembrane(),
|
|
349
|
+
agents: [{ name: 'resident', model: 'test-model', systemPrompt: 'system' }],
|
|
350
|
+
modules: [new InputModule()], syncIntervalMs: 0, maintenanceIntervalMs: 0,
|
|
351
|
+
providerHold: () => { throw new Error('meter exploded'); },
|
|
352
|
+
});
|
|
353
|
+
const internal = framework;
|
|
354
|
+
try {
|
|
355
|
+
framework.pushEvent({ type: 'external-message', source: 'test', content: 'first', metadata: {} });
|
|
356
|
+
await framework.runUntilIdle();
|
|
357
|
+
assert.equal(membrane.calls.length, 2, 'ordinary policy retry happened');
|
|
358
|
+
assert.equal(internal.providerAccelerationCooldowns.size, 0);
|
|
359
|
+
}
|
|
360
|
+
finally {
|
|
361
|
+
await framework.stop();
|
|
362
|
+
rmSync(dir, { recursive: true, force: true });
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
test('providerHold: a spent-quota failure in an auxiliary call arms the hold and releases without inferring', async () => {
|
|
366
|
+
const dir = mkdtempSync(join(tmpdir(), 'af-provider-aux-hold-'));
|
|
367
|
+
const membrane = new MockMembrane();
|
|
368
|
+
let spent = true;
|
|
369
|
+
const seen = [];
|
|
370
|
+
const framework = await AgentFramework.create({
|
|
371
|
+
storePath: join(dir, 'store.chronicle'), membrane: membrane.asMembrane(),
|
|
372
|
+
agents: [{ name: 'resident', model: 'test-model', systemPrompt: 'system' }], modules: [],
|
|
373
|
+
syncIntervalMs: 0, maintenanceIntervalMs: 0,
|
|
374
|
+
providerHold: (_error, _agentName, context) => {
|
|
375
|
+
seen.push(context.model);
|
|
376
|
+
// A non-string reason must fall back to the error text, not throw in a log line.
|
|
377
|
+
return spent ? { holdMs: 1_000, reason: Symbol('quota') } : undefined;
|
|
378
|
+
},
|
|
379
|
+
});
|
|
380
|
+
const internal = framework;
|
|
381
|
+
const quota = new MembraneError({
|
|
382
|
+
type: 'rate_limit', retryable: true, httpStatus: 429,
|
|
383
|
+
message: "This request would exceed your account's rate limit.", rawError: { status: 429 },
|
|
384
|
+
});
|
|
385
|
+
try {
|
|
386
|
+
await assert.rejects(internal.withAuxiliaryAdmission('resident', async () => { throw quota; }), /rate limit/);
|
|
387
|
+
assert.deepEqual(seen, ['test-model'], 'hook receives the failing agent\'s model');
|
|
388
|
+
assert.equal(internal.providerAccelerationCooldowns.get('resident')?.reason, quota.message);
|
|
389
|
+
let ran = false;
|
|
390
|
+
const later = internal.withAuxiliaryAdmission('resident', async () => { ran = true; return 1; });
|
|
391
|
+
await sleep(20);
|
|
392
|
+
assert.equal(ran, false, 'the next compression waits at the gate instead of retrying into the quota');
|
|
393
|
+
spent = false;
|
|
394
|
+
await sleep(1_200); // the cooldown timer is unref'd; keep the loop alive across the slice
|
|
395
|
+
assert.equal(await later, 1, 'released when the host stops holding');
|
|
396
|
+
assert.equal(internal.providerAccelerationCooldowns.size, 0);
|
|
397
|
+
await framework.runUntilIdle();
|
|
398
|
+
assert.equal(membrane.calls.length, 0, 'an auxiliary-origin hold never synthesises an inference');
|
|
399
|
+
}
|
|
400
|
+
finally {
|
|
401
|
+
await framework.stop();
|
|
402
|
+
rmSync(dir, { recursive: true, force: true });
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
test('providerHold is consulted before the built-in acceleration classification', async () => {
|
|
406
|
+
const dir = mkdtempSync(join(tmpdir(), 'af-provider-hold-first-'));
|
|
407
|
+
const membrane = new MockMembrane();
|
|
408
|
+
const framework = await AgentFramework.create({
|
|
409
|
+
storePath: join(dir, 'store.chronicle'), membrane: membrane.asMembrane(),
|
|
410
|
+
agents: [{ name: 'resident', model: 'test-model', systemPrompt: 'system' }], modules: [],
|
|
411
|
+
syncIntervalMs: 0, maintenanceIntervalMs: 0,
|
|
412
|
+
providerHold: () => ({ holdMs: 5_000, reason: 'weekly quota spent' }),
|
|
413
|
+
});
|
|
414
|
+
const internal = framework;
|
|
415
|
+
try {
|
|
416
|
+
const acceleration = new MembraneError({
|
|
417
|
+
type: 'rate_limit', retryable: true, httpStatus: 429,
|
|
418
|
+
message: "This request would exceed your organization's maximum usage increase rate.", rawError: { status: 429 },
|
|
419
|
+
});
|
|
420
|
+
assert.equal(internal.holdProviderAcceleration(framework.getAgent('resident'), acceleration), true);
|
|
421
|
+
assert.equal(internal.providerAccelerationCooldowns.get('resident')?.reason, 'weekly quota spent');
|
|
422
|
+
const admission = internal.healthSnapshot().agents[0].providerAdmission;
|
|
423
|
+
assert.equal(admission.cooldownReason, 'weekly quota spent');
|
|
424
|
+
assert.equal(admission.hostHold, true);
|
|
425
|
+
}
|
|
426
|
+
finally {
|
|
427
|
+
await framework.stop();
|
|
428
|
+
rmSync(dir, { recursive: true, force: true });
|
|
429
|
+
}
|
|
430
|
+
});
|
|
286
431
|
//# sourceMappingURL=provider-acceleration-cooldown.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-acceleration-cooldown.test.js","sourceRoot":"","sources":["../../test/provider-acceleration-cooldown.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider-acceleration-cooldown.test.js","sourceRoot":"","sources":["../../test/provider-acceleration-cooldown.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signed thinking blocks are stamped with their replay price at persist time.
|
|
3
|
+
*
|
|
4
|
+
* On keep-all models the hidden chain of thought behind a signed thinking
|
|
5
|
+
* block is replayed and billed as input on every later call; the only exact
|
|
6
|
+
* measure of its size is this call's `usage.output_tokens` minus the visible
|
|
7
|
+
* blocks. The framework stamps that residual as `tokenEstimate` on the
|
|
8
|
+
* signed blocks (context-manager prefers the stamp over any heuristic), per
|
|
9
|
+
* round for tool-use turns and on the trailing content at completion.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=thinking-token-stamp.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-token-stamp.test.d.ts","sourceRoot":"","sources":["../../test/thinking-token-stamp.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signed thinking blocks are stamped with their replay price at persist time.
|
|
3
|
+
*
|
|
4
|
+
* On keep-all models the hidden chain of thought behind a signed thinking
|
|
5
|
+
* block is replayed and billed as input on every later call; the only exact
|
|
6
|
+
* measure of its size is this call's `usage.output_tokens` minus the visible
|
|
7
|
+
* blocks. The framework stamps that residual as `tokenEstimate` on the
|
|
8
|
+
* signed blocks (context-manager prefers the stamp over any heuristic), per
|
|
9
|
+
* round for tool-use turns and on the trailing content at completion.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it } from 'node:test';
|
|
12
|
+
import assert from 'node:assert/strict';
|
|
13
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
14
|
+
import { tmpdir } from 'node:os';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { AgentFramework } from '../src/index.js';
|
|
17
|
+
import { stampThinkingTokenEstimates } from '../src/thinking-token-stamp.js';
|
|
18
|
+
import { MockMembrane, createMockResponse } from './helpers/mock-membrane.js';
|
|
19
|
+
const SIG_A = 'A'.repeat(4_000);
|
|
20
|
+
const SIG_B = 'B'.repeat(3_000);
|
|
21
|
+
describe('stampThinkingTokenEstimates (pure)', () => {
|
|
22
|
+
it('stamps the residual of output tokens over visible blocks on the signed block', () => {
|
|
23
|
+
const blocks = [
|
|
24
|
+
{ type: 'thinking', thinking: '', signature: SIG_A },
|
|
25
|
+
{ type: 'text', text: 'hello' },
|
|
26
|
+
];
|
|
27
|
+
const out = stampThinkingTokenEstimates(blocks, 3_000);
|
|
28
|
+
assert.equal(out[0].tokenEstimate, 3_000 - Math.ceil(5 / 2.9));
|
|
29
|
+
assert.equal(out[0].signature, SIG_A);
|
|
30
|
+
assert.equal(out[1], blocks[1], 'non-carrier blocks are the same object');
|
|
31
|
+
assert.equal(blocks[0].tokenEstimate, undefined, 'input block is not mutated');
|
|
32
|
+
});
|
|
33
|
+
it('splits the residual across several carriers by signature length', () => {
|
|
34
|
+
const blocks = [
|
|
35
|
+
{ type: 'thinking', thinking: '', signature: 'A'.repeat(3_000) },
|
|
36
|
+
{ type: 'tool_use', id: 't1', name: 'x', input: {} },
|
|
37
|
+
{ type: 'redacted_thinking', data: 'B'.repeat(1_000) },
|
|
38
|
+
];
|
|
39
|
+
const out = stampThinkingTokenEstimates(blocks, 4_021); // tool_use {} = 1 + 20 tokens
|
|
40
|
+
assert.equal(out[0].tokenEstimate, 3_000);
|
|
41
|
+
assert.equal(out[2].tokenEstimate, 1_000);
|
|
42
|
+
});
|
|
43
|
+
it('leaves unsigned thinking, already-stamped blocks and non-positive residuals alone', () => {
|
|
44
|
+
const unsigned = [{ type: 'thinking', thinking: 'visible reasoning' }];
|
|
45
|
+
assert.equal(stampThinkingTokenEstimates(unsigned, 500), unsigned);
|
|
46
|
+
const stamped = [{ type: 'thinking', thinking: '', signature: SIG_A, tokenEstimate: 42 }];
|
|
47
|
+
assert.equal(stampThinkingTokenEstimates(stamped, 5_000)[0].tokenEstimate, 42);
|
|
48
|
+
const overshoot = [
|
|
49
|
+
{ type: 'thinking', thinking: '', signature: SIG_A },
|
|
50
|
+
{ type: 'text', text: 'x'.repeat(10_000) },
|
|
51
|
+
];
|
|
52
|
+
assert.equal(stampThinkingTokenEstimates(overshoot, 100), overshoot);
|
|
53
|
+
assert.equal(stampThinkingTokenEstimates(overshoot, 0), overshoot);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
class EchoModule {
|
|
57
|
+
name = 'test';
|
|
58
|
+
async start(_ctx) { }
|
|
59
|
+
async stop() { }
|
|
60
|
+
getTools() {
|
|
61
|
+
return [{
|
|
62
|
+
name: 'echo',
|
|
63
|
+
description: 'Echoes the input',
|
|
64
|
+
inputSchema: { type: 'object', properties: { message: { type: 'string' } }, required: ['message'] },
|
|
65
|
+
}];
|
|
66
|
+
}
|
|
67
|
+
async handleToolCall(call) {
|
|
68
|
+
return { success: true, data: { echoed: call.input.message } };
|
|
69
|
+
}
|
|
70
|
+
async onProcess(event, _state) {
|
|
71
|
+
if (event.type !== 'external-message')
|
|
72
|
+
return {};
|
|
73
|
+
return {
|
|
74
|
+
addMessages: [{ participant: 'User', content: [{ type: 'text', text: String(event.content) }] }],
|
|
75
|
+
requestInference: true,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
describe('thinking token stamp through the stream loop', () => {
|
|
80
|
+
it('stamps each round from that call\'s own output tokens (membrane usage is cumulative)', async () => {
|
|
81
|
+
const tempDir = mkdtempSync(join(tmpdir(), 'thinking-stamp-'));
|
|
82
|
+
const membrane = new MockMembrane();
|
|
83
|
+
const round1 = createMockResponse([
|
|
84
|
+
{ type: 'thinking', thinking: '', signature: SIG_A },
|
|
85
|
+
{ type: 'text', text: 'looking' },
|
|
86
|
+
{ type: 'tool_use', id: 'call_1', name: 'test--echo', input: { message: 'one' } },
|
|
87
|
+
], 'tool_use');
|
|
88
|
+
round1.usage = { inputTokens: 100, outputTokens: 2_000 };
|
|
89
|
+
const round2 = createMockResponse([
|
|
90
|
+
{ type: 'thinking', thinking: '', signature: SIG_B },
|
|
91
|
+
{ type: 'text', text: 'done' },
|
|
92
|
+
]);
|
|
93
|
+
// Membrane reports usage CUMULATIVELY across the tool loop.
|
|
94
|
+
round2.usage = { inputTokens: 250, outputTokens: 3_500 };
|
|
95
|
+
membrane.pushResponse(round1);
|
|
96
|
+
membrane.pushResponse(round2);
|
|
97
|
+
const framework = await AgentFramework.create({
|
|
98
|
+
storePath: join(tempDir, 'test.chronicle'),
|
|
99
|
+
membrane: membrane.asMembrane(),
|
|
100
|
+
agents: [{ name: 'assistant', model: 'test-model', systemPrompt: 'Test' }],
|
|
101
|
+
modules: [new EchoModule()],
|
|
102
|
+
});
|
|
103
|
+
try {
|
|
104
|
+
framework.pushEvent({ type: 'external-message', source: 'test', content: 'go', metadata: {} });
|
|
105
|
+
await framework.runUntilIdle();
|
|
106
|
+
const cm = framework.getAgent('assistant').getContextManager();
|
|
107
|
+
const msgs = (cm.queryMessages({}).messages ?? []);
|
|
108
|
+
const thinking = msgs.flatMap((m) => m.content).filter((b) => b.type === 'thinking');
|
|
109
|
+
assert.equal(thinking.length, 2, 'both rounds persisted their thinking block');
|
|
110
|
+
const [t1, t2] = thinking;
|
|
111
|
+
assert.equal(t1.signature, SIG_A);
|
|
112
|
+
assert.equal(t2.signature, SIG_B);
|
|
113
|
+
// Round 1: 2000 output tokens minus 'looking' and the tool_use JSON.
|
|
114
|
+
const toolJson = JSON.stringify({ message: 'one' }).length;
|
|
115
|
+
const visible1 = Math.ceil('looking'.length / 2.9) + Math.ceil(toolJson / 2.3) + 20;
|
|
116
|
+
assert.equal(t1.tokenEstimate, 2_000 - visible1);
|
|
117
|
+
// Round 2: (3500 - 2000) output tokens minus 'done' — not the cumulative 3500.
|
|
118
|
+
assert.equal(t2.tokenEstimate, 1_500 - Math.ceil('done'.length / 2.9));
|
|
119
|
+
const others = msgs.flatMap((m) => m.content).filter((b) => b.type !== 'thinking');
|
|
120
|
+
for (const b of others)
|
|
121
|
+
assert.equal(b.tokenEstimate, undefined, `${b.type} must not be stamped`);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
await framework.stop();
|
|
125
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=thinking-token-stamp.test.js.map
|