simple-ai-sdk 1.0.42 → 1.0.45

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.
@@ -65,9 +65,9 @@ declare class StreamManager implements IStreamManager {
65
65
  private state;
66
66
  private listeners;
67
67
  private rafScheduled;
68
+ private pendingStateClone;
68
69
  private rafId;
69
70
  private rafFallbackTimer;
70
- private pendingStateClone;
71
71
  private getRAF;
72
72
  private getCAF;
73
73
  private maxSessions;
@@ -85,8 +85,9 @@ declare class StreamManager implements IStreamManager {
85
85
  setOnFinishHandler(sessionId: string, handler: OnChatFinishCallback | undefined): void;
86
86
  setOnErrorHandler(sessionId: string, handler: ((error: Error) => void) | undefined): void;
87
87
  getSnapshot(): StreamManagerState;
88
- private materializeSnapshotIfNeeded;
89
88
  private notify;
89
+ private cloneStateForNotification;
90
+ private emitListeners;
90
91
  getSession(sessionId: string): ChatSession | undefined;
91
92
  touchSession(sessionId: string): void;
92
93
  private getMessagesSnapshot;
@@ -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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"}
@@ -8,10 +8,10 @@ class StreamManager {
8
8
  // setTimeout の戻り値型に依存しないための型指定
9
9
  // rAF-based batching for frequent updates
10
10
  rafScheduled = false;
11
+ // rAF バッチ中に state 複製を遅延し、flush 直前に 1 回だけ実施する
12
+ pendingStateClone = false;
11
13
  rafId = null;
12
14
  rafFallbackTimer = null;
13
- // updateSession 後のスナップショット確定を遅延し、flush 時に 1 回だけ clone する
14
- pendingStateClone = false;
15
15
  // Typed accessors for rAF/cAF without relying on DOM types
16
16
  getRAF() {
17
17
  // If the page is hidden, avoid rAF because it can be throttled heavily
@@ -125,20 +125,9 @@ class StreamManager {
125
125
  }
126
126
  // リスナーに状態変更を通知する
127
127
  // immediate=true の場合は即座に、false の場合は rAF で 1 フレームにまとめて通知
128
- materializeSnapshotIfNeeded() {
129
- if (!this.pendingStateClone)
130
- return;
131
- // useSyncExternalStore 向けに state / sessions の参照を更新して変更を可視化
132
- this.state = {
133
- ...this.state,
134
- sessions: new Map(this.state.sessions),
135
- };
136
- this.pendingStateClone = false;
137
- }
138
128
  notify(immediate = false) {
139
- // 更新が発生したことを記録。実際の clone は flush 直前にまとめて 1 回だけ実施する。
140
- this.pendingStateClone = true;
141
129
  if (immediate) {
130
+ this.cloneStateForNotification();
142
131
  // 重要な状態変更(ステータス変更など)は即座に通知
143
132
  if (this.rafId != null) {
144
133
  const caf = this.getCAF();
@@ -157,21 +146,13 @@ class StreamManager {
157
146
  this.rafFallbackTimer = null;
158
147
  }
159
148
  this.rafScheduled = false;
160
- this.materializeSnapshotIfNeeded();
161
- this.listeners.forEach((listener) => {
162
- try {
163
- listener();
164
- }
165
- catch (err) {
166
- // 重要: 1つの購読者の例外で全体の通知が止まらないように防御
167
- if (this.debug)
168
- console.warn("[SM] listener error (immediate)", err);
169
- }
170
- });
149
+ this.pendingStateClone = false;
150
+ this.emitListeners("immediate");
171
151
  }
172
152
  else {
173
153
  // ストリーミング中の頻繁な更新は rAF で 1 フレームにまとめる。
174
- // すでに予約済みなら clone/通知ともに次の flush に委譲する。
154
+ // state 複製は flush 直前まで遅延する。
155
+ this.pendingStateClone = true;
175
156
  if (this.rafScheduled)
176
157
  return;
177
158
  this.rafScheduled = true;
@@ -180,16 +161,11 @@ class StreamManager {
180
161
  this.rafId = raf(() => {
181
162
  this.rafId = null;
182
163
  this.rafScheduled = false;
183
- this.materializeSnapshotIfNeeded();
184
- this.listeners.forEach((listener) => {
185
- try {
186
- listener();
187
- }
188
- catch (err) {
189
- if (this.debug)
190
- console.warn("[SM] listener error (rAF)", err);
191
- }
192
- });
164
+ if (this.pendingStateClone) {
165
+ this.cloneStateForNotification();
166
+ this.pendingStateClone = false;
167
+ }
168
+ this.emitListeners("rAF");
193
169
  });
194
170
  }
195
171
  else {
@@ -197,20 +173,35 @@ class StreamManager {
197
173
  this.rafFallbackTimer = setTimeout(() => {
198
174
  this.rafFallbackTimer = null;
199
175
  this.rafScheduled = false;
200
- this.materializeSnapshotIfNeeded();
201
- this.listeners.forEach((listener) => {
202
- try {
203
- listener();
204
- }
205
- catch (err) {
206
- if (this.debug)
207
- console.warn("[SM] listener error (timer)", err);
208
- }
209
- });
176
+ if (this.pendingStateClone) {
177
+ this.cloneStateForNotification();
178
+ this.pendingStateClone = false;
179
+ }
180
+ this.emitListeners("timer");
210
181
  }, 16);
211
182
  }
212
183
  }
213
184
  }
185
+ cloneStateForNotification() {
186
+ // 新しい state オブジェクトを作成して参照を変更。
187
+ // これにより useSyncExternalStore が変更を検知できる。
188
+ this.state = {
189
+ ...this.state,
190
+ sessions: new Map(this.state.sessions),
191
+ };
192
+ }
193
+ emitListeners(mode) {
194
+ this.listeners.forEach((listener) => {
195
+ try {
196
+ listener();
197
+ }
198
+ catch (err) {
199
+ // 重要: 1つの購読者の例外で全体の通知が止まらないように防御
200
+ if (this.debug)
201
+ console.warn(`[SM] listener error (${mode})`, err);
202
+ }
203
+ });
204
+ }
214
205
  getSession(sessionId) {
215
206
  // 読み取り専用: lastAccessed を更新しない
216
207
  // (アクセス時間の更新は touchSession() 側で明示的に実施するポリシー)
@@ -536,8 +527,8 @@ class StreamManager {
536
527
  content: "",
537
528
  };
538
529
  // 配列の再構築コストを下げるため、最初に一度だけ配列を作り
539
- // 以降は assistantMessage の中身だけを更新する。
540
- // messages 更新検知は messagesVersion の増分で担保する。
530
+ // 以降は assistantMessage の content を更新していく
531
+ // (Map 自体の参照を変えて通知するため、参照が同一でも UI は更新される)
541
532
  const updatedMessages = [...messages, assistantMessage];
542
533
  this.updateSession(sessionId, {
543
534
  messages: updatedMessages,
@@ -577,12 +568,12 @@ class StreamManager {
577
568
  assistantMessage.content += parsed.text;
578
569
  // 最初のテキストチャンクは即時反映して初動レイテンシを下げる
579
570
  if (wasEmpty) {
580
- this.updateSession(sessionId, { messages: updatedMessages }, true);
571
+ this.updateSession(sessionId, { messages: [...updatedMessages] }, true);
581
572
  }
582
573
  else {
583
- // 以降は rAF バッチで通知(配列参照は再利用)
574
+ // 以降は rAF バッチで配列参照を更新
584
575
  this.updateSession(sessionId, {
585
- messages: updatedMessages,
576
+ messages: [...updatedMessages],
586
577
  });
587
578
  }
588
579
  }
@@ -600,7 +591,7 @@ class StreamManager {
600
591
  if (parsed.customData !== undefined) {
601
592
  assistantMessage.customData = parsed.customData;
602
593
  this.updateSession(sessionId, {
603
- messages: updatedMessages,
594
+ messages: [...updatedMessages],
604
595
  });
605
596
  }
606
597
  }
@@ -860,6 +851,7 @@ class StreamManager {
860
851
  this.rafFallbackTimer = null;
861
852
  }
862
853
  this.rafScheduled = false;
854
+ this.pendingStateClone = false;
863
855
  if (this.sweepTimer) {
864
856
  clearInterval(this.sweepTimer);
865
857
  this.sweepTimer = null;
@@ -1 +1 @@
1
- {"version":3,"file":"createChatHandler.d.ts","sourceRoot":"","sources":["../../src/server/createChatHandler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EAGb,iBAAiB,EAIlB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAof3E"}
1
+ {"version":3,"file":"createChatHandler.d.ts","sourceRoot":"","sources":["../../src/server/createChatHandler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EAGb,iBAAiB,EAIlB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CA2f3E"}
@@ -214,7 +214,11 @@ export function createChatHandler(options) {
214
214
  // Establish stream for this provider
215
215
  chatStream = await config.openai.chat.completions.create({
216
216
  model: config.model,
217
- messages,
217
+ // idは不要(groqだとidがあるとエラーになる)
218
+ messages: messages.map(({ role, content }) => ({
219
+ role,
220
+ content,
221
+ })),
218
222
  temperature: config.temperatureUnsupported
219
223
  ? undefined
220
224
  : options.temperature,
@@ -295,7 +299,9 @@ export function createChatHandler(options) {
295
299
  console.log(`[cch] throttle: ${JSON.stringify(throttleSettings)}`);
296
300
  previousThrottle = throttleSettings;
297
301
  }
298
- const payload = { text: deltaToSend };
302
+ const payload = {
303
+ text: deltaToSend,
304
+ };
299
305
  if (metas.length > 0)
300
306
  payload.meta = metas;
301
307
  if (customData !== undefined)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "simple-ai-sdk",
3
- "version": "1.0.42",
3
+ "version": "1.0.45",
4
4
  "private": false,
5
5
  "description": "Simple AI SDK for Hono / React19+ / OpenAI",
6
6
  "type": "module",
@@ -25,7 +25,7 @@
25
25
  }
26
26
  },
27
27
  "dependencies": {
28
- "openai": "^5.15.0"
28
+ "openai": "^6.18.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@eslint/js": "^9.34.0",