agentfootprint 8.13.0 → 8.14.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/core/Agent.js +86 -6
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/LLMCall.js +6 -2
- package/dist/core/LLMCall.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +40 -1
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/stages/callLLM.js.map +1 -1
- package/dist/core/agent/stages/route.js +96 -5
- package/dist/core/agent/stages/route.js.map +1 -1
- package/dist/core/agent/stages/seed.js +2 -0
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/window.js +29 -2
- package/dist/core/agent/stages/window.js.map +1 -1
- package/dist/core/agent/window/folded.js +0 -0
- package/dist/core/agent/window/folded.js.map +1 -1
- package/dist/core/agent/window/options.js +11 -1
- package/dist/core/agent/window/options.js.map +1 -1
- package/dist/core/agent/window/strategies/drop.js +4 -1
- package/dist/core/agent/window/strategies/drop.js.map +1 -1
- package/dist/core/agent/window/strategies/summarizeOldest.js +51 -4
- package/dist/core/agent/window/strategies/summarizeOldest.js.map +1 -1
- package/dist/core/agent/window/summarize.js +22 -0
- package/dist/core/agent/window/summarize.js.map +1 -1
- package/dist/core/cost.js +55 -4
- package/dist/core/cost.js.map +1 -1
- package/dist/core/runCheckpoint.js +30 -2
- package/dist/core/runCheckpoint.js.map +1 -1
- package/dist/core/slots/helpers.js +15 -3
- package/dist/core/slots/helpers.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +38 -1
- package/dist/esm/core/Agent.js +87 -7
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/LLMCall.d.ts +10 -1
- package/dist/esm/core/LLMCall.js +7 -3
- package/dist/esm/core/LLMCall.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +21 -0
- package/dist/esm/core/agent/AgentBuilder.js +40 -1
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/stages/callLLM.d.ts +2 -1
- package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
- package/dist/esm/core/agent/stages/route.js +96 -5
- package/dist/esm/core/agent/stages/route.js.map +1 -1
- package/dist/esm/core/agent/stages/seed.d.ts +7 -0
- package/dist/esm/core/agent/stages/seed.js +2 -0
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/window.d.ts +2 -1
- package/dist/esm/core/agent/stages/window.js +29 -2
- package/dist/esm/core/agent/stages/window.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +54 -1
- package/dist/esm/core/agent/window/folded.d.ts +15 -0
- package/dist/esm/core/agent/window/folded.js +0 -0
- package/dist/esm/core/agent/window/folded.js.map +1 -1
- package/dist/esm/core/agent/window/options.js +11 -1
- package/dist/esm/core/agent/window/options.js.map +1 -1
- package/dist/esm/core/agent/window/strategies/drop.js +4 -1
- package/dist/esm/core/agent/window/strategies/drop.js.map +1 -1
- package/dist/esm/core/agent/window/strategies/summarizeOldest.d.ts +5 -1
- package/dist/esm/core/agent/window/strategies/summarizeOldest.js +52 -5
- package/dist/esm/core/agent/window/strategies/summarizeOldest.js.map +1 -1
- package/dist/esm/core/agent/window/strategy.d.ts +25 -1
- package/dist/esm/core/agent/window/summarize.d.ts +22 -0
- package/dist/esm/core/agent/window/summarize.js +22 -0
- package/dist/esm/core/agent/window/summarize.js.map +1 -1
- package/dist/esm/core/agent/window/types.d.ts +44 -7
- package/dist/esm/core/cost.d.ts +28 -2
- package/dist/esm/core/cost.js +53 -3
- package/dist/esm/core/cost.js.map +1 -1
- package/dist/esm/core/runCheckpoint.d.ts +38 -6
- package/dist/esm/core/runCheckpoint.js +30 -2
- package/dist/esm/core/runCheckpoint.js.map +1 -1
- package/dist/esm/core/slots/helpers.d.ts +10 -2
- package/dist/esm/core/slots/helpers.js +15 -3
- package/dist/esm/core/slots/helpers.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +40 -3
- package/dist/esm/recorders/core/CompactionMeter.d.ts +31 -2
- package/dist/esm/recorders/core/CompactionMeter.js +30 -3
- package/dist/esm/recorders/core/CompactionMeter.js.map +1 -1
- package/dist/esm/recorders/core/ContextRecorder.js +13 -1
- package/dist/esm/recorders/core/ContextRecorder.js.map +1 -1
- package/dist/esm/recorders/core/types.d.ts +20 -2
- package/dist/esm/recorders/core/types.js.map +1 -1
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +33 -1
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/recorders/core/CompactionMeter.js +30 -3
- package/dist/recorders/core/CompactionMeter.js.map +1 -1
- package/dist/recorders/core/ContextRecorder.js +13 -1
- package/dist/recorders/core/ContextRecorder.js.map +1 -1
- package/dist/recorders/core/types.js.map +1 -1
- package/dist/recorders/observability/commentary/commentaryTemplates.js +33 -1
- package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/types/core/Agent.d.ts +38 -1
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/LLMCall.d.ts +10 -1
- package/dist/types/core/LLMCall.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +21 -0
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/stages/callLLM.d.ts +2 -1
- package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
- package/dist/types/core/agent/stages/route.d.ts.map +1 -1
- package/dist/types/core/agent/stages/seed.d.ts +7 -0
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/window.d.ts +2 -1
- package/dist/types/core/agent/stages/window.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +54 -1
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/agent/window/folded.d.ts +15 -0
- package/dist/types/core/agent/window/folded.d.ts.map +1 -1
- package/dist/types/core/agent/window/options.d.ts.map +1 -1
- package/dist/types/core/agent/window/strategies/drop.d.ts.map +1 -1
- package/dist/types/core/agent/window/strategies/summarizeOldest.d.ts +5 -1
- package/dist/types/core/agent/window/strategies/summarizeOldest.d.ts.map +1 -1
- package/dist/types/core/agent/window/strategy.d.ts +25 -1
- package/dist/types/core/agent/window/strategy.d.ts.map +1 -1
- package/dist/types/core/agent/window/summarize.d.ts +22 -0
- package/dist/types/core/agent/window/summarize.d.ts.map +1 -1
- package/dist/types/core/agent/window/types.d.ts +44 -7
- package/dist/types/core/agent/window/types.d.ts.map +1 -1
- package/dist/types/core/cost.d.ts +28 -2
- package/dist/types/core/cost.d.ts.map +1 -1
- package/dist/types/core/runCheckpoint.d.ts +38 -6
- package/dist/types/core/runCheckpoint.d.ts.map +1 -1
- package/dist/types/core/slots/helpers.d.ts +10 -2
- package/dist/types/core/slots/helpers.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +40 -3
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/recorders/core/CompactionMeter.d.ts +31 -2
- package/dist/types/recorders/core/CompactionMeter.d.ts.map +1 -1
- package/dist/types/recorders/core/ContextRecorder.d.ts.map +1 -1
- package/dist/types/recorders/core/types.d.ts +20 -2
- package/dist/types/recorders/core/types.d.ts.map +1 -1
- package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -26,16 +26,94 @@ const outputEnforcement_js_1 = require("../outputEnforcement.js");
|
|
|
26
26
|
function decideBranch(scope) {
|
|
27
27
|
const toolCalls = scope.llmLatestToolCalls;
|
|
28
28
|
const iteration = scope.iteration;
|
|
29
|
-
|
|
29
|
+
// A halting `costBudget` stops the loop HERE, at the same boundary
|
|
30
|
+
// maxIterations uses (8.14.0). Never mid-call: the call that crossed the
|
|
31
|
+
// budget has already completed, been billed and been recorded — this only
|
|
32
|
+
// decides that there will not be another one.
|
|
33
|
+
const costHalt = scope.costBudgetHit === true && scope.costBudgetOnExceed === 'halt';
|
|
34
|
+
const outOfIterations = iteration >= scope.maxIterations;
|
|
35
|
+
const chosen = toolCalls.length > 0 && !outOfIterations && !costHalt ? 'tool-calls' : 'final';
|
|
36
|
+
// A limit only CUT SHORT a turn if the model still wanted to do something.
|
|
37
|
+
// A turn that ended because the model was done is not an early stop, however
|
|
38
|
+
// many iterations it spent getting there.
|
|
39
|
+
const earlyStop = chosen === 'final' && toolCalls.length > 0
|
|
40
|
+
? outOfIterations
|
|
41
|
+
? 'max-iterations'
|
|
42
|
+
: costHalt
|
|
43
|
+
? 'cost-budget'
|
|
44
|
+
: undefined
|
|
45
|
+
: undefined;
|
|
30
46
|
return {
|
|
31
47
|
chosen,
|
|
32
48
|
rationale: chosen === 'tool-calls'
|
|
33
49
|
? `LLM requested ${toolCalls.length} tool call(s)`
|
|
34
|
-
:
|
|
50
|
+
: outOfIterations
|
|
35
51
|
? 'maxIterations reached — forcing final'
|
|
36
|
-
:
|
|
52
|
+
: costHalt
|
|
53
|
+
? 'costBudget reached (onExceed: halt) — forcing final'
|
|
54
|
+
: 'LLM produced no tool calls — final answer',
|
|
55
|
+
...(earlyStop !== undefined && { earlyStop }),
|
|
37
56
|
};
|
|
38
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Record — and announce — a turn that a LIMIT cut short.
|
|
60
|
+
*
|
|
61
|
+
* Fires only when the model asked for tools and this decider refused to run
|
|
62
|
+
* them. A turn that ended because the model was finished is not an early stop,
|
|
63
|
+
* however many iterations it used.
|
|
64
|
+
*
|
|
65
|
+
* Three channels, deliberately, because before 8.14.0 there were none and the
|
|
66
|
+
* caller received `''`:
|
|
67
|
+
*
|
|
68
|
+
* 1. `cost.limit_hit` — the reserved vocabulary (`kind: 'max_iterations'`
|
|
69
|
+
* has been in `CostLimitHitPayload` since it was written). **Only for the
|
|
70
|
+
* iteration limit.** A cost budget already emitted its own one-shot
|
|
71
|
+
* `limit_hit` from `emitCostTick`, at the moment it was crossed, carrying
|
|
72
|
+
* the real budget as `limit` — and since 8.14.0 carrying `action: 'abort'`
|
|
73
|
+
* when it is set to halt. A second event here would double-count the
|
|
74
|
+
* crossing AND report `limit` as the cumulative spend, which is not the
|
|
75
|
+
* limit;
|
|
76
|
+
* 2. `scope.stoppedEarly` — committed, so the fact is provable after the run
|
|
77
|
+
* rather than only observable by whoever happened to be subscribed. Both
|
|
78
|
+
* reasons write it;
|
|
79
|
+
* 3. a `console.warn`, once, and ONLY when the answer is empty — an empty
|
|
80
|
+
* string reaching a user is indistinguishable from a bug, and the library
|
|
81
|
+
* knows exactly why it is empty. Both reasons.
|
|
82
|
+
*
|
|
83
|
+
* It does NOT throw. Unlike 8.6.0's outstanding-consent case — a fault, where
|
|
84
|
+
* the run hands back a plausible answer for work a tool never did — this is a
|
|
85
|
+
* limit the consumer set doing precisely what it was set to do, and the answer
|
|
86
|
+
* is sometimes a real one (a model can return content AND tool calls). Raising
|
|
87
|
+
* would reject good answers to fix a bad one.
|
|
88
|
+
*/
|
|
89
|
+
function recordEarlyStop(scope, reason) {
|
|
90
|
+
const toolCalls = scope.llmLatestToolCalls;
|
|
91
|
+
const iteration = scope.iteration;
|
|
92
|
+
const answerWasEmpty = (scope.llmLatestContent ?? '') === '';
|
|
93
|
+
scope.stoppedEarly = {
|
|
94
|
+
reason,
|
|
95
|
+
iteration,
|
|
96
|
+
pendingToolCalls: toolCalls.length,
|
|
97
|
+
answerWasEmpty,
|
|
98
|
+
};
|
|
99
|
+
if (reason === 'max-iterations') {
|
|
100
|
+
(0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.cost.limit_hit', {
|
|
101
|
+
kind: 'max_iterations',
|
|
102
|
+
limit: scope.maxIterations,
|
|
103
|
+
actual: iteration,
|
|
104
|
+
action: 'abort',
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (answerWasEmpty) {
|
|
108
|
+
// eslint-disable-next-line no-console
|
|
109
|
+
console.warn(`[agentfootprint] this turn stopped at iteration ${iteration} because ` +
|
|
110
|
+
`${reason === 'max-iterations' ? 'maxIterations was reached' : 'costBudget was reached'}, ` +
|
|
111
|
+
`while the model was still asking for ${toolCalls.length} tool call(s). Those calls did ` +
|
|
112
|
+
`not run, so the answer handed back is the empty string — not a refusal, and not the ` +
|
|
113
|
+
`model's conclusion. Raise the limit, or read agent.stoppedEarly() and decide what to ` +
|
|
114
|
+
`show.`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
39
117
|
function emitRouteDecided(scope, chosen, rationale) {
|
|
40
118
|
(0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.agent.route_decided', {
|
|
41
119
|
turnIndex: 0,
|
|
@@ -45,8 +123,10 @@ function emitRouteDecided(scope, chosen, rationale) {
|
|
|
45
123
|
});
|
|
46
124
|
}
|
|
47
125
|
const routeDeciderStage = (scope) => {
|
|
48
|
-
const { chosen, rationale } = decideBranch(scope);
|
|
126
|
+
const { chosen, rationale, earlyStop } = decideBranch(scope);
|
|
49
127
|
emitRouteDecided(scope, chosen, rationale);
|
|
128
|
+
if (earlyStop !== undefined)
|
|
129
|
+
recordEarlyStop(scope, earlyStop);
|
|
50
130
|
return chosen;
|
|
51
131
|
};
|
|
52
132
|
exports.routeDeciderStage = routeDeciderStage;
|
|
@@ -99,7 +179,8 @@ function buildRouteDeciderStage(messageMiddleware, enforcement) {
|
|
|
99
179
|
if (enforcement !== undefined)
|
|
100
180
|
return buildEnforcingDecider(chain, enforcement);
|
|
101
181
|
return async (scope) => {
|
|
102
|
-
const chosen = (
|
|
182
|
+
const { chosen, rationale, earlyStop } = decideBranch(scope);
|
|
183
|
+
emitRouteDecided(scope, chosen, rationale);
|
|
103
184
|
if (chosen !== 'final')
|
|
104
185
|
return chosen;
|
|
105
186
|
const verdict = await (0, runChain_js_1.runMessageChain)(chain, {
|
|
@@ -122,6 +203,10 @@ function buildRouteDeciderStage(messageMiddleware, enforcement) {
|
|
|
122
203
|
// Committed either way: on a refusal this is what was withheld, and the
|
|
123
204
|
// ledger row beside it says who withheld it and why.
|
|
124
205
|
scope.llmLatestContent = verdict.content;
|
|
206
|
+
// AFTER the chain: `answerWasEmpty` has to be judged on the string the
|
|
207
|
+
// caller will actually receive, and the chain may have rewritten it.
|
|
208
|
+
if (earlyStop !== undefined)
|
|
209
|
+
recordEarlyStop(scope, earlyStop);
|
|
125
210
|
return chosen;
|
|
126
211
|
};
|
|
127
212
|
}
|
|
@@ -162,6 +247,8 @@ function buildEnforcingDecider(chain, enforcement) {
|
|
|
162
247
|
// of it would be the library routing around that decision.
|
|
163
248
|
if (denied) {
|
|
164
249
|
emitRouteDecided(scope, 'final', base.rationale);
|
|
250
|
+
if (base.earlyStop !== undefined)
|
|
251
|
+
recordEarlyStop(scope, base.earlyStop);
|
|
165
252
|
return 'final';
|
|
166
253
|
}
|
|
167
254
|
const attempt = (scope.outputAttempts?.length ?? 0) + 1;
|
|
@@ -173,6 +260,8 @@ function buildEnforcingDecider(chain, enforcement) {
|
|
|
173
260
|
outcome: 'passed',
|
|
174
261
|
});
|
|
175
262
|
emitRouteDecided(scope, 'final', base.rationale);
|
|
263
|
+
if (base.earlyStop !== undefined)
|
|
264
|
+
recordEarlyStop(scope, base.earlyStop);
|
|
176
265
|
return 'final';
|
|
177
266
|
}
|
|
178
267
|
if (attempt <= enforcement.retries) {
|
|
@@ -196,6 +285,8 @@ function buildEnforcingDecider(chain, enforcement) {
|
|
|
196
285
|
});
|
|
197
286
|
emitRouteDecided(scope, 'final', `final answer failed the output schema (${failure.stage}) and ` +
|
|
198
287
|
`${enforcement.retries} retry/retries were spent`);
|
|
288
|
+
if (base.earlyStop !== undefined)
|
|
289
|
+
recordEarlyStop(scope, base.earlyStop);
|
|
199
290
|
return 'final';
|
|
200
291
|
};
|
|
201
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/route.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAGH,uEAAiE;AAIjE,2DAA4D;AAC5D,uDAA0D;AAC1D,kEAIiC;AAIjC;;;0BAG0B;AAC1B,SAAS,YAAY,CAAC,KAA6B;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,6 +132,8 @@ function seedFrom(scope, message, deps) {
|
|
|
132
132
|
scope.cumTokensOutput = 0;
|
|
133
133
|
scope.cumEstimatedUsd = 0;
|
|
134
134
|
scope.costBudgetHit = false;
|
|
135
|
+
if (deps.costBudgetOnExceed !== undefined)
|
|
136
|
+
scope.costBudgetOnExceed = deps.costBudgetOnExceed;
|
|
135
137
|
scope.activeInjections = [];
|
|
136
138
|
scope.activatedInjectionIds = [];
|
|
137
139
|
scope.dynamicToolSchemas = deps.toolSchemas;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/seed.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAIH,uEAAiE;AAIjE,2DAA4D;AAC5D,uDAA0D;
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,11 @@ function buildWindowStage(deps) {
|
|
|
59
59
|
// Dedup latch for a strategy's warning: a summarizer that is down is down
|
|
60
60
|
// for the whole run, and one warning is a warning while ten is noise.
|
|
61
61
|
let warned = false;
|
|
62
|
+
// The same latch for the meter going dark. A provider that stops reporting
|
|
63
|
+
// usage stops for the run, and the strategy then declines at every boundary
|
|
64
|
+
// — which would otherwise be indistinguishable from a window that is simply
|
|
65
|
+
// under budget.
|
|
66
|
+
let warnedUnmetered = false;
|
|
62
67
|
return async (scope) => {
|
|
63
68
|
// Read the window every iteration. The strategy owns its own trigger, so
|
|
64
69
|
// the stage cannot know whether this iteration matters until it asks —
|
|
@@ -67,7 +72,19 @@ function buildWindowStage(deps) {
|
|
|
67
72
|
// request bytes are untouched.
|
|
68
73
|
const history = (scope.history ?? []).slice();
|
|
69
74
|
const turns = (0, turns_js_1.segmentTurns)(history);
|
|
70
|
-
const
|
|
75
|
+
const iteration = scope.iteration ?? 1;
|
|
76
|
+
// The reading is asked for BY iteration, so an expired one comes back
|
|
77
|
+
// `undefined` instead of standing in for a count nobody took (8.14.0).
|
|
78
|
+
const metered = meter.lastCall(iteration);
|
|
79
|
+
if (metered === undefined && meter.unmeteredSinceLastGood() > 0 && !warnedUnmetered) {
|
|
80
|
+
warnedUnmetered = true;
|
|
81
|
+
// eslint-disable-next-line no-console
|
|
82
|
+
console.warn(`[agentfootprint window:${strategy.name}] the provider stopped reporting token usage ` +
|
|
83
|
+
`(${meter.unmeteredSinceLastGood()} call(s) with none, most recently before iteration ` +
|
|
84
|
+
`${iteration}). This strategy is measured, not estimated, so it is standing down ` +
|
|
85
|
+
`rather than deciding on the last number it happened to see — the window is no longer ` +
|
|
86
|
+
`being managed. Use a provider that reports usage, or remove the window strategy.`);
|
|
87
|
+
}
|
|
71
88
|
const origins = meter.origins();
|
|
72
89
|
const pausedToolCallId = scope.pausedToolCallId;
|
|
73
90
|
const guards = {
|
|
@@ -79,7 +96,7 @@ function buildWindowStage(deps) {
|
|
|
79
96
|
history,
|
|
80
97
|
turns,
|
|
81
98
|
measured: metered === undefined ? undefined : { input: metered.input, output: metered.output },
|
|
82
|
-
iteration
|
|
99
|
+
iteration,
|
|
83
100
|
// 'unknown' rather than a fabricated id: a span that cannot name its run
|
|
84
101
|
// should say so, not invent a plausible-looking answer.
|
|
85
102
|
runId: deps.getRunId?.() ?? 'unknown',
|
|
@@ -137,6 +154,13 @@ function buildWindowStage(deps) {
|
|
|
137
154
|
// measures them in the tokens the decision was actually made on. A
|
|
138
155
|
// strategy with no token budget omits this entirely rather than report a
|
|
139
156
|
// cap nobody set.
|
|
157
|
+
//
|
|
158
|
+
// Which is exactly why `unit` exists (8.14.0). The messages SLOT emits
|
|
159
|
+
// this same event, with this same `slot: 'messages'`, counting characters
|
|
160
|
+
// — and `contextBudget` is on by default, so one subscriber gets both.
|
|
161
|
+
// Every shipped strategy compares against a `thresholdTokens`, so a
|
|
162
|
+
// strategy that does not say defaults to tokens; the six fields are
|
|
163
|
+
// written together so a reader can use either pair.
|
|
140
164
|
if (result.budgetPressure !== undefined) {
|
|
141
165
|
const { capTokens, projectedTokens, planAction } = result.budgetPressure;
|
|
142
166
|
(0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.context.budget_pressure', {
|
|
@@ -145,6 +169,9 @@ function buildWindowStage(deps) {
|
|
|
145
169
|
projectedTokens,
|
|
146
170
|
overflowBy: Math.max(0, projectedTokens - capTokens),
|
|
147
171
|
planAction,
|
|
172
|
+
unit: result.budgetPressure.unit ?? 'tokens',
|
|
173
|
+
cap: capTokens,
|
|
174
|
+
projected: projectedTokens,
|
|
148
175
|
});
|
|
149
176
|
}
|
|
150
177
|
// A summarizer call is real money. It counts against the same budget.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/window.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;;;AAKH,uEAAiE;AACjE,uDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/window.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folded.js","sourceRoot":"","sources":["../../../../src/core/agent/window/folded.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,uDAA+C;AAI/C;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAA,kBAAK,EAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAFD,gDAEC;AAcD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,aAAa,CAC3B,YAAgC,EAChC,OAAmB;IAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,KAAK,WAAW,CAAC,CAAC;AACvE,CAAC;AARD,sCAQC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,YAAgC;IAC7D,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,GAAG,CAAC;AACb,CAAC;AAJD,wCAIC"}
|
|
1
|
+
{"version":3,"file":"folded.js","sourceRoot":"","sources":["../../../../src/core/agent/window/folded.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,uDAA+C;AAI/C;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAA,kBAAK,EAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAFD,gDAEC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,eAAe,CAAC,QAA+B;IAC7D,OAAO,IAAA,kBAAK,EAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAFD,0CAEC;AAcD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,aAAa,CAC3B,YAAgC,EAChC,OAAmB;IAEnB,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,KAAK,WAAW,CAAC,CAAC;AACvE,CAAC;AARD,sCAQC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,YAAgC;IAC7D,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,GAAG,CAAC;AACb,CAAC;AAJD,wCAIC"}
|
|
@@ -64,7 +64,17 @@ function resolveCompactionOptions(options, label) {
|
|
|
64
64
|
}
|
|
65
65
|
if (keepRecentTurns !== undefined)
|
|
66
66
|
requireKeepRecentTurns(keepRecentTurns, label);
|
|
67
|
-
if (model
|
|
67
|
+
if (model === undefined) {
|
|
68
|
+
throw new Error(`${label}: model is required whenever you pass a summarizer. It used to default to the ` +
|
|
69
|
+
`agent's own model, and that default had no correct case:\n` +
|
|
70
|
+
` • same provider family — it quietly billed your MAIN model for every fold, which is ` +
|
|
71
|
+
`the one thing the summarizer option exists to prevent;\n` +
|
|
72
|
+
` • a different provider — it sent your agent's model id to a vendor that has never ` +
|
|
73
|
+
`heard of it, and the fold died mid-run, on a paid run.\n` +
|
|
74
|
+
`Name the model: \`model: 'claude-haiku-4-5'\` (or whatever your summarizer's cheap ` +
|
|
75
|
+
`model is called). Two words, and the invoice stops being a surprise.`);
|
|
76
|
+
}
|
|
77
|
+
if (typeof model !== 'string' || model.length === 0) {
|
|
68
78
|
throw new Error(`${label}: model must be a non-empty model id, got ${String(model)}.`);
|
|
69
79
|
}
|
|
70
80
|
if (retain !== undefined && !RETENTIONS.includes(retain)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/core/agent/window/options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAUH,6DAA6D;AAChD,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;GAIG;AACU,QAAA,iBAAiB,GAAwB,cAAc,CAAC;AAErE,MAAM,UAAU,GAAmC,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AAE/E,SAAS,aAAa,CAAC,OAAgB,EAAE,KAAa,EAAE,KAAa;IACnE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iCAAiC,KAAK,UAAU,OAAO,OAAO,GAAG,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,eAAwB,EAAE,KAAa;IAC/D,IACE,OAAO,eAAe,KAAK,QAAQ;QACnC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,eAAe,IAAI,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,6DAA6D;YACnE,GAAG,MAAM,CAAC,eAAe,CAAC,0DAA0D;YACpF,sFAAsF;YACtF,eAAe,CAClB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,eAAwB,EAAE,KAAa;IACrE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAK,eAA0B,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,kDAAkD,MAAM,CAAC,eAAe,CAAC,IAAI;YACnF,wFAAwF,CAC3F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,wBAAwB,CACtC,OAA0B,EAC1B,KAAa;IAEb,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,sCAAsC,CAAC,CAAC;IACtE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAChF,gBAAgB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACzC,IACE,UAAU,KAAK,IAAI;QACnB,OAAO,UAAU,KAAK,QAAQ;QAC9B,OAAO,UAAU,CAAC,QAAQ,KAAK,UAAU,EACzC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,wDAAwD;YAC9D,oFAAoF;YACpF,mEAAmE,CACtE,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,KAAK,SAAS;QAAE,sBAAsB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAClF,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/core/agent/window/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,8 +73,11 @@ function dropOldestSpan(input, keepRecentTurns, strategyName) {
|
|
|
73
73
|
strategy: strategyName,
|
|
74
74
|
});
|
|
75
75
|
if (notice.content.length >= (0, turns_js_1.windowChars)(span)) {
|
|
76
|
+
// `'replacement-not-smaller'` since 8.14.0. A drop writes no summary —
|
|
77
|
+
// it never calls a summarizer at all — and the reason's old spelling
|
|
78
|
+
// (`'summary-not-smaller'`) named one that does not exist on this path.
|
|
76
79
|
return nothing([
|
|
77
|
-
{ reason: '
|
|
80
|
+
{ reason: 'replacement-not-smaller', turnIndex: plan.from, messageIndex: spanStart },
|
|
78
81
|
...plan.refusals,
|
|
79
82
|
]);
|
|
80
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop.js","sourceRoot":"","sources":["../../../../../src/core/agent/window/strategies/drop.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAGH,4CAA+C;AAC/C,8CAA2C;AAE3C,0CAAwD;AAwBxD;;;;;;;GAOG;AACH,SAAgB,cAAc,CAC5B,KAA0B,EAC1B,eAAuB,EACvB,YAAoB;IAEpB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,QAAkC,EAAe,EAAE,CAAC,CAAC;QACpE,QAAQ;QACR,eAAe,EAAE,EAAE;QACnB,mBAAmB,EAAE,CAAC;QACtB,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,WAAW;QAC9B,gBAAgB,EAAE,WAAW;QAC7B,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,UAAU,EAAE,KAAK,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,sBAAsB;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAE,CAAC,MAAM,CAAC;IAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,MAA6B,CAAC;IAClC,IAAI,YAAgC,CAAC;IACrC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAEhC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,wEAAwE;QACxE,0EAA0E;QAC1E,wEAAwE;QACxE,gDAAgD;QAChD,MAAM,MAAM,GAAG,IAAA,2BAAe,EAAC;YAC7B,mBAAmB,EAAE,IAAI,CAAC,MAAM;YAChC,SAAS;YACT,QAAQ,EAAE,YAAY;SACvB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,IAAA,sBAAW,EAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,OAAO,OAAO,CAAC;gBACb,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"drop.js","sourceRoot":"","sources":["../../../../../src/core/agent/window/strategies/drop.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,15 +43,45 @@ exports.SUMMARIZE_OLDEST = 'summarize-oldest';
|
|
|
43
43
|
* import { Agent, summarizeOldest } from 'agentfootprint';
|
|
44
44
|
*
|
|
45
45
|
* const agent = Agent.create({ provider: anthropic(), model: 'claude-sonnet-4-5' })
|
|
46
|
-
* .window(summarizeOldest({
|
|
46
|
+
* .window(summarizeOldest({
|
|
47
|
+
* thresholdTokens: 120_000,
|
|
48
|
+
* summarizer: anthropic(),
|
|
49
|
+
* model: 'claude-haiku-4-5',
|
|
50
|
+
* }))
|
|
47
51
|
* .build();
|
|
48
52
|
* // `.compaction({ ... })` is this exact line, spelled shorter.
|
|
49
53
|
* ```
|
|
50
54
|
*/
|
|
51
55
|
function summarizeOldest(options) {
|
|
52
56
|
const config = (0, options_js_1.resolveCompactionOptions)(options, 'summarizeOldest');
|
|
57
|
+
// Deterministic-refusal latch (8.14.0), keyed by the CONTENT of the span
|
|
58
|
+
// that was refused. `'replacement-not-smaller'` is not a transient failure
|
|
59
|
+
// the way `'summarizer-failed'` is: the same span through the same
|
|
60
|
+
// summarizer produces the same verdict, and re-asking is a paid call whose
|
|
61
|
+
// answer is already known.
|
|
62
|
+
//
|
|
63
|
+
// Content-keyed, and the key is doing two jobs. It survives the index churn
|
|
64
|
+
// a window change causes — every index moves when messages leave. And it
|
|
65
|
+
// scopes the latch to the QUESTION rather than to the strategy: a span that
|
|
66
|
+
// has GROWN is asked about again, on purpose, because the test is
|
|
67
|
+
// `summaryChars >= windowChars(span)` and a larger span makes that
|
|
68
|
+
// inequality LESS likely to hold. A fold refused at four turns can genuinely
|
|
69
|
+
// succeed at six, and a latch that gave up on the strategy rather than on
|
|
70
|
+
// the span would keep a window over budget for the rest of the run.
|
|
71
|
+
//
|
|
72
|
+
// Inside one growing ReAct conversation the span therefore usually differs
|
|
73
|
+
// each boundary and every call is a fresh question. Where it bites is where
|
|
74
|
+
// the span REPEATS: a standing agent replaying similar openings, or a window
|
|
75
|
+
// whose span is capped by an unremovable turn. Both were paying, every
|
|
76
|
+
// iteration, for an answer they already had.
|
|
77
|
+
//
|
|
78
|
+
// Lives on the strategy instance, which is per agent — the same lifetime as
|
|
79
|
+
// the chart, and the same lifetime the summarizer and its model have. Two
|
|
80
|
+
// agents never share a verdict.
|
|
81
|
+
const refusedSpans = new Set();
|
|
53
82
|
return {
|
|
54
83
|
name: exports.SUMMARIZE_OLDEST,
|
|
84
|
+
billing: { provider: config.summarizer, model: config.model },
|
|
55
85
|
async plan(input) {
|
|
56
86
|
const { history, turns, iteration, measured } = input;
|
|
57
87
|
// Iteration 1: nothing has been sent, so nothing has been counted. A
|
|
@@ -63,7 +93,9 @@ function summarizeOldest(options) {
|
|
|
63
93
|
}
|
|
64
94
|
if (measured.input <= config.thresholdTokens)
|
|
65
95
|
return undefined;
|
|
66
|
-
|
|
96
|
+
// No `?? input.agentModel` since 8.14.0 — `model` is required at the
|
|
97
|
+
// door, so there is nothing left to fall back to and nothing to guess.
|
|
98
|
+
const model = config.model;
|
|
67
99
|
const charsBefore = (0, turns_js_1.windowChars)(history);
|
|
68
100
|
const base = {
|
|
69
101
|
strategy: exports.SUMMARIZE_OLDEST,
|
|
@@ -103,6 +135,17 @@ function summarizeOldest(options) {
|
|
|
103
135
|
const head = history.slice(0, spanStart);
|
|
104
136
|
const span = history.slice(spanStart, spanEnd);
|
|
105
137
|
const tail = history.slice(spanEnd);
|
|
138
|
+
// Already asked, already answered. The record is still filed — a call
|
|
139
|
+
// this strategy DECIDED not to make is evidence, and a silent skip
|
|
140
|
+
// would look identical to a boundary that never came round.
|
|
141
|
+
const spanKey = (0, folded_js_1.spanFingerprint)(span);
|
|
142
|
+
if (refusedSpans.has(spanKey)) {
|
|
143
|
+
return unchanged([
|
|
144
|
+
{ reason: 'replacement-not-smaller', turnIndex: plan.from, messageIndex: spanStart },
|
|
145
|
+
...plan.refusals,
|
|
146
|
+
], { summarizerSkipped: true });
|
|
147
|
+
// Deliberately no `spend`: nothing was billed, because nothing ran.
|
|
148
|
+
}
|
|
106
149
|
// A broken summarizer must not take down the run.
|
|
107
150
|
let summary;
|
|
108
151
|
try {
|
|
@@ -136,12 +179,16 @@ function summarizeOldest(options) {
|
|
|
136
179
|
// grow the window and lose detail at the same time. Both sides are
|
|
137
180
|
// measured in chars — one unit, an exact comparison, not a token guess.
|
|
138
181
|
if (summaryMessage.content.length >= (0, turns_js_1.windowChars)(span)) {
|
|
182
|
+
// Latch it. Asking again next iteration would spend another call to
|
|
183
|
+
// be told the same thing — the inputs have not changed and neither
|
|
184
|
+
// will the answer.
|
|
185
|
+
refusedSpans.add(spanKey);
|
|
139
186
|
return {
|
|
140
187
|
...unchanged([
|
|
141
|
-
{ reason: '
|
|
188
|
+
{ reason: 'replacement-not-smaller', turnIndex: plan.from, messageIndex: spanStart },
|
|
142
189
|
...plan.refusals,
|
|
143
190
|
], { summaryChars: summaryMessage.content.length, summarizerTokens: summary.usage }),
|
|
144
|
-
spend, //
|
|
191
|
+
spend, // this call DID happen, so it still counts
|
|
145
192
|
};
|
|
146
193
|
}
|
|
147
194
|
const foldedAtMs = input.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarizeOldest.js","sourceRoot":"","sources":["../../../../../src/core/agent/window/strategies/summarizeOldest.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,4CAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"summarizeOldest.js","sourceRoot":"","sources":["../../../../../src/core/agent/window/strategies/summarizeOldest.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,6 +115,28 @@ exports.isCompactedSummary = isCompactedSummary;
|
|
|
115
115
|
* Throws whatever the provider throws — the STAGE decides that a broken
|
|
116
116
|
* summarizer means "no fold this iteration", not "no run". Deciding that
|
|
117
117
|
* here would hide the failure from the record.
|
|
118
|
+
*
|
|
119
|
+
* ## This call is UN-DECORATED, and that is on purpose
|
|
120
|
+
*
|
|
121
|
+
* `provider.complete(...)` below is the raw provider. None of the machinery
|
|
122
|
+
* that wraps the agent's own LLM call wraps this one:
|
|
123
|
+
*
|
|
124
|
+
* • no `reliability` retry loop (that lives inside the `call-llm` stage);
|
|
125
|
+
* • no `withRetry` / `withFallback` / `withCircuitBreaker` (those decorate
|
|
126
|
+
* the provider the AGENT was constructed with, not this argument);
|
|
127
|
+
* • no cache subflow (`sf-cache` sits in front of `call-llm` only).
|
|
128
|
+
*
|
|
129
|
+
* One attempt, and a failure is recorded as a `'summarizer-failed'` refusal
|
|
130
|
+
* rather than retried. A fold is optional work — the run is correct without
|
|
131
|
+
* it — so spending a retry budget on it, or letting a summarizer outage open
|
|
132
|
+
* a circuit that then blocks the agent's real calls, would trade something
|
|
133
|
+
* that matters for something that does not.
|
|
134
|
+
*
|
|
135
|
+
* The consequence worth knowing: passing the AGENT'S OWN provider instance as
|
|
136
|
+
* the summarizer gives you one object that behaves two different ways inside
|
|
137
|
+
* one run — retried and cached on one path, neither on this one. `.compaction()`
|
|
138
|
+
* refuses that exact pairing when the model matches too; pass a second
|
|
139
|
+
* instance.
|
|
118
140
|
*/
|
|
119
141
|
async function runSummarizer(provider, model, span, signal) {
|
|
120
142
|
const response = await provider.complete({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../../src/core/agent/window/summarize.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAKH,6EAA6E;AAChE,QAAA,sBAAsB,GAAG,oBAAoB,CAAC;AAE3D,kFAAkF;AAClF,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAC3C,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEhD;;;;GAIG;AACU,QAAA,wBAAwB,GAAG;IACtC,wFAAwF;IACxF,kCAAkC;IAClC,EAAE;IACF,kCAAkC,eAAe,QAAQ,gBAAgB,sBAAsB;IAC/F,8FAA8F;IAC9F,6FAA6F;IAC7F,EAAE;IACF,4FAA4F;IAC5F,6FAA6F;IAC7F,gGAAgG;IAChG,yEAAyE;CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,+EAA+E;AAC/E,SAAS,aAAa,CAAC,GAAe;IACpC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1F,MAAM,IAAI,GACR,GAAG,CAAC,IAAI,KAAK,MAAM;QACjB,CAAC,CAAC,eAAe,GAAG,CAAC,QAAQ,IAAI,SAAS,GAAG;QAC7C,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC1C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACf,OAAO,GAAG,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,mEAAmE;AACnE,SAAgB,gBAAgB,CAAC,QAA+B;IAC9D,OAAO,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxF,CAAC;AAFD,4CAEC;AAED;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,MAA2B;IACpD,OAAO,MAAM,KAAK,cAAc;QAC9B,CAAC,CAAC,uFAAuF;YACrF,aAAa;QACjB,CAAC,CAAC,mFAAmF;YACjF,+BAA+B,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,mBAAmB,CACjC,OAAe,EACf,KAKC;IAED,MAAM,KAAK,GACT,GAAG,8BAAsB,MAAM,KAAK,CAAC,kBAAkB,kCAAkC;QACzF,mCAAmC,KAAK,CAAC,SAAS,0CAA0C;QAC5F,cAAc,KAAK,CAAC,KAAK,gEAAgE;QACzF,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,OAAO,EAAE,EAAE,CAAC;AAC7D,CAAC;AAfD,kDAeC;AAED,+DAA+D;AAC/D,SAAgB,kBAAkB,CAAC,GAA2B;IAC5D,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,8BAAsB,CAAC,CAAC;AACpG,CAAC;AAFD,gDAEC;AAOD
|
|
1
|
+
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../../src/core/agent/window/summarize.ts"],"names":[],"mappings":"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"}
|