@epam/ai-dial-chat-hooks 1.1.6 → 1.1.8

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,16 +1,39 @@
1
1
  import { safeDecodeURI as e } from "../../shared/string-utils.js";
2
- import { getConversationPath as t } from "./conversation-path.js";
3
- import { applyChunkToMessages as n } from "./apply-chunk.js";
4
- import { restoreBufferedMessage as r } from "./buffered-generation.js";
5
- import { MessageRole as i } from "@epam/ai-dial-chat-shared";
2
+ import { DEFAULT_GENERATION_PERSISTENCE_ERROR_MESSAGE as t, GenerationPersistenceError as n } from "../create-chat-stream-api.js";
3
+ import { getConversationPath as r } from "./conversation-path.js";
4
+ import { applyChunkToMessages as i } from "./apply-chunk.js";
5
+ import { restoreBufferedMessage as a } from "./buffered-generation.js";
6
+ import { MessageRole as o } from "@epam/ai-dial-chat-shared";
6
7
  //#region src/conversation/useConversationStream/generation-resume.ts
7
- var a = (e) => {
8
+ var s = (e) => {
8
9
  let t = e.custom_content;
9
10
  return !!e.content || e.responseId != null || !!t?.attachments?.length || !!t?.stages?.length || !!t?.annotations?.length || !!t?.form_schema || t?.state != null;
10
- }, o = (e) => {
11
+ }, c = (e) => {
11
12
  let t = e.messages[e.messages.length - 1];
12
- return !!t && t.role === i.Assistant && !a(t) && t.streamErrorMessage == null && !t.wasStoppedByUser;
13
- }, s = 300 * 1e3, c = "awaiting-resume", l = async (e, t) => {
13
+ return !!t && t.role === o.Assistant && !s(t) && t.streamErrorMessage == null && !t.wasStoppedByUser;
14
+ }, l = 300 * 1e3, u = "awaiting-resume", d = [
15
+ 1e3,
16
+ 2e3,
17
+ 4e3,
18
+ 8e3,
19
+ 16e3
20
+ ], f = (e) => new Promise((t) => {
21
+ let n = typeof window < "u", r = () => {
22
+ clearTimeout(i), n && window.removeEventListener("online", r), t();
23
+ }, i = setTimeout(r, e);
24
+ n && window.addEventListener("online", r);
25
+ }), p = async (e, t) => {
26
+ for (let n = 0; n <= d.length; n++) {
27
+ if (t()) return null;
28
+ try {
29
+ return await e();
30
+ } catch {
31
+ if (n === d.length) return null;
32
+ await f(d[n]);
33
+ }
34
+ }
35
+ return null;
36
+ }, m = async (e, t) => {
14
37
  let n = e.getReader(), r = new TextDecoder(), i = "";
15
38
  try {
16
39
  for (;;) {
@@ -39,88 +62,106 @@ var a = (e) => {
39
62
  } catch {} finally {
40
63
  n.releaseLock();
41
64
  }
42
- }, u = ({ transport: i, setConversation: a, conversationRef: u, resumingPathsRef: d, bufferedGenerationsRef: f, addStreamingPath: p, removeStreamingPath: m, isPathDisplayed: h }) => (g, _) => {
43
- if (!o(_)) return;
44
- let v = t(g);
45
- if (d.current.has(v)) return;
46
- d.current.add(v), p(v);
47
- let y = _.messages.length - 1, b = (e) => {
48
- d.current.delete(v), m(v), f.current.delete(v), e && h(v) && (a(e), u.current = e);
49
- }, x = async () => {
65
+ }, h = ({ transport: o, setConversation: d, conversationRef: f, resumingPathsRef: p, bufferedGenerationsRef: h, addStreamingPath: g, removeStreamingPath: _, isPathDisplayed: v, generationPersistenceErrorMessage: y = t }) => (t, b, x = {}) => {
66
+ if (!c(b)) {
67
+ x.onSettled?.();
68
+ return;
69
+ }
70
+ let S = r(t);
71
+ if (!x.skipDedupe && p.current.has(S)) return;
72
+ p.current.add(S), g(S);
73
+ let C = b.messages.length - 1, w = {
74
+ generationId: u,
75
+ messageIndex: C,
76
+ message: x.seedMessage ?? b.messages[C]
77
+ };
78
+ h.current.set(S, w);
79
+ let T = () => h.current.get(S) === w, E = (e, t = !1) => {
80
+ if (!T()) return;
81
+ p.current.delete(S), _(S);
82
+ let n = e && e.messages.length - 1 === C && c(e) && s(w.message);
83
+ if (t || n) {
84
+ w.message = {
85
+ ...w.message,
86
+ streamErrorMessage: y
87
+ }, v(S) && d((e) => {
88
+ if (!e || !T() || !v(S)) return e;
89
+ let t = a(e, w);
90
+ return f.current = t, t;
91
+ });
92
+ return;
93
+ }
94
+ h.current.delete(S), e && v(S) && (d(e), f.current = e);
95
+ }, D = async () => {
50
96
  try {
51
- b(await i.getConversation(e(g)));
97
+ E(await o.getConversation(e(t)));
52
98
  } catch {
53
- b();
54
- }
55
- }, S = (e) => {
56
- let t = {
57
- generationId: c,
58
- messageIndex: y,
59
- message: e
60
- };
61
- f.current.set(v, t), h(v) && a((e) => {
62
- if (!e) return e;
63
- let n = r(e, t);
64
- return u.current = n, n;
65
- });
66
- }, C = (e) => {
67
- let t = f.current.get(v);
68
- if (t?.generationId === c) {
69
- let r = n([t.message], 0, e);
70
- r && (t.message = r[0]);
99
+ E(void 0, s(w.message));
71
100
  }
72
- h(v) && a((e) => {
73
- if (!e) return e;
74
- let t = f.current.get(v);
75
- if (t?.generationId !== c) return e;
76
- let n = r(e, t);
77
- return u.current = n, n;
101
+ }, O = (e) => {
102
+ T() && (w.message = e, v(S) && d((e) => {
103
+ if (!e || !T() || !v(S)) return e;
104
+ let t = a(e, w);
105
+ return f.current = t, t;
106
+ }));
107
+ }, k = (e) => {
108
+ if (!T()) return;
109
+ let t = i([w.message], 0, e);
110
+ t && (w.message = t[0]), v(S) && d((e) => {
111
+ if (!e || !T() || !v(S)) return e;
112
+ let t = a(e, w);
113
+ return f.current = t, t;
78
114
  });
79
- }, w = async () => {
80
- let t = new AbortController(), n;
115
+ }, A = async () => {
116
+ let n = new AbortController(), r;
81
117
  try {
82
- n = await i.watchConversation(v, t.signal);
118
+ r = await o.watchConversation(S, n.signal);
83
119
  } catch {
84
- await x();
120
+ await D();
85
121
  return;
86
122
  }
87
- let r = !1, a = window.setTimeout(() => {
88
- t.abort();
89
- }, s);
123
+ let i = !1, a = window.setTimeout(() => {
124
+ n.abort();
125
+ }, l);
90
126
  try {
91
- await l(n, async (t) => {
92
- if (t?.action !== "UPDATE") return !1;
127
+ await m(r, async (n) => {
128
+ if (n?.action !== "UPDATE") return !1;
93
129
  try {
94
- let t = await i.getConversation(e(g));
95
- if (!o(t)) return b(t), r = !0, !0;
130
+ let n = await o.getConversation(e(t));
131
+ if (!c(n)) return E(n), i = !0, !0;
96
132
  } catch {}
97
133
  return !1;
98
134
  });
99
135
  } finally {
100
136
  clearTimeout(a);
101
137
  }
102
- r || await x();
103
- }, T = async () => {
138
+ i || await D();
139
+ }, j = async () => {
104
140
  let e = new AbortController(), t;
105
141
  try {
106
- t = await i.attachToGeneration(v, e.signal);
142
+ t = await o.attachToGeneration(S, e.signal);
107
143
  } catch {
108
144
  return !1;
109
145
  }
110
- let n = !1;
111
- return await l(t, (e) => {
146
+ let r = !1, i = !1;
147
+ return await m(t, (e) => {
148
+ if (!T()) return !0;
112
149
  switch (e.type) {
113
- case "snapshot": return S(e.message), !1;
114
- case "chunk": return C(e.chunk), !1;
150
+ case "snapshot": return O(e.message), !1;
151
+ case "chunk": return k(e.chunk), !1;
115
152
  case "done":
116
153
  case "error":
117
- case "stopped": return n = !0, !0;
154
+ case "stopped": return i = e.type === "error" && e.errorType === n.type, r = !0, !0;
118
155
  }
119
- }), n ? (await x(), !0) : !1;
156
+ }), r ? (i ? E(void 0, !0) : await D(), !0) : !T();
120
157
  };
121
158
  (async () => {
122
- await T() || await w();
159
+ try {
160
+ await j() || await A();
161
+ } finally {
162
+ x.onSettled?.();
163
+ }
123
164
  })();
124
165
  };
125
166
  //#endregion
126
- export { u as createResumeIfAwaitingGeneration, o as isAwaitingGenerationResume };
167
+ export { h as createResumeIfAwaitingGeneration, p as fetchConversationForRecovery, s as hasGeneratedPayload, c as isAwaitingGenerationResume };
@@ -1,156 +1,227 @@
1
1
  import { safeDecodeURI as e } from "../../shared/string-utils.js";
2
- import { DEFAULT_GENERATION_CONFLICT_MESSAGE as t, GenerationConflictError as n } from "../create-chat-stream-api.js";
3
- import { getConversationPath as r } from "./conversation-path.js";
4
- import { applyChunkToMessages as i } from "./apply-chunk.js";
5
- import { restoreBufferedMessage as a } from "./buffered-generation.js";
6
- import { createResumeIfAwaitingGeneration as o } from "./generation-resume.js";
7
- import { generateUUID as s } from "@epam/ai-dial-chat-shared";
8
- import { useCallback as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
9
- import { SendCompletionDtoModeEnum as p } from "@epam/ai-dial-chat-api-client";
2
+ import { DEFAULT_GENERATION_CONFLICT_MESSAGE as t, DEFAULT_GENERATION_PERSISTENCE_ERROR_MESSAGE as n, GenerationConflictError as r, GenerationPersistenceError as i, StreamInterruptedError as a, StreamUpstreamError as o } from "../create-chat-stream-api.js";
3
+ import { getConversationPath as s } from "./conversation-path.js";
4
+ import { applyChunkToMessages as c } from "./apply-chunk.js";
5
+ import { restoreBufferedMessage as l } from "./buffered-generation.js";
6
+ import { createResumeIfAwaitingGeneration as u, fetchConversationForRecovery as d, hasGeneratedPayload as f, isAwaitingGenerationResume as p } from "./generation-resume.js";
7
+ import { MessageRole as m, generateUUID as h } from "@epam/ai-dial-chat-shared";
8
+ import { useCallback as g, useEffect as _, useMemo as v, useRef as y, useState as b } from "react";
9
+ import { SendCompletionDtoModeEnum as x } from "@epam/ai-dial-chat-api-client";
10
10
  //#region src/conversation/useConversationStream/useConversationStream.ts
11
- var m = 2e4, h = ({ conversationId: h, state: { setConversation: g, conversationRef: _ }, transport: v, generation: { startGeneration: y, completeGeneration: b }, channel: x, overlay: S, onStopError: C, generationConflictMessage: w = t }) => {
12
- let [T, E] = f(() => /* @__PURE__ */ new Set()), [D, O] = f(null), k = d(null), A = d(null), j = d(/* @__PURE__ */ new Set()), M = d(/* @__PURE__ */ new Map()), N = d(/* @__PURE__ */ new Set()), P = d(/* @__PURE__ */ new Map()), F = d(h);
13
- l(() => {
14
- F.current = h;
15
- }, [h]);
16
- let I = c((e) => r(F.current ?? "") === e, []), L = c((e) => {
17
- E((t) => {
11
+ var S = 2e4, ee = (e, t, n) => e instanceof i ? n : e instanceof r ? t : e instanceof o ? e.message : "", C = ({ conversationId: r, state: { setConversation: o, conversationRef: C }, transport: w, generation: { startGeneration: T, completeGeneration: E }, channel: D, overlay: O, onStopError: k, generationConflictMessage: A = t, generationPersistenceErrorMessage: j = n, onStreamError: M }) => {
12
+ let N = y(M);
13
+ _(() => {
14
+ N.current = M;
15
+ }, [M]);
16
+ let [P, F] = b(() => /* @__PURE__ */ new Set()), [I, L] = b(null), R = y(null), z = y(null), B = y(/* @__PURE__ */ new Set()), V = y(/* @__PURE__ */ new Map()), H = y(/* @__PURE__ */ new Set()), U = y(/* @__PURE__ */ new Map()), W = y(r);
17
+ _(() => {
18
+ W.current = r;
19
+ }, [r]);
20
+ let G = g((e) => s(W.current ?? "") === e, []), K = g((e) => {
21
+ F((t) => {
18
22
  if (t.has(e)) return t;
19
23
  let n = new Set(t);
20
24
  return n.add(e), n;
21
25
  });
22
- }, []), R = c((e) => {
23
- E((t) => {
26
+ }, []), q = g((e) => {
27
+ F((t) => {
24
28
  if (!t.has(e)) return t;
25
29
  let n = new Set(t);
26
30
  return n.delete(e), n;
27
31
  });
28
- }, []), z = c((t, o, c, l, u, d, f = p.Append) => {
29
- let h = d ?? s(), C = r(t);
30
- k.current = h, A.current = C, P.current.set(C, h), O(C);
31
- let T;
32
- f === p.Regenerate ? T = c : f === p.Edit && (T = c - 1);
33
- let E = () => P.current.get(C) !== h, D = y(C, h), j = _.current?.messages[c];
34
- j ? M.current.set(C, {
35
- generationId: h,
36
- messageIndex: c,
37
- message: j
38
- }) : M.current.delete(C), L(C), S?.notifyGenerationStart?.(), x?.ensureConnected();
39
- let F = {
40
- signal: D.signal,
32
+ }, []), J = v(() => u({
33
+ transport: w,
34
+ setConversation: o,
35
+ conversationRef: C,
36
+ resumingPathsRef: B,
37
+ bufferedGenerationsRef: V,
38
+ addStreamingPath: K,
39
+ removeStreamingPath: q,
40
+ isPathDisplayed: G,
41
+ generationPersistenceErrorMessage: j
42
+ }), [
43
+ K,
44
+ q,
45
+ G,
46
+ w,
47
+ j
48
+ ]), Y = g((t, n, r, u, g, _, v = x.Append) => {
49
+ let y = _ ?? h(), b = s(t);
50
+ B.current.delete(b), R.current = y, z.current = b, U.current.set(b, y), L(b);
51
+ let k;
52
+ v === x.Regenerate ? k = r : v === x.Edit && (k = r - 1);
53
+ let M = () => U.current.get(b) !== y, P = T(b, y), F = C.current?.messages[r];
54
+ F ? V.current.set(b, {
55
+ generationId: y,
56
+ messageIndex: r,
57
+ message: F
58
+ }) : V.current.delete(b), K(b), O?.notifyGenerationStart?.(), D?.ensureConnected();
59
+ let I = () => {
60
+ M() || q(b), R.current === y && (R.current = null, z.current = null, L(null)), E(b, y), D?.notifyGenerationSettled?.();
61
+ }, W = () => {
62
+ if (M()) return;
63
+ let e = V.current.get(b);
64
+ !e || e.generationId !== y || (e.message = {
65
+ ...e.message,
66
+ streamErrorMessage: j
67
+ }, N.current?.(new i()), G(b) && o((t) => {
68
+ if (!t || M() || !G(b)) return t;
69
+ let n = l(t, e);
70
+ return C.current = n, n;
71
+ }));
72
+ }, Y = {
73
+ signal: P.signal,
41
74
  onChunk: (e) => {
42
- if (k.current !== h) return;
43
- let t = M.current.get(C);
44
- if (t?.generationId === h) {
45
- let n = i([t.message], 0, e);
75
+ if (R.current !== y) return;
76
+ let t = V.current.get(b);
77
+ if (t?.generationId === y) {
78
+ let n = c([t.message], 0, e);
46
79
  n && (t.message = n[0]);
47
80
  }
48
- I(C) && g((t) => {
81
+ G(b) && o((t) => {
49
82
  if (!t) return t;
50
- let n = M.current.get(C), r;
51
- if (n?.generationId === h) r = a(t, n);
83
+ let n = V.current.get(b), i;
84
+ if (n?.generationId === y) i = l(t, n);
52
85
  else {
53
- let n = i(t.messages, c, e);
86
+ let n = c(t.messages, r, e);
54
87
  if (!n) return t;
55
- r = {
88
+ i = {
56
89
  ...t,
57
90
  messages: n
58
91
  };
59
92
  }
60
- return _.current = r, r;
93
+ return C.current = i, i;
61
94
  });
62
95
  },
63
96
  onComplete: async () => {
64
- if (M.current.get(C)?.generationId === h && M.current.delete(C), E() || R(C), k.current === h && (k.current = null, A.current = null, O(null)), b(C, h), x?.notifyGenerationSettled?.(), N.current.has(h) ? N.current.delete(h) : E() || S?.notifyGenerationEnd?.(), !E() && I(C)) try {
65
- let n = await v.getConversation(e(t));
66
- if (E() || !I(C)) return;
67
- g(n), _.current = n;
68
- } catch {}
97
+ let n = V.current.get(b), r = n?.generationId === y ? n : void 0;
98
+ if (I(), H.current.has(y) ? H.current.delete(y) : M() || O?.notifyGenerationEnd?.(), !M()) {
99
+ if (!G(b)) {
100
+ r && V.current.delete(b);
101
+ return;
102
+ }
103
+ try {
104
+ let n = await w.getConversation(e(t));
105
+ if (M()) return;
106
+ if (!G(b)) {
107
+ r && V.current.delete(b);
108
+ return;
109
+ }
110
+ if (r && r.messageIndex === n.messages.length - 1 && p(n) && f(r.message)) {
111
+ W();
112
+ return;
113
+ }
114
+ r && V.current.delete(b), o(n), C.current = n;
115
+ } catch {
116
+ M() || W();
117
+ }
118
+ }
69
119
  },
70
120
  onError: (e) => {
71
- let t = M.current.get(C), r = t?.generationId === h ? t : void 0;
72
- if (r && M.current.delete(C), E() || R(C), k.current === h && (k.current = null, A.current = null, O(null)), b(C, h), x?.notifyGenerationSettled?.(), E() || !I(C)) return;
73
- let i = e instanceof n ? w : e.message;
74
- g((e) => {
75
- if (!e) return e;
76
- let t = r?.generationId === h ? a(e, r) : e, n = {
77
- ...t,
78
- messages: t.messages.map((e, t) => t === c ? {
79
- ...e,
80
- streamErrorMessage: i
81
- } : e)
82
- };
83
- return _.current = n, n;
121
+ if (N.current?.(e), e instanceof a && !M()) {
122
+ Q(e);
123
+ return;
124
+ }
125
+ X(e);
126
+ }
127
+ }, X = (e) => {
128
+ let t = V.current.get(b), n = t?.generationId === y ? t : void 0;
129
+ if (n && (e instanceof i ? n.message = {
130
+ ...n.message,
131
+ streamErrorMessage: j
132
+ } : V.current.delete(b)), I(), M() || !G(b)) return;
133
+ let a = ee(e, A, j);
134
+ o((e) => {
135
+ if (!e || M() || !G(b)) return e;
136
+ let t = n?.generationId === y ? l(e, n) : e, i = {
137
+ ...t,
138
+ messages: t.messages.map((e, t) => t === r ? {
139
+ ...e,
140
+ streamErrorMessage: a
141
+ } : e)
142
+ };
143
+ return C.current = i, i;
144
+ });
145
+ }, Z = () => {
146
+ I(), H.current.has(y) ? H.current.delete(y) : M() || O?.notifyGenerationEnd?.();
147
+ }, Q = async (n) => {
148
+ B.current.add(b);
149
+ let i = await d(() => w.getConversation(e(t)), M);
150
+ if (M()) {
151
+ I();
152
+ return;
153
+ }
154
+ let a = i?.messages[i.messages.length - 1], s = i != null && i.messages.length - 1 === r && a?.role === m.Assistant;
155
+ if (!i || !s) {
156
+ B.current.delete(b), X(n);
157
+ return;
158
+ }
159
+ let c = V.current.get(b), l = c?.generationId === y ? c : void 0;
160
+ if (p(i)) {
161
+ J(t, i, {
162
+ seedMessage: l?.message,
163
+ skipDedupe: !0,
164
+ onSettled: Z
84
165
  });
166
+ return;
85
167
  }
168
+ B.current.delete(b), l && V.current.delete(b), G(b) && (o(i), C.current = i), Z();
86
169
  };
87
170
  (async () => {
88
171
  try {
89
- let e = x?.channelId ?? await x?.waitForChannel(m) ?? void 0, t = N.current.has(h);
90
- if (D.signal.aborted || E() || t) {
91
- M.current.get(C)?.generationId === h && M.current.delete(C), E() || R(C), k.current === h && (k.current = null, A.current = null, O(null)), b(C, h), x?.notifyGenerationSettled?.(), t ? N.current.delete(h) : E() || S?.notifyGenerationEnd?.();
172
+ let e = D?.channelId ?? await D?.waitForChannel(S) ?? void 0, t = H.current.has(y);
173
+ if (P.signal.aborted || M() || t) {
174
+ V.current.get(b)?.generationId === y && V.current.delete(b), M() || q(b), R.current === y && (R.current = null, z.current = null, L(null)), E(b, y), D?.notifyGenerationSettled?.(), t ? H.current.delete(y) : M() || O?.notifyGenerationEnd?.();
92
175
  return;
93
176
  }
94
- v.streamCompletion(C, o, l, F, u, h, f, T, e);
177
+ w.streamCompletion(b, n, u, Y, g, y, v, k, e);
95
178
  } catch (e) {
96
- F.onError(e instanceof Error ? e : Error(String(e)));
179
+ Y.onError(e instanceof Error ? e : Error(String(e)));
97
180
  }
98
181
  })();
99
182
  }, [
100
- y,
101
- b,
102
- L,
103
- R,
104
- I,
105
- x?.channelId,
106
- x?.ensureConnected,
107
- x?.waitForChannel,
108
- x?.notifyGenerationSettled,
109
- S,
110
- v,
111
- w
112
- ]), B = c((e, t) => {
113
- let n = r(e), i = M.current.get(n);
114
- return i ? a(t, i) : t;
115
- }, []), V = c(() => {
116
- let e = k.current;
117
- if (!e || !h) return;
118
- let t = r(h);
119
- A.current === t && (N.current.add(e), S?.notifyStopGenerating?.(), v.stopCompletion({
183
+ T,
184
+ E,
185
+ K,
186
+ q,
187
+ G,
188
+ D?.channelId,
189
+ D?.ensureConnected,
190
+ D?.waitForChannel,
191
+ D?.notifyGenerationSettled,
192
+ O,
193
+ w,
194
+ J,
195
+ A,
196
+ j
197
+ ]), X = g((e, t) => {
198
+ let n = s(e), r = V.current.get(n);
199
+ return r ? l(t, r) : t;
200
+ }, []), Z = g(() => {
201
+ let e = R.current;
202
+ if (!e || !r) return;
203
+ let t = s(r);
204
+ z.current === t && (H.current.add(e), O?.notifyStopGenerating?.(), w.stopCompletion({
120
205
  generationId: e,
121
206
  path: t
122
207
  }).catch((e) => {
123
208
  let t = e instanceof Error ? e : Error(String(e));
124
- C?.(t);
209
+ k?.(t);
125
210
  }));
126
211
  }, [
127
- h,
128
- C,
129
- S,
130
- v
131
- ]), H = u(() => o({
132
- transport: v,
133
- setConversation: g,
134
- conversationRef: _,
135
- resumingPathsRef: j,
136
- bufferedGenerationsRef: M,
137
- addStreamingPath: L,
138
- removeStreamingPath: R,
139
- isPathDisplayed: I
140
- }), [
141
- L,
142
- R,
143
- I,
144
- v
145
- ]), U = h != null && T.has(r(h)), W = h == null ? null : r(h);
212
+ r,
213
+ k,
214
+ O,
215
+ w
216
+ ]), Q = g((e, t) => J(e, t), [J]), te = r != null && P.has(s(r)), $ = r == null ? null : s(r);
146
217
  return {
147
- startStream: z,
148
- handleStop: V,
149
- resumeIfAwaitingGeneration: H,
150
- restoreBufferedGeneration: B,
151
- isStreaming: U,
152
- canStopStreaming: W != null && D === W
218
+ startStream: Y,
219
+ handleStop: Z,
220
+ resumeIfAwaitingGeneration: Q,
221
+ restoreBufferedGeneration: X,
222
+ isStreaming: te,
223
+ canStopStreaming: $ != null && I === $
153
224
  };
154
225
  };
155
226
  //#endregion
156
- export { h as useConversationStream };
227
+ export { C as useConversationStream };