ai 2.1.28 → 2.1.30
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 +1 -1
- package/dist/index.d.ts +25 -3
- package/dist/index.js +25 -2
- package/dist/index.mjs +24 -2
- package/package.json +5 -4
package/README.md
CHANGED
@@ -5,7 +5,7 @@ The Vercel AI SDK is **a library for building AI-powered streaming text and chat
|
|
5
5
|
## Features
|
6
6
|
|
7
7
|
- [SWR](https://swr.vercel.app)-powered React, Svelte, Vue and Solid helpers for streaming text responses and building chat and completion UIs
|
8
|
-
- First-class support for [LangChain](js.langchain.com/docs) and [OpenAI](https://openai.com), [Anthropic](https://www.anthropic.com), [Cohere](https://cohere.com) and [Hugging Face](https://huggingface.co)
|
8
|
+
- First-class support for [LangChain](https://js.langchain.com/docs) and [OpenAI](https://openai.com), [Anthropic](https://www.anthropic.com), [Cohere](https://cohere.com) and [Hugging Face](https://huggingface.co)
|
9
9
|
- Node.js, Serverless, and [Edge Runtime](https://edge-runtime.vercel.app/) support
|
10
10
|
- Callbacks for saving completed streaming responses to a database (in the same request)
|
11
11
|
|
package/dist/index.d.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import { ChatCompletionRequestMessageFunctionCall, CreateChatCompletionRequestFunctionCall } from 'openai-edge';
|
2
2
|
import { ChatCompletionFunctions } from 'openai-edge/types/api';
|
3
3
|
import { ServerResponse } from 'node:http';
|
4
|
+
import { Prediction } from 'replicate';
|
4
5
|
|
5
6
|
interface FunctionCallPayload {
|
6
7
|
name: string;
|
@@ -27,7 +28,7 @@ interface AIStreamParser {
|
|
27
28
|
* @param {AIStreamParser} customParser - Function to handle event data.
|
28
29
|
* @returns {TransformStream<Uint8Array, string>} TransformStream parsing events.
|
29
30
|
*/
|
30
|
-
declare function createEventStreamTransformer(customParser
|
31
|
+
declare function createEventStreamTransformer(customParser?: AIStreamParser): TransformStream<Uint8Array, string>;
|
31
32
|
/**
|
32
33
|
* Creates a transform stream that encodes input messages and invokes optional callback functions.
|
33
34
|
* The transform stream uses the provided callbacks to execute custom logic at different stages of the stream's lifecycle.
|
@@ -83,7 +84,7 @@ declare function trimStartOfStreamHelper(): (text: string) => string;
|
|
83
84
|
* @return {ReadableStream} The AIStream.
|
84
85
|
* @throws Will throw an error if the response is not OK.
|
85
86
|
*/
|
86
|
-
declare function AIStream(response: Response, customParser
|
87
|
+
declare function AIStream(response: Response, customParser?: AIStreamParser, callbacks?: AIStreamCallbacks): ReadableStream<Uint8Array>;
|
87
88
|
/**
|
88
89
|
* Implements ReadableStream.from(asyncIterable), which isn't documented in MDN and isn't implemented in node.
|
89
90
|
* https://github.com/whatwg/streams/commit/8d7a0bf26eb2cc23e884ddbaac7c1da4b91cf2bc
|
@@ -365,7 +366,28 @@ declare function LangChainStream(callbacks?: AIStreamCallbacks): {
|
|
365
366
|
};
|
366
367
|
};
|
367
368
|
|
369
|
+
/**
|
370
|
+
* Stream predictions from Replicate.
|
371
|
+
* Only certain models are supported and you must pass `stream: true` to
|
372
|
+
* replicate.predictions.create().
|
373
|
+
* @see https://github.com/replicate/replicate-javascript#streaming
|
374
|
+
*
|
375
|
+
* @example
|
376
|
+
* const response = await replicate.predictions.create({
|
377
|
+
* stream: true,
|
378
|
+
* input: {
|
379
|
+
* prompt: messages.join('\n')
|
380
|
+
* },
|
381
|
+
* version: '2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1'
|
382
|
+
* })
|
383
|
+
*
|
384
|
+
* const stream = await ReplicateStream(response)
|
385
|
+
* return new StreamingTextResponse(stream)
|
386
|
+
*
|
387
|
+
*/
|
388
|
+
declare function ReplicateStream(res: Prediction, cb?: AIStreamCallbacks): Promise<ReadableStream>;
|
389
|
+
|
368
390
|
declare const nanoid: (size?: number | undefined) => string;
|
369
391
|
declare function createChunkDecoder(): (chunk: Uint8Array | undefined) => string;
|
370
392
|
|
371
|
-
export { AIStream, AIStreamCallbacks, AIStreamParser, AnthropicStream, ChatRequest, ChatRequestOptions, CohereStream, CreateMessage, FunctionCallHandler, FunctionCallPayload, HuggingFaceStream, LangChainStream, Message, OpenAIStream, OpenAIStreamCallbacks, RequestOptions, StreamingTextResponse, UseChatOptions, UseCompletionOptions, createCallbacksTransformer, createChunkDecoder, createEventStreamTransformer, nanoid, readableFromAsyncIterable, streamToResponse, trimStartOfStreamHelper };
|
393
|
+
export { AIStream, AIStreamCallbacks, AIStreamParser, AnthropicStream, ChatRequest, ChatRequestOptions, CohereStream, CreateMessage, FunctionCallHandler, FunctionCallPayload, HuggingFaceStream, LangChainStream, Message, OpenAIStream, OpenAIStreamCallbacks, ReplicateStream, RequestOptions, StreamingTextResponse, UseChatOptions, UseCompletionOptions, createCallbacksTransformer, createChunkDecoder, createEventStreamTransformer, nanoid, readableFromAsyncIterable, streamToResponse, trimStartOfStreamHelper };
|
package/dist/index.js
CHANGED
@@ -26,6 +26,7 @@ __export(streams_exports, {
|
|
26
26
|
HuggingFaceStream: () => HuggingFaceStream,
|
27
27
|
LangChainStream: () => LangChainStream,
|
28
28
|
OpenAIStream: () => OpenAIStream,
|
29
|
+
ReplicateStream: () => ReplicateStream,
|
29
30
|
StreamingTextResponse: () => StreamingTextResponse,
|
30
31
|
createCallbacksTransformer: () => createCallbacksTransformer,
|
31
32
|
createChunkDecoder: () => createChunkDecoder,
|
@@ -46,12 +47,14 @@ function createEventStreamTransformer(customParser) {
|
|
46
47
|
async start(controller) {
|
47
48
|
eventSourceParser = (0, import_eventsource_parser.createParser)(
|
48
49
|
(event) => {
|
49
|
-
if ("data" in event && event.type === "event" && event.data === "[DONE]"
|
50
|
+
if ("data" in event && event.type === "event" && event.data === "[DONE]" || // Replicate doesn't send [DONE] but does send a 'done' event
|
51
|
+
// @see https://replicate.com/docs/streaming
|
52
|
+
event.event === "done") {
|
50
53
|
controller.terminate();
|
51
54
|
return;
|
52
55
|
}
|
53
56
|
if ("data" in event) {
|
54
|
-
const parsedMessage = customParser(event.data);
|
57
|
+
const parsedMessage = customParser ? customParser(event.data) : event.data;
|
55
58
|
if (parsedMessage)
|
56
59
|
controller.enqueue(parsedMessage);
|
57
60
|
}
|
@@ -462,6 +465,25 @@ function LangChainStream(callbacks) {
|
|
462
465
|
};
|
463
466
|
}
|
464
467
|
|
468
|
+
// streams/replicate-stream.ts
|
469
|
+
async function ReplicateStream(res, cb) {
|
470
|
+
var _a;
|
471
|
+
const url = (_a = res.urls) == null ? void 0 : _a.stream;
|
472
|
+
if (!url) {
|
473
|
+
if (res.error)
|
474
|
+
throw new Error(res.error);
|
475
|
+
else
|
476
|
+
throw new Error("Missing stream URL in Replicate response");
|
477
|
+
}
|
478
|
+
const eventStream = await fetch(url, {
|
479
|
+
method: "GET",
|
480
|
+
headers: {
|
481
|
+
Accept: "text/event-stream"
|
482
|
+
}
|
483
|
+
});
|
484
|
+
return AIStream(eventStream, void 0, cb);
|
485
|
+
}
|
486
|
+
|
465
487
|
// shared/utils.ts
|
466
488
|
var import_non_secure = require("nanoid/non-secure");
|
467
489
|
var nanoid = (0, import_non_secure.customAlphabet)(
|
@@ -484,6 +506,7 @@ function createChunkDecoder() {
|
|
484
506
|
HuggingFaceStream,
|
485
507
|
LangChainStream,
|
486
508
|
OpenAIStream,
|
509
|
+
ReplicateStream,
|
487
510
|
StreamingTextResponse,
|
488
511
|
createCallbacksTransformer,
|
489
512
|
createChunkDecoder,
|
package/dist/index.mjs
CHANGED
@@ -9,12 +9,14 @@ function createEventStreamTransformer(customParser) {
|
|
9
9
|
async start(controller) {
|
10
10
|
eventSourceParser = createParser(
|
11
11
|
(event) => {
|
12
|
-
if ("data" in event && event.type === "event" && event.data === "[DONE]"
|
12
|
+
if ("data" in event && event.type === "event" && event.data === "[DONE]" || // Replicate doesn't send [DONE] but does send a 'done' event
|
13
|
+
// @see https://replicate.com/docs/streaming
|
14
|
+
event.event === "done") {
|
13
15
|
controller.terminate();
|
14
16
|
return;
|
15
17
|
}
|
16
18
|
if ("data" in event) {
|
17
|
-
const parsedMessage = customParser(event.data);
|
19
|
+
const parsedMessage = customParser ? customParser(event.data) : event.data;
|
18
20
|
if (parsedMessage)
|
19
21
|
controller.enqueue(parsedMessage);
|
20
22
|
}
|
@@ -425,6 +427,25 @@ function LangChainStream(callbacks) {
|
|
425
427
|
};
|
426
428
|
}
|
427
429
|
|
430
|
+
// streams/replicate-stream.ts
|
431
|
+
async function ReplicateStream(res, cb) {
|
432
|
+
var _a;
|
433
|
+
const url = (_a = res.urls) == null ? void 0 : _a.stream;
|
434
|
+
if (!url) {
|
435
|
+
if (res.error)
|
436
|
+
throw new Error(res.error);
|
437
|
+
else
|
438
|
+
throw new Error("Missing stream URL in Replicate response");
|
439
|
+
}
|
440
|
+
const eventStream = await fetch(url, {
|
441
|
+
method: "GET",
|
442
|
+
headers: {
|
443
|
+
Accept: "text/event-stream"
|
444
|
+
}
|
445
|
+
});
|
446
|
+
return AIStream(eventStream, void 0, cb);
|
447
|
+
}
|
448
|
+
|
428
449
|
// shared/utils.ts
|
429
450
|
import { customAlphabet } from "nanoid/non-secure";
|
430
451
|
var nanoid = customAlphabet(
|
@@ -446,6 +467,7 @@ export {
|
|
446
467
|
HuggingFaceStream,
|
447
468
|
LangChainStream,
|
448
469
|
OpenAIStream,
|
470
|
+
ReplicateStream,
|
449
471
|
StreamingTextResponse,
|
450
472
|
createCallbacksTransformer,
|
451
473
|
createChunkDecoder,
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ai",
|
3
|
-
"version": "2.1.
|
3
|
+
"version": "2.1.30",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"sideEffects": false,
|
6
6
|
"main": "./dist/index.js",
|
@@ -61,11 +61,11 @@
|
|
61
61
|
"dependencies": {
|
62
62
|
"eventsource-parser": "1.0.0",
|
63
63
|
"nanoid": "3.3.6",
|
64
|
+
"solid-swr-store": "0.10.7",
|
64
65
|
"sswr": "2.0.0",
|
65
66
|
"swr": "2.2.0",
|
66
|
-
"
|
67
|
-
"
|
68
|
-
"swr-store": "0.10.6"
|
67
|
+
"swr-store": "0.10.6",
|
68
|
+
"swrv": "1.0.4"
|
69
69
|
},
|
70
70
|
"devDependencies": {
|
71
71
|
"@edge-runtime/jest-environment": "1.1.0-beta.31",
|
@@ -76,6 +76,7 @@
|
|
76
76
|
"eslint": "^7.32.0",
|
77
77
|
"jest": "29.2.1",
|
78
78
|
"openai-edge": "^1.1.0",
|
79
|
+
"replicate": "^0.14.1",
|
79
80
|
"ts-jest": "29.0.3",
|
80
81
|
"tsup": "^6.7.0",
|
81
82
|
"typescript": "5.1.3",
|