simple-ai-sdk 1.1.4 → 1.1.5
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.
|
@@ -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":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EAEpB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,OAAO,EACP,SAAS,EAEV,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;IACvD,WAAW,IAAI,kBAAkB,CAAC;IAClC;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACvD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClE;;;;OAIG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAAG,SAAS,GACxC,IAAI,CAAC;IACR;;OAEG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,GAC5C,IAAI,CAAC;IACR;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CAAC;IACR,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KAClC,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;IACvB;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,cAAM,aAAc,YAAW,cAAc;IAC3C,OAAO,CAAC,KAAK,CAEX;IAEF,OAAO,CAAC,SAAS,CAAoC;IAGrD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,gBAAgB,CAA8C;IAEtE,OAAO,CAAC,MAAM;IAsBd,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,UAAU,CAA+C;IAEjE,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,OAAO,CAAC,cAAc,CAA2C;IAEjE,OAAO,CAAC,aAAa,CAA6C;IAIlE,OAAO,CAAC,eAAe,CAGnB;IACJ,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,SAAS,CAA6B;gBAElC,OAAO,GAAE,oBAAyB;IAoB9C,SAAS,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAOtD,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAAG,SAAS;IAmB3C,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS;IAqB/C,WAAW,IAAI,kBAAkB;IAMjC,OAAO,CAAC,MAAM;IAsDd,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,aAAa;IAWrB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAOtD,YAAY,CAAC,SAAS,EAAE,MAAM;IAO9B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,mBAAmB;IAgB3B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,GAAE,OAAO,EAAO;IAiE9D,aAAa,CAAC,SAAS,EAAE,MAAM;IAS/B,cAAc,CAAC,SAAS,EAAE,MAAM;IAahC;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IA0D3B,OAAO,CAAC,cAAc;IAmBtB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA4Bf,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KAClC;IAgWH,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI;IA2BP,UAAU,CAAC,SAAS,EAAE,MAAM;IAiB5B,cAAc;IAQd;;OAEG;IACH,OAAO,CAAC,YAAY;IAwCpB;;;OAGG;IACH,OAAO,IAAI,IAAI;CAkChB;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC;AAIzB,eAAO,MAAM,aAAa,EAAE,cAAoC,CAAC"}
|
package/dist/client/manager.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generateMessageId } from "../shared/generate-id.js";
|
|
2
|
-
import { isAbortError } from "../shared/error-utils.js";
|
|
2
|
+
import { ChatError, isAbortError } from "../shared/error-utils.js";
|
|
3
3
|
class StreamManager {
|
|
4
4
|
state = {
|
|
5
5
|
sessions: new Map(),
|
|
@@ -540,7 +540,8 @@ class StreamManager {
|
|
|
540
540
|
// - コメント行(先頭 ':')は無視
|
|
541
541
|
// - event: が無い場合はデフォルトの 'message' を想定するが、本実装ではサーバ仕様に合わせ 'chunk' 等のみ処理
|
|
542
542
|
// - 末尾が改行で終わらない場合でも、ループ終了時に最後のイベントをフラッシュする
|
|
543
|
-
let
|
|
543
|
+
let errorHandled = false; // 意図: error イベント処理後に通常完了経路や catch を踏まないためのフラグ
|
|
544
|
+
let doneReceived = false; // 意図: success は明示的な done イベント受信時のみに限定する
|
|
544
545
|
let shouldTerminate = false; // 意図: done/error 受信時にループ終了を指示
|
|
545
546
|
const flushEvent = () => {
|
|
546
547
|
if (dataLines.length === 0 && !eventName)
|
|
@@ -618,7 +619,7 @@ class StreamManager {
|
|
|
618
619
|
nextAssistantMessageId: null,
|
|
619
620
|
}, true);
|
|
620
621
|
this.deliverOrQueueError(sessionId, err);
|
|
621
|
-
|
|
622
|
+
errorHandled = true;
|
|
622
623
|
shouldTerminate = true;
|
|
623
624
|
break;
|
|
624
625
|
}
|
|
@@ -629,6 +630,7 @@ class StreamManager {
|
|
|
629
630
|
let finishedReason = null;
|
|
630
631
|
if (isDonePayload(parsed))
|
|
631
632
|
finishedReason = toChatFinishReason(parsed.finished_reason);
|
|
633
|
+
doneReceived = true;
|
|
632
634
|
this.updateSession(sessionId, {
|
|
633
635
|
status: "ready",
|
|
634
636
|
abortController: null,
|
|
@@ -695,20 +697,23 @@ class StreamManager {
|
|
|
695
697
|
catch {
|
|
696
698
|
/* noop */
|
|
697
699
|
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
700
|
+
const latestId = this.streamIds.get(sessionId);
|
|
701
|
+
if (latestId !== streamId)
|
|
702
|
+
return;
|
|
703
|
+
if (!errorHandled && !doneReceived) {
|
|
704
|
+
const err = new ChatError("unexpected_eof", "Stream ended before done event");
|
|
701
705
|
this.updateSession(sessionId, {
|
|
702
|
-
status: "
|
|
706
|
+
status: "error",
|
|
707
|
+
error: err,
|
|
703
708
|
abortController: null,
|
|
704
709
|
finishedReason: null,
|
|
705
710
|
nextAssistantMessageId: null,
|
|
706
|
-
}, true);
|
|
707
|
-
this.
|
|
711
|
+
}, true);
|
|
712
|
+
this.deliverOrQueueError(sessionId, err);
|
|
708
713
|
}
|
|
709
714
|
}
|
|
710
715
|
catch (error) {
|
|
711
|
-
// 意図:
|
|
716
|
+
// 意図: SSE の error イベントはここに到達しないため、ここは接続エラーや中断のみ
|
|
712
717
|
if (isAbortError(error)) {
|
|
713
718
|
// 既に stopStream() 等で aborted 済みであれば二重更新を避ける
|
|
714
719
|
const s = this.state.sessions.get(sessionId);
|
|
@@ -3,8 +3,9 @@ export declare function isAbortError(e: unknown): boolean;
|
|
|
3
3
|
* - `content_filter`: The content was filtered by the content filter.
|
|
4
4
|
* - `aborted`: The request was aborted, likely by the user.
|
|
5
5
|
* - `no_response`: The model did not return a response. (not loading or streaming && last message is by the user)
|
|
6
|
+
* - `unexpected_eof`: The stream ended before a terminal `done` event arrived.
|
|
6
7
|
*/
|
|
7
|
-
export type ChatErrorCode = "content_filter" | "aborted" | "no_response";
|
|
8
|
+
export type ChatErrorCode = "content_filter" | "aborted" | "no_response" | "unexpected_eof";
|
|
8
9
|
export declare class ChatError extends Error {
|
|
9
10
|
readonly code: ChatErrorCode;
|
|
10
11
|
constructor(code: ChatErrorCode, message?: string);
|
|
@@ -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
|
|
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;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,gBAAgB,GAChB,SAAS,GACT,aAAa,GACb,gBAAgB,CAAC;AAErB,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
|
@@ -95,6 +95,8 @@ export type CustomDataValue = JSONArray | JSONObject
|
|
|
95
95
|
- `event: error` → `{ message: string, code?: string }`
|
|
96
96
|
- `event: done` → `{ finished_reason: "length" | "stop" | "content_filter" | null }`
|
|
97
97
|
|
|
98
|
+
クライアントの完了判定は `done` イベント受信時のみ成功です。`error` も `done` もないまま接続が EOF した場合、クライアントは成功扱いせず `ChatError("unexpected_eof")` として `status: "error"` に遷移します。このとき、途中まで受信した assistant テキストは保持されます。
|
|
99
|
+
|
|
98
100
|
|
|
99
101
|
---
|
|
100
102
|
|
|
@@ -398,7 +400,7 @@ type UseChatSessionReturn = {
|
|
|
398
400
|
status: ChatStatus
|
|
399
401
|
/**
|
|
400
402
|
* 既知ケースでは ChatError が入る(Error のサブクラス)。
|
|
401
|
-
* - code: "content_filter" | "aborted" | "no_response"
|
|
403
|
+
* - code: "content_filter" | "aborted" | "no_response" | "unexpected_eof"
|
|
402
404
|
*/
|
|
403
405
|
error: Error | null
|
|
404
406
|
/**
|
|
@@ -457,7 +459,7 @@ await Promise.all([
|
|
|
457
459
|
- 完了時は常に最新を呼ぶ: ストリーム完了時は常に最新の `onFinish` が呼ばれます。コンポーネントがアンマウント済み(購読 0)でも呼ばれます。
|
|
458
460
|
- `onFinish` の `details.metadata` は、そのストリーム中に受信したメタデータの最新スナップショットです。
|
|
459
461
|
- 複数購読時の優先: 同一 `sessionId` を複数コンポーネントが使用する場合、最後に登録された `onFinish` が有効です。
|
|
460
|
-
- `onError`
|
|
462
|
+
- `onError` もセッション単位で「最新のみ」を保持し、エラー時は常にその最新ハンドラを呼びます。`done` なし EOF では `ChatError("unexpected_eof")` が渡され、`onFinish` は呼ばれません。
|
|
461
463
|
|
|
462
464
|
|
|
463
465
|
### ページ遷移前のセッション事前準備(`usePrefetchChatSession`)
|