@tashiscool/stream 0.1.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.
@@ -0,0 +1,309 @@
1
+ /**
2
+ * HTTP Response Utilities
3
+ * Stream to Response helpers for various protocols
4
+ */
5
+ /**
6
+ * Server-Sent Events encoder
7
+ */
8
+ export function sse() {
9
+ return {
10
+ contentType: 'text/event-stream',
11
+ encode: (event) => {
12
+ const lines = [];
13
+ lines.push(`id: ${event.id}`);
14
+ lines.push(`event: ${event.type}`);
15
+ lines.push(`data: ${JSON.stringify(event.data)}`);
16
+ return lines.join('\n') + '\n\n';
17
+ },
18
+ end: 'event: done\ndata: [DONE]\n\n',
19
+ };
20
+ }
21
+ /**
22
+ * JSON Lines encoder
23
+ */
24
+ export function jsonl() {
25
+ return {
26
+ contentType: 'application/x-ndjson',
27
+ encode: (event) => JSON.stringify(event) + '\n',
28
+ };
29
+ }
30
+ /**
31
+ * Raw text encoder (just the data)
32
+ */
33
+ export function raw() {
34
+ return {
35
+ contentType: 'text/plain',
36
+ encode: (event) => {
37
+ if (typeof event.data === 'string') {
38
+ return event.data;
39
+ }
40
+ const data = event.data;
41
+ return data.delta || data.text || data.content || '';
42
+ },
43
+ };
44
+ }
45
+ /**
46
+ * Create a Web API Response from an async stream
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * export async function POST(req: Request) {
51
+ * const stream = getOpenAIStream();
52
+ * return streamToResponse(stream, sse());
53
+ * }
54
+ * ```
55
+ */
56
+ export function streamToResponse(stream, encoder, options = {}) {
57
+ const { headers: customHeaders = {}, includeCursor = true, cursorHeader = 'x-stream-cursor', onError, onComplete, signal, } = options;
58
+ let lastEventId = '';
59
+ let lastPositions = {};
60
+ const readable = new ReadableStream({
61
+ async start(controller) {
62
+ try {
63
+ for await (const event of stream) {
64
+ if (signal?.aborted) {
65
+ break;
66
+ }
67
+ lastEventId = event.id;
68
+ lastPositions[event.source] = event.seq;
69
+ const encoded = encoder.encode(event);
70
+ controller.enqueue(new TextEncoder().encode(encoded));
71
+ }
72
+ if (encoder.end) {
73
+ controller.enqueue(new TextEncoder().encode(encoder.end));
74
+ }
75
+ onComplete?.();
76
+ }
77
+ catch (error) {
78
+ onError?.(error);
79
+ controller.error(error);
80
+ }
81
+ finally {
82
+ controller.close();
83
+ }
84
+ },
85
+ cancel() {
86
+ // Stream was cancelled (client disconnected)
87
+ },
88
+ });
89
+ const responseHeaders = {
90
+ 'Content-Type': encoder.contentType,
91
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
92
+ 'Connection': 'keep-alive',
93
+ 'X-Accel-Buffering': 'no', // Disable nginx buffering
94
+ ...customHeaders,
95
+ };
96
+ if (includeCursor && lastEventId) {
97
+ responseHeaders[cursorHeader] = btoa(JSON.stringify({
98
+ eventId: lastEventId,
99
+ positions: lastPositions,
100
+ timestamp: Date.now(),
101
+ }));
102
+ }
103
+ return new Response(readable, {
104
+ status: 200,
105
+ headers: responseHeaders,
106
+ });
107
+ }
108
+ /**
109
+ * Create a simple text streaming response
110
+ */
111
+ export function textStreamResponse(stream, options = {}) {
112
+ const { headers: customHeaders = {}, onError, onComplete, signal } = options;
113
+ const readable = new ReadableStream({
114
+ async start(controller) {
115
+ try {
116
+ for await (const chunk of stream) {
117
+ if (signal?.aborted)
118
+ break;
119
+ controller.enqueue(new TextEncoder().encode(chunk));
120
+ }
121
+ onComplete?.();
122
+ }
123
+ catch (error) {
124
+ onError?.(error);
125
+ controller.error(error);
126
+ }
127
+ finally {
128
+ controller.close();
129
+ }
130
+ },
131
+ });
132
+ return new Response(readable, {
133
+ status: 200,
134
+ headers: {
135
+ 'Content-Type': 'text/plain; charset=utf-8',
136
+ 'Cache-Control': 'no-cache',
137
+ 'Connection': 'keep-alive',
138
+ ...customHeaders,
139
+ },
140
+ });
141
+ }
142
+ /**
143
+ * Parse SSE stream from Response
144
+ */
145
+ export async function* parseSSEResponse(response) {
146
+ if (!response.body) {
147
+ throw new Error('Response body is null');
148
+ }
149
+ const reader = response.body.getReader();
150
+ const decoder = new TextDecoder();
151
+ let buffer = '';
152
+ let currentEvent = {};
153
+ try {
154
+ while (true) {
155
+ const { done, value } = await reader.read();
156
+ if (done)
157
+ break;
158
+ buffer += decoder.decode(value, { stream: true });
159
+ const lines = buffer.split('\n');
160
+ buffer = lines.pop() || '';
161
+ for (const line of lines) {
162
+ if (line.startsWith('id: ')) {
163
+ currentEvent.id = line.slice(4);
164
+ }
165
+ else if (line.startsWith('event: ')) {
166
+ currentEvent.type = line.slice(7);
167
+ }
168
+ else if (line.startsWith('data: ')) {
169
+ const dataStr = line.slice(6);
170
+ if (dataStr === '[DONE]') {
171
+ currentEvent.type = 'done';
172
+ currentEvent.data = null;
173
+ }
174
+ else {
175
+ try {
176
+ currentEvent.data = JSON.parse(dataStr);
177
+ }
178
+ catch {
179
+ currentEvent.data = dataStr;
180
+ }
181
+ }
182
+ }
183
+ else if (line === '') {
184
+ // End of event
185
+ if (currentEvent.data !== undefined) {
186
+ yield {
187
+ id: currentEvent.id || `${Date.now()}`,
188
+ source: 'sse',
189
+ seq: 0,
190
+ timestamp: Date.now(),
191
+ type: currentEvent.type || 'delta',
192
+ data: currentEvent.data,
193
+ };
194
+ }
195
+ currentEvent = {};
196
+ }
197
+ }
198
+ }
199
+ }
200
+ finally {
201
+ reader.releaseLock();
202
+ }
203
+ }
204
+ /**
205
+ * Parse JSONL stream from Response
206
+ */
207
+ export async function* parseJSONLResponse(response) {
208
+ if (!response.body) {
209
+ throw new Error('Response body is null');
210
+ }
211
+ const reader = response.body.getReader();
212
+ const decoder = new TextDecoder();
213
+ let buffer = '';
214
+ let seq = 0;
215
+ try {
216
+ while (true) {
217
+ const { done, value } = await reader.read();
218
+ if (done)
219
+ break;
220
+ buffer += decoder.decode(value, { stream: true });
221
+ const lines = buffer.split('\n');
222
+ buffer = lines.pop() || '';
223
+ for (const line of lines) {
224
+ const trimmed = line.trim();
225
+ if (!trimmed)
226
+ continue;
227
+ try {
228
+ const parsed = JSON.parse(trimmed);
229
+ seq++;
230
+ yield {
231
+ ...parsed,
232
+ seq: parsed.seq || seq,
233
+ };
234
+ }
235
+ catch {
236
+ // Skip invalid lines
237
+ }
238
+ }
239
+ }
240
+ }
241
+ finally {
242
+ reader.releaseLock();
243
+ }
244
+ }
245
+ /**
246
+ * Stream to Node.js ServerResponse
247
+ */
248
+ export async function streamToNodeResponse(stream, res, encoder, options = {}) {
249
+ const { headers: customHeaders = {}, onError, onComplete } = options;
250
+ let closed = false;
251
+ res.on('close', () => {
252
+ closed = true;
253
+ });
254
+ res.writeHead(200, {
255
+ 'Content-Type': encoder.contentType,
256
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
257
+ 'Connection': 'keep-alive',
258
+ 'X-Accel-Buffering': 'no',
259
+ ...customHeaders,
260
+ });
261
+ try {
262
+ for await (const event of stream) {
263
+ if (closed)
264
+ break;
265
+ res.write(encoder.encode(event));
266
+ }
267
+ if (encoder.end && !closed) {
268
+ res.write(encoder.end);
269
+ }
270
+ onComplete?.();
271
+ }
272
+ catch (error) {
273
+ onError?.(error);
274
+ }
275
+ finally {
276
+ res.end();
277
+ }
278
+ }
279
+ /**
280
+ * Create AI-compatible event from various formats
281
+ */
282
+ export function createAIEvent(data, options = {}) {
283
+ return {
284
+ id: options.id || `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
285
+ source: options.source || 'ai',
286
+ seq: 0,
287
+ timestamp: Date.now(),
288
+ type: options.type || 'delta',
289
+ data,
290
+ };
291
+ }
292
+ /**
293
+ * Convert simple async string stream to event stream
294
+ */
295
+ export async function* toEventStream(stream, source = 'text') {
296
+ let seq = 0;
297
+ for await (const chunk of stream) {
298
+ seq++;
299
+ yield {
300
+ id: `${Date.now()}-${seq}`,
301
+ source,
302
+ seq,
303
+ timestamp: Date.now(),
304
+ type: 'delta',
305
+ data: { delta: chunk },
306
+ };
307
+ }
308
+ }
309
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@tashiscool/stream",
3
+ "version": "0.1.0",
4
+ "description": "Streaming utilities for real-time LLM responses",
5
+ "author": "Tashdid Khan <tkhan@econsys.com>",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/tashiscool/llm-utils.git",
10
+ "directory": "packages/stream"
11
+ },
12
+ "keywords": [
13
+ "llm",
14
+ "streaming",
15
+ "ai",
16
+ "openai",
17
+ "anthropic",
18
+ "langchain",
19
+ "jsonl"
20
+ ],
21
+ "type": "module",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.js"
26
+ }
27
+ },
28
+ "main": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "files": [
31
+ "dist",
32
+ "README.md"
33
+ ],
34
+ "scripts": {
35
+ "build": "tsc",
36
+ "dev": "tsc --watch",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "lint": "eslint src/",
40
+ "typecheck": "tsc --noEmit",
41
+ "clean": "rm -rf dist .turbo"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^20.0.0",
45
+ "typescript": "^5.4.0",
46
+ "vitest": "^1.0.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ }
51
+ }