@superblocksteam/vite-plugin-file-sync 2.0.59-next.1 → 2.0.59-next.3
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.d.ts.map +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js +10 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/examples.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/examples.js +137 -10
- package/dist/ai-service/agent/subagents/apis/examples.js.map +1 -1
- package/dist/ai-service/agent/subagents/apis/static-analysis.d.ts.map +1 -1
- package/dist/ai-service/agent/subagents/apis/static-analysis.js +14 -7
- package/dist/ai-service/agent/subagents/apis/static-analysis.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 +6 -2
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/analysis.d.ts +9 -0
- package/dist/ai-service/agent/tools/apis/analysis.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/analysis.js +357 -0
- package/dist/ai-service/agent/tools/apis/analysis.js.map +1 -0
- package/dist/ai-service/agent/{subagents → tools}/apis/api-executor.d.ts +35 -10
- package/dist/ai-service/agent/tools/apis/api-executor.d.ts.map +1 -0
- package/dist/ai-service/agent/{subagents → tools}/apis/api-executor.js +179 -94
- package/dist/ai-service/agent/tools/apis/api-executor.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-source.d.ts +19 -0
- package/dist/ai-service/agent/tools/apis/api-source.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-source.js +73 -0
- package/dist/ai-service/agent/tools/apis/api-source.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts +51 -0
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js +510 -0
- package/dist/ai-service/agent/tools/apis/api-validation-orchestrator.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts +32 -0
- package/dist/ai-service/agent/tools/apis/build-api-artifact.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js +313 -0
- package/dist/ai-service/agent/tools/apis/build-api-artifact.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/build-api.d.ts +1 -10
- package/dist/ai-service/agent/tools/apis/build-api.d.ts.map +1 -1
- package/dist/ai-service/agent/tools/apis/build-api.js +26 -238
- package/dist/ai-service/agent/tools/apis/build-api.js.map +1 -1
- package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts +11 -0
- package/dist/ai-service/agent/tools/apis/get-api-docs.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/get-api-docs.js +1809 -0
- package/dist/ai-service/agent/tools/apis/get-api-docs.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/integration-types.d.ts +37 -0
- package/dist/ai-service/agent/tools/apis/integration-types.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/integration-types.js +697 -0
- package/dist/ai-service/agent/tools/apis/integration-types.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/test-api.d.ts +25 -0
- package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/test-api.js +194 -0
- package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -0
- package/dist/ai-service/agent/tools/apis/write-api.d.ts +11 -0
- package/dist/ai-service/agent/tools/apis/write-api.d.ts.map +1 -0
- package/dist/ai-service/agent/tools/apis/write-api.js +41 -0
- package/dist/ai-service/agent/tools/apis/write-api.js.map +1 -0
- package/dist/ai-service/agent/tools/build-read-files.js +2 -2
- package/dist/ai-service/agent/tools/build-read-files.js.map +1 -1
- package/dist/ai-service/agent/tools.d.ts +2 -5
- package/dist/ai-service/agent/tools.d.ts.map +1 -1
- package/dist/ai-service/agent/tools.js +51 -22
- package/dist/ai-service/agent/tools.js.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.d.ts +1 -0
- package/dist/ai-service/agent/tools2/access-control.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/access-control.js +15 -13
- package/dist/ai-service/agent/tools2/access-control.js.map +1 -1
- package/dist/ai-service/agent/tools2/registry.d.ts +2 -1
- package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/registry.js +4 -3
- package/dist/ai-service/agent/tools2/registry.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +2 -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 +103 -88
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js +25 -4
- package/dist/ai-service/agent/tools2/tools/grep-metadata.js.map +1 -1
- package/dist/ai-service/agent/tools2/types.d.ts +1 -1
- package/dist/ai-service/agent/tools2/types.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/types.js.map +1 -1
- package/dist/ai-service/agent/tools2/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/utils.js +4 -1
- package/dist/ai-service/agent/tools2/utils.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts +1 -3
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +44 -4
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-interface/shell.d.ts +5 -0
- package/dist/ai-service/app-interface/shell.d.ts.map +1 -1
- package/dist/ai-service/app-interface/shell.js +17 -2
- package/dist/ai-service/app-interface/shell.js.map +1 -1
- package/dist/ai-service/chat/chat-session-store.d.ts +7 -0
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +26 -0
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/const.d.ts +2 -1
- package/dist/ai-service/const.d.ts.map +1 -1
- package/dist/ai-service/const.js +1 -0
- package/dist/ai-service/const.js.map +1 -1
- package/dist/ai-service/index.d.ts +5 -1
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +55 -7
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/integrations/metadata-storage/index.d.ts +10 -0
- package/dist/ai-service/integrations/metadata-storage/index.d.ts.map +1 -1
- package/dist/ai-service/integrations/metadata-storage/local.d.ts +4 -2
- package/dist/ai-service/integrations/metadata-storage/local.d.ts.map +1 -1
- package/dist/ai-service/integrations/metadata-storage/local.js +35 -9
- package/dist/ai-service/integrations/metadata-storage/local.js.map +1 -1
- package/dist/ai-service/integrations/store.d.ts +27 -2
- package/dist/ai-service/integrations/store.d.ts.map +1 -1
- package/dist/ai-service/integrations/store.js +129 -62
- package/dist/ai-service/integrations/store.js.map +1 -1
- package/dist/ai-service/llm/client.d.ts +123 -0
- package/dist/ai-service/llm/client.d.ts.map +1 -0
- package/dist/ai-service/llm/client.js +168 -0
- package/dist/ai-service/llm/client.js.map +1 -0
- package/dist/ai-service/llm/context/context-handle.d.ts +4 -4
- package/dist/ai-service/llm/context/context-handle.d.ts.map +1 -1
- package/dist/ai-service/llm/context/context-handle.js +7 -3
- package/dist/ai-service/llm/context/context-handle.js.map +1 -1
- package/dist/ai-service/llm/context/context.d.ts +28 -0
- package/dist/ai-service/llm/context/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context/context.js +117 -0
- package/dist/ai-service/llm/context/context.js.map +1 -1
- package/dist/ai-service/llm/context/manager.d.ts +22 -2
- package/dist/ai-service/llm/context/manager.d.ts.map +1 -1
- package/dist/ai-service/llm/context/manager.js +86 -13
- package/dist/ai-service/llm/context/manager.js.map +1 -1
- package/dist/ai-service/llm/context/storage/index.d.ts +1 -0
- package/dist/ai-service/llm/context/storage/index.d.ts.map +1 -1
- package/dist/ai-service/llm/context/storage/local.d.ts +1 -0
- package/dist/ai-service/llm/context/storage/local.d.ts.map +1 -1
- package/dist/ai-service/llm/context/storage/local.js +13 -1
- package/dist/ai-service/llm/context/storage/local.js.map +1 -1
- package/dist/ai-service/llm/error.d.ts +14 -4
- package/dist/ai-service/llm/error.d.ts.map +1 -1
- package/dist/ai-service/llm/error.js +49 -4
- package/dist/ai-service/llm/error.js.map +1 -1
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts +67 -0
- package/dist/ai-service/llm/interaction/adapters/vercel.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/adapters/vercel.js +110 -0
- package/dist/ai-service/llm/interaction/adapters/vercel.js.map +1 -0
- package/dist/ai-service/llm/interaction/compose.d.ts +71 -0
- package/dist/ai-service/llm/interaction/compose.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/compose.js +88 -0
- package/dist/ai-service/llm/interaction/compose.js.map +1 -0
- package/dist/ai-service/llm/interaction/index.d.ts +68 -0
- package/dist/ai-service/llm/interaction/index.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/index.js +70 -0
- package/dist/ai-service/llm/interaction/index.js.map +1 -0
- package/dist/ai-service/llm/interaction/middleware.d.ts +52 -0
- package/dist/ai-service/llm/interaction/middleware.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/middleware.js +17 -0
- package/dist/ai-service/llm/interaction/middleware.js.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/llmobs.d.ts +45 -0
- package/dist/ai-service/llm/interaction/middlewares/llmobs.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/llmobs.js +85 -0
- package/dist/ai-service/llm/interaction/middlewares/llmobs.js.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/logging.d.ts +88 -0
- package/dist/ai-service/llm/interaction/middlewares/logging.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/logging.js +238 -0
- package/dist/ai-service/llm/interaction/middlewares/logging.js.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/profiler.d.ts +47 -0
- package/dist/ai-service/llm/interaction/middlewares/profiler.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/profiler.js +183 -0
- package/dist/ai-service/llm/interaction/middlewares/profiler.js.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.d.ts +121 -0
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.js +291 -0
- package/dist/ai-service/llm/interaction/middlewares/stream-retry.js.map +1 -0
- package/dist/ai-service/llm/interaction/provider.d.ts +158 -0
- package/dist/ai-service/llm/interaction/provider.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/provider.js +15 -0
- package/dist/ai-service/llm/interaction/provider.js.map +1 -0
- package/dist/ai-service/llm/interaction/stream-lifecycle.d.ts +48 -0
- package/dist/ai-service/llm/interaction/stream-lifecycle.d.ts.map +1 -0
- package/dist/ai-service/llm/interaction/stream-lifecycle.js +131 -0
- package/dist/ai-service/llm/interaction/stream-lifecycle.js.map +1 -0
- package/dist/ai-service/llm/provider.d.ts +1 -2
- package/dist/ai-service/llm/provider.d.ts.map +1 -1
- package/dist/ai-service/llm/provider.js +3 -6
- package/dist/ai-service/llm/provider.js.map +1 -1
- package/dist/ai-service/llmobs/helpers.d.ts +7 -8
- package/dist/ai-service/llmobs/helpers.d.ts.map +1 -1
- package/dist/ai-service/llmobs/helpers.js +8 -48
- package/dist/ai-service/llmobs/helpers.js.map +1 -1
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts +19 -21
- package/dist/ai-service/llmobs/middleware/stream-text.d.ts.map +1 -1
- package/dist/ai-service/llmobs/middleware/stream-text.js +98 -106
- package/dist/ai-service/llmobs/middleware/stream-text.js.map +1 -1
- package/dist/ai-service/llmobs/types.d.ts +14 -1
- package/dist/ai-service/llmobs/types.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +75 -5
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +100 -0
- 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 +4 -0
- package/dist/ai-service/state-machine/handlers/agent-planning.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 +91 -456
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -1
- package/dist/ai-service/state-machine/helpers/peer.js +15 -0
- package/dist/ai-service/state-machine/helpers/peer.js.map +1 -1
- 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/template-renderer.js +1 -1
- package/dist/ai-service/template-renderer.js.map +1 -1
- package/dist/ai-service/types.d.ts +30 -0
- package/dist/ai-service/types.d.ts.map +1 -1
- package/dist/binding-extraction/extract-identifiers.d.ts +14 -0
- package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -1
- package/dist/binding-extraction/extract-identifiers.js +46 -1
- package/dist/binding-extraction/extract-identifiers.js.map +1 -1
- package/dist/binding-extraction/js-identifiers.d.ts +14 -0
- package/dist/binding-extraction/js-identifiers.d.ts.map +1 -1
- package/dist/binding-extraction/js-identifiers.js +168 -0
- package/dist/binding-extraction/js-identifiers.js.map +1 -1
- package/dist/binding-extraction/python-identifiers.d.ts +5 -0
- package/dist/binding-extraction/python-identifiers.d.ts.map +1 -1
- package/dist/binding-extraction/python-identifiers.js +76 -7
- package/dist/binding-extraction/python-identifiers.js.map +1 -1
- package/dist/file-sync-vite-plugin.d.ts.map +1 -1
- package/dist/file-sync-vite-plugin.js +73 -3
- package/dist/file-sync-vite-plugin.js.map +1 -1
- package/dist/file-system-manager.d.ts.map +1 -1
- package/dist/file-system-manager.js +6 -4
- package/dist/file-system-manager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lock-service/activity-tracker.d.ts +14 -2
- package/dist/lock-service/activity-tracker.d.ts.map +1 -1
- package/dist/lock-service/activity-tracker.js +43 -6
- package/dist/lock-service/activity-tracker.js.map +1 -1
- package/dist/lock-service/index.d.ts +13 -2
- package/dist/lock-service/index.d.ts.map +1 -1
- package/dist/lock-service/index.js +130 -44
- package/dist/lock-service/index.js.map +1 -1
- package/dist/parsing/jsx.d.ts.map +1 -1
- package/dist/parsing/jsx.js +78 -66
- package/dist/parsing/jsx.js.map +1 -1
- package/dist/socket-manager.js +1 -1
- package/dist/socket-manager.js.map +1 -1
- package/dist/sync-service/list-dir.d.ts.map +1 -1
- package/dist/sync-service/list-dir.js +41 -18
- package/dist/sync-service/list-dir.js.map +1 -1
- package/dist/vite-plugin-yaml-types.d.ts.map +1 -1
- package/dist/vite-plugin-yaml-types.js +2 -4
- package/dist/vite-plugin-yaml-types.js.map +1 -1
- package/package.json +7 -7
- package/dist/ai-service/agent/subagents/apis/api-executor.d.ts.map +0 -1
- package/dist/ai-service/agent/subagents/apis/api-executor.js.map +0 -1
- package/dist/ai-service/agent/subagents/apis/context.d.ts +0 -12
- package/dist/ai-service/agent/subagents/apis/context.d.ts.map +0 -1
- package/dist/ai-service/agent/subagents/apis/context.js +0 -18
- package/dist/ai-service/agent/subagents/apis/context.js.map +0 -1
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts +0 -40
- package/dist/ai-service/agent/subagents/apis/generate-api-source.d.ts.map +0 -1
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js +0 -516
- package/dist/ai-service/agent/subagents/apis/generate-api-source.js.map +0 -1
- package/dist/ai-service/agent/subagents/apis/state.d.ts +0 -49
- package/dist/ai-service/agent/subagents/apis/state.d.ts.map +0 -1
- package/dist/ai-service/agent/subagents/apis/state.js +0 -25
- package/dist/ai-service/agent/subagents/apis/state.js.map +0 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts +0 -3
- package/dist/ai-service/agent/subagents/apis/system-prompt.d.ts.map +0 -1
- package/dist/ai-service/agent/subagents/apis/system-prompt.js +0 -1704
- package/dist/ai-service/agent/subagents/apis/system-prompt.js.map +0 -1
- package/dist/ai-service/agent/tools/apis/finalize-api.d.ts +0 -11
- package/dist/ai-service/agent/tools/apis/finalize-api.d.ts.map +0 -1
- package/dist/ai-service/agent/tools/apis/finalize-api.js +0 -133
- package/dist/ai-service/agent/tools/apis/finalize-api.js.map +0 -1
- package/dist/ai-service/llm/middleware/retry.d.ts +0 -112
- package/dist/ai-service/llm/middleware/retry.d.ts.map +0 -1
- package/dist/ai-service/llm/middleware/retry.js +0 -239
- package/dist/ai-service/llm/middleware/retry.js.map +0 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel AI SDK adapter for StreamTextProvider.
|
|
3
|
+
*
|
|
4
|
+
* This adapter bridges our high-level StreamTextProvider interface
|
|
5
|
+
* to the Vercel AI SDK's streamText function. It handles:
|
|
6
|
+
* - Mapping our options to SDK options
|
|
7
|
+
* - Adding onFinally support via stream wrapping
|
|
8
|
+
* - Translating SDK results to our interface
|
|
9
|
+
*
|
|
10
|
+
* This is the only place that depends on Vercel AI SDK internals.
|
|
11
|
+
* All other code (middlewares, etc.) depends only on our interface.
|
|
12
|
+
*/
|
|
13
|
+
import { streamText } from "ai";
|
|
14
|
+
import { withStreamLifecycle } from "../stream-lifecycle.js";
|
|
15
|
+
/**
|
|
16
|
+
* Adapter that implements StreamTextProvider using Vercel AI SDK.
|
|
17
|
+
*
|
|
18
|
+
* This class wraps Vercel's streamText function and adds our custom
|
|
19
|
+
* lifecycle management (particularly onFinally support).
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const provider = new VercelStreamTextAdapter();
|
|
24
|
+
* const result = await provider.streamText({
|
|
25
|
+
* model: anthropic('claude-3-5-sonnet-20241022'),
|
|
26
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
27
|
+
* onFinally: async () => {
|
|
28
|
+
* console.log('Stream consumed!');
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* for await (const text of result.textStream) {
|
|
33
|
+
* console.log(text);
|
|
34
|
+
* }
|
|
35
|
+
* // onFinally runs here
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export class VercelStreamTextAdapter {
|
|
39
|
+
/**
|
|
40
|
+
* Streams text using Vercel AI SDK with lifecycle management.
|
|
41
|
+
*
|
|
42
|
+
* @param options - Stream options including onFinally hook
|
|
43
|
+
* @returns Promise resolving to stream result
|
|
44
|
+
*/
|
|
45
|
+
async streamText(options) {
|
|
46
|
+
// Extract our custom options that SDK doesn't support
|
|
47
|
+
const { onFinally, user, ...rest } = options;
|
|
48
|
+
// Validate that messages are provided (either directly or via user)
|
|
49
|
+
if (!rest.messages && !user) {
|
|
50
|
+
throw new Error("Either messages or user must be provided to streamText");
|
|
51
|
+
}
|
|
52
|
+
// Call Vercel SDK's streamText with proper generic types
|
|
53
|
+
// TOOLS: The tools type parameter from our method signature
|
|
54
|
+
// any, any: OUTPUT and PARTIAL_OUTPUT (we don't use structured outputs)
|
|
55
|
+
const result = streamText({
|
|
56
|
+
model: rest.model,
|
|
57
|
+
messages: rest.messages || (user ? [user] : []),
|
|
58
|
+
system: rest.system,
|
|
59
|
+
tools: rest.tools,
|
|
60
|
+
...(rest.maxSteps !== undefined && { maxSteps: rest.maxSteps }),
|
|
61
|
+
abortSignal: rest.abortSignal,
|
|
62
|
+
headers: rest.headers,
|
|
63
|
+
providerOptions: rest.providerOptions,
|
|
64
|
+
stopWhen: rest.stopWhen,
|
|
65
|
+
experimental_transform: rest.experimental_transform,
|
|
66
|
+
prepareStep: rest.prepareStep,
|
|
67
|
+
onChunk: rest.onChunk,
|
|
68
|
+
onStepFinish: rest.onStepFinish,
|
|
69
|
+
onFinish: rest.onFinish,
|
|
70
|
+
onError: rest.onError
|
|
71
|
+
? (event) => {
|
|
72
|
+
const error = event.error instanceof Error
|
|
73
|
+
? event.error
|
|
74
|
+
: new Error(String(event.error));
|
|
75
|
+
return rest.onError(error);
|
|
76
|
+
}
|
|
77
|
+
: undefined,
|
|
78
|
+
onAbort: rest.onAbort,
|
|
79
|
+
});
|
|
80
|
+
// If no onFinally hook, return result as-is
|
|
81
|
+
if (!onFinally) {
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
// Wrap streams to add onFinally lifecycle tracking
|
|
85
|
+
return withStreamLifecycle(result, onFinally);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Creates a StreamTextProvider using Vercel AI SDK.
|
|
90
|
+
*
|
|
91
|
+
* Convenience function for creating the adapter.
|
|
92
|
+
*
|
|
93
|
+
* @returns A new Vercel SDK adapter instance
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const provider = createVercelProvider();
|
|
98
|
+
*
|
|
99
|
+
* // Use with middlewares
|
|
100
|
+
* const wrapped = applyMiddleware(
|
|
101
|
+
* provider,
|
|
102
|
+
* contextMiddleware,
|
|
103
|
+
* loggingMiddleware
|
|
104
|
+
* );
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export function createVercelProvider() {
|
|
108
|
+
return new VercelStreamTextAdapter();
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/interaction/adapters/vercel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAQ7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,uBAAuB;IAClC;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CACd,OAAiC;QAEjC,sDAAsD;QACtD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAE7C,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,yDAAyD;QACzD,4DAA4D;QAC5D,wEAAwE;QACxE,MAAM,MAAM,GAAG,UAAU,CAAkB;YACzC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAA0B;YACtC,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACnB,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;oBACR,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,YAAY,KAAK;wBAC1B,CAAC,CAAC,KAAK,CAAC,KAAK;wBACb,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrC,OAAO,IAAI,CAAC,OAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;gBACH,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,mDAAmD;QACnD,OAAO,mBAAmB,CAAQ,MAAM,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,uBAAuB,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composition utilities for StreamTextProvider middlewares.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to compose multiple middlewares into a single
|
|
5
|
+
* execution chain, similar to Express.js middleware composition.
|
|
6
|
+
*/
|
|
7
|
+
import type { StreamTextProvider, StreamTextMiddleware } from "./middleware.js";
|
|
8
|
+
/**
|
|
9
|
+
* Composes multiple middlewares into a single middleware.
|
|
10
|
+
*
|
|
11
|
+
* Middlewares are applied from left to right (first middleware wraps second,
|
|
12
|
+
* second wraps third, etc.). This means the first middleware in the array
|
|
13
|
+
* is the outermost layer and executes first.
|
|
14
|
+
*
|
|
15
|
+
* @param middlewares - The middlewares to compose
|
|
16
|
+
* @returns A single composed middleware
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const combined = compose(loggingMiddleware, authMiddleware, rateLimitMiddleware);
|
|
20
|
+
* // Execution order:
|
|
21
|
+
* // 1. loggingMiddleware (outermost)
|
|
22
|
+
* // 2. authMiddleware
|
|
23
|
+
* // 3. rateLimitMiddleware (innermost)
|
|
24
|
+
* // 4. actual provider.streamText() call
|
|
25
|
+
*/
|
|
26
|
+
export declare function compose(...middlewares: StreamTextMiddleware[]): StreamTextMiddleware;
|
|
27
|
+
/**
|
|
28
|
+
* Applies middlewares to a base StreamTextProvider.
|
|
29
|
+
*
|
|
30
|
+
* This is a convenience function that composes the middlewares and
|
|
31
|
+
* applies them to the base provider in one step.
|
|
32
|
+
*
|
|
33
|
+
* @param baseProvider - The base provider to wrap
|
|
34
|
+
* @param middlewares - The middlewares to apply
|
|
35
|
+
* @returns The wrapped provider with all middlewares applied
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* const provider = applyMiddleware(
|
|
39
|
+
* createVercelProvider(),
|
|
40
|
+
* contextMiddleware,
|
|
41
|
+
* loggingMiddleware,
|
|
42
|
+
* profilerMiddleware
|
|
43
|
+
* );
|
|
44
|
+
*
|
|
45
|
+
* // Use the wrapped provider:
|
|
46
|
+
* const result = await provider.streamText({ model, messages, tools });
|
|
47
|
+
*/
|
|
48
|
+
export declare function applyMiddleware(baseProvider: StreamTextProvider, ...middlewares: StreamTextMiddleware[]): StreamTextProvider;
|
|
49
|
+
/**
|
|
50
|
+
* Creates a middleware from a simple wrapper function.
|
|
51
|
+
*
|
|
52
|
+
* This is a helper for creating middlewares without implementing
|
|
53
|
+
* the full interface. Useful for simple transformations.
|
|
54
|
+
*
|
|
55
|
+
* @param wrapperFn - A function that wraps the provider
|
|
56
|
+
* @returns A StreamTextMiddleware
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* const timingMiddleware = createMiddleware((provider) => {
|
|
60
|
+
* return {
|
|
61
|
+
* async streamText(options) {
|
|
62
|
+
* const start = Date.now();
|
|
63
|
+
* const result = await provider.streamText(options);
|
|
64
|
+
* console.log(`Took ${Date.now() - start}ms`);
|
|
65
|
+
* return result;
|
|
66
|
+
* }
|
|
67
|
+
* };
|
|
68
|
+
* });
|
|
69
|
+
*/
|
|
70
|
+
export declare function createMiddleware(wrapperFn: (provider: StreamTextProvider) => StreamTextProvider): StreamTextMiddleware;
|
|
71
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/compose.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEhF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,OAAO,CACrB,GAAG,WAAW,EAAE,oBAAoB,EAAE,GACrC,oBAAoB,CAWtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,kBAAkB,EAChC,GAAG,WAAW,EAAE,oBAAoB,EAAE,GACrC,kBAAkB,CAOpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,kBAAkB,GAC9D,oBAAoB,CAItB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composition utilities for StreamTextProvider middlewares.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to compose multiple middlewares into a single
|
|
5
|
+
* execution chain, similar to Express.js middleware composition.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Composes multiple middlewares into a single middleware.
|
|
9
|
+
*
|
|
10
|
+
* Middlewares are applied from left to right (first middleware wraps second,
|
|
11
|
+
* second wraps third, etc.). This means the first middleware in the array
|
|
12
|
+
* is the outermost layer and executes first.
|
|
13
|
+
*
|
|
14
|
+
* @param middlewares - The middlewares to compose
|
|
15
|
+
* @returns A single composed middleware
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const combined = compose(loggingMiddleware, authMiddleware, rateLimitMiddleware);
|
|
19
|
+
* // Execution order:
|
|
20
|
+
* // 1. loggingMiddleware (outermost)
|
|
21
|
+
* // 2. authMiddleware
|
|
22
|
+
* // 3. rateLimitMiddleware (innermost)
|
|
23
|
+
* // 4. actual provider.streamText() call
|
|
24
|
+
*/
|
|
25
|
+
export function compose(...middlewares) {
|
|
26
|
+
return {
|
|
27
|
+
wrap(provider) {
|
|
28
|
+
// Apply middlewares from right to left (innermost to outermost)
|
|
29
|
+
// so that the first middleware in the array becomes the outermost wrapper
|
|
30
|
+
return middlewares.reduceRight((wrappedProvider, middleware) => middleware.wrap(wrappedProvider), provider);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Applies middlewares to a base StreamTextProvider.
|
|
36
|
+
*
|
|
37
|
+
* This is a convenience function that composes the middlewares and
|
|
38
|
+
* applies them to the base provider in one step.
|
|
39
|
+
*
|
|
40
|
+
* @param baseProvider - The base provider to wrap
|
|
41
|
+
* @param middlewares - The middlewares to apply
|
|
42
|
+
* @returns The wrapped provider with all middlewares applied
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const provider = applyMiddleware(
|
|
46
|
+
* createVercelProvider(),
|
|
47
|
+
* contextMiddleware,
|
|
48
|
+
* loggingMiddleware,
|
|
49
|
+
* profilerMiddleware
|
|
50
|
+
* );
|
|
51
|
+
*
|
|
52
|
+
* // Use the wrapped provider:
|
|
53
|
+
* const result = await provider.streamText({ model, messages, tools });
|
|
54
|
+
*/
|
|
55
|
+
export function applyMiddleware(baseProvider, ...middlewares) {
|
|
56
|
+
if (middlewares.length === 0) {
|
|
57
|
+
return baseProvider;
|
|
58
|
+
}
|
|
59
|
+
const composed = compose(...middlewares);
|
|
60
|
+
return composed.wrap(baseProvider);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a middleware from a simple wrapper function.
|
|
64
|
+
*
|
|
65
|
+
* This is a helper for creating middlewares without implementing
|
|
66
|
+
* the full interface. Useful for simple transformations.
|
|
67
|
+
*
|
|
68
|
+
* @param wrapperFn - A function that wraps the provider
|
|
69
|
+
* @returns A StreamTextMiddleware
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* const timingMiddleware = createMiddleware((provider) => {
|
|
73
|
+
* return {
|
|
74
|
+
* async streamText(options) {
|
|
75
|
+
* const start = Date.now();
|
|
76
|
+
* const result = await provider.streamText(options);
|
|
77
|
+
* console.log(`Took ${Date.now() - start}ms`);
|
|
78
|
+
* return result;
|
|
79
|
+
* }
|
|
80
|
+
* };
|
|
81
|
+
* });
|
|
82
|
+
*/
|
|
83
|
+
export function createMiddleware(wrapperFn) {
|
|
84
|
+
return {
|
|
85
|
+
wrap: wrapperFn,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/compose.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,OAAO,CACrB,GAAG,WAAmC;IAEtC,OAAO;QACL,IAAI,CAAC,QAA4B;YAC/B,gEAAgE;YAChE,0EAA0E;YAC1E,OAAO,WAAW,CAAC,WAAW,CAC5B,CAAC,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EACjE,QAAQ,CACT,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAC7B,YAAgC,EAChC,GAAG,WAAmC;IAEtC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAA+D;IAE/D,OAAO;QACL,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-step LLM interaction system with provider interface and middleware.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a clean, SDK-agnostic interface for LLM streaming
|
|
5
|
+
* with composable middleware. Key features:
|
|
6
|
+
* - Provider interface abstracts away SDK details
|
|
7
|
+
* - onFinally lifecycle hook for cleanup after stream consumption
|
|
8
|
+
* - Composable middlewares for cross-cutting concerns
|
|
9
|
+
* - Adapter pattern for SDK flexibility
|
|
10
|
+
*
|
|
11
|
+
* ## Architecture
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* Middlewares (Context, Logging, Profiler, LLMObs)
|
|
15
|
+
* ↓
|
|
16
|
+
* StreamTextProvider Interface (with onFinally)
|
|
17
|
+
* ↓
|
|
18
|
+
* VercelStreamTextAdapter
|
|
19
|
+
* ↓
|
|
20
|
+
* Vercel AI SDK
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Usage
|
|
24
|
+
*
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import {
|
|
27
|
+
* createVercelProvider,
|
|
28
|
+
* applyMiddleware,
|
|
29
|
+
* createContextMiddleware,
|
|
30
|
+
* createLoggingMiddleware,
|
|
31
|
+
* } from "./interaction";
|
|
32
|
+
*
|
|
33
|
+
* // Create base provider
|
|
34
|
+
* const baseProvider = createVercelProvider();
|
|
35
|
+
*
|
|
36
|
+
* // Apply middlewares
|
|
37
|
+
* const provider = applyMiddleware(
|
|
38
|
+
* baseProvider,
|
|
39
|
+
* createContextMiddleware({ ... }),
|
|
40
|
+
* createLoggingMiddleware({ ... })
|
|
41
|
+
* );
|
|
42
|
+
*
|
|
43
|
+
* // Use the provider
|
|
44
|
+
* const result = await provider.streamText({
|
|
45
|
+
* model,
|
|
46
|
+
* messages,
|
|
47
|
+
* tools,
|
|
48
|
+
* onFinally: async () => {
|
|
49
|
+
* // Cleanup after stream consumption
|
|
50
|
+
* }
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* for await (const chunk of result.fullStream) {
|
|
54
|
+
* // Process chunks
|
|
55
|
+
* }
|
|
56
|
+
* // onFinally runs here ^
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export type { StreamTextProvider, StreamTextOptions, StreamTextResult, StepParameters, StreamChunk, StepResult, FinalResult, } from "./provider.js";
|
|
60
|
+
export type { StreamTextMiddleware } from "./middleware.js";
|
|
61
|
+
export { compose, applyMiddleware, createMiddleware } from "./compose.js";
|
|
62
|
+
export { withStreamLifecycle } from "./stream-lifecycle.js";
|
|
63
|
+
export { VercelStreamTextAdapter, createVercelProvider, } from "./adapters/vercel.js";
|
|
64
|
+
export { createLoggingMiddleware, type LoggingMiddlewareOptions, type LogRef, } from "./middlewares/logging.js";
|
|
65
|
+
export { createProfilerMiddleware, type ProfilerMiddlewareOptions, } from "./middlewares/profiler.js";
|
|
66
|
+
export { createLLMObsMiddleware, type LLMObsMiddlewareOptions, } from "./middlewares/llmobs.js";
|
|
67
|
+
export { createStreamRetryMiddleware, type StreamRetryOptions, } from "./middlewares/stream-retry.js";
|
|
68
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAGH,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,eAAe,CAAC;AAGvB,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,MAAM,GACZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,2BAA2B,EAC3B,KAAK,kBAAkB,GACxB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-step LLM interaction system with provider interface and middleware.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a clean, SDK-agnostic interface for LLM streaming
|
|
5
|
+
* with composable middleware. Key features:
|
|
6
|
+
* - Provider interface abstracts away SDK details
|
|
7
|
+
* - onFinally lifecycle hook for cleanup after stream consumption
|
|
8
|
+
* - Composable middlewares for cross-cutting concerns
|
|
9
|
+
* - Adapter pattern for SDK flexibility
|
|
10
|
+
*
|
|
11
|
+
* ## Architecture
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* Middlewares (Context, Logging, Profiler, LLMObs)
|
|
15
|
+
* ↓
|
|
16
|
+
* StreamTextProvider Interface (with onFinally)
|
|
17
|
+
* ↓
|
|
18
|
+
* VercelStreamTextAdapter
|
|
19
|
+
* ↓
|
|
20
|
+
* Vercel AI SDK
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Usage
|
|
24
|
+
*
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import {
|
|
27
|
+
* createVercelProvider,
|
|
28
|
+
* applyMiddleware,
|
|
29
|
+
* createContextMiddleware,
|
|
30
|
+
* createLoggingMiddleware,
|
|
31
|
+
* } from "./interaction";
|
|
32
|
+
*
|
|
33
|
+
* // Create base provider
|
|
34
|
+
* const baseProvider = createVercelProvider();
|
|
35
|
+
*
|
|
36
|
+
* // Apply middlewares
|
|
37
|
+
* const provider = applyMiddleware(
|
|
38
|
+
* baseProvider,
|
|
39
|
+
* createContextMiddleware({ ... }),
|
|
40
|
+
* createLoggingMiddleware({ ... })
|
|
41
|
+
* );
|
|
42
|
+
*
|
|
43
|
+
* // Use the provider
|
|
44
|
+
* const result = await provider.streamText({
|
|
45
|
+
* model,
|
|
46
|
+
* messages,
|
|
47
|
+
* tools,
|
|
48
|
+
* onFinally: async () => {
|
|
49
|
+
* // Cleanup after stream consumption
|
|
50
|
+
* }
|
|
51
|
+
* });
|
|
52
|
+
*
|
|
53
|
+
* for await (const chunk of result.fullStream) {
|
|
54
|
+
* // Process chunks
|
|
55
|
+
* }
|
|
56
|
+
* // onFinally runs here ^
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
// Composition utilities
|
|
60
|
+
export { compose, applyMiddleware, createMiddleware } from "./compose.js";
|
|
61
|
+
// Stream lifecycle utilities
|
|
62
|
+
export { withStreamLifecycle } from "./stream-lifecycle.js";
|
|
63
|
+
// Vercel SDK adapter
|
|
64
|
+
export { VercelStreamTextAdapter, createVercelProvider, } from "./adapters/vercel.js";
|
|
65
|
+
// Built-in middlewares
|
|
66
|
+
export { createLoggingMiddleware, } from "./middlewares/logging.js";
|
|
67
|
+
export { createProfilerMiddleware, } from "./middlewares/profiler.js";
|
|
68
|
+
export { createLLMObsMiddleware, } from "./middlewares/llmobs.js";
|
|
69
|
+
export { createStreamRetryMiddleware, } from "./middlewares/stream-retry.js";
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAgBH,wBAAwB;AACxB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE1E,6BAA6B;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,uBAAuB;AACvB,OAAO,EACL,uBAAuB,GAGxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,2BAA2B,GAE5B,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware interface for multi-step LLM interactions.
|
|
3
|
+
*
|
|
4
|
+
* Provides a composable wrap pattern for intercepting and transforming
|
|
5
|
+
* StreamTextProvider calls. Each middleware can:
|
|
6
|
+
* - Transform input options before execution
|
|
7
|
+
* - Add lifecycle hooks (onFinally, etc.)
|
|
8
|
+
* - Wrap and transform output streams
|
|
9
|
+
* - Handle errors and control flow
|
|
10
|
+
* - Short-circuit execution if needed
|
|
11
|
+
*
|
|
12
|
+
* Middlewares operate on the high-level StreamTextProvider interface,
|
|
13
|
+
* not on SDK-specific details. This makes them portable across different
|
|
14
|
+
* LLM SDKs (Vercel, Anthropic, OpenAI, etc.).
|
|
15
|
+
*/
|
|
16
|
+
import type { StreamTextProvider } from "./provider.js";
|
|
17
|
+
/**
|
|
18
|
+
* Middleware interface using the wrap pattern.
|
|
19
|
+
*
|
|
20
|
+
* Each middleware wraps a StreamTextProvider, allowing it to:
|
|
21
|
+
* - Intercept and transform streamText() calls
|
|
22
|
+
* - Execute logic before/after the call
|
|
23
|
+
* - Transform or wrap the options and results
|
|
24
|
+
* - Handle errors and control flow
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const loggingMiddleware: StreamTextMiddleware = {
|
|
29
|
+
* wrap(provider) {
|
|
30
|
+
* return {
|
|
31
|
+
* async streamText(options) {
|
|
32
|
+
* console.log('Starting streamText call');
|
|
33
|
+
* const result = await provider.streamText(options);
|
|
34
|
+
* console.log('Call complete');
|
|
35
|
+
* return result;
|
|
36
|
+
* }
|
|
37
|
+
* };
|
|
38
|
+
* }
|
|
39
|
+
* };
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export interface StreamTextMiddleware {
|
|
43
|
+
/**
|
|
44
|
+
* Wraps a StreamTextProvider with middleware behavior.
|
|
45
|
+
*
|
|
46
|
+
* @param provider - The provider to wrap
|
|
47
|
+
* @returns A wrapped provider with the middleware's behavior
|
|
48
|
+
*/
|
|
49
|
+
wrap(provider: StreamTextProvider): StreamTextProvider;
|
|
50
|
+
}
|
|
51
|
+
export type { StreamTextProvider, StreamTextOptions, StreamTextResult, StepParameters, StreamChunk, StepResult, FinalResult, } from "./provider.js";
|
|
52
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;CACxD;AAGD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware interface for multi-step LLM interactions.
|
|
3
|
+
*
|
|
4
|
+
* Provides a composable wrap pattern for intercepting and transforming
|
|
5
|
+
* StreamTextProvider calls. Each middleware can:
|
|
6
|
+
* - Transform input options before execution
|
|
7
|
+
* - Add lifecycle hooks (onFinally, etc.)
|
|
8
|
+
* - Wrap and transform output streams
|
|
9
|
+
* - Handle errors and control flow
|
|
10
|
+
* - Short-circuit execution if needed
|
|
11
|
+
*
|
|
12
|
+
* Middlewares operate on the high-level StreamTextProvider interface,
|
|
13
|
+
* not on SDK-specific details. This makes them portable across different
|
|
14
|
+
* LLM SDKs (Vercel, Anthropic, OpenAI, etc.).
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/interaction/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLMObs middleware adapter.
|
|
3
|
+
*
|
|
4
|
+
* This middleware wraps the existing LLMObsStreamTextMiddleware to work
|
|
5
|
+
* with the new provider-based middleware interface. It provides observability
|
|
6
|
+
* tracing for LLM interactions.
|
|
7
|
+
*/
|
|
8
|
+
import type { Logger } from "../../../../util/logger.js";
|
|
9
|
+
import type { LLMObsTracer } from "../../../llmobs/index.js";
|
|
10
|
+
import type { StreamTextMiddleware } from "../middleware.js";
|
|
11
|
+
/**
|
|
12
|
+
* Options for configuring the LLMObs middleware.
|
|
13
|
+
*/
|
|
14
|
+
export interface LLMObsMiddlewareOptions {
|
|
15
|
+
/** LLMObs tracer instance */
|
|
16
|
+
tracer?: LLMObsTracer;
|
|
17
|
+
/** Logger instance */
|
|
18
|
+
logger?: Logger;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates a middleware that adds LLMObs observability tracing.
|
|
22
|
+
*
|
|
23
|
+
* This middleware wraps the existing LLMObsStreamTextMiddleware to provide:
|
|
24
|
+
* - Workflow and LLM span hierarchy
|
|
25
|
+
* - Token usage tracking
|
|
26
|
+
* - Tool call tracing
|
|
27
|
+
* - Segment-level tracking (thinking, text, tool-input)
|
|
28
|
+
* - Error and abort handling
|
|
29
|
+
*
|
|
30
|
+
* @param options - Configuration for the middleware
|
|
31
|
+
* @returns A StreamTextMiddleware
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const middleware = createLLMObsMiddleware({
|
|
36
|
+
* tracer: LLMObsTracer.instance,
|
|
37
|
+
* logger: getLogger()
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* const streamText = applyMiddleware(baseStreamText, middleware);
|
|
41
|
+
* const result = await streamText({ model, messages, tools });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function createLLMObsMiddleware(options?: LLMObsMiddlewareOptions): StreamTextMiddleware;
|
|
45
|
+
//# sourceMappingURL=llmobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmobs.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/llm/interaction/middlewares/llmobs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,oBAAoB,CAwEtB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLMObs middleware adapter.
|
|
3
|
+
*
|
|
4
|
+
* This middleware wraps the existing LLMObsStreamTextMiddleware to work
|
|
5
|
+
* with the new provider-based middleware interface. It provides observability
|
|
6
|
+
* tracing for LLM interactions.
|
|
7
|
+
*/
|
|
8
|
+
import { LLMObsStreamTextMiddleware, wrapStream, } from "../../../llmobs/middleware/stream-text.js";
|
|
9
|
+
/**
|
|
10
|
+
* Creates a middleware that adds LLMObs observability tracing.
|
|
11
|
+
*
|
|
12
|
+
* This middleware wraps the existing LLMObsStreamTextMiddleware to provide:
|
|
13
|
+
* - Workflow and LLM span hierarchy
|
|
14
|
+
* - Token usage tracking
|
|
15
|
+
* - Tool call tracing
|
|
16
|
+
* - Segment-level tracking (thinking, text, tool-input)
|
|
17
|
+
* - Error and abort handling
|
|
18
|
+
*
|
|
19
|
+
* @param options - Configuration for the middleware
|
|
20
|
+
* @returns A StreamTextMiddleware
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const middleware = createLLMObsMiddleware({
|
|
25
|
+
* tracer: LLMObsTracer.instance,
|
|
26
|
+
* logger: getLogger()
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* const streamText = applyMiddleware(baseStreamText, middleware);
|
|
30
|
+
* const result = await streamText({ model, messages, tools });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function createLLMObsMiddleware(options = {}) {
|
|
34
|
+
const { tracer, logger } = options;
|
|
35
|
+
return {
|
|
36
|
+
wrap(provider) {
|
|
37
|
+
return {
|
|
38
|
+
async streamText(streamOptions) {
|
|
39
|
+
// Create LLMObs middleware instance
|
|
40
|
+
const llmobs = new LLMObsStreamTextMiddleware(streamOptions.model, streamOptions.tools, tracer, logger);
|
|
41
|
+
try {
|
|
42
|
+
// Call provider with wrapped callbacks and tools
|
|
43
|
+
const result = await provider.streamText({
|
|
44
|
+
...streamOptions,
|
|
45
|
+
tools: streamOptions.tools
|
|
46
|
+
? llmobs.wrapTools(streamOptions.tools)
|
|
47
|
+
: undefined,
|
|
48
|
+
prepareStep: async (step) => {
|
|
49
|
+
return await llmobs.prepareStep(step, streamOptions.model, streamOptions.prepareStep);
|
|
50
|
+
},
|
|
51
|
+
onChunk: async (event) => {
|
|
52
|
+
await llmobs.onChunk(event.chunk, streamOptions.onChunk);
|
|
53
|
+
},
|
|
54
|
+
onStepFinish: async (step) => {
|
|
55
|
+
await llmobs.onStepFinish(step, streamOptions.onStepFinish);
|
|
56
|
+
},
|
|
57
|
+
onFinish: async (result) => {
|
|
58
|
+
await llmobs.onFinish(result, streamOptions.onFinish);
|
|
59
|
+
},
|
|
60
|
+
onError: async (error) => {
|
|
61
|
+
await llmobs.onError(error, streamOptions.onError);
|
|
62
|
+
},
|
|
63
|
+
onAbort: async () => {
|
|
64
|
+
await llmobs.onAbort(streamOptions.onAbort);
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
// Wrap result streams with error/finally handlers using the wrapStream utility
|
|
68
|
+
// from stream-text.ts which properly creates AsyncIterableStream
|
|
69
|
+
return {
|
|
70
|
+
...result,
|
|
71
|
+
textStream: wrapStream(result.textStream, async (error) => llmobs.handleStreamError(error), async () => llmobs.onFinally()),
|
|
72
|
+
fullStream: wrapStream(result.fullStream, async (error) => llmobs.handleStreamError(error), async () => llmobs.onFinally()),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
// Clean up spans if error occurs before streams are created
|
|
77
|
+
llmobs.handleStreamError(error);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=llmobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmobs.js","sourceRoot":"","sources":["../../../../../src/ai-service/llm/interaction/middlewares/llmobs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,0BAA0B,EAC1B,UAAU,GACX,MAAM,2CAA2C,CAAC;AAsBnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAmC,EAAE;IAErC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEnC,OAAO;QACL,IAAI,CAAC,QAA4B;YAC/B,OAAO;gBACL,KAAK,CAAC,UAAU,CACd,aAAuC;oBAEvC,oCAAoC;oBACpC,MAAM,MAAM,GAAG,IAAI,0BAA0B,CAC3C,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,KAAK,EACnB,MAAM,EACN,MAAM,CACP,CAAC;oBAEF,IAAI,CAAC;wBACH,iDAAiD;wBACjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAQ;4BAC9C,GAAG,aAAa;4BAChB,KAAK,EAAE,aAAa,CAAC,KAAK;gCACxB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;gCACvC,CAAC,CAAC,SAAS;4BACb,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gCAC1B,OAAO,MAAM,MAAM,CAAC,WAAW,CAC7B,IAAI,EACJ,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,WAAW,CAC1B,CAAC;4BACJ,CAAC;4BACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gCACvB,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;4BAC3D,CAAC;4BACD,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gCAC3B,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;4BAC9D,CAAC;4BACD,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gCACzB,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;4BACxD,CAAC;4BACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gCACvB,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;4BACrD,CAAC;4BACD,OAAO,EAAE,KAAK,IAAI,EAAE;gCAClB,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;4BAC9C,CAAC;yBACF,CAAC,CAAC;wBAEH,+EAA+E;wBAC/E,iEAAiE;wBACjE,OAAO;4BACL,GAAG,MAAM;4BACT,UAAU,EAAE,UAAU,CACpB,MAAM,CAAC,UAAU,EACjB,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAChD,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAC/B;4BACD,UAAU,EAAE,UAAU,CACpB,MAAM,CAAC,UAAU,EACjB,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAChD,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAC/B;yBACF,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,4DAA4D;wBAC5D,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;wBAChC,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|