@superblocksteam/vite-plugin-file-sync 2.0.130-next.1 → 2.0.130-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +30 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +8 -0
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +94 -4
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +6 -1
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
- package/dist/ai-service/app-skills/helpers.js +17 -18
- package/dist/ai-service/app-skills/helpers.js.map +1 -1
- package/dist/ai-service/chat/chat-push-metrics.d.ts +12 -0
- package/dist/ai-service/chat/chat-push-metrics.d.ts.map +1 -0
- package/dist/ai-service/chat/chat-push-metrics.js +68 -0
- package/dist/ai-service/chat/chat-push-metrics.js.map +1 -0
- package/dist/ai-service/chat/chat-session-store.d.ts +61 -5
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +214 -8
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/chat/transcript-budget.d.ts +108 -0
- package/dist/ai-service/chat/transcript-budget.d.ts.map +1 -0
- package/dist/ai-service/chat/transcript-budget.js +175 -0
- package/dist/ai-service/chat/transcript-budget.js.map +1 -0
- package/dist/ai-service/chat/transcript-metrics.d.ts +16 -0
- package/dist/ai-service/chat/transcript-metrics.d.ts.map +1 -0
- package/dist/ai-service/chat/transcript-metrics.js +128 -0
- package/dist/ai-service/chat/transcript-metrics.js.map +1 -0
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +4 -0
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/llm/clark-stream-telemetry-sink.d.ts +4 -0
- package/dist/ai-service/llm/clark-stream-telemetry-sink.d.ts.map +1 -0
- package/dist/ai-service/llm/clark-stream-telemetry-sink.js +105 -0
- package/dist/ai-service/llm/clark-stream-telemetry-sink.js.map +1 -0
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +63 -39
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.js +10 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context.js +43 -2
- package/dist/ai-service/llm/context-v2/context.js.map +1 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.d.ts +10 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.js +7 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.js.map +1 -1
- package/dist/ai-service/llm/stream/config.d.ts +30 -0
- package/dist/ai-service/llm/stream/config.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/config.js +34 -17
- package/dist/ai-service/llm/stream/config.js.map +1 -1
- package/dist/ai-service/llm/stream/errors.d.ts +10 -1
- package/dist/ai-service/llm/stream/errors.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/errors.js +3 -1
- package/dist/ai-service/llm/stream/errors.js.map +1 -1
- package/dist/ai-service/llm/stream/idle-monitor.d.ts +13 -4
- package/dist/ai-service/llm/stream/idle-monitor.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/idle-monitor.js +28 -6
- package/dist/ai-service/llm/stream/idle-monitor.js.map +1 -1
- package/dist/ai-service/llm/stream/index.d.ts +1 -1
- package/dist/ai-service/llm/stream/index.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/index.js.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.js +1 -0
- package/dist/ai-service/llm/stream/managed-stream.js.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts +19 -0
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.js +277 -29
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
- package/dist/ai-service/llm/stream/retry-engine.d.ts +15 -0
- package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/retry-engine.js +55 -2
- package/dist/ai-service/llm/stream/retry-engine.js.map +1 -1
- package/dist/ai-service/llm/stream/session.d.ts +3 -0
- package/dist/ai-service/llm/stream/session.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/session.js +13 -0
- package/dist/ai-service/llm/stream/session.js.map +1 -1
- package/dist/ai-service/llm/stream/wait-state-tracker.d.ts +54 -0
- package/dist/ai-service/llm/stream/wait-state-tracker.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/wait-state-tracker.js +105 -0
- package/dist/ai-service/llm/stream/wait-state-tracker.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +13 -7
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +55 -43
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.d.ts +11 -0
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.js +11 -0
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +10 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.d.ts +8 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.js +52 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.d.ts +33 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.js +61 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.js.map +1 -0
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +1 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/tasks/peer-push.d.ts +7 -4
- package/dist/ai-service/tasks/peer-push.d.ts.map +1 -1
- package/dist/ai-service/tasks/peer-push.js +7 -4
- package/dist/ai-service/tasks/peer-push.js.map +1 -1
- package/dist/migration-templates/app-fullstack/package.json +1 -1
- package/dist/socket-manager.d.ts +2 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +17 -6
- package/dist/socket-manager.js.map +1 -1
- package/dist/util/logger.d.ts +1 -0
- package/dist/util/logger.d.ts.map +1 -1
- package/dist/util/logger.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,11 +1,71 @@
|
|
|
1
1
|
import { getErrorMeta, } from "../../../util/logger.js";
|
|
2
2
|
import { buildThinkingProviderOptions } from "../../util/llm-config-utils.js";
|
|
3
3
|
import { LLMProviderError } from "../error.js";
|
|
4
|
+
import { getServerCompactionTextBlockUpdate } from "./compaction-text-block.js";
|
|
4
5
|
import { AbortedError, RetriesExhaustedError } from "./errors.js";
|
|
5
6
|
import { IdleMonitor } from "./idle-monitor.js";
|
|
6
7
|
import { createManagedStream } from "./managed-stream.js";
|
|
7
8
|
import { RetryEngine } from "./retry-engine.js";
|
|
8
9
|
import { StreamSession } from "./session.js";
|
|
10
|
+
import { WaitStateTracker } from "./wait-state-tracker.js";
|
|
11
|
+
/**
|
|
12
|
+
* Tracks the in-flight provider attempt for a single execute() call so a
|
|
13
|
+
* superseded attempt can be cut off the instant we decide to retry.
|
|
14
|
+
*
|
|
15
|
+
* Each attempt (the initial stream and every retry) gets its own AbortController
|
|
16
|
+
* chained to the execute-level parent signal. The Vercel AI SDK keeps draining a
|
|
17
|
+
* streamText() result and auto-executing tools regardless of whether we read its
|
|
18
|
+
* fullStream, so abandoning the stream is not enough — the only thing that stops
|
|
19
|
+
* a superseded attempt is aborting its signal. The orchestrator aborts the
|
|
20
|
+
* current attempt at the retry decision, before the backoff delay, so the loser
|
|
21
|
+
* can't race the winner to run terminal tools.
|
|
22
|
+
*/
|
|
23
|
+
class AttemptCoordinator {
|
|
24
|
+
parent;
|
|
25
|
+
current = null;
|
|
26
|
+
parentListener = null;
|
|
27
|
+
constructor(parent) {
|
|
28
|
+
this.parent = parent;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Begin a new attempt. Returns the attempt's abort signal and a predicate that
|
|
32
|
+
* is true only while this attempt is the live one and neither it nor the parent
|
|
33
|
+
* has been aborted. Used to fence tool execution and lifecycle callbacks so a
|
|
34
|
+
* superseded attempt's late, buffered events are ignored.
|
|
35
|
+
*/
|
|
36
|
+
begin() {
|
|
37
|
+
// Drop the superseded attempt's parent listener so they don't accumulate on
|
|
38
|
+
// the session signal for the whole execute() lifetime.
|
|
39
|
+
this.detachParentListener();
|
|
40
|
+
const controller = new AbortController();
|
|
41
|
+
if (this.parent.aborted) {
|
|
42
|
+
controller.abort();
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const onParentAbort = () => controller.abort();
|
|
46
|
+
this.parentListener = onParentAbort;
|
|
47
|
+
this.parent.addEventListener("abort", onParentAbort, { once: true });
|
|
48
|
+
}
|
|
49
|
+
this.current = controller;
|
|
50
|
+
const isCurrent = () => this.current === controller && // still the most-recent begin() call
|
|
51
|
+
!controller.signal.aborted && // not superseded via abortCurrent()
|
|
52
|
+
!this.parent.aborted; // defensive: parent abort also cascades via listener
|
|
53
|
+
return { signal: controller.signal, isCurrent };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Abort the in-flight attempt. Called at the retry decision, before backoff,
|
|
57
|
+
* to close the window where a stale attempt could wake up and execute tools.
|
|
58
|
+
*/
|
|
59
|
+
abortCurrent() {
|
|
60
|
+
this.current?.abort();
|
|
61
|
+
}
|
|
62
|
+
detachParentListener() {
|
|
63
|
+
if (this.parentListener) {
|
|
64
|
+
this.parent.removeEventListener("abort", this.parentListener);
|
|
65
|
+
this.parentListener = null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
9
69
|
/**
|
|
10
70
|
* The main coordinator for stream operations.
|
|
11
71
|
*
|
|
@@ -65,7 +125,11 @@ export class StreamOrchestrator {
|
|
|
65
125
|
applicationId: this.applicationId,
|
|
66
126
|
getJwt: this.getJwt,
|
|
67
127
|
});
|
|
128
|
+
// Start watching before any data flows so that, if the stream stalls, we
|
|
129
|
+
// can say what it was stuck on (the model vs. a local tool or step gap).
|
|
130
|
+
const waitStateTracker = new WaitStateTracker(session);
|
|
68
131
|
const internalAbortController = new AbortController();
|
|
132
|
+
const attempts = new AttemptCoordinator(internalAbortController.signal);
|
|
69
133
|
if (options.abortSignal) {
|
|
70
134
|
options.abortSignal.addEventListener("abort", () => {
|
|
71
135
|
internalAbortController.abort();
|
|
@@ -88,28 +152,36 @@ export class StreamOrchestrator {
|
|
|
88
152
|
internalAbortController.signal.addEventListener("abort", () => {
|
|
89
153
|
void session.events.emit("session:abort", session);
|
|
90
154
|
});
|
|
91
|
-
// Idle monitoring: aborts hung streams that stop sending chunks
|
|
155
|
+
// Idle monitoring: aborts hung streams that stop sending chunks. Budgets
|
|
156
|
+
// are resolved per attempt from the CURRENT model (session.provider.model)
|
|
157
|
+
// so a fallback to a different model is monitored against its own budget,
|
|
158
|
+
// not the initial model's frozen one. See APPS-4775.
|
|
92
159
|
const idleMonitor = new IdleMonitor({
|
|
93
160
|
session,
|
|
94
|
-
maxIdleTimeMs: this.config.retry.idleTimeoutMs,
|
|
95
|
-
firstChunkTimeoutMs: this.config.retry.
|
|
161
|
+
maxIdleTimeMs: () => this.config.retry.budgetForModel(session.provider.model).idleTimeoutMs,
|
|
162
|
+
firstChunkTimeoutMs: () => this.config.retry.budgetForModel(session.provider.model)
|
|
163
|
+
.firstChunkTimeoutMs,
|
|
96
164
|
onServerCompactionStart: (blockId) => {
|
|
165
|
+
// firstChunkTimeoutMs is re-resolved here from the current model rather
|
|
166
|
+
// than read from the armed timer. The model only changes on fallback
|
|
167
|
+
// events (never mid-stream), so at compaction-start time it matches the
|
|
168
|
+
// budget the first-chunk timer was actually armed with.
|
|
97
169
|
this.logger.debug("[orchestrator] Server-side compaction chunk detected; holding first-chunk idle budget", {
|
|
98
170
|
sessionId: session.id,
|
|
99
171
|
provider: session.provider.name,
|
|
100
172
|
model: session.provider.model,
|
|
101
173
|
attempt: session.attempt,
|
|
102
174
|
blockId,
|
|
103
|
-
firstChunkTimeoutMs: this.config.retry.firstChunkTimeoutMs,
|
|
175
|
+
firstChunkTimeoutMs: this.config.retry.budgetForModel(session.provider.model).firstChunkTimeoutMs,
|
|
104
176
|
});
|
|
105
177
|
},
|
|
106
178
|
onStall: (error) => {
|
|
107
179
|
// budgetKind is the keepalive-vs-content discriminator: "first-chunk"
|
|
108
180
|
// means the model never sent content (only silence/keep-alives) before
|
|
109
181
|
// the stall; "inter-chunk" means content was flowing and then stopped.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
182
|
+
// It is carried on the error (set when the timer armed) because budgets
|
|
183
|
+
// are now per-model and can't be re-derived by numeric comparison.
|
|
184
|
+
const budgetKind = error.budgetKind;
|
|
113
185
|
const message = `[orchestrator] Idle timeout exceeded, triggering retry`;
|
|
114
186
|
// Emit as structured attributes (OTel log attributes -> Datadog facets)
|
|
115
187
|
// so stalls are queryable by provider/model/attempt and chartable,
|
|
@@ -118,6 +190,15 @@ export class StreamOrchestrator {
|
|
|
118
190
|
// awaiting-user.ts). budget_ms + budget_kind already capture which idle
|
|
119
191
|
// budget applied and its value, so the static config constants are not
|
|
120
192
|
// re-emitted per stall. See APPS-4643.
|
|
193
|
+
const msSinceLastPull = session.getTimeSinceLastPull();
|
|
194
|
+
// wait_state says what the stall was stuck on: "provider" = the model
|
|
195
|
+
// went silent, "tool" = a local tool was still running (a slow tool,
|
|
196
|
+
// not the model), "step-boundary" = it was between steps.
|
|
197
|
+
// raw_reset_count is how many keep-alive pings arrived during this
|
|
198
|
+
// stretch of silence; a healthy-but-quiet model still pings, so 0 means
|
|
199
|
+
// no pings got through. Pairs with ms_since_last_pull (how recently the
|
|
200
|
+
// reader pulled).
|
|
201
|
+
const waitState = waitStateTracker.getWaitState();
|
|
121
202
|
const attributes = {
|
|
122
203
|
event: "stream_stall",
|
|
123
204
|
session_id: session.id,
|
|
@@ -129,7 +210,20 @@ export class StreamOrchestrator {
|
|
|
129
210
|
budget_ms: error.maxIdleTimeMs,
|
|
130
211
|
elapsed_ms: session.getElapsedMs(),
|
|
131
212
|
chunks_received: session.metrics.chunkCount,
|
|
213
|
+
wait_state: waitState.state,
|
|
214
|
+
raw_reset_count: waitStateTracker.getRawResetCount(),
|
|
132
215
|
};
|
|
216
|
+
if (waitState.state === "tool") {
|
|
217
|
+
attributes.tool_name = waitState.toolName;
|
|
218
|
+
attributes.tool_call_id = waitState.toolCallId;
|
|
219
|
+
attributes.pending_tool_count = waitState.pendingToolCount;
|
|
220
|
+
}
|
|
221
|
+
// Stale pull => the consumer stopped reading (e.g. blocked on an
|
|
222
|
+
// awaited RPC); recent pull + no chunks => the wire went dark. Absence
|
|
223
|
+
// means the consumer never made a productive pull.
|
|
224
|
+
if (msSinceLastPull !== undefined) {
|
|
225
|
+
attributes.ms_since_last_pull = msSinceLastPull;
|
|
226
|
+
}
|
|
133
227
|
// Customer-scoped facets let on-call triage stalls by org/app during an
|
|
134
228
|
// incident; only emitted when the session carries them.
|
|
135
229
|
if (session.organizationId) {
|
|
@@ -146,19 +240,67 @@ export class StreamOrchestrator {
|
|
|
146
240
|
}
|
|
147
241
|
},
|
|
148
242
|
});
|
|
149
|
-
const result = await this.startStreamWithRetry(optionsWithAbort, session, retryEngine);
|
|
243
|
+
const result = await this.startStreamWithRetry(optionsWithAbort, session, retryEngine, attempts);
|
|
150
244
|
// Start monitoring now that the stream is active
|
|
151
245
|
idleMonitor.start();
|
|
152
246
|
// wrapper order matters here. managed stream throws errors (error chunks), retry wrapper catches them.
|
|
153
247
|
// Pass the idle monitor so it can interrupt hung streams.
|
|
154
248
|
const managedStream = createManagedStream(result.fullStream, session, idleMonitor);
|
|
155
|
-
const retryableFullStream = this.wrapWithRetry(managedStream, (r) => createManagedStream(r.fullStream, session, idleMonitor), optionsWithAbort, session, retryEngine, internalAbortController);
|
|
249
|
+
const retryableFullStream = this.wrapWithRetry(managedStream, (r) => createManagedStream(r.fullStream, session, idleMonitor), optionsWithAbort, session, retryEngine, internalAbortController, attempts);
|
|
250
|
+
// `tee()` preserves the public contract that fullStream and textStream can
|
|
251
|
+
// be consumed independently; the slower branch may buffer response chunks.
|
|
252
|
+
const [fullStream, textSourceStream] = retryableFullStream.tee();
|
|
156
253
|
return {
|
|
157
254
|
...result,
|
|
158
|
-
fullStream:
|
|
159
|
-
textStream:
|
|
255
|
+
fullStream: this.asAsyncIterableStream(fullStream),
|
|
256
|
+
textStream: this.textStreamFromFullStream(this.asAsyncIterableStream(textSourceStream)),
|
|
160
257
|
};
|
|
161
258
|
}
|
|
259
|
+
asAsyncIterableStream(stream) {
|
|
260
|
+
const asyncIterableStream = stream;
|
|
261
|
+
if (asyncIterableStream[Symbol.asyncIterator]) {
|
|
262
|
+
return asyncIterableStream;
|
|
263
|
+
}
|
|
264
|
+
return Object.assign(stream, {
|
|
265
|
+
async *[Symbol.asyncIterator]() {
|
|
266
|
+
const reader = stream.getReader();
|
|
267
|
+
try {
|
|
268
|
+
while (true) {
|
|
269
|
+
const result = await reader.read();
|
|
270
|
+
if (result.done) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
yield result.value;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
reader.releaseLock();
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
textStreamFromFullStream(stream) {
|
|
283
|
+
const compactionTextBlockIds = new Set();
|
|
284
|
+
return this.asAsyncIterableStream(stream.pipeThrough(new TransformStream({
|
|
285
|
+
transform(chunk, controller) {
|
|
286
|
+
const compactionBlock = getServerCompactionTextBlockUpdate(chunk);
|
|
287
|
+
if (compactionBlock.kind === "start") {
|
|
288
|
+
compactionTextBlockIds.add(compactionBlock.id);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (compactionBlock.kind === "part" &&
|
|
292
|
+
compactionTextBlockIds.has(compactionBlock.id)) {
|
|
293
|
+
if (compactionBlock.done) {
|
|
294
|
+
compactionTextBlockIds.delete(compactionBlock.id);
|
|
295
|
+
}
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (chunk.type === "text-delta") {
|
|
299
|
+
controller.enqueue(chunk.text);
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
})));
|
|
303
|
+
}
|
|
162
304
|
/**
|
|
163
305
|
* Wraps a fullStream with retry logic. When an error occurs (either thrown or
|
|
164
306
|
* as an error chunk), makes a retry decision and either creates a new stream
|
|
@@ -168,7 +310,7 @@ export class StreamOrchestrator {
|
|
|
168
310
|
* retries will silently fail (the new stream will close immediately because
|
|
169
311
|
* session.isPending() returns false).
|
|
170
312
|
*/
|
|
171
|
-
wrapWithRetry(initialStream, getNewStream, options, session, retryEngine, abortController) {
|
|
313
|
+
wrapWithRetry(initialStream, getNewStream, options, session, retryEngine, abortController, attempts) {
|
|
172
314
|
const handleRetry = this.handleRetryDecision.bind(this);
|
|
173
315
|
let currentStream = initialStream;
|
|
174
316
|
async function* createRetryIterator() {
|
|
@@ -184,7 +326,7 @@ export class StreamOrchestrator {
|
|
|
184
326
|
return;
|
|
185
327
|
}
|
|
186
328
|
catch (error) {
|
|
187
|
-
const retryResult = await handleRetry(error, options, session, retryEngine);
|
|
329
|
+
const retryResult = await handleRetry(error, options, session, retryEngine, attempts);
|
|
188
330
|
if (!retryResult.shouldRetry) {
|
|
189
331
|
// abort the internal signal so any in-flight stream processing stops.
|
|
190
332
|
// without this, tools keep getting called in the background since the stream is not closed.
|
|
@@ -221,7 +363,7 @@ export class StreamOrchestrator {
|
|
|
221
363
|
* Handle an error by making a retry decision. Returns either a new result to continue
|
|
222
364
|
* with, or the final error to throw.
|
|
223
365
|
*/
|
|
224
|
-
async handleRetryDecision(error, options, session, retryEngine) {
|
|
366
|
+
async handleRetryDecision(error, options, session, retryEngine, attempts) {
|
|
225
367
|
const decision = retryEngine.getRetryDecision(error, session, options.abortSignal);
|
|
226
368
|
if (!decision.shouldRetry) {
|
|
227
369
|
this.logger.warn(`[orchestrator] Not retrying: reason=${decision.reason}`, getErrorMeta(error));
|
|
@@ -231,23 +373,23 @@ export class StreamOrchestrator {
|
|
|
231
373
|
error: this.wrapFinalError(error, decision.reason ?? "unknown", session),
|
|
232
374
|
};
|
|
233
375
|
}
|
|
376
|
+
// Supersede the failed attempt now, before the backoff delay, so its
|
|
377
|
+
// abandoned stream can't keep executing tools while we wait to retry.
|
|
378
|
+
attempts.abortCurrent();
|
|
234
379
|
await session.events.emit("retry", error, session.attempt, decision.delayMs, session);
|
|
235
380
|
if (decision.newProvider) {
|
|
236
|
-
|
|
237
|
-
session.provider = decision.newProvider;
|
|
238
|
-
this.logger.warn(`[orchestrator] Switching provider: ${oldProvider.name}/${oldProvider.model} -> ${decision.newProvider.name}/${decision.newProvider.model}`, getErrorMeta(error));
|
|
239
|
-
await session.events.emit("fallback", oldProvider, decision.newProvider, this.getFallbackReason(error), session);
|
|
381
|
+
await this.switchProvider(session, decision.newProvider, decision.fastFallback === true, error);
|
|
240
382
|
}
|
|
241
383
|
session.recordRetry(decision.delayMs);
|
|
242
384
|
this.logger.warn(`[orchestrator] Retrying in ${decision.delayMs}ms (attempt ${session.attempt})`, getErrorMeta(error));
|
|
243
385
|
await this.delay(decision.delayMs, options.abortSignal);
|
|
244
|
-
const newResult = await this.startStreamWithRetry(options, session, retryEngine);
|
|
386
|
+
const newResult = await this.startStreamWithRetry(options, session, retryEngine, attempts);
|
|
245
387
|
return { shouldRetry: true, newResult };
|
|
246
388
|
}
|
|
247
|
-
async startStreamWithRetry(options, session, retryEngine) {
|
|
389
|
+
async startStreamWithRetry(options, session, retryEngine, attempts) {
|
|
248
390
|
while (true) {
|
|
249
391
|
try {
|
|
250
|
-
return await this.startStream(options, session);
|
|
392
|
+
return await this.startStream(options, session, attempts);
|
|
251
393
|
}
|
|
252
394
|
catch (error) {
|
|
253
395
|
const decision = retryEngine.getRetryDecision(error, session, options.abortSignal);
|
|
@@ -262,12 +404,11 @@ export class StreamOrchestrator {
|
|
|
262
404
|
await session.events.emit("session:error", error, session);
|
|
263
405
|
throw this.wrapFinalError(error, decision.reason ?? "unknown", session);
|
|
264
406
|
}
|
|
407
|
+
// Supersede the failed attempt before backoff.
|
|
408
|
+
attempts.abortCurrent();
|
|
265
409
|
await session.events.emit("retry", error, session.attempt, decision.delayMs, session);
|
|
266
410
|
if (decision.newProvider) {
|
|
267
|
-
|
|
268
|
-
session.provider = decision.newProvider;
|
|
269
|
-
this.logger.warn(`[orchestrator] Switching provider: ${oldProvider.name}/${oldProvider.model} -> ${decision.newProvider.name}/${decision.newProvider.model}`, getErrorMeta(error));
|
|
270
|
-
await session.events.emit("fallback", oldProvider, decision.newProvider, this.getFallbackReason(error), session);
|
|
411
|
+
await this.switchProvider(session, decision.newProvider, decision.fastFallback === true, error);
|
|
271
412
|
}
|
|
272
413
|
session.recordRetry(decision.delayMs);
|
|
273
414
|
this.logger.info(`[orchestrator] Startup retry in ${decision.delayMs}ms (attempt ${session.attempt})`);
|
|
@@ -293,15 +434,27 @@ export class StreamOrchestrator {
|
|
|
293
434
|
cause: error,
|
|
294
435
|
});
|
|
295
436
|
}
|
|
296
|
-
async startStream(options, session) {
|
|
437
|
+
async startStream(options, session, attempts) {
|
|
297
438
|
if (options.abortSignal?.aborted) {
|
|
298
439
|
throw new AbortedError();
|
|
299
440
|
}
|
|
300
441
|
const providerOptions = this.applyProvider(options, session.provider, session);
|
|
301
442
|
this.logger.debug(`[orchestrator] Attempt ${session.attempt} with provider=${session.provider.name} model=${session.provider.model}`);
|
|
443
|
+
// Each attempt runs on its own abort signal so a superseded attempt can be
|
|
444
|
+
// aborted without killing the winning one. `isCurrent` fences tool execution
|
|
445
|
+
// and lifecycle callbacks: the Vercel AI SDK can still deliver buffered tool
|
|
446
|
+
// calls and callbacks from a superseded attempt after abort (abort is
|
|
447
|
+
// cooperative), so the live-attempt check is what prevents duplicate tool
|
|
448
|
+
// execution and duplicate finish events.
|
|
449
|
+
const { signal, isCurrent } = attempts.begin();
|
|
302
450
|
return this.provider.streamText({
|
|
303
451
|
...providerOptions,
|
|
452
|
+
abortSignal: signal,
|
|
453
|
+
tools: this.guardToolsForAttempt(providerOptions.tools, isCurrent),
|
|
304
454
|
prepareStep: async (step) => {
|
|
455
|
+
if (!isCurrent()) {
|
|
456
|
+
throw new AbortedError();
|
|
457
|
+
}
|
|
305
458
|
const preparedStep = (await options.prepareStep?.(step)) ?? step;
|
|
306
459
|
await session.events.emit("step:start", {
|
|
307
460
|
stepNumber: preparedStep.stepNumber,
|
|
@@ -310,17 +463,61 @@ export class StreamOrchestrator {
|
|
|
310
463
|
return preparedStep;
|
|
311
464
|
},
|
|
312
465
|
onStepFinish: async (step) => {
|
|
466
|
+
if (!isCurrent()) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
313
469
|
await session.events.emit("step:finish", step, session);
|
|
314
470
|
await options.onStepFinish?.(step);
|
|
315
471
|
},
|
|
316
472
|
onFinish: async (finalResult) => {
|
|
473
|
+
if (!isCurrent()) {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
317
476
|
session.setTotalTokens(finalResult.totalUsage?.totalTokens ?? 0);
|
|
318
477
|
await session.events.emit("stream:finish", finalResult, session);
|
|
319
478
|
return options.onFinish?.(finalResult);
|
|
320
479
|
},
|
|
321
|
-
onChunk:
|
|
480
|
+
onChunk: (event) => {
|
|
481
|
+
if (!isCurrent()) {
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
return options.onChunk?.(event);
|
|
485
|
+
},
|
|
322
486
|
});
|
|
323
487
|
}
|
|
488
|
+
/**
|
|
489
|
+
* Wraps each tool's execute so only the live attempt can run it. The Vercel AI
|
|
490
|
+
* SDK auto-executes tools as their calls arrive on the provider stream, and a
|
|
491
|
+
* superseded attempt's stream can still deliver buffered tool calls after we
|
|
492
|
+
* abort it. Throwing AbortedError here ensures a terminal tool's real side
|
|
493
|
+
* effect (e.g. build_finalize) runs once, for the winning attempt only.
|
|
494
|
+
*/
|
|
495
|
+
guardToolsForAttempt(tools, isCurrent) {
|
|
496
|
+
if (!tools) {
|
|
497
|
+
return tools;
|
|
498
|
+
}
|
|
499
|
+
const guarded = {};
|
|
500
|
+
for (const [name, tool] of Object.entries(tools)) {
|
|
501
|
+
if (typeof tool?.execute !== "function") {
|
|
502
|
+
guarded[name] = tool;
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
const execute = tool.execute.bind(tool);
|
|
506
|
+
guarded[name] = {
|
|
507
|
+
...tool,
|
|
508
|
+
execute: async (input, executeOptions) => {
|
|
509
|
+
if (!isCurrent()) {
|
|
510
|
+
throw new AbortedError();
|
|
511
|
+
}
|
|
512
|
+
return execute(input, executeOptions);
|
|
513
|
+
},
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
// Each entry preserves the original tool (`...tool`) and only wraps
|
|
517
|
+
// `execute`, so the runtime shape still matches TOOLS; signal the deliberate
|
|
518
|
+
// widening so a reviewer doesn't read this as a checked narrowing.
|
|
519
|
+
return guarded;
|
|
520
|
+
}
|
|
324
521
|
applyProvider(options, provider, session) {
|
|
325
522
|
const baseOptions = this.config.fallback.enabled
|
|
326
523
|
? {
|
|
@@ -344,9 +541,22 @@ export class StreamOrchestrator {
|
|
|
344
541
|
const thinkingRebuilt = this.rebuildThinkingOptions(baseOptions, provider);
|
|
345
542
|
return {
|
|
346
543
|
...thinkingRebuilt,
|
|
544
|
+
// `thinkingRebuilt.headers` is already authoritative for the
|
|
545
|
+
// interleaved-thinking beta header. Don't re-merge `options.headers`
|
|
546
|
+
// here or a disabled/adaptive rebuild would re-introduce the stale beta.
|
|
347
547
|
headers: {
|
|
348
|
-
...options.headers,
|
|
349
548
|
...thinkingRebuilt.headers,
|
|
549
|
+
// Stamp the per-attempt stream identity so the server proxy can join
|
|
550
|
+
// its egress frame counts to this stream's client-side stream_stall
|
|
551
|
+
// event. The value is the same session.id the stall event logs as
|
|
552
|
+
// `session_id`; the proxy logs it as `stream_id` (the server log
|
|
553
|
+
// pipeline redacts any field whose name contains "session", so the
|
|
554
|
+
// proxy cannot reuse the `session_id` name). That join is what lets a
|
|
555
|
+
// sampled stall be decided as upstream-silent (proxy wrote nothing) vs
|
|
556
|
+
// proxy->client drop (proxy wrote frames the client never saw). Rides
|
|
557
|
+
// the existing x-superblocks-* header path.
|
|
558
|
+
"x-superblocks-stream-id": session.id,
|
|
559
|
+
"x-superblocks-stream-attempt": String(session.attempt),
|
|
350
560
|
},
|
|
351
561
|
providerOptions: {
|
|
352
562
|
...thinkingRebuilt.providerOptions,
|
|
@@ -380,6 +590,11 @@ export class StreamOrchestrator {
|
|
|
380
590
|
const existingBedrockFields = existingBedrock.additionalModelRequestFields ?? {};
|
|
381
591
|
const { thinking: _a, effort: _b, ...anthropicRest } = existingAnthropic;
|
|
382
592
|
const { thinking: _c, output_config: _d, anthropic_beta: _e, budget_tokens: _f, ...bedrockFieldsRest } = existingBedrockFields;
|
|
593
|
+
// `buildThinkingProviderOptions` is the sole source of the
|
|
594
|
+
// interleaved-thinking `anthropic-beta` HTTP header. Strip any stale value
|
|
595
|
+
// before applying the fresh headers so a disabled or adaptive-effort
|
|
596
|
+
// rebuild (both emit no header) stops advertising the beta.
|
|
597
|
+
const { "anthropic-beta": _staleBeta, ...headersWithoutThinkingBeta } = options.headers ?? {};
|
|
383
598
|
const anthropic = fresh.anthropic
|
|
384
599
|
? { ...anthropicRest, ...fresh.anthropic }
|
|
385
600
|
: anthropicRest;
|
|
@@ -399,7 +614,7 @@ export class StreamOrchestrator {
|
|
|
399
614
|
: { ...existingBedrock, additionalModelRequestFields: {} };
|
|
400
615
|
return {
|
|
401
616
|
...options,
|
|
402
|
-
headers: { ...
|
|
617
|
+
headers: { ...headersWithoutThinkingBeta, ...fresh.headers },
|
|
403
618
|
providerOptions: {
|
|
404
619
|
...existing,
|
|
405
620
|
anthropic: anthropic,
|
|
@@ -415,6 +630,39 @@ export class StreamOrchestrator {
|
|
|
415
630
|
}
|
|
416
631
|
return "error";
|
|
417
632
|
}
|
|
633
|
+
/**
|
|
634
|
+
* Switch the session to a fallback provider, emit the structured switch log,
|
|
635
|
+
* and fire the "fallback" event. `fastFallback` distinguishes the stall
|
|
636
|
+
* fast-fallback path (a stall left the provider early) from a normal
|
|
637
|
+
* provider-exhaustion fallback, surfaced as a queryable Datadog facet so the
|
|
638
|
+
* fast-fallback behavior is verifiable in production. Error context for the
|
|
639
|
+
* triggering error is carried by the retry log that follows this call.
|
|
640
|
+
*/
|
|
641
|
+
async switchProvider(session, newProvider, fastFallback, error) {
|
|
642
|
+
const oldProvider = session.provider;
|
|
643
|
+
session.provider = newProvider;
|
|
644
|
+
const message = `[orchestrator] Switching provider: ${oldProvider.name}/${oldProvider.model} -> ` +
|
|
645
|
+
`${newProvider.name}/${newProvider.model}` +
|
|
646
|
+
(fastFallback ? " (stall fast-fallback)" : "");
|
|
647
|
+
const attributes = {
|
|
648
|
+
event: "provider_fallback",
|
|
649
|
+
session_id: session.id,
|
|
650
|
+
from_provider: oldProvider.name,
|
|
651
|
+
from_model: oldProvider.model,
|
|
652
|
+
to_provider: newProvider.name,
|
|
653
|
+
to_model: newProvider.model,
|
|
654
|
+
attempt: session.attempt,
|
|
655
|
+
fast_fallback: fastFallback,
|
|
656
|
+
error_kind: error instanceof Error ? error.name : "unknown",
|
|
657
|
+
};
|
|
658
|
+
if (this.logger.warnStructured) {
|
|
659
|
+
this.logger.warnStructured(message, attributes);
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
this.logger.warn(message, attributes);
|
|
663
|
+
}
|
|
664
|
+
await session.events.emit("fallback", oldProvider, newProvider, this.getFallbackReason(error), session);
|
|
665
|
+
}
|
|
418
666
|
delay(ms, abortSignal) {
|
|
419
667
|
return new Promise((resolve) => {
|
|
420
668
|
if (abortSignal?.aborted) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,13 @@ export interface RetryDecision {
|
|
|
9
9
|
shouldRetry: boolean;
|
|
10
10
|
delayMs: number;
|
|
11
11
|
newProvider?: ProviderInfo;
|
|
12
|
+
/**
|
|
13
|
+
* True when this fallback was taken via the stall fast-fallback path (a stall
|
|
14
|
+
* left the provider immediately instead of spending its remaining per-provider
|
|
15
|
+
* attempts). Surfaced so the orchestrator can tag the switch in structured
|
|
16
|
+
* logs, making the fast-fallback path queryable in production.
|
|
17
|
+
*/
|
|
18
|
+
fastFallback?: boolean;
|
|
12
19
|
reason?: "non-retryable" | "max-attempts" | "max-time" | "aborted" | "auth_error" | "not_found" | "rate_limit" | "api_error";
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
@@ -50,6 +57,14 @@ export declare class RetryEngine {
|
|
|
50
57
|
private isRetryErrorLike;
|
|
51
58
|
private calculateDelay;
|
|
52
59
|
private advanceFallback;
|
|
60
|
+
/**
|
|
61
|
+
* Peek the next fallback-chain entry without advancing. Returns undefined when
|
|
62
|
+
* fallback is disabled or the chain is exhausted. Used to decide whether a
|
|
63
|
+
* stall should leave the current provider (next entry is a different
|
|
64
|
+
* provider) before consuming the chain. See APPS-4775.
|
|
65
|
+
*/
|
|
66
|
+
private peekNextProvider;
|
|
67
|
+
private isStallTimeout;
|
|
53
68
|
/**
|
|
54
69
|
* Build the fallback chain based on initial provider/model and strategy.
|
|
55
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-engine.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/retry-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"retry-engine.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/retry-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EACH,eAAe,GACf,cAAc,GACd,UAAU,GACV,SAAS,GACT,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,WAAW,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,aAAa,CAAK;gBAEd,MAAM,EAAE,YAAY;IAKhC,OAAO,CAAC,yBAAyB;IAkBjC,gBAAgB,CACd,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,aAAa,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,aAAa;IAwGhB,kBAAkB,IAAI,YAAY;IAWlC,aAAa,IAAI,IAAI;IAIrB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAepC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,eAAe;IAcvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,cAAc;IAItB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,kBAAkB;CAyF3B"}
|