ai 6.0.248 → 6.0.249
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/CHANGELOG.md +10 -0
- package/dist/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +85 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +85 -19
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/package.json +2 -2
- package/src/ui/chat-transport.ts +3 -0
- package/src/ui/chat.ts +87 -12
- package/src/ui/http-chat-transport.ts +1 -0
- package/src/util/consume-stream.ts +13 -0
package/dist/index.mjs
CHANGED
|
@@ -1193,7 +1193,7 @@ import {
|
|
|
1193
1193
|
} from "@ai-sdk/provider-utils";
|
|
1194
1194
|
|
|
1195
1195
|
// src/version.ts
|
|
1196
|
-
var VERSION = true ? "6.0.
|
|
1196
|
+
var VERSION = true ? "6.0.249" : "0.0.0-test";
|
|
1197
1197
|
|
|
1198
1198
|
// src/util/download/download.ts
|
|
1199
1199
|
var download = async ({
|
|
@@ -6517,9 +6517,19 @@ function createAsyncIterableStream(source) {
|
|
|
6517
6517
|
// src/util/consume-stream.ts
|
|
6518
6518
|
async function consumeStream({
|
|
6519
6519
|
stream,
|
|
6520
|
-
onError
|
|
6520
|
+
onError,
|
|
6521
|
+
abortSignal
|
|
6521
6522
|
}) {
|
|
6522
6523
|
const reader = stream.getReader();
|
|
6524
|
+
const cancelOnAbort = () => {
|
|
6525
|
+
reader.cancel().catch(() => {
|
|
6526
|
+
});
|
|
6527
|
+
};
|
|
6528
|
+
if (abortSignal == null ? void 0 : abortSignal.aborted) {
|
|
6529
|
+
cancelOnAbort();
|
|
6530
|
+
} else {
|
|
6531
|
+
abortSignal == null ? void 0 : abortSignal.addEventListener("abort", cancelOnAbort, { once: true });
|
|
6532
|
+
}
|
|
6523
6533
|
try {
|
|
6524
6534
|
while (true) {
|
|
6525
6535
|
const { done } = await reader.read();
|
|
@@ -6529,6 +6539,7 @@ async function consumeStream({
|
|
|
6529
6539
|
} catch (error) {
|
|
6530
6540
|
onError == null ? void 0 : onError(error);
|
|
6531
6541
|
} finally {
|
|
6542
|
+
abortSignal == null ? void 0 : abortSignal.removeEventListener("abort", cancelOnAbort);
|
|
6532
6543
|
reader.releaseLock();
|
|
6533
6544
|
}
|
|
6534
6545
|
}
|
|
@@ -13653,7 +13664,8 @@ var HttpChatTransport = class {
|
|
|
13653
13664
|
const response = await fetch2(api, {
|
|
13654
13665
|
method: "GET",
|
|
13655
13666
|
headers,
|
|
13656
|
-
credentials
|
|
13667
|
+
credentials,
|
|
13668
|
+
signal: options.abortSignal
|
|
13657
13669
|
});
|
|
13658
13670
|
if (response.status === 204) {
|
|
13659
13671
|
return null;
|
|
@@ -13708,6 +13720,7 @@ var AbstractChat = class {
|
|
|
13708
13720
|
sendAutomaticallyWhen
|
|
13709
13721
|
}) {
|
|
13710
13722
|
this.activeResponse = void 0;
|
|
13723
|
+
this.activeResumeRequest = void 0;
|
|
13711
13724
|
this.jobExecutor = new SerialJobExecutor();
|
|
13712
13725
|
/**
|
|
13713
13726
|
* Appends or replaces a user message to the chat list. This triggers the API call to fetch
|
|
@@ -13877,12 +13890,9 @@ var AbstractChat = class {
|
|
|
13877
13890
|
* Abort the current request immediately, keep the generated tokens if any.
|
|
13878
13891
|
*/
|
|
13879
13892
|
this.stop = async () => {
|
|
13880
|
-
var _a22;
|
|
13881
|
-
|
|
13882
|
-
|
|
13883
|
-
if ((_a22 = this.activeResponse) == null ? void 0 : _a22.abortController) {
|
|
13884
|
-
this.activeResponse.abortController.abort();
|
|
13885
|
-
}
|
|
13893
|
+
var _a22, _b;
|
|
13894
|
+
(_a22 = this.activeResumeRequest) == null ? void 0 : _a22.abortController.abort();
|
|
13895
|
+
(_b = this.activeResponse) == null ? void 0 : _b.abortController.abort();
|
|
13886
13896
|
};
|
|
13887
13897
|
this.id = id;
|
|
13888
13898
|
this.transport = transport;
|
|
@@ -13946,25 +13956,60 @@ var AbstractChat = class {
|
|
|
13946
13956
|
body,
|
|
13947
13957
|
messageId
|
|
13948
13958
|
}) {
|
|
13949
|
-
var _a22, _b;
|
|
13959
|
+
var _a22, _b, _c;
|
|
13960
|
+
const abortController = new AbortController();
|
|
13961
|
+
const activeResumeRequest = trigger === "resume-stream" ? { abortController } : void 0;
|
|
13962
|
+
if (activeResumeRequest) {
|
|
13963
|
+
(_a22 = this.activeResumeRequest) == null ? void 0 : _a22.abortController.abort();
|
|
13964
|
+
this.activeResumeRequest = activeResumeRequest;
|
|
13965
|
+
}
|
|
13966
|
+
const isCurrentRequest = () => activeResumeRequest == null || this.activeResumeRequest === activeResumeRequest;
|
|
13967
|
+
const clearActiveResumeRequest = () => {
|
|
13968
|
+
if (this.activeResumeRequest === activeResumeRequest) {
|
|
13969
|
+
this.activeResumeRequest = void 0;
|
|
13970
|
+
}
|
|
13971
|
+
};
|
|
13950
13972
|
let resumeStream;
|
|
13951
13973
|
if (trigger === "resume-stream") {
|
|
13952
13974
|
try {
|
|
13953
13975
|
const reconnect = await this.transport.reconnectToStream({
|
|
13954
13976
|
chatId: this.id,
|
|
13977
|
+
abortSignal: abortController.signal,
|
|
13955
13978
|
metadata,
|
|
13956
13979
|
headers,
|
|
13957
13980
|
body
|
|
13958
13981
|
});
|
|
13982
|
+
if (abortController.signal.aborted || !isCurrentRequest()) {
|
|
13983
|
+
await (reconnect == null ? void 0 : reconnect.cancel().catch(() => {
|
|
13984
|
+
}));
|
|
13985
|
+
if (isCurrentRequest()) {
|
|
13986
|
+
this.setStatus({ status: "ready" });
|
|
13987
|
+
}
|
|
13988
|
+
clearActiveResumeRequest();
|
|
13989
|
+
return;
|
|
13990
|
+
}
|
|
13959
13991
|
if (reconnect == null) {
|
|
13992
|
+
this.setStatus({ status: "ready" });
|
|
13993
|
+
clearActiveResumeRequest();
|
|
13960
13994
|
return;
|
|
13961
13995
|
}
|
|
13962
13996
|
resumeStream = reconnect;
|
|
13963
13997
|
} catch (err) {
|
|
13998
|
+
if (abortController.signal.aborted || err.name === "AbortError") {
|
|
13999
|
+
if (isCurrentRequest()) {
|
|
14000
|
+
this.setStatus({ status: "ready" });
|
|
14001
|
+
}
|
|
14002
|
+
clearActiveResumeRequest();
|
|
14003
|
+
return;
|
|
14004
|
+
}
|
|
14005
|
+
if (!isCurrentRequest()) {
|
|
14006
|
+
return;
|
|
14007
|
+
}
|
|
13964
14008
|
if (this.onError && err instanceof Error) {
|
|
13965
14009
|
this.onError(err);
|
|
13966
14010
|
}
|
|
13967
14011
|
this.setStatus({ status: "error", error: err });
|
|
14012
|
+
clearActiveResumeRequest();
|
|
13968
14013
|
return;
|
|
13969
14014
|
}
|
|
13970
14015
|
}
|
|
@@ -13980,7 +14025,7 @@ var AbstractChat = class {
|
|
|
13980
14025
|
lastMessage: trigger === "regenerate-message" ? void 0 : this.state.snapshot(lastMessage),
|
|
13981
14026
|
messageId: this.generateId()
|
|
13982
14027
|
}),
|
|
13983
|
-
abortController
|
|
14028
|
+
abortController
|
|
13984
14029
|
};
|
|
13985
14030
|
activeResponse = response;
|
|
13986
14031
|
response.abortController.signal.addEventListener("abort", () => {
|
|
@@ -14004,11 +14049,17 @@ var AbstractChat = class {
|
|
|
14004
14049
|
}
|
|
14005
14050
|
const runUpdateMessageJob = (job) => (
|
|
14006
14051
|
// serialize the job execution to avoid race conditions:
|
|
14007
|
-
this.jobExecutor.run(
|
|
14008
|
-
()
|
|
14052
|
+
this.jobExecutor.run(() => {
|
|
14053
|
+
if (response.abortController.signal.aborted) {
|
|
14054
|
+
return Promise.resolve();
|
|
14055
|
+
}
|
|
14056
|
+
return job({
|
|
14009
14057
|
state: response.state,
|
|
14010
14058
|
write: () => {
|
|
14011
14059
|
var _a23;
|
|
14060
|
+
if (response.abortController.signal.aborted) {
|
|
14061
|
+
return;
|
|
14062
|
+
}
|
|
14012
14063
|
this.setStatus({ status: "streaming" });
|
|
14013
14064
|
const replaceLastMessage = response.state.message.id === ((_a23 = this.lastMessage) == null ? void 0 : _a23.id);
|
|
14014
14065
|
if (replaceLastMessage) {
|
|
@@ -14020,8 +14071,8 @@ var AbstractChat = class {
|
|
|
14020
14071
|
this.state.pushMessage(response.state.message);
|
|
14021
14072
|
}
|
|
14022
14073
|
}
|
|
14023
|
-
})
|
|
14024
|
-
)
|
|
14074
|
+
});
|
|
14075
|
+
})
|
|
14025
14076
|
);
|
|
14026
14077
|
await consumeStream({
|
|
14027
14078
|
stream: processUIMessageStream({
|
|
@@ -14035,15 +14086,29 @@ var AbstractChat = class {
|
|
|
14035
14086
|
throw error;
|
|
14036
14087
|
}
|
|
14037
14088
|
}),
|
|
14089
|
+
abortSignal: response.abortController.signal,
|
|
14038
14090
|
onError: (error) => {
|
|
14039
14091
|
throw error;
|
|
14040
14092
|
}
|
|
14041
14093
|
});
|
|
14042
|
-
|
|
14094
|
+
if (isAbort) {
|
|
14095
|
+
if (isCurrentRequest()) {
|
|
14096
|
+
this.setStatus({ status: "ready" });
|
|
14097
|
+
}
|
|
14098
|
+
return null;
|
|
14099
|
+
}
|
|
14100
|
+
if (isCurrentRequest()) {
|
|
14101
|
+
this.setStatus({ status: "ready" });
|
|
14102
|
+
}
|
|
14043
14103
|
} catch (err) {
|
|
14044
14104
|
if (isAbort || err.name === "AbortError") {
|
|
14045
14105
|
isAbort = true;
|
|
14046
|
-
|
|
14106
|
+
if (isCurrentRequest()) {
|
|
14107
|
+
this.setStatus({ status: "ready" });
|
|
14108
|
+
}
|
|
14109
|
+
return null;
|
|
14110
|
+
}
|
|
14111
|
+
if (!isCurrentRequest()) {
|
|
14047
14112
|
return null;
|
|
14048
14113
|
}
|
|
14049
14114
|
isError = true;
|
|
@@ -14057,7 +14122,7 @@ var AbstractChat = class {
|
|
|
14057
14122
|
} finally {
|
|
14058
14123
|
try {
|
|
14059
14124
|
if (activeResponse) {
|
|
14060
|
-
(
|
|
14125
|
+
(_b = this.onFinish) == null ? void 0 : _b.call(this, {
|
|
14061
14126
|
message: activeResponse.state.message,
|
|
14062
14127
|
messages: this.state.messages,
|
|
14063
14128
|
isAbort,
|
|
@@ -14072,11 +14137,12 @@ var AbstractChat = class {
|
|
|
14072
14137
|
if (this.activeResponse === activeResponse) {
|
|
14073
14138
|
this.activeResponse = void 0;
|
|
14074
14139
|
}
|
|
14140
|
+
clearActiveResumeRequest();
|
|
14075
14141
|
}
|
|
14076
14142
|
if (!isError && await this.shouldSendAutomatically()) {
|
|
14077
14143
|
await this.makeRequest({
|
|
14078
14144
|
trigger: "submit-message",
|
|
14079
|
-
messageId: (
|
|
14145
|
+
messageId: (_c = this.lastMessage) == null ? void 0 : _c.id,
|
|
14080
14146
|
metadata,
|
|
14081
14147
|
headers,
|
|
14082
14148
|
body
|