@superblocksteam/vite-plugin-file-sync 2.0.70 → 2.0.71-next.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/ai-service/agent/prompts/build-base-system-prompt.js +1 -1
- package/dist/ai-service/agent/subagents/types.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/types.js +1 -0
- package/dist/ai-service/agent/subagents/types.js.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +5 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js +2 -1
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/sample-json.d.ts +2 -0
- package/dist/ai-service/agent/tools/apis/sample-json.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/sample-json.js +16 -0
- package/dist/ai-service/agent/tools/apis/sample-json.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +4 -4
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/test-api.js +16 -5
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts +35 -0
- package/dist/ai-service/agent/tools/build-capture-screenshot.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-capture-screenshot.js +90 -15
- package/dist/ai-service/agent/tools/build-capture-screenshot.js.map +1 -1
- package/dist/ai-service/agent/tools/build-validate-icons.d.ts +3 -18
- package/dist/ai-service/agent/tools/build-validate-icons.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/build-validate-icons.js +12 -50
- package/dist/ai-service/agent/tools/build-validate-icons.js.map +1 -1
- package/dist/ai-service/agent/tools/debug-cache.js.map +1 -1
- package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +1 -1
- package/dist/ai-service/agent/tools/shared-helpers.d.ts +0 -35
- package/dist/ai-service/agent/tools/shared-helpers.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/shared-helpers.js +0 -89
- package/dist/ai-service/agent/tools/shared-helpers.js.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts +1 -23
- package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.js +3 -68
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/registry.js +16 -5
- package/dist/ai-service/agent/tools2/registry.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/bash.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/bash.js +2 -1
- package/dist/ai-service/agent/tools2/tools/bash.js.map +1 -1
- 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 +10 -2
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep.js +2 -1
- package/dist/ai-service/agent/tools2/tools/grep.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ls.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/ls.js +3 -1
- package/dist/ai-service/agent/tools2/tools/ls.js.map +1 -1
- package/dist/ai-service/agent/tools2/types.d.ts +2 -1
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js +31 -11
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +5 -10
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/clark-provider/clark-chat-settings.d.ts +2 -1
- package/dist/ai-service/clark-provider/clark-chat-settings.d.ts.map +1 -1
- package/dist/ai-service/clark-provider/clark-chat-settings.js +1 -0
- package/dist/ai-service/clark-provider/clark-chat-settings.js.map +1 -1
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +7 -4
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/store.d.ts +1 -0
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +1 -0
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/llm/client.d.ts +14 -117
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +57 -149
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/error.d.ts +7 -2
- package/dist/ai-service/llm/error.d.ts.map +1 -1
- package/dist/ai-service/llm/error.js +17 -17
- package/dist/ai-service/llm/error.js.map +1 -1
- package/dist/ai-service/llm/impl/anthropic.d.ts.map +1 -1
- package/dist/ai-service/llm/impl/anthropic.js +2 -1
- package/dist/ai-service/llm/impl/anthropic.js.map +1 -1
- package/dist/ai-service/llm/impl/clark.d.ts.map +1 -1
- package/dist/ai-service/llm/impl/clark.js +2 -1
- package/dist/ai-service/llm/impl/clark.js.map +1 -1
- package/dist/ai-service/llm/interaction/index.d.ts +0 -64
- package/dist/ai-service/llm/interaction/index.d.ts.map +1 -1
- package/dist/ai-service/llm/interaction/index.js +0 -65
- package/dist/ai-service/llm/interaction/index.js.map +1 -1
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +2 -6
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llm/stream/config.d.ts +56 -0
- package/dist/ai-service/llm/stream/config.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/config.js +41 -0
- package/dist/ai-service/llm/stream/config.js.map +1 -0
- package/dist/ai-service/llm/stream/errors.d.ts +16 -0
- package/dist/ai-service/llm/stream/errors.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/errors.js +68 -0
- package/dist/ai-service/llm/stream/errors.js.map +1 -0
- package/dist/ai-service/llm/stream/event-bus.d.ts +68 -0
- package/dist/ai-service/llm/stream/event-bus.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/event-bus.js +51 -0
- package/dist/ai-service/llm/stream/event-bus.js.map +1 -0
- package/dist/ai-service/llm/stream/index.d.ts +49 -0
- package/dist/ai-service/llm/stream/index.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/index.js +46 -0
- package/dist/ai-service/llm/stream/index.js.map +1 -0
- package/dist/ai-service/llm/stream/managed-stream.d.ts +25 -0
- package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/managed-stream.js +68 -0
- package/dist/ai-service/llm/stream/managed-stream.js.map +1 -0
- package/dist/ai-service/llm/stream/observer.d.ts +34 -0
- package/dist/ai-service/llm/stream/observer.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/observer.js +2 -0
- package/dist/ai-service/llm/stream/observer.js.map +1 -0
- package/dist/ai-service/llm/stream/observers/context.d.ts +40 -0
- package/dist/ai-service/llm/stream/observers/context.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/observers/context.js +55 -0
- package/dist/ai-service/llm/stream/observers/context.js.map +1 -0
- package/dist/ai-service/llm/stream/observers/index.d.ts +8 -0
- package/dist/ai-service/llm/stream/observers/index.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/observers/index.js +8 -0
- package/dist/ai-service/llm/stream/observers/index.js.map +1 -0
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts +78 -0
- package/dist/ai-service/llm/stream/observers/llmobs.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/observers/llmobs.js +504 -0
- package/dist/ai-service/llm/stream/observers/llmobs.js.map +1 -0
- package/dist/ai-service/llm/stream/observers/logging.d.ts +46 -0
- package/dist/ai-service/llm/stream/observers/logging.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/observers/logging.js +296 -0
- package/dist/ai-service/llm/stream/observers/logging.js.map +1 -0
- package/dist/ai-service/llm/stream/observers/retry-notification.d.ts +17 -0
- package/dist/ai-service/llm/stream/observers/retry-notification.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/observers/retry-notification.js +36 -0
- package/dist/ai-service/llm/stream/observers/retry-notification.js.map +1 -0
- package/dist/ai-service/llm/stream/orchestrator.d.ts +73 -0
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/orchestrator.js +285 -0
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -0
- package/dist/ai-service/llm/stream/retry-engine.d.ts +58 -0
- package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/retry-engine.js +151 -0
- package/dist/ai-service/llm/stream/retry-engine.js.map +1 -0
- package/dist/ai-service/llm/stream/session.d.ts +58 -0
- package/dist/ai-service/llm/stream/session.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/session.js +116 -0
- package/dist/ai-service/llm/stream/session.js.map +1 -0
- package/dist/ai-service/llm/stream/tests/helpers/mock-provider.d.ts +129 -0
- package/dist/ai-service/llm/stream/tests/helpers/mock-provider.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/tests/helpers/mock-provider.js +508 -0
- package/dist/ai-service/llm/stream/tests/helpers/mock-provider.js.map +1 -0
- package/dist/ai-service/llm/stream/types.d.ts +15 -0
- package/dist/ai-service/llm/stream/types.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/types.js +2 -0
- package/dist/ai-service/llm/stream/types.js.map +1 -0
- package/dist/ai-service/llm/types.d.ts +1 -1
- package/dist/ai-service/llm/types.d.ts.map +1 -1
- package/dist/ai-service/llmobs/helpers.d.ts +0 -19
- package/dist/ai-service/llmobs/helpers.d.ts.map +1 -1
- package/dist/ai-service/llmobs/helpers.js +0 -23
- package/dist/ai-service/llmobs/helpers.js.map +1 -1
- package/dist/ai-service/llmobs/tracer.d.ts +1 -0
- package/dist/ai-service/llmobs/tracer.d.ts.map +1 -1
- package/dist/ai-service/llmobs/tracer.js +1 -0
- package/dist/ai-service/llmobs/tracer.js.map +1 -1
- package/dist/ai-service/llmobs/types.d.ts +2 -0
- package/dist/ai-service/llmobs/types.d.ts.map +1 -1
- package/dist/ai-service/llmobs/utils.d.ts.map +1 -1
- package/dist/ai-service/llmobs/utils.js +8 -0
- package/dist/ai-service/llmobs/utils.js.map +1 -1
- package/dist/ai-service/mcp/playwright-server.d.ts.map +1 -1
- package/dist/ai-service/mcp/playwright-server.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +1 -3
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +6 -28
- 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 +9 -11
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/awaiting-user.js +3 -2
- package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +18 -4
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/traced-fsm.d.ts +5 -4
- package/dist/ai-service/state-machine/traced-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/traced-fsm.js +25 -25
- package/dist/ai-service/state-machine/traced-fsm.js.map +1 -1
- package/dist/ai-service/types.d.ts +3 -3
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/ai-service/types.js +10 -10
- package/dist/ai-service/types.js.map +1 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +10 -3
- package/dist/socket-manager.js.map +1 -1
- package/dist/source-tracker.d.ts.map +1 -1
- package/dist/source-tracker.js +8 -0
- package/dist/source-tracker.js.map +1 -1
- package/dist/sync-service/index.d.ts +7 -2
- package/dist/sync-service/index.d.ts.map +1 -1
- package/dist/sync-service/index.js +16 -9
- package/dist/sync-service/index.js.map +1 -1
- package/package.json +11 -11
- package/dist/ai-service/llm/interaction/compose.d.ts +0 -71
- package/dist/ai-service/llm/interaction/compose.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/compose.js +0 -88
- package/dist/ai-service/llm/interaction/compose.js.map +0 -1
- package/dist/ai-service/llm/interaction/middleware.d.ts +0 -52
- package/dist/ai-service/llm/interaction/middleware.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middleware.js +0 -17
- package/dist/ai-service/llm/interaction/middleware.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/llmobs.d.ts +0 -45
- package/dist/ai-service/llm/interaction/middlewares/llmobs.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/llmobs.js +0 -85
- package/dist/ai-service/llm/interaction/middlewares/llmobs.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/logging.d.ts +0 -88
- package/dist/ai-service/llm/interaction/middlewares/logging.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/logging.js +0 -238
- package/dist/ai-service/llm/interaction/middlewares/logging.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/profiler.d.ts +0 -47
- package/dist/ai-service/llm/interaction/middlewares/profiler.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/profiler.js +0 -183
- package/dist/ai-service/llm/interaction/middlewares/profiler.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.d.ts +0 -115
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.js +0 -231
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/abort.d.ts +0 -41
- package/dist/ai-service/llm/interaction/middlewares/utils/abort.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/abort.js +0 -74
- package/dist/ai-service/llm/interaction/middlewares/utils/abort.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/fallback-chain.d.ts +0 -61
- package/dist/ai-service/llm/interaction/middlewares/utils/fallback-chain.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/fallback-chain.js +0 -116
- package/dist/ai-service/llm/interaction/middlewares/utils/fallback-chain.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/retries.d.ts +0 -47
- package/dist/ai-service/llm/interaction/middlewares/utils/retries.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/retries.js +0 -141
- package/dist/ai-service/llm/interaction/middlewares/utils/retries.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/stall-detector.d.ts +0 -30
- package/dist/ai-service/llm/interaction/middlewares/utils/stall-detector.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/stall-detector.js +0 -36
- package/dist/ai-service/llm/interaction/middlewares/utils/stall-detector.js.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/streams.d.ts +0 -42
- package/dist/ai-service/llm/interaction/middlewares/utils/streams.d.ts.map +0 -1
- package/dist/ai-service/llm/interaction/middlewares/utils/streams.js +0 -208
- package/dist/ai-service/llm/interaction/middlewares/utils/streams.js.map +0 -1
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts +0 -56
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +0 -1
- package/dist/ai-service/llmobs/middleware/stream-text.js +0 -597
- package/dist/ai-service/llmobs/middleware/stream-text.js.map +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe event bus for stream lifecycle events.
|
|
3
|
+
*
|
|
4
|
+
* Observers subscribe to specific events and receive typed arguments.
|
|
5
|
+
* Handlers are called in parallel, and errors in one handler don't affect others.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const events = new StreamEventBus();
|
|
10
|
+
*
|
|
11
|
+
* // Subscribe to events
|
|
12
|
+
* const unsubscribe = events.on("chunk", (chunk, session) => {
|
|
13
|
+
* console.log(`Received chunk: ${chunk.type}`);
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // Emit events
|
|
17
|
+
* await events.emit("chunk", myChunk, mySession);
|
|
18
|
+
*
|
|
19
|
+
* // Unsubscribe when done
|
|
20
|
+
* unsubscribe();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export class StreamEventBus {
|
|
24
|
+
listeners = new Map();
|
|
25
|
+
on(event, handler) {
|
|
26
|
+
let handlers = this.listeners.get(event);
|
|
27
|
+
if (!handlers) {
|
|
28
|
+
handlers = new Set();
|
|
29
|
+
this.listeners.set(event, handlers);
|
|
30
|
+
}
|
|
31
|
+
handlers.add(handler);
|
|
32
|
+
return () => {
|
|
33
|
+
handlers?.delete(handler);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async emit(event, ...args) {
|
|
37
|
+
const handlers = this.listeners.get(event);
|
|
38
|
+
if (!handlers || handlers.size === 0)
|
|
39
|
+
return;
|
|
40
|
+
const results = await Promise.allSettled([...handlers].map(async (handler) => handler(...args)));
|
|
41
|
+
for (const result of results) {
|
|
42
|
+
if (result.status === "rejected") {
|
|
43
|
+
console.error(`Observer error on "${event}" event:`, result.reason);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
clear() {
|
|
48
|
+
this.listeners.clear();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=event-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/event-bus.ts"],"names":[],"mappings":"AAiDA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,cAAc;IACR,SAAS,GAAG,IAAI,GAAG,EAGjC,CAAC;IAEJ,EAAE,CACA,KAAQ,EACR,OAA8B;QAE9B,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEtB,OAAO,GAAG,EAAE;YACV,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAQ,EACR,GAAG,IAAqB;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CACvD,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,CAAC,sBAAsB,KAAK,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handling LLM streaming operations.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import {
|
|
7
|
+
* StreamOrchestrator,
|
|
8
|
+
* StreamConfig,
|
|
9
|
+
* LoggingObserver,
|
|
10
|
+
* LLMObsObserver,
|
|
11
|
+
* } from "./stream/index.js";
|
|
12
|
+
*
|
|
13
|
+
* // Create configuration
|
|
14
|
+
* const config = StreamConfig.create({
|
|
15
|
+
* retry: { maxAttempts: 3, stallTimeoutMs: 60_000 },
|
|
16
|
+
* fallback: { enabled: true, initialProvider: "vertex" },
|
|
17
|
+
* logging: { enabled: true, conversationId: "abc" },
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Create orchestrator with observers
|
|
21
|
+
* const orchestrator = new StreamOrchestrator({
|
|
22
|
+
* provider: createVercelProvider(),
|
|
23
|
+
* config,
|
|
24
|
+
* observers: [
|
|
25
|
+
* new LoggingObserver(),
|
|
26
|
+
* new LLMObsObserver({ tracer, logger }),
|
|
27
|
+
* ],
|
|
28
|
+
* logger,
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* // Execute stream with full lifecycle management
|
|
32
|
+
* const result = await orchestrator.execute({
|
|
33
|
+
* model,
|
|
34
|
+
* messages,
|
|
35
|
+
* tools,
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* for await (const chunk of result.fullStream) {
|
|
39
|
+
* console.log(chunk);
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export { StreamConfig } from "./config.js";
|
|
44
|
+
export type { RetryConfigOptions, ProviderType, CoreModelType, } from "./config.js";
|
|
45
|
+
export type { StreamObserver } from "./observer.js";
|
|
46
|
+
export { StreamOrchestrator } from "./orchestrator.js";
|
|
47
|
+
export { LoggingObserver, LLMObsObserver, ContextObserver, RetryNotificationObserver, wrapToolsForObservability, } from "./observers/index.js";
|
|
48
|
+
export type { LogRef } from "./observers/index.js";
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handling LLM streaming operations.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import {
|
|
7
|
+
* StreamOrchestrator,
|
|
8
|
+
* StreamConfig,
|
|
9
|
+
* LoggingObserver,
|
|
10
|
+
* LLMObsObserver,
|
|
11
|
+
* } from "./stream/index.js";
|
|
12
|
+
*
|
|
13
|
+
* // Create configuration
|
|
14
|
+
* const config = StreamConfig.create({
|
|
15
|
+
* retry: { maxAttempts: 3, stallTimeoutMs: 60_000 },
|
|
16
|
+
* fallback: { enabled: true, initialProvider: "vertex" },
|
|
17
|
+
* logging: { enabled: true, conversationId: "abc" },
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Create orchestrator with observers
|
|
21
|
+
* const orchestrator = new StreamOrchestrator({
|
|
22
|
+
* provider: createVercelProvider(),
|
|
23
|
+
* config,
|
|
24
|
+
* observers: [
|
|
25
|
+
* new LoggingObserver(),
|
|
26
|
+
* new LLMObsObserver({ tracer, logger }),
|
|
27
|
+
* ],
|
|
28
|
+
* logger,
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* // Execute stream with full lifecycle management
|
|
32
|
+
* const result = await orchestrator.execute({
|
|
33
|
+
* model,
|
|
34
|
+
* messages,
|
|
35
|
+
* tools,
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* for await (const chunk of result.fullStream) {
|
|
39
|
+
* console.log(chunk);
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export { StreamConfig } from "./config.js";
|
|
44
|
+
export { StreamOrchestrator } from "./orchestrator.js";
|
|
45
|
+
export { LoggingObserver, LLMObsObserver, ContextObserver, RetryNotificationObserver, wrapToolsForObservability, } from "./observers/index.js";
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAS3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { StreamSession } from "./session.js";
|
|
2
|
+
import type { Tool } from "../../agent/tools2/types.js";
|
|
3
|
+
import type { AsyncIterableStream, TextStreamPart } from "ai";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a managed stream that wraps the source stream with lifecycle management.
|
|
6
|
+
*
|
|
7
|
+
* The managed stream:
|
|
8
|
+
* - Emits "chunk" events for each chunk
|
|
9
|
+
* - Throws errors from error chunks
|
|
10
|
+
* - Finalizes the session on complete or cancel (but NOT on error - see below)
|
|
11
|
+
*
|
|
12
|
+
* IMPORTANT: This stream intentionally does NOT finalize the session on errors.
|
|
13
|
+
* If you call session.finalize("error") here, the session becomes non-pending,
|
|
14
|
+
* which means new managed streams created during retry will immediately close
|
|
15
|
+
* (see the `!session.isPending()` check in pull).
|
|
16
|
+
*
|
|
17
|
+
* The retry logic in wrapWithRetry is responsible for finalizing the session
|
|
18
|
+
* when all retries are exhausted. Don't be a hero and add finalization here.
|
|
19
|
+
*
|
|
20
|
+
* @param source - The source async iterable stream
|
|
21
|
+
* @param session - The session to update with events
|
|
22
|
+
* @returns A managed stream with lifecycle hooks
|
|
23
|
+
*/
|
|
24
|
+
export declare function createManagedStream<T extends TextStreamPart<Record<string, Tool>>>(source: AsyncIterableStream<T>, session: StreamSession): AsyncIterableStream<T>;
|
|
25
|
+
//# sourceMappingURL=managed-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-stream.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/managed-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAE9C,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,aAAa,GACrB,mBAAmB,CAAC,CAAC,CAAC,CAqDxB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a managed stream that wraps the source stream with lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* The managed stream:
|
|
5
|
+
* - Emits "chunk" events for each chunk
|
|
6
|
+
* - Throws errors from error chunks
|
|
7
|
+
* - Finalizes the session on complete or cancel (but NOT on error - see below)
|
|
8
|
+
*
|
|
9
|
+
* IMPORTANT: This stream intentionally does NOT finalize the session on errors.
|
|
10
|
+
* If you call session.finalize("error") here, the session becomes non-pending,
|
|
11
|
+
* which means new managed streams created during retry will immediately close
|
|
12
|
+
* (see the `!session.isPending()` check in pull).
|
|
13
|
+
*
|
|
14
|
+
* The retry logic in wrapWithRetry is responsible for finalizing the session
|
|
15
|
+
* when all retries are exhausted. Don't be a hero and add finalization here.
|
|
16
|
+
*
|
|
17
|
+
* @param source - The source async iterable stream
|
|
18
|
+
* @param session - The session to update with events
|
|
19
|
+
* @returns A managed stream with lifecycle hooks
|
|
20
|
+
*/
|
|
21
|
+
export function createManagedStream(source, session) {
|
|
22
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
23
|
+
let closed = false;
|
|
24
|
+
const readable = new ReadableStream({
|
|
25
|
+
async pull(controller) {
|
|
26
|
+
if (closed || !session.isPending()) {
|
|
27
|
+
controller.close();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const result = await iterator.next();
|
|
32
|
+
if (result.done) {
|
|
33
|
+
closed = true;
|
|
34
|
+
session.finalize("complete");
|
|
35
|
+
controller.close();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
session.recordChunk();
|
|
39
|
+
void session.events.emit("chunk", result.value, session);
|
|
40
|
+
if (result.value.type === "error") {
|
|
41
|
+
const chunkError = result.value
|
|
42
|
+
.error;
|
|
43
|
+
closed = true;
|
|
44
|
+
// don't finalize here, wrapWithRetry catches this and decides whether to retry
|
|
45
|
+
controller.error(chunkError);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
controller.enqueue(result.value);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
closed = true;
|
|
52
|
+
// no finalization, let wrapWithRetry handle it
|
|
53
|
+
controller.error(error);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
cancel() {
|
|
57
|
+
if (!closed) {
|
|
58
|
+
closed = true;
|
|
59
|
+
if (session.isPending()) {
|
|
60
|
+
session.finalize("aborted");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
void iterator.return?.();
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
return readable;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=managed-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-stream.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/managed-stream.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CAGjC,MAA8B,EAC9B,OAAsB;IAEtB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAChD,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAI;QACrC,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;gBACnC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAErC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,MAAM,GAAG,IAAI,CAAC;oBACd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBAC7B,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtB,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEzD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,MAAM,UAAU,GAAI,MAAM,CAAC,KAAuC;yBAC/D,KAAK,CAAC;oBACT,MAAM,GAAG,IAAI,CAAC;oBACd,+EAA+E;oBAC/E,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBAED,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;gBACd,+CAA+C;gBAC/C,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,MAAM;YACJ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;oBACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YACD,KAAK,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,QAAkC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { StreamConfig } from "./config.js";
|
|
2
|
+
import type { StreamEventBus } from "./event-bus.js";
|
|
3
|
+
/**
|
|
4
|
+
* Interface for stream event observers.
|
|
5
|
+
*
|
|
6
|
+
* Observers subscribe to session events via the attach() method.
|
|
7
|
+
* They can perform side effects (logging, tracing, etc.) but cannot
|
|
8
|
+
* modify the stream flow.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* class LoggingObserver implements StreamObserver {
|
|
13
|
+
* attach(events: StreamEventBus, config: StreamConfig): void {
|
|
14
|
+
* events.on("session:start", (session) => {
|
|
15
|
+
* console.log(`Session ${session.id} started`);
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* events.on("session:complete", (session) => {
|
|
19
|
+
* console.log(`Session ${session.id} completed`);
|
|
20
|
+
* });
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export interface StreamObserver {
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to session events.
|
|
28
|
+
*
|
|
29
|
+
* Called once when the observer is registered with an orchestrator.
|
|
30
|
+
* The observer should set up all its event subscriptions here.
|
|
31
|
+
*/
|
|
32
|
+
attach(events: StreamEventBus, config: StreamConfig): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CAC5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/observer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { StreamConfig } from "../config.js";
|
|
2
|
+
import type { StreamEventBus } from "../event-bus.js";
|
|
3
|
+
import type { StreamObserver } from "../observer.js";
|
|
4
|
+
export interface ContextHandle {
|
|
5
|
+
context: ConversationContext;
|
|
6
|
+
release(): void;
|
|
7
|
+
}
|
|
8
|
+
export interface ConversationContext {
|
|
9
|
+
startStep(): void;
|
|
10
|
+
endStep(messages: unknown[], usage?: unknown): void;
|
|
11
|
+
endTurn(usage?: unknown): void;
|
|
12
|
+
}
|
|
13
|
+
export interface ContextObserverOptions {
|
|
14
|
+
contextHandle: ContextHandle;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Observer that manages conversation context during LLM interactions.
|
|
18
|
+
*
|
|
19
|
+
* Handles:
|
|
20
|
+
* - Starting and ending steps in the context
|
|
21
|
+
* - Ending the turn on completion
|
|
22
|
+
* - Releasing the context handle on completion/error/abort
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const observer = new ContextObserver({
|
|
27
|
+
* contextHandle: await contextManager.acquireContext(contextId, ownerId),
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class ContextObserver implements StreamObserver {
|
|
32
|
+
private readonly contextHandle;
|
|
33
|
+
private released;
|
|
34
|
+
constructor(options: ContextObserverOptions);
|
|
35
|
+
attach(events: StreamEventBus, _config: StreamConfig): void;
|
|
36
|
+
private onStepComplete;
|
|
37
|
+
private onStreamFinish;
|
|
38
|
+
private release;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/stream/observers/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,IAAI,IAAI,CAAC;IAClB,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,sBAAsB;IAI3C,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAsB3D,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,OAAO;CAMhB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observer that manages conversation context during LLM interactions.
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Starting and ending steps in the context
|
|
6
|
+
* - Ending the turn on completion
|
|
7
|
+
* - Releasing the context handle on completion/error/abort
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const observer = new ContextObserver({
|
|
12
|
+
* contextHandle: await contextManager.acquireContext(contextId, ownerId),
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class ContextObserver {
|
|
17
|
+
contextHandle;
|
|
18
|
+
released = false;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.contextHandle = options.contextHandle;
|
|
21
|
+
}
|
|
22
|
+
attach(events, _config) {
|
|
23
|
+
events.on("step:complete", (step, session) => {
|
|
24
|
+
this.onStepComplete(step, session);
|
|
25
|
+
});
|
|
26
|
+
events.on("stream:finish", (result, session) => {
|
|
27
|
+
this.onStreamFinish(result, session);
|
|
28
|
+
});
|
|
29
|
+
events.on("session:complete", () => {
|
|
30
|
+
this.release();
|
|
31
|
+
});
|
|
32
|
+
events.on("session:error", () => {
|
|
33
|
+
this.release();
|
|
34
|
+
});
|
|
35
|
+
events.on("session:abort", () => {
|
|
36
|
+
this.release();
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
onStepComplete(step, _session) {
|
|
40
|
+
if (step.response?.messages) {
|
|
41
|
+
this.contextHandle.context.endStep(step.response.messages, step.usage);
|
|
42
|
+
}
|
|
43
|
+
this.contextHandle.context.startStep();
|
|
44
|
+
}
|
|
45
|
+
onStreamFinish(result, _session) {
|
|
46
|
+
this.contextHandle.context.endTurn(result.totalUsage);
|
|
47
|
+
}
|
|
48
|
+
release() {
|
|
49
|
+
if (!this.released) {
|
|
50
|
+
this.released = true;
|
|
51
|
+
this.contextHandle.release();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/stream/observers/context.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,eAAe;IACT,aAAa,CAAgB;IACtC,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,OAA+B;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAsB,EAAE,OAAqB;QAClD,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC7C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CACpB,IAAsC,EACtC,QAAuB;QAEvB,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IACzC,CAAC;IAEO,cAAc,CACpB,MAAyC,EACzC,QAAuB;QAEvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream observers for handling side effects during LLM interactions.
|
|
3
|
+
*/
|
|
4
|
+
export { LoggingObserver, type LoggingObserverOptions, type LogRef, } from "./logging.js";
|
|
5
|
+
export { LLMObsObserver, wrapToolsForObservability, type LLMObsObserverOptions, } from "./llmobs.js";
|
|
6
|
+
export { ContextObserver, type ContextObserverOptions, type ContextHandle, type ConversationContext, } from "./context.js";
|
|
7
|
+
export { RetryNotificationObserver, type RetryNotificationOptions, } from "./retry-notification.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/stream/observers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,MAAM,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream observers for handling side effects during LLM interactions.
|
|
3
|
+
*/
|
|
4
|
+
export { LoggingObserver, } from "./logging.js";
|
|
5
|
+
export { LLMObsObserver, wrapToolsForObservability, } from "./llmobs.js";
|
|
6
|
+
export { ContextObserver, } from "./context.js";
|
|
7
|
+
export { RetryNotificationObserver, } from "./retry-notification.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/stream/observers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,GAGhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,yBAAyB,GAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type ErrorCategory } from "../../error.js";
|
|
2
|
+
import type { Logger } from "../../../../util/logger.js";
|
|
3
|
+
import type { Tool } from "../../../agent/tools2/types.js";
|
|
4
|
+
import type { LLMObsTracer } from "../../../llmobs/index.js";
|
|
5
|
+
import type { StreamConfig } from "../config.js";
|
|
6
|
+
import type { StreamEventBus } from "../event-bus.js";
|
|
7
|
+
import type { StreamObserver } from "../observer.js";
|
|
8
|
+
export interface ClassifiedError {
|
|
9
|
+
category: ErrorCategory;
|
|
10
|
+
code?: string | number;
|
|
11
|
+
isRetryable: boolean;
|
|
12
|
+
message: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function classifyError(error: unknown): ClassifiedError;
|
|
15
|
+
export interface LLMObsObserverOptions {
|
|
16
|
+
tracer: LLMObsTracer;
|
|
17
|
+
logger: Logger;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Observer that manages LLM Observability tracing spans.
|
|
21
|
+
*
|
|
22
|
+
* Creates and manages:
|
|
23
|
+
* - A full workflow span (`ai.streamText`) for the entire session
|
|
24
|
+
* - Step spans (`ai.streamText.step`) for each LLM step
|
|
25
|
+
* - Segment spans (`ai.streamText.{type}`) for thinking/reasoning/text/tool-input
|
|
26
|
+
* - Annotations with usage metrics, model info, and input/output data
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const observer = new LLMObsObserver({
|
|
31
|
+
* tracer: LLMObsTracer.instance,
|
|
32
|
+
* logger: getLogger(),
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class LLMObsObserver implements StreamObserver {
|
|
37
|
+
private readonly tracer;
|
|
38
|
+
private readonly logger;
|
|
39
|
+
private fullSpan?;
|
|
40
|
+
private stepSpan?;
|
|
41
|
+
private currentSegment?;
|
|
42
|
+
private stepNumber;
|
|
43
|
+
constructor(options: LLMObsObserverOptions);
|
|
44
|
+
attach(events: StreamEventBus, _config: StreamConfig): void;
|
|
45
|
+
private onSessionStart;
|
|
46
|
+
private onChunk;
|
|
47
|
+
private onStepComplete;
|
|
48
|
+
private onStreamFinish;
|
|
49
|
+
private onRetry;
|
|
50
|
+
private onFallback;
|
|
51
|
+
private onSessionComplete;
|
|
52
|
+
private onSessionError;
|
|
53
|
+
private onSessionAbort;
|
|
54
|
+
private startSegment;
|
|
55
|
+
private finishSegment;
|
|
56
|
+
private ensureSegment;
|
|
57
|
+
private appendTextToCurrentSegment;
|
|
58
|
+
private appendToolInputDelta;
|
|
59
|
+
private isTextualSegment;
|
|
60
|
+
private getSegmentTypeFromChunk;
|
|
61
|
+
private startStepSpan;
|
|
62
|
+
private finishStepSpan;
|
|
63
|
+
private finishFullSpan;
|
|
64
|
+
private compileMetrics;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Wraps tools with LLMObs tracing for real-time tool execution observability.
|
|
68
|
+
*
|
|
69
|
+
* This utility intercepts each tool's `execute` function and wraps it with
|
|
70
|
+
* a traced span, capturing:
|
|
71
|
+
* - Tool name (`tool.{name}`)
|
|
72
|
+
* - Input arguments
|
|
73
|
+
* - Output result
|
|
74
|
+
* - Execution duration
|
|
75
|
+
* - Error status
|
|
76
|
+
*/
|
|
77
|
+
export declare function wrapToolsForObservability<TOOLS extends Record<string, Tool>>(tools: TOOLS, tracer: LLMObsTracer): TOOLS;
|
|
78
|
+
//# sourceMappingURL=llmobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmobs.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/stream/observers/llmobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAqD7D;AAYD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAU;IACjC,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,EAAE,qBAAqB;IAK1C,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAsC3D,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,OAAO;IAwBf,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,0BAA0B;IASlC,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,cAAc;CAuCvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAC1E,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,YAAY,GACnB,KAAK,CAuDP"}
|