simple-ai-sdk 1.1.1 → 1.1.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/client/manager.d.ts.map +1 -1
- package/dist/client/manager.js +17 -51
- package/dist/client/useChatSession.d.ts.map +1 -1
- package/dist/client/useChatSession.js +29 -2
- package/dist/shared/error-utils.d.ts +5 -0
- package/dist/shared/error-utils.d.ts.map +1 -1
- package/dist/spec.md +1 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/client/manager.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generateMessageId } from "../shared/generate-id.js";
|
|
2
|
-
import { isAbortError
|
|
2
|
+
import { isAbortError } from "../shared/error-utils.js";
|
|
3
3
|
class StreamManager {
|
|
4
4
|
state = {
|
|
5
5
|
sessions: new Map(),
|
|
@@ -629,29 +629,15 @@ class StreamManager {
|
|
|
629
629
|
let finishedReason = null;
|
|
630
630
|
if (isDonePayload(parsed))
|
|
631
631
|
finishedReason = toChatFinishReason(parsed.finished_reason);
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
}, true);
|
|
642
|
-
this.deliverOrQueueError(sessionId, err);
|
|
643
|
-
}
|
|
644
|
-
else {
|
|
645
|
-
this.updateSession(sessionId, {
|
|
646
|
-
status: "ready",
|
|
647
|
-
abortController: null,
|
|
648
|
-
finishedReason,
|
|
649
|
-
nextAssistantMessageId: null,
|
|
650
|
-
}, true);
|
|
651
|
-
this.deliverOrQueueFinish(sessionId, {
|
|
652
|
-
finishedReason,
|
|
653
|
-
});
|
|
654
|
-
}
|
|
632
|
+
this.updateSession(sessionId, {
|
|
633
|
+
status: "ready",
|
|
634
|
+
abortController: null,
|
|
635
|
+
finishedReason,
|
|
636
|
+
nextAssistantMessageId: null,
|
|
637
|
+
}, true);
|
|
638
|
+
this.deliverOrQueueFinish(sessionId, {
|
|
639
|
+
finishedReason,
|
|
640
|
+
});
|
|
655
641
|
shouldTerminate = true;
|
|
656
642
|
break;
|
|
657
643
|
}
|
|
@@ -712,31 +698,13 @@ class StreamManager {
|
|
|
712
698
|
// 意図: 正常完了(サーバが done を送らないケース)だけをここで処理。
|
|
713
699
|
// failed=true(error)の場合は既に状態更新済みなので何もしない。
|
|
714
700
|
if (!failed && !shouldTerminate) {
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
this.updateSession(sessionId, {
|
|
723
|
-
status: "error",
|
|
724
|
-
error: err,
|
|
725
|
-
abortController: null,
|
|
726
|
-
finishedReason: null,
|
|
727
|
-
nextAssistantMessageId: null,
|
|
728
|
-
}, true);
|
|
729
|
-
this.deliverOrQueueError(sessionId, err);
|
|
730
|
-
}
|
|
731
|
-
else {
|
|
732
|
-
this.updateSession(sessionId, {
|
|
733
|
-
status: "ready",
|
|
734
|
-
abortController: null,
|
|
735
|
-
finishedReason: null,
|
|
736
|
-
nextAssistantMessageId: null,
|
|
737
|
-
}, true); // Immediate for status change
|
|
738
|
-
this.deliverOrQueueFinish(sessionId, { finishedReason: null }, "completion");
|
|
739
|
-
}
|
|
701
|
+
this.updateSession(sessionId, {
|
|
702
|
+
status: "ready",
|
|
703
|
+
abortController: null,
|
|
704
|
+
finishedReason: null,
|
|
705
|
+
nextAssistantMessageId: null,
|
|
706
|
+
}, true); // Immediate for status change
|
|
707
|
+
this.deliverOrQueueFinish(sessionId, { finishedReason: null }, "completion");
|
|
740
708
|
}
|
|
741
709
|
}
|
|
742
710
|
catch (error) {
|
|
@@ -747,7 +715,6 @@ class StreamManager {
|
|
|
747
715
|
if (s?.status !== "aborted") {
|
|
748
716
|
this.updateSession(sessionId, {
|
|
749
717
|
status: "aborted",
|
|
750
|
-
error: new ChatError("aborted"),
|
|
751
718
|
abortController: null,
|
|
752
719
|
nextAssistantMessageId: null,
|
|
753
720
|
}, true); // Immediate for status change
|
|
@@ -801,7 +768,6 @@ class StreamManager {
|
|
|
801
768
|
// ユーザーによる中断を明示的に示すため status を "aborted" に更新
|
|
802
769
|
this.updateSession(sessionId, {
|
|
803
770
|
status: "aborted",
|
|
804
|
-
error: new ChatError("aborted"),
|
|
805
771
|
abortController: null,
|
|
806
772
|
nextAssistantMessageId: null,
|
|
807
773
|
}, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatSession.d.ts","sourceRoot":"","sources":["../../src/client/useChatSession.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useChatSession.d.ts","sourceRoot":"","sources":["../../src/client/useChatSession.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAgMtB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { useEffect, useSyncExternalStore, useCallback, useRef } from "react";
|
|
1
|
+
import { useEffect, useSyncExternalStore, useCallback, useRef, useMemo, } from "react";
|
|
2
|
+
import { ChatError } from "../shared/index.js";
|
|
2
3
|
import { useAIStreamManager } from "./context.js";
|
|
3
4
|
import { generateMessageId } from "../shared/generate-id.js";
|
|
4
5
|
export function useChatSession(sessionId, options) {
|
|
@@ -108,6 +109,32 @@ export function useChatSession(sessionId, options) {
|
|
|
108
109
|
const setMessages = useCallback((messages, options) => {
|
|
109
110
|
manager.setMessages(sessionId, messages, options);
|
|
110
111
|
}, [manager, sessionId]);
|
|
112
|
+
const lastMessage = session.messages.at(-1);
|
|
113
|
+
const lastMessageRole = lastMessage?.role;
|
|
114
|
+
const isLastMessageEmpty = !lastMessage?.content;
|
|
115
|
+
const error = useMemo(() => {
|
|
116
|
+
if (session.finishedReason === "content_filter") {
|
|
117
|
+
return new ChatError("content_filter");
|
|
118
|
+
}
|
|
119
|
+
if (session.status === "aborted") {
|
|
120
|
+
return new ChatError("aborted");
|
|
121
|
+
}
|
|
122
|
+
// 何らかの理由で readyなのに assistant の応答がないまま止まっている
|
|
123
|
+
if (session.status === "ready") {
|
|
124
|
+
if (!lastMessageRole ||
|
|
125
|
+
lastMessageRole === "user" ||
|
|
126
|
+
isLastMessageEmpty) {
|
|
127
|
+
return new ChatError("no_response");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return session.error;
|
|
131
|
+
}, [
|
|
132
|
+
session.error,
|
|
133
|
+
session.finishedReason,
|
|
134
|
+
session.status,
|
|
135
|
+
lastMessageRole,
|
|
136
|
+
isLastMessageEmpty,
|
|
137
|
+
]);
|
|
111
138
|
return {
|
|
112
139
|
messages: session.messages,
|
|
113
140
|
metadata: session.metadata ?? [],
|
|
@@ -115,7 +142,7 @@ export function useChatSession(sessionId, options) {
|
|
|
115
142
|
finishedReason: session.finishedReason ?? null,
|
|
116
143
|
messagesVersion: session.messagesVersion ?? 0,
|
|
117
144
|
status: session.status,
|
|
118
|
-
error
|
|
145
|
+
error,
|
|
119
146
|
setMessages,
|
|
120
147
|
sendMessage,
|
|
121
148
|
reload,
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export declare function isAbortError(e: unknown): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* - `content_filter`: The content was filtered by the content filter.
|
|
4
|
+
* - `aborted`: The request was aborted, likely by the user.
|
|
5
|
+
* - `no_response`: The model did not return a response. (not loading or streaming && last message is by the user)
|
|
6
|
+
*/
|
|
2
7
|
export type ChatErrorCode = "content_filter" | "aborted" | "no_response";
|
|
3
8
|
export declare class ChatError extends Error {
|
|
4
9
|
readonly code: ChatErrorCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../../src/shared/error-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAYhD;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAEzE,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;gBAEjB,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM;CAKlD"}
|
|
1
|
+
{"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../../src/shared/error-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAYhD;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAEzE,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;gBAEjB,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM;CAKlD"}
|
package/dist/spec.md
CHANGED
|
@@ -454,9 +454,7 @@ await Promise.all([
|
|
|
454
454
|
- `onFinish` の `details.metadata` は、そのストリーム中に受信したメタデータの最新スナップショットです。
|
|
455
455
|
- 複数購読時の優先: 同一 `sessionId` を複数コンポーネントが使用する場合、最後に登録された `onFinish` が有効です。
|
|
456
456
|
- `onError` は per-call: `sendMessage`/`reload` 呼び出し時に渡されたハンドラが呼ばれます(最新保持は行いません)。
|
|
457
|
-
|
|
458
|
-
- ユーザー中断は既知エラー扱い: `stop()` または AbortError 由来の中断時は `status: "aborted"` かつ `error.code === "aborted"` になります。
|
|
459
|
-
- サーバが `done` を送らずに終了し assistant 応答が空の場合は `status: "error"` になり、`onError` が呼ばれます(`error.code === "no_response"`)。
|
|
457
|
+
|
|
460
458
|
|
|
461
459
|
### ページ遷移前のセッション事前準備(`usePrefetchChatSession`)
|
|
462
460
|
|