@informedai/react 0.4.7 → 0.4.9
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/index.js +39 -10
- package/dist/index.mjs +39 -10
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -207,6 +207,7 @@ var InformedAIClient = class {
|
|
|
207
207
|
}
|
|
208
208
|
const decoder = new TextDecoder();
|
|
209
209
|
let buffer = "";
|
|
210
|
+
let currentEventType = null;
|
|
210
211
|
try {
|
|
211
212
|
while (true) {
|
|
212
213
|
const { done, value } = await reader.read();
|
|
@@ -215,20 +216,40 @@ var InformedAIClient = class {
|
|
|
215
216
|
const lines = buffer.split("\n");
|
|
216
217
|
buffer = lines.pop() || "";
|
|
217
218
|
for (const line of lines) {
|
|
218
|
-
if (line.startsWith("
|
|
219
|
+
if (line.startsWith("event: ")) {
|
|
220
|
+
currentEventType = line.slice(7).trim();
|
|
221
|
+
} else if (line.startsWith("data: ")) {
|
|
219
222
|
try {
|
|
220
223
|
const data = JSON.parse(line.slice(6));
|
|
221
|
-
|
|
224
|
+
const sseEvent = {
|
|
225
|
+
type: currentEventType || "content",
|
|
226
|
+
content: data.text,
|
|
227
|
+
// Backend sends 'text', SDK expects 'content'
|
|
228
|
+
session: data.session,
|
|
229
|
+
error: data.error
|
|
230
|
+
};
|
|
231
|
+
onEvent(sseEvent);
|
|
232
|
+
currentEventType = null;
|
|
222
233
|
} catch {
|
|
223
234
|
}
|
|
224
235
|
}
|
|
225
236
|
}
|
|
226
237
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
238
|
+
for (const line of buffer.split("\n")) {
|
|
239
|
+
if (line.startsWith("event: ")) {
|
|
240
|
+
currentEventType = line.slice(7).trim();
|
|
241
|
+
} else if (line.startsWith("data: ")) {
|
|
242
|
+
try {
|
|
243
|
+
const data = JSON.parse(line.slice(6));
|
|
244
|
+
const sseEvent = {
|
|
245
|
+
type: currentEventType || "content",
|
|
246
|
+
content: data.text,
|
|
247
|
+
session: data.session,
|
|
248
|
+
error: data.error
|
|
249
|
+
};
|
|
250
|
+
onEvent(sseEvent);
|
|
251
|
+
} catch {
|
|
252
|
+
}
|
|
232
253
|
}
|
|
233
254
|
}
|
|
234
255
|
} finally {
|
|
@@ -515,13 +536,10 @@ function InformedAIProvider({ config, children }) {
|
|
|
515
536
|
};
|
|
516
537
|
}, [session?.id, startHeartbeat, stopHeartbeat, handleSessionDeleted, config]);
|
|
517
538
|
const handleSSEEvent = (0, import_react.useCallback)((event) => {
|
|
518
|
-
console.log("[InformedAI] SSE event:", event.type, event);
|
|
519
539
|
if (event.type === "content" && event.content) {
|
|
520
540
|
setStreamingContent((prev) => prev + event.content);
|
|
521
541
|
}
|
|
522
542
|
if (event.type === "done" || event.type === "session_update") {
|
|
523
|
-
console.log("[InformedAI] Done event - session:", event.session);
|
|
524
|
-
console.log("[InformedAI] Done event - widgetMessages:", event.session?.widgetMessages);
|
|
525
543
|
(0, import_react_dom.flushSync)(() => {
|
|
526
544
|
if (event.session) {
|
|
527
545
|
setSession(event.session);
|
|
@@ -543,6 +561,17 @@ function InformedAIProvider({ config, children }) {
|
|
|
543
561
|
const sendMessage = (0, import_react.useCallback)(async (message) => {
|
|
544
562
|
if (!clientRef.current || !session) return;
|
|
545
563
|
try {
|
|
564
|
+
const optimisticMessage = {
|
|
565
|
+
id: `temp-${Date.now()}`,
|
|
566
|
+
role: "user",
|
|
567
|
+
content: message,
|
|
568
|
+
type: "user_input",
|
|
569
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
570
|
+
};
|
|
571
|
+
setSession((prev) => prev ? {
|
|
572
|
+
...prev,
|
|
573
|
+
widgetMessages: [...prev.widgetMessages || [], optimisticMessage]
|
|
574
|
+
} : null);
|
|
546
575
|
setIsStreaming(true);
|
|
547
576
|
setStreamingContent("");
|
|
548
577
|
setError(null);
|
package/dist/index.mjs
CHANGED
|
@@ -177,6 +177,7 @@ var InformedAIClient = class {
|
|
|
177
177
|
}
|
|
178
178
|
const decoder = new TextDecoder();
|
|
179
179
|
let buffer = "";
|
|
180
|
+
let currentEventType = null;
|
|
180
181
|
try {
|
|
181
182
|
while (true) {
|
|
182
183
|
const { done, value } = await reader.read();
|
|
@@ -185,20 +186,40 @@ var InformedAIClient = class {
|
|
|
185
186
|
const lines = buffer.split("\n");
|
|
186
187
|
buffer = lines.pop() || "";
|
|
187
188
|
for (const line of lines) {
|
|
188
|
-
if (line.startsWith("
|
|
189
|
+
if (line.startsWith("event: ")) {
|
|
190
|
+
currentEventType = line.slice(7).trim();
|
|
191
|
+
} else if (line.startsWith("data: ")) {
|
|
189
192
|
try {
|
|
190
193
|
const data = JSON.parse(line.slice(6));
|
|
191
|
-
|
|
194
|
+
const sseEvent = {
|
|
195
|
+
type: currentEventType || "content",
|
|
196
|
+
content: data.text,
|
|
197
|
+
// Backend sends 'text', SDK expects 'content'
|
|
198
|
+
session: data.session,
|
|
199
|
+
error: data.error
|
|
200
|
+
};
|
|
201
|
+
onEvent(sseEvent);
|
|
202
|
+
currentEventType = null;
|
|
192
203
|
} catch {
|
|
193
204
|
}
|
|
194
205
|
}
|
|
195
206
|
}
|
|
196
207
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
208
|
+
for (const line of buffer.split("\n")) {
|
|
209
|
+
if (line.startsWith("event: ")) {
|
|
210
|
+
currentEventType = line.slice(7).trim();
|
|
211
|
+
} else if (line.startsWith("data: ")) {
|
|
212
|
+
try {
|
|
213
|
+
const data = JSON.parse(line.slice(6));
|
|
214
|
+
const sseEvent = {
|
|
215
|
+
type: currentEventType || "content",
|
|
216
|
+
content: data.text,
|
|
217
|
+
session: data.session,
|
|
218
|
+
error: data.error
|
|
219
|
+
};
|
|
220
|
+
onEvent(sseEvent);
|
|
221
|
+
} catch {
|
|
222
|
+
}
|
|
202
223
|
}
|
|
203
224
|
}
|
|
204
225
|
} finally {
|
|
@@ -485,13 +506,10 @@ function InformedAIProvider({ config, children }) {
|
|
|
485
506
|
};
|
|
486
507
|
}, [session?.id, startHeartbeat, stopHeartbeat, handleSessionDeleted, config]);
|
|
487
508
|
const handleSSEEvent = useCallback((event) => {
|
|
488
|
-
console.log("[InformedAI] SSE event:", event.type, event);
|
|
489
509
|
if (event.type === "content" && event.content) {
|
|
490
510
|
setStreamingContent((prev) => prev + event.content);
|
|
491
511
|
}
|
|
492
512
|
if (event.type === "done" || event.type === "session_update") {
|
|
493
|
-
console.log("[InformedAI] Done event - session:", event.session);
|
|
494
|
-
console.log("[InformedAI] Done event - widgetMessages:", event.session?.widgetMessages);
|
|
495
513
|
flushSync(() => {
|
|
496
514
|
if (event.session) {
|
|
497
515
|
setSession(event.session);
|
|
@@ -513,6 +531,17 @@ function InformedAIProvider({ config, children }) {
|
|
|
513
531
|
const sendMessage = useCallback(async (message) => {
|
|
514
532
|
if (!clientRef.current || !session) return;
|
|
515
533
|
try {
|
|
534
|
+
const optimisticMessage = {
|
|
535
|
+
id: `temp-${Date.now()}`,
|
|
536
|
+
role: "user",
|
|
537
|
+
content: message,
|
|
538
|
+
type: "user_input",
|
|
539
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
540
|
+
};
|
|
541
|
+
setSession((prev) => prev ? {
|
|
542
|
+
...prev,
|
|
543
|
+
widgetMessages: [...prev.widgetMessages || [], optimisticMessage]
|
|
544
|
+
} : null);
|
|
516
545
|
setIsStreaming(true);
|
|
517
546
|
setStreamingContent("");
|
|
518
547
|
setError(null);
|