@providerprotocol/ai 0.0.37 → 0.0.39
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/README.md +94 -3
- package/dist/anthropic/index.d.ts +3 -2
- package/dist/cerebras/index.d.ts +3 -2
- package/dist/chunk-3Q5VELKG.js +124 -0
- package/dist/chunk-3Q5VELKG.js.map +1 -0
- package/dist/{chunk-LTEMH3CI.js → chunk-5XPRVUOK.js} +6 -4
- package/dist/{chunk-LTEMH3CI.js.map → chunk-5XPRVUOK.js.map} +1 -1
- package/dist/chunk-7ULSRWDH.js +83 -0
- package/dist/chunk-7ULSRWDH.js.map +1 -0
- package/dist/{chunk-YQLR3XOA.js → chunk-BIBMNP7Y.js} +1 -75
- package/dist/chunk-BIBMNP7Y.js.map +1 -0
- package/dist/{chunk-7GTWHZY2.js → chunk-IDZR4ROP.js} +5 -3
- package/dist/{chunk-7GTWHZY2.js.map → chunk-IDZR4ROP.js.map} +1 -1
- package/dist/{chunk-4RX4VQCB.js → chunk-IIMTP3XC.js} +2 -2
- package/dist/{chunk-ZRVNAET3.js → chunk-KNBODIQU.js} +6 -3
- package/dist/chunk-KNBODIQU.js.map +1 -0
- package/dist/{chunk-FYSZFIZS.js → chunk-O32SBS6S.js} +5 -3
- package/dist/{chunk-FYSZFIZS.js.map → chunk-O32SBS6S.js.map} +1 -1
- package/dist/{chunk-IK6NRCW5.js → chunk-RDC5GYST.js} +7 -7
- package/dist/{chunk-5IWHCXKN.js → chunk-SAMIK4WZ.js} +2 -2
- package/dist/{chunk-EPB3GQNL.js → chunk-U6M3MXNI.js} +11 -2
- package/dist/chunk-U6M3MXNI.js.map +1 -0
- package/dist/{chunk-2YXFLRQ6.js → chunk-WNB5PSY6.js} +2 -2
- package/dist/{chunk-CRP6Y7NF.js → chunk-ZDYEDI2A.js} +2 -2
- package/dist/{embedding-CwZ1ZNWv.d.ts → embedding-iNQCeXfk.d.ts} +1 -1
- package/dist/google/index.d.ts +3 -2
- package/dist/groq/index.d.ts +3 -2
- package/dist/http/index.d.ts +4 -3
- package/dist/{image-stream-CeQHtjxS.d.ts → image-stream-ARno6XlS.d.ts} +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/{llm-DS_-l71X.d.ts → llm-CZqlijjK.d.ts} +16 -9
- package/dist/middleware/logging/index.d.ts +3 -2
- package/dist/middleware/parsed-object/index.d.ts +3 -2
- package/dist/middleware/persistence/index.d.ts +3 -2
- package/dist/middleware/pubsub/index.d.ts +5 -4
- package/dist/middleware/pubsub/index.js +49 -3
- package/dist/middleware/pubsub/index.js.map +1 -1
- package/dist/middleware/pubsub/server/express/index.d.ts +3 -2
- package/dist/middleware/pubsub/server/express/index.js +2 -2
- package/dist/middleware/pubsub/server/fastify/index.d.ts +3 -2
- package/dist/middleware/pubsub/server/fastify/index.js +2 -2
- package/dist/middleware/pubsub/server/h3/index.d.ts +3 -2
- package/dist/middleware/pubsub/server/h3/index.js +2 -2
- package/dist/middleware/pubsub/server/index.d.ts +3 -2
- package/dist/middleware/pubsub/server/index.js +5 -5
- package/dist/middleware/pubsub/server/webapi/index.d.ts +3 -2
- package/dist/middleware/pubsub/server/webapi/index.js +2 -2
- package/dist/moonshot/index.d.ts +511 -0
- package/dist/moonshot/index.js +1090 -0
- package/dist/moonshot/index.js.map +1 -0
- package/dist/ollama/index.d.ts +3 -2
- package/dist/openai/index.d.ts +3 -2
- package/dist/openrouter/index.d.ts +3 -2
- package/dist/proxy/index.d.ts +5 -4
- package/dist/proxy/index.js +12 -10
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/server/express/index.d.ts +5 -4
- package/dist/proxy/server/express/index.js +3 -2
- package/dist/proxy/server/fastify/index.d.ts +5 -4
- package/dist/proxy/server/fastify/index.js +3 -2
- package/dist/proxy/server/h3/index.d.ts +19 -17
- package/dist/proxy/server/h3/index.js +3 -2
- package/dist/proxy/server/index.d.ts +5 -4
- package/dist/proxy/server/index.js +9 -8
- package/dist/proxy/server/webapi/index.d.ts +5 -4
- package/dist/proxy/server/webapi/index.js +3 -2
- package/dist/responses/index.d.ts +3 -2
- package/dist/{retry-CgoBNa51.d.ts → retry-C1eJbEMV.d.ts} +1 -1
- package/dist/{stream-sXhBtWjl.d.ts → stream-DVVUIKpz.d.ts} +3 -416
- package/dist/tool-D22EhP5F.d.ts +507 -0
- package/dist/{types-Cr4F0tVy.d.ts → types-CyXF0J7C.d.ts} +16 -3
- package/dist/utils/index.d.ts +65 -1
- package/dist/utils/index.js +15 -1
- package/dist/xai/index.d.ts +3 -2
- package/package.json +22 -3
- package/dist/chunk-EPB3GQNL.js.map +0 -1
- package/dist/chunk-YQLR3XOA.js.map +0 -1
- package/dist/chunk-ZRVNAET3.js.map +0 -1
- /package/dist/{chunk-4RX4VQCB.js.map → chunk-IIMTP3XC.js.map} +0 -0
- /package/dist/{chunk-IK6NRCW5.js.map → chunk-RDC5GYST.js.map} +0 -0
- /package/dist/{chunk-5IWHCXKN.js.map → chunk-SAMIK4WZ.js.map} +0 -0
- /package/dist/{chunk-2YXFLRQ6.js.map → chunk-WNB5PSY6.js.map} +0 -0
- /package/dist/{chunk-CRP6Y7NF.js.map → chunk-ZDYEDI2A.js.map} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { I as ImageSource, c as ImageBlock, T as Turn, S as StreamEvent,
|
|
1
|
+
import { I as ImageSource, c as ImageBlock, T as Turn, S as StreamEvent, M as Message, U as UserContent, A as AssistantContent, d as MessageType, a as MessageJSON, e as AssistantMessage, f as TokenUsage, C as ContentBlock, g as StreamResult } from './stream-DVVUIKpz.js';
|
|
2
|
+
import { b as Tool, T as ToolInput, f as ToolUseStrategy, S as Structure, J as JSONSchema } from './tool-D22EhP5F.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* @fileoverview Error types for the Unified Provider Protocol.
|
|
@@ -1590,12 +1591,12 @@ interface LLMOptions<TParams = unknown> {
|
|
|
1590
1591
|
* Array formats are passed through directly to the provider.
|
|
1591
1592
|
*/
|
|
1592
1593
|
system?: string | unknown[];
|
|
1593
|
-
/** Tools available to the model */
|
|
1594
|
-
tools?:
|
|
1594
|
+
/** Tools available to the model (accepts Zod schemas for parameters) */
|
|
1595
|
+
tools?: ToolInput[];
|
|
1595
1596
|
/** Tool execution strategy */
|
|
1596
1597
|
toolStrategy?: ToolUseStrategy;
|
|
1597
|
-
/** Structured output schema (JSON Schema) */
|
|
1598
|
-
structure?:
|
|
1598
|
+
/** Structured output schema (JSON Schema or Zod schema) */
|
|
1599
|
+
structure?: Structure;
|
|
1599
1600
|
/**
|
|
1600
1601
|
* Middleware for intercepting and transforming requests, responses, and streams.
|
|
1601
1602
|
*
|
|
@@ -1648,27 +1649,33 @@ interface LLMInstance<TParams = unknown> {
|
|
|
1648
1649
|
* Executes inference and returns the complete Turn.
|
|
1649
1650
|
*
|
|
1650
1651
|
* Supports multiple calling patterns:
|
|
1652
|
+
* - No input (system-only): `generate()`
|
|
1651
1653
|
* - Single input: `generate('Hello')`
|
|
1652
1654
|
* - Multiple inputs: `generate('Context...', 'Question?')`
|
|
1653
1655
|
* - With history: `generate(messages, 'Follow-up?')`
|
|
1654
1656
|
* - With thread: `generate(thread, 'Next message')`
|
|
1655
1657
|
*
|
|
1656
|
-
* @param historyOrInput -
|
|
1658
|
+
* @param historyOrInput - Optional history (Message[] or Thread) or first input
|
|
1657
1659
|
* @param input - Additional inputs to include in the request
|
|
1658
1660
|
* @returns Promise resolving to the complete Turn
|
|
1659
1661
|
*/
|
|
1660
|
-
generate(historyOrInput
|
|
1662
|
+
generate(historyOrInput?: Message[] | Thread | InferenceInput, ...input: InferenceInput[]): Promise<Turn>;
|
|
1661
1663
|
/**
|
|
1662
1664
|
* Executes streaming inference.
|
|
1663
1665
|
*
|
|
1664
1666
|
* Returns an async iterable of stream events that can also
|
|
1665
1667
|
* be awaited for the final Turn.
|
|
1666
1668
|
*
|
|
1667
|
-
*
|
|
1669
|
+
* Supports multiple calling patterns:
|
|
1670
|
+
* - No input (system-only): `stream()`
|
|
1671
|
+
* - Single input: `stream('Hello')`
|
|
1672
|
+
* - With history: `stream(messages, 'Follow-up?')`
|
|
1673
|
+
*
|
|
1674
|
+
* @param historyOrInput - Optional history (Message[] or Thread) or first input
|
|
1668
1675
|
* @param input - Additional inputs to include in the request
|
|
1669
1676
|
* @returns StreamResult that yields events and resolves to Turn
|
|
1670
1677
|
*/
|
|
1671
|
-
stream(historyOrInput
|
|
1678
|
+
stream(historyOrInput?: Message[] | Thread | InferenceInput, ...input: InferenceInput[]): StreamResult;
|
|
1672
1679
|
/** The bound model instance */
|
|
1673
1680
|
readonly model: BoundLLMModel<TParams>;
|
|
1674
1681
|
/** Current system prompt (string or provider-specific array format) */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { M as Middleware } from '../../llm-
|
|
2
|
-
import '../../stream-
|
|
1
|
+
import { M as Middleware } from '../../llm-CZqlijjK.js';
|
|
2
|
+
import '../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview Logging middleware for request/response visibility.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { M as Middleware } from '../../llm-
|
|
2
|
-
import { E as EventDelta, S as StreamEvent } from '../../stream-
|
|
1
|
+
import { M as Middleware } from '../../llm-CZqlijjK.js';
|
|
2
|
+
import { E as EventDelta, S as StreamEvent } from '../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview Parsed object middleware for incremental JSON parsing.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { T as Thread, a as ThreadJSON, M as Middleware } from '../../llm-
|
|
2
|
-
import { T as Turn } from '../../stream-
|
|
1
|
+
import { T as Thread, a as ThreadJSON, M as Middleware } from '../../llm-CZqlijjK.js';
|
|
2
|
+
import { T as Turn } from '../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview Persistence middleware for thread storage.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { M as Middleware } from '../../llm-
|
|
2
|
-
import { M as MemoryAdapterOptions, P as PubSubAdapter, a as PubSubOptions } from '../../types-
|
|
3
|
-
export { C as CompletionCallback, S as StoredStream, b as SubscriptionCallback, U as Unsubscribe } from '../../types-
|
|
4
|
-
import '../../stream-
|
|
1
|
+
import { M as Middleware } from '../../llm-CZqlijjK.js';
|
|
2
|
+
import { M as MemoryAdapterOptions, P as PubSubAdapter, a as PubSubOptions } from '../../types-CyXF0J7C.js';
|
|
3
|
+
export { C as CompletionCallback, F as FinalDataCallback, S as StoredStream, b as SubscriptionCallback, U as Unsubscribe } from '../../types-CyXF0J7C.js';
|
|
4
|
+
import '../../stream-DVVUIKpz.js';
|
|
5
|
+
import '../../tool-D22EhP5F.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* @fileoverview In-memory storage adapter for pub-sub middleware.
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
serializeTurn
|
|
3
|
+
} from "../../chunk-7ULSRWDH.js";
|
|
4
|
+
import "../../chunk-ETBFOLQN.js";
|
|
5
|
+
import "../../chunk-WU4U6IHF.js";
|
|
6
|
+
import "../../chunk-COS4ON4G.js";
|
|
7
|
+
|
|
1
8
|
// src/middleware/pubsub/memory-adapter.ts
|
|
2
9
|
function memoryAdapter(options = {}) {
|
|
3
10
|
const { maxStreams = 1e3 } = options;
|
|
@@ -42,9 +49,9 @@ function memoryAdapter(options = {}) {
|
|
|
42
49
|
const entry = streams.get(streamId);
|
|
43
50
|
return entry ? [...entry.stream.events] : [];
|
|
44
51
|
},
|
|
45
|
-
subscribe(streamId, onEvent, onComplete) {
|
|
52
|
+
subscribe(streamId, onEvent, onComplete, onFinalData) {
|
|
46
53
|
const entry = getOrCreate(streamId);
|
|
47
|
-
const subscriber = { onEvent, onComplete };
|
|
54
|
+
const subscriber = { onEvent, onComplete, onFinalData };
|
|
48
55
|
entry.subscribers.add(subscriber);
|
|
49
56
|
return () => {
|
|
50
57
|
entry.subscribers.delete(subscriber);
|
|
@@ -62,10 +69,21 @@ function memoryAdapter(options = {}) {
|
|
|
62
69
|
});
|
|
63
70
|
}
|
|
64
71
|
},
|
|
72
|
+
setFinalData(streamId, data) {
|
|
73
|
+
const entry = streams.get(streamId);
|
|
74
|
+
if (entry) {
|
|
75
|
+
entry.finalData = data;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
65
78
|
async remove(streamId) {
|
|
66
79
|
const entry = streams.get(streamId);
|
|
67
80
|
if (entry) {
|
|
68
81
|
for (const subscriber of entry.subscribers) {
|
|
82
|
+
if (entry.finalData !== void 0 && subscriber.onFinalData) {
|
|
83
|
+
scheduleCallback(() => {
|
|
84
|
+
subscriber.onFinalData(entry.finalData);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
69
87
|
scheduleCallback(subscriber.onComplete);
|
|
70
88
|
}
|
|
71
89
|
streams.delete(streamId);
|
|
@@ -77,6 +95,7 @@ function memoryAdapter(options = {}) {
|
|
|
77
95
|
// src/middleware/pubsub/index.ts
|
|
78
96
|
var STATE_KEY_STREAM_ID = "pubsub:streamId";
|
|
79
97
|
var STATE_KEY_ADAPTER = "pubsub:adapter";
|
|
98
|
+
var STATE_KEY_STREAM_ENDED = "pubsub:streamEnded";
|
|
80
99
|
function getStreamId(state) {
|
|
81
100
|
return state.get(STATE_KEY_STREAM_ID);
|
|
82
101
|
}
|
|
@@ -141,7 +160,34 @@ function pubsubMiddleware(options = {}) {
|
|
|
141
160
|
return event;
|
|
142
161
|
},
|
|
143
162
|
async onStreamEnd(ctx) {
|
|
144
|
-
|
|
163
|
+
const id = ctx.state.get(STATE_KEY_STREAM_ID);
|
|
164
|
+
if (!id) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
await waitForAppends(id);
|
|
168
|
+
clearAppendState(id);
|
|
169
|
+
ctx.state.set(STATE_KEY_STREAM_ENDED, true);
|
|
170
|
+
},
|
|
171
|
+
async onTurn(turn, ctx) {
|
|
172
|
+
const id = ctx.state.get(STATE_KEY_STREAM_ID);
|
|
173
|
+
const streamEnded = ctx.state.get(STATE_KEY_STREAM_ENDED);
|
|
174
|
+
if (!id) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (streamEnded) {
|
|
178
|
+
adapter.setFinalData(id, serializeTurn(turn));
|
|
179
|
+
await adapter.remove(id).catch(() => {
|
|
180
|
+
});
|
|
181
|
+
} else {
|
|
182
|
+
const exists = await adapter.exists(id);
|
|
183
|
+
if (exists) {
|
|
184
|
+
console.warn(
|
|
185
|
+
`[pubsub] streamId "${id}" was configured but .generate() was used instead of .stream(). Pubsub middleware only works with streaming. Cleaning up orphan stream.`
|
|
186
|
+
);
|
|
187
|
+
await adapter.remove(id).catch(() => {
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
145
191
|
},
|
|
146
192
|
async onError(_error, ctx) {
|
|
147
193
|
await finalizeStreamByState(ctx.state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/middleware/pubsub/memory-adapter.ts","../../../src/middleware/pubsub/index.ts"],"sourcesContent":["/**\n * @fileoverview In-memory storage adapter for pub-sub middleware.\n *\n * Provides a simple Map-based implementation for temporary stream\n * storage during active generation.\n *\n * @module middleware/pubsub/memory-adapter\n */\n\nimport type { StreamEvent } from '../../types/stream.ts';\nimport type {\n PubSubAdapter,\n StoredStream,\n SubscriptionCallback,\n CompletionCallback,\n Unsubscribe,\n MemoryAdapterOptions,\n} from './types.ts';\n\ninterface MutableStoredStream {\n streamId: string;\n createdAt: number;\n events: StreamEvent[];\n}\n\ninterface Subscriber {\n onEvent: SubscriptionCallback;\n onComplete: CompletionCallback;\n}\n\ninterface StreamEntry {\n stream: MutableStoredStream;\n subscribers: Set<Subscriber>;\n}\n\n/**\n * Creates an in-memory storage adapter for pub-sub middleware.\n *\n * Stores streams in a Map. Throws when maxStreams is exceeded.\n * Streams are created lazily on first append or subscribe.\n *\n * @param options - Adapter configuration\n * @returns A PubSubAdapter instance\n *\n * @example\n * ```typescript\n * import { pubsubMiddleware, memoryAdapter } from '@providerprotocol/ai/middleware/pubsub';\n *\n * const adapter = memoryAdapter({ maxStreams: 500 });\n * ```\n */\nexport function memoryAdapter(options: MemoryAdapterOptions = {}): PubSubAdapter {\n const { maxStreams = 1000 } = options;\n\n const streams = new Map<string, StreamEntry>();\n const eventCursors = new WeakMap<StreamEvent, number>();\n\n const scheduleCallback = (callback: () => void): void => {\n queueMicrotask(() => {\n try {\n callback();\n } catch {\n // Subscriber errors should not affect other subscribers\n }\n });\n };\n\n const getOrCreate = (streamId: string): StreamEntry => {\n let entry = streams.get(streamId);\n if (!entry) {\n if (streams.size >= maxStreams) {\n throw new Error(`Maximum concurrent streams (${maxStreams}) exceeded`);\n }\n entry = {\n stream: {\n streamId,\n createdAt: Date.now(),\n events: [],\n },\n subscribers: new Set(),\n };\n streams.set(streamId, entry);\n }\n return entry;\n };\n\n return {\n async exists(streamId): Promise<boolean> {\n return streams.has(streamId);\n },\n\n async append(streamId, event): Promise<void> {\n const entry = getOrCreate(streamId);\n entry.stream.events.push(event);\n eventCursors.set(event, entry.stream.events.length - 1);\n },\n\n async getEvents(streamId): Promise<StreamEvent[]> {\n const entry = streams.get(streamId);\n return entry ? [...entry.stream.events] : [];\n },\n\n subscribe(streamId, onEvent, onComplete): Unsubscribe {\n const entry = getOrCreate(streamId);\n const subscriber: Subscriber = { onEvent, onComplete };\n entry.subscribers.add(subscriber);\n\n return () => {\n entry.subscribers.delete(subscriber);\n };\n },\n\n publish(streamId, event): void {\n const entry = streams.get(streamId);\n if (!entry) {\n return;\n }\n\n const cursor = eventCursors.get(event) ?? entry.stream.events.length - 1;\n for (const subscriber of entry.subscribers) {\n scheduleCallback(() => {\n subscriber.onEvent(event, cursor);\n });\n }\n },\n\n async remove(streamId): Promise<void> {\n const entry = streams.get(streamId);\n if (entry) {\n for (const subscriber of entry.subscribers) {\n scheduleCallback(subscriber.onComplete);\n }\n streams.delete(streamId);\n }\n },\n };\n}\n","/**\n * @fileoverview Pub-sub middleware for stream resumption.\n *\n * Enables reconnecting clients to catch up on missed events during\n * active generation. The middleware buffers events and publishes them\n * to subscribers. Server routes handle reconnection logic using the\n * exported `createSubscriberStream` utility.\n *\n * @module middleware/pubsub\n */\n\nimport type {\n Middleware,\n MiddlewareContext,\n StreamContext,\n} from '../../types/middleware.ts';\nimport type { StreamEvent } from '../../types/stream.ts';\nimport type { PubSubAdapter, PubSubOptions } from './types.ts';\nimport { memoryAdapter } from './memory-adapter.ts';\n\nexport type {\n PubSubAdapter,\n PubSubOptions,\n StoredStream,\n SubscriptionCallback,\n CompletionCallback,\n Unsubscribe,\n MemoryAdapterOptions,\n} from './types.ts';\nexport { memoryAdapter } from './memory-adapter.ts';\n\nconst STATE_KEY_STREAM_ID = 'pubsub:streamId';\nconst STATE_KEY_ADAPTER = 'pubsub:adapter';\n\ninterface AppendChainState {\n chain: Promise<void>;\n}\n\n/**\n * Gets the stream ID from middleware state.\n *\n * @param state - Middleware state map\n * @returns Stream ID or undefined if not set\n */\nexport function getStreamId(state: Map<string, unknown>): string | undefined {\n return state.get(STATE_KEY_STREAM_ID) as string | undefined;\n}\n\n/**\n * Gets the adapter from middleware state.\n *\n * @param state - Middleware state map\n * @returns Adapter or undefined if not set\n */\nexport function getAdapter(state: Map<string, unknown>): PubSubAdapter | undefined {\n return state.get(STATE_KEY_ADAPTER) as PubSubAdapter | undefined;\n}\n\n/**\n * Creates pub-sub middleware for stream buffering and publishing.\n *\n * The middleware:\n * - Creates stream entries for new requests\n * - Buffers all stream events\n * - Publishes events to subscribers\n * - On stream end: notifies subscribers, then removes from adapter\n *\n * Server routes handle reconnection logic using `streamSubscriber`.\n *\n * @param options - Middleware configuration\n * @returns Middleware instance\n *\n * @example\n * ```typescript\n * import { llm } from '@providerprotocol/ai';\n * import { anthropic } from '@providerprotocol/ai/anthropic';\n * import { pubsubMiddleware, memoryAdapter } from '@providerprotocol/ai/middleware/pubsub';\n * import { h3 } from '@providerprotocol/ai/middleware/pubsub/server';\n *\n * const adapter = memoryAdapter();\n *\n * export default defineEventHandler(async (event) => {\n * const { input, conversationId } = await readBody(event);\n *\n * // Fire and forget - subscriber connects immediately, events flow when ready\n * const model = llm({\n * model: anthropic('claude-sonnet-4-20250514'),\n * middleware: [pubsubMiddleware({ adapter, streamId: conversationId })],\n * });\n * model.stream(input).then(turn => saveToDatabase(turn));\n *\n * return h3.streamSubscriber(conversationId, adapter, event);\n * });\n * ```\n */\nexport function pubsubMiddleware(options: PubSubOptions = {}): Middleware {\n const {\n adapter = memoryAdapter(),\n streamId,\n } = options;\n\n const appendChains = new Map<string, AppendChainState>();\n\n const enqueueAppend = (id: string, event: StreamEvent): void => {\n const state = appendChains.get(id) ?? { chain: Promise.resolve() };\n\n const task = state.chain\n .catch(() => {})\n .then(async () => {\n await adapter.append(id, event);\n adapter.publish(id, event);\n });\n\n state.chain = task.catch(() => {});\n appendChains.set(id, state);\n };\n\n const waitForAppends = async (id: string): Promise<void> => {\n const state = appendChains.get(id);\n if (!state) {\n return;\n }\n\n await state.chain.catch(() => {});\n };\n\n const clearAppendState = (id: string): void => {\n appendChains.delete(id);\n };\n\n /**\n * Finalizes a stream by marking completion and removing from adapter.\n *\n * Called on any terminal state (complete, error, abort). After finalization,\n * the stream is removed from the adapter. Apps should use `.then()` to persist\n * completed conversations and serve them from their own storage on reconnect.\n */\n const finalizeStreamByState = async (state: Map<string, unknown>): Promise<void> => {\n const id = state.get(STATE_KEY_STREAM_ID) as string | undefined;\n if (!id) {\n return;\n }\n\n await waitForAppends(id);\n clearAppendState(id);\n\n // Remove from adapter (notifies subscribers) - apps persist via .then()\n await adapter.remove(id).catch(() => {});\n };\n\n return {\n name: 'pubsub',\n\n onStart(ctx: MiddlewareContext): void {\n ctx.state.set(STATE_KEY_ADAPTER, adapter);\n\n if (streamId) {\n ctx.state.set(STATE_KEY_STREAM_ID, streamId);\n // Ensure stream exists immediately so exists() returns true\n // before first token arrives (prevents duplicate generations)\n adapter.subscribe(streamId, () => {}, () => {})();\n }\n },\n\n onStreamEvent(event: StreamEvent, ctx: StreamContext): StreamEvent {\n const id = ctx.state.get(STATE_KEY_STREAM_ID) as string | undefined;\n if (!id) {\n return event;\n }\n\n enqueueAppend(id, event);\n\n return event;\n },\n\n async onStreamEnd(ctx: StreamContext): Promise<void> {\n await finalizeStreamByState(ctx.state);\n },\n\n async onError(_error: Error, ctx: MiddlewareContext): Promise<void> {\n await finalizeStreamByState(ctx.state);\n },\n\n async onAbort(_error: Error, ctx: MiddlewareContext): Promise<void> {\n await finalizeStreamByState(ctx.state);\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/middleware/pubsub/memory-adapter.ts","../../../src/middleware/pubsub/index.ts"],"sourcesContent":["/**\n * @fileoverview In-memory storage adapter for pub-sub middleware.\n *\n * Provides a simple Map-based implementation for temporary stream\n * storage during active generation.\n *\n * @module middleware/pubsub/memory-adapter\n */\n\nimport type { StreamEvent } from '../../types/stream.ts';\nimport type {\n PubSubAdapter,\n StoredStream,\n SubscriptionCallback,\n CompletionCallback,\n FinalDataCallback,\n Unsubscribe,\n MemoryAdapterOptions,\n} from './types.ts';\n\ninterface MutableStoredStream {\n streamId: string;\n createdAt: number;\n events: StreamEvent[];\n}\n\ninterface Subscriber {\n onEvent: SubscriptionCallback;\n onComplete: CompletionCallback;\n onFinalData?: FinalDataCallback;\n}\n\ninterface StreamEntry {\n stream: MutableStoredStream;\n subscribers: Set<Subscriber>;\n finalData?: unknown;\n}\n\n/**\n * Creates an in-memory storage adapter for pub-sub middleware.\n *\n * Stores streams in a Map. Throws when maxStreams is exceeded.\n * Streams are created lazily on first append or subscribe.\n *\n * @param options - Adapter configuration\n * @returns A PubSubAdapter instance\n *\n * @example\n * ```typescript\n * import { pubsubMiddleware, memoryAdapter } from '@providerprotocol/ai/middleware/pubsub';\n *\n * const adapter = memoryAdapter({ maxStreams: 500 });\n * ```\n */\nexport function memoryAdapter(options: MemoryAdapterOptions = {}): PubSubAdapter {\n const { maxStreams = 1000 } = options;\n\n const streams = new Map<string, StreamEntry>();\n const eventCursors = new WeakMap<StreamEvent, number>();\n\n const scheduleCallback = (callback: () => void): void => {\n queueMicrotask(() => {\n try {\n callback();\n } catch {\n // Subscriber errors should not affect other subscribers\n }\n });\n };\n\n const getOrCreate = (streamId: string): StreamEntry => {\n let entry = streams.get(streamId);\n if (!entry) {\n if (streams.size >= maxStreams) {\n throw new Error(`Maximum concurrent streams (${maxStreams}) exceeded`);\n }\n entry = {\n stream: {\n streamId,\n createdAt: Date.now(),\n events: [],\n },\n subscribers: new Set(),\n };\n streams.set(streamId, entry);\n }\n return entry;\n };\n\n return {\n async exists(streamId): Promise<boolean> {\n return streams.has(streamId);\n },\n\n async append(streamId, event): Promise<void> {\n const entry = getOrCreate(streamId);\n entry.stream.events.push(event);\n eventCursors.set(event, entry.stream.events.length - 1);\n },\n\n async getEvents(streamId): Promise<StreamEvent[]> {\n const entry = streams.get(streamId);\n return entry ? [...entry.stream.events] : [];\n },\n\n subscribe(streamId, onEvent, onComplete, onFinalData): Unsubscribe {\n const entry = getOrCreate(streamId);\n const subscriber: Subscriber = { onEvent, onComplete, onFinalData };\n entry.subscribers.add(subscriber);\n\n return () => {\n entry.subscribers.delete(subscriber);\n };\n },\n\n publish(streamId, event): void {\n const entry = streams.get(streamId);\n if (!entry) {\n return;\n }\n\n const cursor = eventCursors.get(event) ?? entry.stream.events.length - 1;\n for (const subscriber of entry.subscribers) {\n scheduleCallback(() => {\n subscriber.onEvent(event, cursor);\n });\n }\n },\n\n setFinalData(streamId, data): void {\n const entry = streams.get(streamId);\n if (entry) {\n entry.finalData = data;\n }\n },\n\n async remove(streamId): Promise<void> {\n const entry = streams.get(streamId);\n if (entry) {\n for (const subscriber of entry.subscribers) {\n if (entry.finalData !== undefined && subscriber.onFinalData) {\n scheduleCallback(() => {\n subscriber.onFinalData!(entry.finalData);\n });\n }\n scheduleCallback(subscriber.onComplete);\n }\n streams.delete(streamId);\n }\n },\n };\n}\n","/**\n * @fileoverview Pub-sub middleware for stream resumption.\n *\n * Enables reconnecting clients to catch up on missed events during\n * active generation. The middleware buffers events and publishes them\n * to subscribers. Server routes handle reconnection logic using the\n * exported `createSubscriberStream` utility.\n *\n * @module middleware/pubsub\n */\n\nimport type {\n Middleware,\n MiddlewareContext,\n StreamContext,\n} from '../../types/middleware.ts';\nimport type { StreamEvent } from '../../types/stream.ts';\nimport type { Turn } from '../../types/turn.ts';\nimport type { PubSubAdapter, PubSubOptions } from './types.ts';\nimport { memoryAdapter } from './memory-adapter.ts';\nimport { serializeTurn } from '../../providers/proxy/serialization.ts';\n\nexport type {\n PubSubAdapter,\n PubSubOptions,\n StoredStream,\n SubscriptionCallback,\n CompletionCallback,\n FinalDataCallback,\n Unsubscribe,\n MemoryAdapterOptions,\n} from './types.ts';\nexport { memoryAdapter } from './memory-adapter.ts';\n\nconst STATE_KEY_STREAM_ID = 'pubsub:streamId';\nconst STATE_KEY_ADAPTER = 'pubsub:adapter';\nconst STATE_KEY_STREAM_ENDED = 'pubsub:streamEnded';\n\ninterface AppendChainState {\n chain: Promise<void>;\n}\n\n/**\n * Gets the stream ID from middleware state.\n *\n * @param state - Middleware state map\n * @returns Stream ID or undefined if not set\n */\nexport function getStreamId(state: Map<string, unknown>): string | undefined {\n return state.get(STATE_KEY_STREAM_ID) as string | undefined;\n}\n\n/**\n * Gets the adapter from middleware state.\n *\n * @param state - Middleware state map\n * @returns Adapter or undefined if not set\n */\nexport function getAdapter(state: Map<string, unknown>): PubSubAdapter | undefined {\n return state.get(STATE_KEY_ADAPTER) as PubSubAdapter | undefined;\n}\n\n/**\n * Creates pub-sub middleware for stream buffering and publishing.\n *\n * The middleware:\n * - Creates stream entries for new requests\n * - Buffers all stream events\n * - Publishes events to subscribers\n * - On stream end: notifies subscribers, then removes from adapter\n *\n * Server routes handle reconnection logic using `streamSubscriber`.\n *\n * @param options - Middleware configuration\n * @returns Middleware instance\n *\n * @example\n * ```typescript\n * import { llm } from '@providerprotocol/ai';\n * import { anthropic } from '@providerprotocol/ai/anthropic';\n * import { pubsubMiddleware, memoryAdapter } from '@providerprotocol/ai/middleware/pubsub';\n * import { h3 } from '@providerprotocol/ai/middleware/pubsub/server';\n *\n * const adapter = memoryAdapter();\n *\n * export default defineEventHandler(async (event) => {\n * const { input, conversationId } = await readBody(event);\n *\n * // Fire and forget - subscriber connects immediately, events flow when ready\n * const model = llm({\n * model: anthropic('claude-sonnet-4-20250514'),\n * middleware: [pubsubMiddleware({ adapter, streamId: conversationId })],\n * });\n * model.stream(input).then(turn => saveToDatabase(turn));\n *\n * return h3.streamSubscriber(conversationId, adapter, event);\n * });\n * ```\n */\nexport function pubsubMiddleware(options: PubSubOptions = {}): Middleware {\n const {\n adapter = memoryAdapter(),\n streamId,\n } = options;\n\n const appendChains = new Map<string, AppendChainState>();\n\n const enqueueAppend = (id: string, event: StreamEvent): void => {\n const state = appendChains.get(id) ?? { chain: Promise.resolve() };\n\n const task = state.chain\n .catch(() => {})\n .then(async () => {\n await adapter.append(id, event);\n adapter.publish(id, event);\n });\n\n state.chain = task.catch(() => {});\n appendChains.set(id, state);\n };\n\n const waitForAppends = async (id: string): Promise<void> => {\n const state = appendChains.get(id);\n if (!state) {\n return;\n }\n\n await state.chain.catch(() => {});\n };\n\n const clearAppendState = (id: string): void => {\n appendChains.delete(id);\n };\n\n /**\n * Finalizes a stream by marking completion and removing from adapter.\n *\n * Called on any terminal state (complete, error, abort). After finalization,\n * the stream is removed from the adapter. Apps should use `.then()` to persist\n * completed conversations and serve them from their own storage on reconnect.\n */\n const finalizeStreamByState = async (state: Map<string, unknown>): Promise<void> => {\n const id = state.get(STATE_KEY_STREAM_ID) as string | undefined;\n if (!id) {\n return;\n }\n\n await waitForAppends(id);\n clearAppendState(id);\n\n // Remove from adapter (notifies subscribers) - apps persist via .then()\n await adapter.remove(id).catch(() => {});\n };\n\n return {\n name: 'pubsub',\n\n onStart(ctx: MiddlewareContext): void {\n ctx.state.set(STATE_KEY_ADAPTER, adapter);\n\n if (streamId) {\n ctx.state.set(STATE_KEY_STREAM_ID, streamId);\n // Ensure stream exists immediately so exists() returns true\n // before first token arrives (prevents duplicate generations)\n adapter.subscribe(streamId, () => {}, () => {})();\n }\n },\n\n onStreamEvent(event: StreamEvent, ctx: StreamContext): StreamEvent {\n const id = ctx.state.get(STATE_KEY_STREAM_ID) as string | undefined;\n if (!id) {\n return event;\n }\n\n enqueueAppend(id, event);\n\n return event;\n },\n\n async onStreamEnd(ctx: StreamContext): Promise<void> {\n const id = ctx.state.get(STATE_KEY_STREAM_ID) as string | undefined;\n if (!id) {\n return;\n }\n // Wait for all appends to complete but don't finalize yet\n // onTurn will be called next with the Turn data\n await waitForAppends(id);\n clearAppendState(id);\n ctx.state.set(STATE_KEY_STREAM_ENDED, true);\n },\n\n async onTurn(turn: Turn, ctx: MiddlewareContext): Promise<void> {\n const id = ctx.state.get(STATE_KEY_STREAM_ID) as string | undefined;\n const streamEnded = ctx.state.get(STATE_KEY_STREAM_ENDED) as boolean | undefined;\n\n if (!id) {\n return;\n }\n\n // Only emit Turn if we were streaming (onStreamEnd was called)\n if (streamEnded) {\n // Set the final Turn data so subscribers receive it before completion\n adapter.setFinalData(id, serializeTurn(turn));\n // Now remove the stream (notifies subscribers with final data + completion)\n await adapter.remove(id).catch(() => {});\n } else {\n // streamId was set but .generate() was used instead of .stream()\n // Clean up the orphan stream entry and warn about misuse\n const exists = await adapter.exists(id);\n if (exists) {\n console.warn(\n `[pubsub] streamId \"${id}\" was configured but .generate() was used instead of .stream(). ` +\n `Pubsub middleware only works with streaming. Cleaning up orphan stream.`\n );\n await adapter.remove(id).catch(() => {});\n }\n }\n },\n\n async onError(_error: Error, ctx: MiddlewareContext): Promise<void> {\n await finalizeStreamByState(ctx.state);\n },\n\n async onAbort(_error: Error, ctx: MiddlewareContext): Promise<void> {\n await finalizeStreamByState(ctx.state);\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { P as PubSubAdapter } from '../../../../types-
|
|
2
|
-
import '../../../../stream-
|
|
1
|
+
import { P as PubSubAdapter } from '../../../../types-CyXF0J7C.js';
|
|
2
|
+
import '../../../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview Express/Connect adapter for pub-sub stream resumption.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
express,
|
|
3
3
|
streamSubscriber
|
|
4
|
-
} from "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
4
|
+
} from "../../../../chunk-SAMIK4WZ.js";
|
|
5
|
+
import "../../../../chunk-U6M3MXNI.js";
|
|
6
6
|
import "../../../../chunk-ETBFOLQN.js";
|
|
7
7
|
export {
|
|
8
8
|
express,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { P as PubSubAdapter } from '../../../../types-
|
|
2
|
-
import '../../../../stream-
|
|
1
|
+
import { P as PubSubAdapter } from '../../../../types-CyXF0J7C.js';
|
|
2
|
+
import '../../../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview Fastify adapter for pub-sub stream resumption.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fastify,
|
|
3
3
|
streamSubscriber
|
|
4
|
-
} from "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
4
|
+
} from "../../../../chunk-ZDYEDI2A.js";
|
|
5
|
+
import "../../../../chunk-U6M3MXNI.js";
|
|
6
6
|
import "../../../../chunk-ETBFOLQN.js";
|
|
7
7
|
export {
|
|
8
8
|
fastify,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { P as PubSubAdapter } from '../../../../types-
|
|
2
|
-
import '../../../../stream-
|
|
1
|
+
import { P as PubSubAdapter } from '../../../../types-CyXF0J7C.js';
|
|
2
|
+
import '../../../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview H3/Nitro/Nuxt adapter for pub-sub stream resumption.
|
|
@@ -6,8 +6,9 @@ import { streamSubscriber } from './express/index.js';
|
|
|
6
6
|
export { express } from './express/index.js';
|
|
7
7
|
import { createSubscriberStream } from './webapi/index.js';
|
|
8
8
|
export { webapi } from './webapi/index.js';
|
|
9
|
-
export { P as PubSubAdapter } from '../../../types-
|
|
10
|
-
import '../../../stream-
|
|
9
|
+
export { P as PubSubAdapter } from '../../../types-CyXF0J7C.js';
|
|
10
|
+
import '../../../stream-DVVUIKpz.js';
|
|
11
|
+
import '../../../tool-D22EhP5F.js';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Server adapters namespace for pub-sub stream resumption.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
webapi
|
|
3
|
-
} from "../../../chunk-
|
|
3
|
+
} from "../../../chunk-WNB5PSY6.js";
|
|
4
4
|
import {
|
|
5
5
|
express
|
|
6
|
-
} from "../../../chunk-
|
|
6
|
+
} from "../../../chunk-SAMIK4WZ.js";
|
|
7
7
|
import {
|
|
8
8
|
h3
|
|
9
|
-
} from "../../../chunk-
|
|
9
|
+
} from "../../../chunk-IIMTP3XC.js";
|
|
10
10
|
import {
|
|
11
11
|
fastify
|
|
12
|
-
} from "../../../chunk-
|
|
13
|
-
import "../../../chunk-
|
|
12
|
+
} from "../../../chunk-ZDYEDI2A.js";
|
|
13
|
+
import "../../../chunk-U6M3MXNI.js";
|
|
14
14
|
import "../../../chunk-ETBFOLQN.js";
|
|
15
15
|
|
|
16
16
|
// src/middleware/pubsub/server/index.ts
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { P as PubSubAdapter } from '../../../../types-
|
|
2
|
-
import '../../../../stream-
|
|
1
|
+
import { P as PubSubAdapter } from '../../../../types-CyXF0J7C.js';
|
|
2
|
+
import '../../../../stream-DVVUIKpz.js';
|
|
3
|
+
import '../../../../tool-D22EhP5F.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* @fileoverview Web API adapter for pub-sub stream resumption.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSubscriberStream,
|
|
3
3
|
webapi
|
|
4
|
-
} from "../../../../chunk-
|
|
5
|
-
import "../../../../chunk-
|
|
4
|
+
} from "../../../../chunk-WNB5PSY6.js";
|
|
5
|
+
import "../../../../chunk-U6M3MXNI.js";
|
|
6
6
|
import "../../../../chunk-ETBFOLQN.js";
|
|
7
7
|
export {
|
|
8
8
|
createSubscriberStream,
|