@namzu/sdk 23.0.0 → 25.0.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/CHANGELOG.md +94 -0
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +3 -0
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/provider/retry.d.ts +10 -5
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +1 -29
- package/dist/provider/retry.js.map +1 -1
- package/dist/public-runtime.d.ts +1 -0
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +34 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +61 -0
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +31 -13
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +28 -6
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +178 -20
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts +14 -1
- package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
- package/dist/runtime/query/iteration/stream-turn.js +19 -3
- package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +10 -1
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/tool-pause.d.ts +35 -0
- package/dist/runtime/query/tool-pause.d.ts.map +1 -1
- package/dist/runtime/query/tool-pause.js +35 -0
- package/dist/runtime/query/tool-pause.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +2 -0
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +3 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/types/agent/reactive.d.ts +1 -0
- package/dist/types/agent/reactive.d.ts.map +1 -1
- package/dist/types/run/step.d.ts +75 -3
- package/dist/types/run/step.d.ts.map +1 -1
- package/dist/types/run/step.js.map +1 -1
- package/dist/utils/backoff.d.ts +44 -0
- package/dist/utils/backoff.d.ts.map +1 -0
- package/dist/utils/backoff.js +58 -0
- package/dist/utils/backoff.js.map +1 -0
- package/package.json +1 -1
- package/src/agents/ReactiveAgent.ts +3 -0
- package/src/provider/retry.ts +10 -35
- package/src/public-runtime.ts +5 -0
- package/src/runtime/query/executor.ts +74 -0
- package/src/runtime/query/index.ts +59 -18
- package/src/runtime/query/iteration/index.ts +199 -22
- package/src/runtime/query/iteration/stream-turn.ts +24 -3
- package/src/runtime/query/resume-pending.ts +10 -1
- package/src/runtime/query/tool-pause.ts +37 -0
- package/src/runtime/query/tooling.ts +5 -0
- package/src/types/agent/reactive.ts +1 -0
- package/src/types/run/step.ts +76 -3
- package/src/utils/backoff.ts +70 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-pending.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/resume-pending.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"resume-pending.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/resume-pending.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;IACpC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;IACzC,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CACjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAChC,UAAU,EAAE,mBAAmB,EAC/B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,EAAE,MAAM,GACT,iBAAiB,GAAG,IAAI,CAyD1B;AAgED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC9B,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,GAAG,EAAE,MAAM,GACT,iBAAiB,GAAG,IAAI,CAsB1B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,YAAY,EACtB,KAAK,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAsB5D;AA+ED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,QAAQ,EAAE,CAS5E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PendingAnswers } from './question-park.js';
|
|
2
|
+
import { isPauseForCall } from './tool-pause.js';
|
|
2
3
|
/**
|
|
3
4
|
* Decide whether a restored checkpoint can have `decision` applied to it
|
|
4
5
|
* directly.
|
|
@@ -94,7 +95,15 @@ function planQuestionResume(checkpoint, decision, questionId, log) {
|
|
|
94
95
|
// otherwise have its answer delivered to whatever tool now holds that
|
|
95
96
|
// slot — the misdirection the asking tool's own id guard exists to
|
|
96
97
|
// prevent, checked here too because by then the tool has been entered.
|
|
97
|
-
|
|
98
|
+
//
|
|
99
|
+
// Through `isPauseForCall` rather than by equality, because a parked
|
|
100
|
+
// question id is not a call id. The general seam appends the tool
|
|
101
|
+
// author's pause name to it, so equality compared
|
|
102
|
+
// `call_1:target_environment` against `call_1`, could never hold, and
|
|
103
|
+
// refused every cross-process resume of a host-authored pause. Only
|
|
104
|
+
// the built-in question tool got through, and only because it parks
|
|
105
|
+
// under the bare tool-use id.
|
|
106
|
+
if (!assistant.toolCalls.some((tc) => isPauseForCall(questionId, tc.id))) {
|
|
98
107
|
log.error('The parked question does not belong to any unanswered call in this turn', {
|
|
99
108
|
checkpointId: checkpoint.id,
|
|
100
109
|
questionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume-pending.js","sourceRoot":"","sources":["../../../src/runtime/query/resume-pending.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"resume-pending.js","sourceRoot":"","sources":["../../../src/runtime/query/resume-pending.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,41 @@ import type { PendingAnswers, QuestionParkRecorder } from './question-park.js';
|
|
|
29
29
|
* author's, so a resume payload can name what it is answering.
|
|
30
30
|
*/
|
|
31
31
|
export declare const pauseId: (toolUseId: string, name: string) => string;
|
|
32
|
+
/**
|
|
33
|
+
* Does this pause id belong to `callId`?
|
|
34
|
+
*
|
|
35
|
+
* The other half of the scheme above, and it lives beside the mint rather
|
|
36
|
+
* than at the gate that asks it, so the two cannot drift apart again. They
|
|
37
|
+
* already had: the resume gate compared the whole parked id against a raw
|
|
38
|
+
* tool-use id, which a composite can never equal, so a pause raised
|
|
39
|
+
* through {@link createToolPause} was refused by every cross-process
|
|
40
|
+
* resume — while the built-in question tool, whose `questionId` IS the raw
|
|
41
|
+
* id, passed the same gate and worked.
|
|
42
|
+
*
|
|
43
|
+
* Asked against an id actually present in the turn rather than by
|
|
44
|
+
* splitting the composite on `:`. The left half is the provider's tool-use
|
|
45
|
+
* id and nothing forbids a colon in it, so a split takes `call:9:confirm`
|
|
46
|
+
* apart at the wrong place and then compares against `call` — a string no
|
|
47
|
+
* provider minted. Testing a `<callId>:` prefix asks about candidates that
|
|
48
|
+
* exist instead.
|
|
49
|
+
*
|
|
50
|
+
* It is not exact, and the inexactness is bounded rather than absent: a
|
|
51
|
+
* call whose id is literally `call` matches a pause raised on `call:9`.
|
|
52
|
+
* That costs nothing while the real call is also in the turn, because the
|
|
53
|
+
* pause does belong to a call there; and when it is not, the answer is
|
|
54
|
+
* filed under a key no tool asks for, so the tool asks again. A resume
|
|
55
|
+
* that re-asks, never one that misdelivers — routing below is still an
|
|
56
|
+
* exact key match.
|
|
57
|
+
*
|
|
58
|
+
* Membership only — is there a call in this turn that this pause was
|
|
59
|
+
* raised from. The full composite still ROUTES the answer, by exact key in
|
|
60
|
+
* `PendingAnswers`, which is what keeps a call that pauses twice from
|
|
61
|
+
* delivering its second answer against its first question.
|
|
62
|
+
*
|
|
63
|
+
* Every sentence above that names a condition and an outcome is pinned in
|
|
64
|
+
* `__tests__/tool-pause.test.ts`, under "the id a resume gate matches on".
|
|
65
|
+
*/
|
|
66
|
+
export declare const isPauseForCall: (pause: string, callId: string) => boolean;
|
|
32
67
|
interface ToolPauseDeps {
|
|
33
68
|
readonly runId: RunId;
|
|
34
69
|
readonly toolUseId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-pause.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/tool-pause.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,aAAa,EAAoB,MAAM,2BAA2B,CAAA;AACpG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,2BAA2B,CAAA;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9E;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,EAAE,MAAM,MAAM,KAAG,MAAgC,CAAA;AAE1F,UAAU,aAAa;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;CACxC;AA0BD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAoDrE"}
|
|
1
|
+
{"version":3,"file":"tool-pause.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/tool-pause.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,aAAa,EAAoB,MAAM,2BAA2B,CAAA;AACpG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,2BAA2B,CAAA;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9E;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,WAAW,MAAM,EAAE,MAAM,MAAM,KAAG,MAAgC,CAAA;AAE1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,OACZ,CAAA;AAEnD,UAAU,aAAa;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;CACxC;AA0BD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAoDrE"}
|
|
@@ -25,6 +25,41 @@
|
|
|
25
25
|
* author's, so a resume payload can name what it is answering.
|
|
26
26
|
*/
|
|
27
27
|
export const pauseId = (toolUseId, name) => `${toolUseId}:${name}`;
|
|
28
|
+
/**
|
|
29
|
+
* Does this pause id belong to `callId`?
|
|
30
|
+
*
|
|
31
|
+
* The other half of the scheme above, and it lives beside the mint rather
|
|
32
|
+
* than at the gate that asks it, so the two cannot drift apart again. They
|
|
33
|
+
* already had: the resume gate compared the whole parked id against a raw
|
|
34
|
+
* tool-use id, which a composite can never equal, so a pause raised
|
|
35
|
+
* through {@link createToolPause} was refused by every cross-process
|
|
36
|
+
* resume — while the built-in question tool, whose `questionId` IS the raw
|
|
37
|
+
* id, passed the same gate and worked.
|
|
38
|
+
*
|
|
39
|
+
* Asked against an id actually present in the turn rather than by
|
|
40
|
+
* splitting the composite on `:`. The left half is the provider's tool-use
|
|
41
|
+
* id and nothing forbids a colon in it, so a split takes `call:9:confirm`
|
|
42
|
+
* apart at the wrong place and then compares against `call` — a string no
|
|
43
|
+
* provider minted. Testing a `<callId>:` prefix asks about candidates that
|
|
44
|
+
* exist instead.
|
|
45
|
+
*
|
|
46
|
+
* It is not exact, and the inexactness is bounded rather than absent: a
|
|
47
|
+
* call whose id is literally `call` matches a pause raised on `call:9`.
|
|
48
|
+
* That costs nothing while the real call is also in the turn, because the
|
|
49
|
+
* pause does belong to a call there; and when it is not, the answer is
|
|
50
|
+
* filed under a key no tool asks for, so the tool asks again. A resume
|
|
51
|
+
* that re-asks, never one that misdelivers — routing below is still an
|
|
52
|
+
* exact key match.
|
|
53
|
+
*
|
|
54
|
+
* Membership only — is there a call in this turn that this pause was
|
|
55
|
+
* raised from. The full composite still ROUTES the answer, by exact key in
|
|
56
|
+
* `PendingAnswers`, which is what keeps a call that pauses twice from
|
|
57
|
+
* delivering its second answer against its first question.
|
|
58
|
+
*
|
|
59
|
+
* Every sentence above that names a condition and an outcome is pinned in
|
|
60
|
+
* `__tests__/tool-pause.test.ts`, under "the id a resume gate matches on".
|
|
61
|
+
*/
|
|
62
|
+
export const isPauseForCall = (pause, callId) => pause === callId || pause.startsWith(`${callId}:`);
|
|
28
63
|
function toQuestion(request, id) {
|
|
29
64
|
return {
|
|
30
65
|
questionId: id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-pause.js","sourceRoot":"","sources":["../../../src/runtime/query/tool-pause.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"tool-pause.js","sourceRoot":"","sources":["../../../src/runtime/query/tool-pause.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import type { PermissionMode } from '../../types/permission/index.js';
|
|
|
6
6
|
import type { RunEvent } from '../../types/run/index.js';
|
|
7
7
|
import type { RequestToolPause, ToolRegistryContract } from '../../types/tool/index.js';
|
|
8
8
|
import type { RepairToolCall } from '../../types/tool/repair.js';
|
|
9
|
+
import type { BackoffPolicy } from '../../utils/backoff.js';
|
|
9
10
|
import type { Logger } from '../../utils/logger.js';
|
|
10
11
|
import { ToolExecutor } from './executor.js';
|
|
11
12
|
export type EmitEvent = (event: RunEvent) => Promise<void>;
|
|
@@ -20,6 +21,7 @@ export interface ToolingBootstrapConfig {
|
|
|
20
21
|
invocationState?: InvocationState;
|
|
21
22
|
pluginManager?: PluginLifecycleManager;
|
|
22
23
|
toolTimeoutMs?: number;
|
|
24
|
+
toolRetryBackoff?: Partial<BackoffPolicy>;
|
|
23
25
|
maxToolConcurrency?: number;
|
|
24
26
|
maxToolOutputChars?: number;
|
|
25
27
|
maxToolContentBytes?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooling.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/tooling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE1D,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,KAAK,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,qFAAqF;IACrF,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,gBAAgB,CAAA;CACnD;AAED,qBAAa,gBAAgB;IAC5B,MAAM,CAAC,IAAI,CACV,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,GACT,YAAY;
|
|
1
|
+
{"version":3,"file":"tooling.d.ts","sourceRoot":"","sources":["../../../src/runtime/query/tooling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE1D,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,oBAAoB,CAAA;IAC3B,KAAK,EAAE,KAAK,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,qFAAqF;IACrF,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,gBAAgB,CAAA;CACnD;AAED,qBAAa,gBAAgB;IAC5B,MAAM,CAAC,IAAI,CACV,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,GACT,YAAY;CAkCf"}
|
|
@@ -12,6 +12,9 @@ export class ToolingBootstrap {
|
|
|
12
12
|
invocationState: config.invocationState,
|
|
13
13
|
pluginManager: config.pluginManager,
|
|
14
14
|
...(config.toolTimeoutMs !== undefined ? { toolTimeoutMs: config.toolTimeoutMs } : {}),
|
|
15
|
+
...(config.toolRetryBackoff !== undefined
|
|
16
|
+
? { toolRetryBackoff: config.toolRetryBackoff }
|
|
17
|
+
: {}),
|
|
15
18
|
...(config.maxToolConcurrency !== undefined
|
|
16
19
|
? { maxToolConcurrency: config.maxToolConcurrency }
|
|
17
20
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooling.js","sourceRoot":"","sources":["../../../src/runtime/query/tooling.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tooling.js","sourceRoot":"","sources":["../../../src/runtime/query/tooling.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAyB5C,MAAM,OAAO,gBAAgB;IAC5B,MAAM,CAAC,IAAI,CACV,MAA8B,EAC9B,aAA4B,EAC5B,SAAoB,EACpB,GAAW;QAEX,OAAO,IAAI,YAAY,CACtB;YACC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,MAAM,CAAC,gBAAgB,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE;gBAC/C,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;gBAC1C,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE;gBACnD,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,kBAAkB,KAAK,SAAS;gBAC1C,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,EAAE;gBACnD,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAAE;gBACrD,CAAC,CAAC,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,EACD,aAAa,EACb,SAAS,EACT,GAAG,CACH,CAAA;IACF,CAAC;CACD"}
|
|
@@ -76,6 +76,7 @@ export interface ReactiveAgentConfig extends BaseAgentConfig {
|
|
|
76
76
|
retry?: QueryParams['retry'];
|
|
77
77
|
emergencySave?: boolean;
|
|
78
78
|
toolTimeoutMs?: number;
|
|
79
|
+
toolRetryBackoff?: QueryParams['toolRetryBackoff'];
|
|
79
80
|
maxToolConcurrency?: number;
|
|
80
81
|
maxToolOutputChars?: number;
|
|
81
82
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../../src/types/agent/reactive.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../../src/types/agent/reactive.ts"],"names":[],"mappings":"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"}
|
package/dist/types/run/step.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CostInfo, TokenUsage } from '../common/index.js';
|
|
2
2
|
import type { MessageId } from '../ids/index.js';
|
|
3
3
|
import type { ToolCall } from '../message/index.js';
|
|
4
|
+
import type { ProviderErrorCode } from '../provider/errors.js';
|
|
4
5
|
/**
|
|
5
6
|
* What one iteration of the agent loop did.
|
|
6
7
|
*
|
|
@@ -54,13 +55,56 @@ export interface StepResult {
|
|
|
54
55
|
* it is handed.
|
|
55
56
|
*/
|
|
56
57
|
servedBy?: StepProvenance;
|
|
57
|
-
|
|
58
|
+
/**
|
|
59
|
+
* The assistant message this step produced.
|
|
60
|
+
*
|
|
61
|
+
* Absent only on a step whose iteration ended before the model's message
|
|
62
|
+
* was announced — a compaction failure, a lifecycle hook that threw, a
|
|
63
|
+
* transport error raised before the first chunk. Absence is left meaning
|
|
64
|
+
* "there was no message" rather than filled with an id the event stream
|
|
65
|
+
* never carried: a `messageId` a reader cannot find a `message_started`
|
|
66
|
+
* for is worse evidence than no id at all, because it invites the
|
|
67
|
+
* correlation and then loses it.
|
|
68
|
+
*
|
|
69
|
+
* Present, and correlatable, on every step whose iteration got as far as
|
|
70
|
+
* the provider call — including one that failed mid-stream. The loop
|
|
71
|
+
* mints the id before the call that announces it, and a dying stream
|
|
72
|
+
* emits `message_completed` on its way out, so the events carry both
|
|
73
|
+
* ends of the message a failed step points at.
|
|
74
|
+
*/
|
|
75
|
+
messageId?: MessageId;
|
|
58
76
|
/** Assistant text for this step, if any. */
|
|
59
77
|
content: string | null;
|
|
60
78
|
toolCalls: readonly ToolCall[];
|
|
61
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Tool outcomes, in the same order as `toolCalls`.
|
|
81
|
+
*
|
|
82
|
+
* Shorter than `toolCalls` on a step that ended in failure: only the
|
|
83
|
+
* outcomes that exist are recorded, so a call with no entry here reads
|
|
84
|
+
* as "never came back" rather than as an empty success. Pair by
|
|
85
|
+
* `toolCallId`, not by index.
|
|
86
|
+
*/
|
|
62
87
|
toolResults: readonly StepToolResult[];
|
|
63
|
-
|
|
88
|
+
/**
|
|
89
|
+
* How the turn ended.
|
|
90
|
+
*
|
|
91
|
+
* `error` and `cancelled` are not provider verdicts — no provider reports
|
|
92
|
+
* them — but a step exists for a failed iteration too, and it has to say
|
|
93
|
+
* how it ended in the same field a reader already sorts by. `error` comes
|
|
94
|
+
* with {@link failure}; `cancelled` means a Stop tore the turn down and
|
|
95
|
+
* there is no failure to report.
|
|
96
|
+
*/
|
|
97
|
+
finishReason: 'stop' | 'tool_calls' | 'length' | 'content_filter' | 'error' | 'cancelled';
|
|
98
|
+
/**
|
|
99
|
+
* What went wrong, on a step with `finishReason: 'error'`.
|
|
100
|
+
*
|
|
101
|
+
* Absent everywhere else. A run whose ledger is complete except on the
|
|
102
|
+
* turns that failed reads as "nothing went wrong" precisely when
|
|
103
|
+
* something did, which is worse than an absent record — so the failed
|
|
104
|
+
* turn gets the same record as every other, and this is what makes it
|
|
105
|
+
* legible as a failure.
|
|
106
|
+
*/
|
|
107
|
+
failure?: StepFailure;
|
|
64
108
|
/** Usage for THIS step, not the run's cumulative total. */
|
|
65
109
|
usage: TokenUsage;
|
|
66
110
|
/** Cost delta attributable to this step. Zero without a pricing table. */
|
|
@@ -85,6 +129,34 @@ export interface StepProvenance {
|
|
|
85
129
|
/** 0 is the head, i.e. the provider the run was configured with. */
|
|
86
130
|
readonly chainIndex: number;
|
|
87
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Why a step ended in `finishReason: 'error'`.
|
|
134
|
+
*
|
|
135
|
+
* The step-level counterpart of the pair a failed run already carries —
|
|
136
|
+
* {@link import('./entity.js').Run.lastError} and
|
|
137
|
+
* {@link import('./entity.js').Run.lastProviderError} — and shaped from the
|
|
138
|
+
* same classification, so the two agree when the failed step is the one that
|
|
139
|
+
* ended the run. What a run records once, a run of twenty iterations records
|
|
140
|
+
* per iteration, which is the difference between "this run failed" and "this
|
|
141
|
+
* turn failed, and the next four succeeded".
|
|
142
|
+
*/
|
|
143
|
+
export interface StepFailure {
|
|
144
|
+
/** The failure's message, as the iteration's span and log recorded it. */
|
|
145
|
+
readonly message: string;
|
|
146
|
+
/**
|
|
147
|
+
* Where the classifier placed it.
|
|
148
|
+
*
|
|
149
|
+
* `unknown` for a failure that is not a provider failure at all — a
|
|
150
|
+
* plugin hook that threw, a bug in a tool wrapper. That is the honest
|
|
151
|
+
* reading of the code's own contract ("unclassifiable"), and it is left
|
|
152
|
+
* saying so rather than being given a more specific-looking code.
|
|
153
|
+
*/
|
|
154
|
+
readonly code: ProviderErrorCode;
|
|
155
|
+
/** HTTP status, when the failure carried one. */
|
|
156
|
+
readonly status?: number;
|
|
157
|
+
/** Whether sending the same request again could have worked. */
|
|
158
|
+
readonly retryable: boolean;
|
|
159
|
+
}
|
|
88
160
|
export interface StepToolResult {
|
|
89
161
|
toolCallId: string;
|
|
90
162
|
toolName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/types/run/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/types/run/step.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/types/run/step.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/types/run/step.ts"],"names":[],"mappings":"AAoMA,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,CAAS;IACpC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,KAAe;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3F,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,KAAK,CAAC,GAAG,UAA2B;IACnD,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACtB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;QACxC,CAAC;QACD,OAAO,KAAK,CAAA;IACb,CAAC,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exponential backoff with full jitter, and an abortable sleep.
|
|
3
|
+
*
|
|
4
|
+
* Both were private to `provider/retry.ts`, which is where they were needed
|
|
5
|
+
* first and is not where they stop being needed. The tool executor's in-loop
|
|
6
|
+
* retry re-ran a failed call immediately, several times, which is the pattern
|
|
7
|
+
* most likely to prolong the very condition it is retrying against — and the
|
|
8
|
+
* correct implementation was one directory away, already reviewed, already
|
|
9
|
+
* doing the hard part right.
|
|
10
|
+
*
|
|
11
|
+
* So they live here, in one copy, and both retry loops call them. A second
|
|
12
|
+
* implementation of a backoff curve is a second thing to get wrong, and the
|
|
13
|
+
* two would drift on exactly the axis nobody re-derives: jitter.
|
|
14
|
+
*/
|
|
15
|
+
/** The shape a backoff curve needs. */
|
|
16
|
+
export interface BackoffPolicy {
|
|
17
|
+
/** First backoff, doubled each attempt. */
|
|
18
|
+
readonly initialDelayMs: number;
|
|
19
|
+
/** Ceiling for a single backoff, before jitter. */
|
|
20
|
+
readonly maxDelayMs: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Full jitter (AWS's formulation): sleep a uniform random amount in
|
|
24
|
+
* `[0, backoff]` rather than `backoff` exactly. Equal-jitter and no-jitter
|
|
25
|
+
* both keep a fleet of clients that failed together retrying together;
|
|
26
|
+
* full jitter is what actually spreads a thundering herd.
|
|
27
|
+
*
|
|
28
|
+
* `attempt` is 0-based: attempt 0 draws from `[0, initialDelayMs]`.
|
|
29
|
+
*
|
|
30
|
+
* The concurrency this matters for is not hypothetical on the tool path. A
|
|
31
|
+
* model emits a batch of parallel calls, they hit one rate-limited endpoint
|
|
32
|
+
* together, and they fail together — so a fixed delay would resynchronise
|
|
33
|
+
* them on every attempt, which is a herd this loop creates itself.
|
|
34
|
+
*/
|
|
35
|
+
export declare function backoffWithJitter(attempt: number, policy: BackoffPolicy, random?: () => number): number;
|
|
36
|
+
/**
|
|
37
|
+
* Sleep, unless the signal says not to.
|
|
38
|
+
*
|
|
39
|
+
* Rejects with the signal's reason when aborted — before sleeping if it is
|
|
40
|
+
* already aborted, and mid-sleep otherwise. A caller that must not throw over
|
|
41
|
+
* an abort catches it; a caller that wants the abort to propagate does not.
|
|
42
|
+
*/
|
|
43
|
+
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
44
|
+
//# sourceMappingURL=backoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backoff.d.ts","sourceRoot":"","sources":["../../src/utils/backoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,MAAM,MAAoB,GAChC,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exponential backoff with full jitter, and an abortable sleep.
|
|
3
|
+
*
|
|
4
|
+
* Both were private to `provider/retry.ts`, which is where they were needed
|
|
5
|
+
* first and is not where they stop being needed. The tool executor's in-loop
|
|
6
|
+
* retry re-ran a failed call immediately, several times, which is the pattern
|
|
7
|
+
* most likely to prolong the very condition it is retrying against — and the
|
|
8
|
+
* correct implementation was one directory away, already reviewed, already
|
|
9
|
+
* doing the hard part right.
|
|
10
|
+
*
|
|
11
|
+
* So they live here, in one copy, and both retry loops call them. A second
|
|
12
|
+
* implementation of a backoff curve is a second thing to get wrong, and the
|
|
13
|
+
* two would drift on exactly the axis nobody re-derives: jitter.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Full jitter (AWS's formulation): sleep a uniform random amount in
|
|
17
|
+
* `[0, backoff]` rather than `backoff` exactly. Equal-jitter and no-jitter
|
|
18
|
+
* both keep a fleet of clients that failed together retrying together;
|
|
19
|
+
* full jitter is what actually spreads a thundering herd.
|
|
20
|
+
*
|
|
21
|
+
* `attempt` is 0-based: attempt 0 draws from `[0, initialDelayMs]`.
|
|
22
|
+
*
|
|
23
|
+
* The concurrency this matters for is not hypothetical on the tool path. A
|
|
24
|
+
* model emits a batch of parallel calls, they hit one rate-limited endpoint
|
|
25
|
+
* together, and they fail together — so a fixed delay would resynchronise
|
|
26
|
+
* them on every attempt, which is a herd this loop creates itself.
|
|
27
|
+
*/
|
|
28
|
+
export function backoffWithJitter(attempt, policy, random = Math.random) {
|
|
29
|
+
const exponential = Math.min(policy.initialDelayMs * 2 ** attempt, policy.maxDelayMs);
|
|
30
|
+
return Math.round(random() * exponential);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sleep, unless the signal says not to.
|
|
34
|
+
*
|
|
35
|
+
* Rejects with the signal's reason when aborted — before sleeping if it is
|
|
36
|
+
* already aborted, and mid-sleep otherwise. A caller that must not throw over
|
|
37
|
+
* an abort catches it; a caller that wants the abort to propagate does not.
|
|
38
|
+
*/
|
|
39
|
+
export function sleep(ms, signal) {
|
|
40
|
+
if (ms <= 0)
|
|
41
|
+
return Promise.resolve();
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
if (signal?.aborted) {
|
|
44
|
+
reject(signal.reason);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const timer = setTimeout(() => {
|
|
48
|
+
signal?.removeEventListener('abort', onAbort);
|
|
49
|
+
resolve();
|
|
50
|
+
}, ms);
|
|
51
|
+
const onAbort = () => {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
reject(signal?.reason);
|
|
54
|
+
};
|
|
55
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=backoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backoff.js","sourceRoot":"","sources":["../../src/utils/backoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAChC,OAAe,EACf,MAAqB,EACrB,SAAuB,IAAI,CAAC,MAAM;IAElC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IACrF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACrD,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IACrC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC5C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACrB,OAAM;QACP,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC7C,OAAO,EAAE,CAAA;QACV,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC,CAAA;QACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -82,6 +82,9 @@ export class ReactiveAgent extends AbstractAgent<ReactiveAgentConfig, ReactiveAg
|
|
|
82
82
|
...(config.retry !== undefined ? { retry: config.retry } : {}),
|
|
83
83
|
...(config.emergencySave !== undefined ? { emergencySave: config.emergencySave } : {}),
|
|
84
84
|
...(config.toolTimeoutMs !== undefined ? { toolTimeoutMs: config.toolTimeoutMs } : {}),
|
|
85
|
+
...(config.toolRetryBackoff !== undefined
|
|
86
|
+
? { toolRetryBackoff: config.toolRetryBackoff }
|
|
87
|
+
: {}),
|
|
85
88
|
...(config.maxToolConcurrency !== undefined
|
|
86
89
|
? { maxToolConcurrency: config.maxToolConcurrency }
|
|
87
90
|
: {}),
|
package/src/provider/retry.ts
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { classifyProviderError, isAbortError } from '../types/provider/errors.js'
|
|
2
2
|
import type { ChatCompletionParams, LLMProvider, StreamChunk } from '../types/provider/index.js'
|
|
3
|
+
import { type BackoffPolicy, backoffWithJitter, sleep } from '../utils/backoff.js'
|
|
3
4
|
import type { Logger } from '../utils/logger.js'
|
|
4
5
|
import { isProviderRequestError } from './errors.js'
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* `BackoffPolicy` plus the provider-specific parts: how many attempts, and
|
|
9
|
+
* how long a server-directed wait may be honoured for.
|
|
10
|
+
*
|
|
11
|
+
* The curve itself lives in `utils/backoff.ts` and is shared with the tool
|
|
12
|
+
* executor's in-loop retry — which had no backoff at all while this one was
|
|
13
|
+
* being careful about jitter two directories away.
|
|
14
|
+
*/
|
|
15
|
+
export interface ProviderRetryConfig extends BackoffPolicy {
|
|
7
16
|
/** Retry attempts AFTER the initial try. `0` disables retrying. */
|
|
8
17
|
readonly maxRetries: number
|
|
9
|
-
/** First backoff, doubled each attempt. */
|
|
10
|
-
readonly initialDelayMs: number
|
|
11
|
-
/** Ceiling for a single backoff, before jitter. */
|
|
12
|
-
readonly maxDelayMs: number
|
|
13
18
|
/**
|
|
14
19
|
* Cap on a server-directed `Retry-After`. A provider asking for 15
|
|
15
20
|
* minutes should not silently park an interactive run for 15 minutes;
|
|
@@ -34,36 +39,6 @@ export const DEFAULT_PROVIDER_RETRY: ProviderRetryConfig = {
|
|
|
34
39
|
maxRetryAfterMs: 60_000,
|
|
35
40
|
}
|
|
36
41
|
|
|
37
|
-
/**
|
|
38
|
-
* Full jitter (AWS's formulation): sleep a uniform random amount in
|
|
39
|
-
* `[0, backoff]` rather than `backoff` exactly. Equal-jitter and no-jitter
|
|
40
|
-
* both keep a fleet of clients that failed together retrying together;
|
|
41
|
-
* full jitter is what actually spreads a thundering herd.
|
|
42
|
-
*/
|
|
43
|
-
function backoffWithJitter(attempt: number, config: ProviderRetryConfig, random: () => number) {
|
|
44
|
-
const exponential = Math.min(config.initialDelayMs * 2 ** attempt, config.maxDelayMs)
|
|
45
|
-
return Math.round(random() * exponential)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function sleep(ms: number, signal?: AbortSignal): Promise<void> {
|
|
49
|
-
if (ms <= 0) return Promise.resolve()
|
|
50
|
-
return new Promise<void>((resolve, reject) => {
|
|
51
|
-
if (signal?.aborted) {
|
|
52
|
-
reject(signal.reason)
|
|
53
|
-
return
|
|
54
|
-
}
|
|
55
|
-
const timer = setTimeout(() => {
|
|
56
|
-
signal?.removeEventListener('abort', onAbort)
|
|
57
|
-
resolve()
|
|
58
|
-
}, ms)
|
|
59
|
-
const onAbort = () => {
|
|
60
|
-
clearTimeout(timer)
|
|
61
|
-
reject(signal?.reason)
|
|
62
|
-
}
|
|
63
|
-
signal?.addEventListener('abort', onAbort, { once: true })
|
|
64
|
-
})
|
|
65
|
-
}
|
|
66
|
-
|
|
67
42
|
export interface WithProviderRetryOptions {
|
|
68
43
|
readonly config?: Partial<ProviderRetryConfig>
|
|
69
44
|
readonly log?: Logger
|
package/src/public-runtime.ts
CHANGED
|
@@ -357,6 +357,11 @@ export type {
|
|
|
357
357
|
WithProviderFallbackOptions,
|
|
358
358
|
WithProviderRetryOptions,
|
|
359
359
|
} from './provider/index.js'
|
|
360
|
+
// The curve `ProviderRetryConfig` extends and `query({ toolRetryBackoff })`
|
|
361
|
+
// takes a partial of. Both public surfaces name it, so a consumer has to be
|
|
362
|
+
// able to name it too — a type reachable only through an inline `import(...)`
|
|
363
|
+
// in a `.d.ts` is not a type anyone writes down.
|
|
364
|
+
export type { BackoffPolicy } from './utils/backoff.js'
|
|
360
365
|
|
|
361
366
|
export {
|
|
362
367
|
assertIsolation,
|