@epam/ai-dial-chat-hooks 1.2.5 → 1.3.0-dev.102

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.
Files changed (70) hide show
  1. package/catalog/catalog-derivations.d.ts +1 -1
  2. package/catalog/catalog-derivations.d.ts.map +1 -1
  3. package/catalog/catalog-derivations.js +1 -1
  4. package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.d.ts +8 -1
  5. package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.d.ts.map +1 -1
  6. package/catalog/useCatalogEditNavigation/useCatalogEditNavigation.js +57 -38
  7. package/conversation/conversation-draft/conversation-draft-store.d.ts +21 -0
  8. package/conversation/conversation-draft/conversation-draft-store.d.ts.map +1 -0
  9. package/conversation/conversation-draft/conversation-draft-store.js +84 -0
  10. package/conversation/conversation-draft/conversation-draft.d.ts +48 -0
  11. package/conversation/conversation-draft/conversation-draft.d.ts.map +1 -0
  12. package/conversation/create-chat-stream-api.d.ts +6 -0
  13. package/conversation/create-chat-stream-api.d.ts.map +1 -1
  14. package/conversation/create-chat-stream-api.js +28 -23
  15. package/conversation/useConversationComposerDraft/useConversationComposerDraft.d.ts +39 -0
  16. package/conversation/useConversationComposerDraft/useConversationComposerDraft.d.ts.map +1 -0
  17. package/conversation/useConversationComposerDraft/useConversationComposerDraft.js +132 -0
  18. package/conversation/useConversationStream/useConversationStream.d.ts.map +1 -1
  19. package/conversation/useConversationStream/useConversationStream.js +233 -219
  20. package/conversation.js +34 -32
  21. package/entry-points/conversation.d.ts +3 -0
  22. package/entry-points/conversation.d.ts.map +1 -1
  23. package/entry-points/offline-credentials.d.ts +5 -0
  24. package/entry-points/offline-credentials.d.ts.map +1 -0
  25. package/entry-points/scheduled-tasks.d.ts +1 -0
  26. package/entry-points/scheduled-tasks.d.ts.map +1 -1
  27. package/file-manager.js +21 -21
  28. package/files/dial-file-manager-mapping.util.d.ts +17 -1
  29. package/files/dial-file-manager-mapping.util.d.ts.map +1 -1
  30. package/files/dial-file-manager-mapping.util.js +77 -62
  31. package/files/useDialFileListing/useDialFileListing.d.ts.map +1 -1
  32. package/files/useDialFileListing/useDialFileListing.js +56 -53
  33. package/files/useDialFileMutations/useDialFileMutations.d.ts.map +1 -1
  34. package/files/useDialFileMutations/useDialFileMutations.js +206 -204
  35. package/index.d.ts +8 -0
  36. package/index.d.ts.map +1 -1
  37. package/index.js +131 -124
  38. package/mcp-apps/mcp-apps-api-client.d.ts.map +1 -1
  39. package/mcp-apps/mcp-apps-api-client.js +18 -17
  40. package/mcp-apps/useMcpAppTools/useMcpAppTools.d.ts.map +1 -1
  41. package/mcp-apps/useMcpAppTools/useMcpAppTools.js +29 -29
  42. package/oauth/popup.d.ts.map +1 -1
  43. package/oauth/popup.js +19 -17
  44. package/oauth/useOAuthCallbackCompletion/useOAuthCallbackCompletion.d.ts.map +1 -1
  45. package/oauth/useOAuthCallbackCompletion/useOAuthCallbackCompletion.js +40 -38
  46. package/offline-credentials/map-offline-credentials-response.d.ts +17 -0
  47. package/offline-credentials/map-offline-credentials-response.d.ts.map +1 -0
  48. package/offline-credentials/map-offline-credentials-response.js +15 -0
  49. package/offline-credentials/useOfflineCredentialsAuth/useOfflineCredentialsAuth.d.ts +58 -0
  50. package/offline-credentials/useOfflineCredentialsAuth/useOfflineCredentialsAuth.d.ts.map +1 -0
  51. package/offline-credentials/useOfflineCredentialsAuth/useOfflineCredentialsAuth.js +37 -0
  52. package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.d.ts +57 -0
  53. package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.d.ts.map +1 -0
  54. package/offline-credentials/useOfflineCredentialsGate/useOfflineCredentialsGate.js +34 -0
  55. package/offline-credentials/useOfflineCredentialsLogin/useOfflineCredentialsLogin.d.ts +28 -0
  56. package/offline-credentials/useOfflineCredentialsLogin/useOfflineCredentialsLogin.d.ts.map +1 -0
  57. package/offline-credentials/useOfflineCredentialsLogin/useOfflineCredentialsLogin.js +29 -0
  58. package/offline-credentials.d.ts +2 -0
  59. package/offline-credentials.js +5 -0
  60. package/package.json +23 -18
  61. package/scheduled-task/check-scheduled-task-auth-session-error.d.ts +27 -0
  62. package/scheduled-task/check-scheduled-task-auth-session-error.d.ts.map +1 -0
  63. package/scheduled-task/check-scheduled-task-auth-session-error.js +17 -0
  64. package/scheduled-tasks.js +2 -1
  65. package/shared/application-schema.d.ts +0 -2
  66. package/shared/application-schema.d.ts.map +1 -1
  67. package/shared/application-schema.js +2 -2
  68. package/useShareLink/useShareLink.d.ts.map +1 -1
  69. package/useShareLink/useShareLink.js +1 -0
  70. package/utils.js +10 -10
@@ -1,336 +1,350 @@
1
1
  import { safeDecodeURI as e } from "../../shared/string-utils.js";
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 ee, fetchConversationForRecovery as te, findPendingBackgroundMessageIndex as u, hasGeneratedPayload as ne, isAwaitingGenerationResume as d } from "./generation-resume.js";
2
+ import { DEFAULT_GENERATION_CONFLICT_MESSAGE as t, DEFAULT_GENERATION_PERSISTENCE_ERROR_MESSAGE as n, GenerationConflictError as r, GenerationPersistenceError as i, StopCompletionError as a, StreamInterruptedError as o, StreamUpstreamError as s } from "../create-chat-stream-api.js";
3
+ import { getConversationPath as c } from "./conversation-path.js";
4
+ import { applyChunkToMessages as l } from "./apply-chunk.js";
5
+ import { restoreBufferedMessage as u } from "./buffered-generation.js";
6
+ import { createResumeIfAwaitingGeneration as ee, fetchConversationForRecovery as te, findPendingBackgroundMessageIndex as d, hasGeneratedPayload as ne, isAwaitingGenerationResume as f } from "./generation-resume.js";
7
7
  import { createFrameScheduler as re } from "./frame-scheduler.js";
8
- import { MessageRole as ie, generateUUID as ae } from "@epam/ai-dial-chat-shared";
9
- import { useCallback as f, useEffect as p, useMemo as oe, useRef as m, useState as h } from "react";
10
- import { SendCompletionDtoModeEnum as g } from "@epam/ai-dial-chat-api-client";
8
+ import { MessageRole as p, generateUUID as ie } from "@epam/ai-dial-chat-shared";
9
+ import { useCallback as m, useEffect as h, useMemo as g, useRef as _, useState as v } from "react";
10
+ import { SendCompletionDtoModeEnum as y } from "@epam/ai-dial-chat-api-client";
11
11
  //#region src/conversation/useConversationStream/useConversationStream.ts
12
- var se = 2e4, ce = 401, le = (e, t, n) => e instanceof i ? n : e instanceof r ? t : e instanceof o ? e.message : "", _ = (e) => {
12
+ var ae = 2e4, oe = 401, b = 404, x = 2e3, S = 100, se = (e, t, n) => e instanceof i ? n : e instanceof r ? t : e instanceof s ? e.message : "", C = (e) => {
13
13
  if (!e) return;
14
- let t = u(e);
14
+ let t = d(e);
15
15
  return t === -1 ? void 0 : e.messages[t].backgroundGeneration?.generationId;
16
- }, v = ({ conversationId: o, state: { setConversation: v, conversationRef: y }, transport: b, generation: { startGeneration: ue, completeGeneration: x }, channel: S, overlay: C, onStopError: w, generationConflictMessage: de = t, generationPersistenceErrorMessage: T = n, onStreamError: E, batchChunksPerFrame: D = !1 }) => {
17
- let O = m(E);
18
- p(() => {
19
- O.current = E;
20
- }, [E]);
21
- let fe = m(D);
22
- p(() => {
23
- fe.current = D;
24
- }, [D]);
25
- let [k] = h(re), [A, j] = h(() => /* @__PURE__ */ new Set()), [M, N] = h(() => /* @__PURE__ */ new Set()), P = m(/* @__PURE__ */ new Map()), F = m(/* @__PURE__ */ new Set()), I = m(/* @__PURE__ */ new Map()), L = m(/* @__PURE__ */ new Set()), pe = m(/* @__PURE__ */ new Map()), R = m(!0), z = m(/* @__PURE__ */ new Map()), [B, V] = h(z.current), H = m(/* @__PURE__ */ new Set()), [me, U] = h(H.current);
26
- p(() => (R.current = !0, () => {
27
- R.current = !1;
16
+ }, w = ({ conversationId: s, state: { setConversation: w, conversationRef: T }, transport: E, generation: { startGeneration: ce, completeGeneration: le }, channel: D, overlay: O, onStopError: ue, generationConflictMessage: de = t, generationPersistenceErrorMessage: k = n, onStreamError: A, batchChunksPerFrame: j = !1 }) => {
17
+ let fe = _(A);
18
+ h(() => {
19
+ fe.current = A;
20
+ }, [A]);
21
+ let pe = _(j);
22
+ h(() => {
23
+ pe.current = j;
24
+ }, [j]);
25
+ let [M] = v(re), [N, P] = v(() => /* @__PURE__ */ new Set()), F = _(N);
26
+ F.current = N;
27
+ let [I, me] = v(() => /* @__PURE__ */ new Set()), L = _(/* @__PURE__ */ new Map()), R = _(/* @__PURE__ */ new Set()), z = _(/* @__PURE__ */ new Map()), B = _(/* @__PURE__ */ new Set()), V = _(/* @__PURE__ */ new Set()), he = _(/* @__PURE__ */ new Map()), H = _(!0), U = _(/* @__PURE__ */ new Map()), [ge, W] = v(U.current), G = _(/* @__PURE__ */ new Set()), [_e, ve] = v(G.current);
28
+ h(() => (H.current = !0, () => {
29
+ H.current = !1;
28
30
  }), []);
29
- let W = f((e) => {
30
- if (!z.current.has(e)) return;
31
- let t = new Map(z.current);
32
- t.delete(e), z.current = t, R.current && V(t);
33
- }, []), G = f((e, t, n) => {
34
- if (!R.current || !n()) return;
35
- let r = new Map(z.current);
31
+ let K = m((e) => {
32
+ if (!U.current.has(e)) return;
33
+ let t = new Map(U.current);
34
+ t.delete(e), U.current = t, H.current && W(t);
35
+ }, []), q = m((e, t, n) => {
36
+ if (!H.current || !n()) return;
37
+ let r = new Map(U.current);
36
38
  r.set(e, {
37
39
  retry: t,
38
40
  isCurrent: n
39
- }), z.current = r, V(r);
40
- }, []), he = f(async () => {
41
- if (!o) return;
42
- let e = z.current.get(s(o));
43
- if (!(!e || !e.isCurrent() || H.current.has(e))) {
44
- H.current.add(e), U(new Set(H.current));
41
+ }), U.current = r, W(r);
42
+ }, []), ye = m(async () => {
43
+ if (!s) return;
44
+ let e = U.current.get(c(s));
45
+ if (!(!e || !e.isCurrent() || G.current.has(e))) {
46
+ G.current.add(e), ve(new Set(G.current));
45
47
  try {
46
48
  await e.retry();
47
49
  } finally {
48
- H.current.delete(e), R.current && U(new Set(H.current));
50
+ G.current.delete(e), H.current && ve(new Set(G.current));
49
51
  }
50
52
  }
51
- }, [o]), K = m(o);
52
- p(() => (K.current = o, () => k.cancelAll()), [o, k]);
53
- let q = f((e) => R.current && s(K.current ?? "") === e, []), J = f((e) => {
54
- W(e), j((t) => {
53
+ }, [s]), be = _(s);
54
+ h(() => (be.current = s, () => M.cancelAll()), [s, M]);
55
+ let J = m((e) => H.current && c(be.current ?? "") === e, []), Y = m((e) => {
56
+ K(e), P((t) => {
55
57
  if (t.has(e)) return t;
56
58
  let n = new Set(t);
57
59
  return n.add(e), n;
58
60
  });
59
- }, [W]), Y = f((e) => {
60
- j((t) => {
61
+ }, [K]), X = m((e) => {
62
+ P((t) => {
61
63
  if (!t.has(e)) return t;
62
64
  let n = new Set(t);
63
65
  return n.delete(e), n;
64
66
  });
65
- }, []), X = f((e, t) => {
66
- N((n) => {
67
+ }, []), Z = m((e, t) => {
68
+ me((n) => {
67
69
  if (n.has(e) === t) return n;
68
70
  let r = new Set(n);
69
71
  return t ? r.add(e) : r.delete(e), r;
70
72
  });
71
- }, []), Z = f((e, t) => {
72
- P.current.get(e) === t && (P.current.delete(e), X(e, !1));
73
- }, [X]), Q = oe(() => ee({
74
- transport: b,
75
- setConversation: v,
76
- conversationRef: y,
77
- resumingPathsRef: F,
78
- bufferedGenerationsRef: I,
79
- addStreamingPath: J,
80
- removeStreamingPath: Y,
81
- isPathDisplayed: q,
82
- generationPersistenceErrorMessage: T,
83
- frameScheduler: D ? k : void 0,
84
- stoppedGenerationIdsRef: L,
85
- onReloadError: G,
86
- onReloadSuccess: W
73
+ }, []), xe = m((e, t) => {
74
+ L.current.get(e) === t && (L.current.delete(e), Z(e, !1));
75
+ }, [Z]), Q = g(() => ee({
76
+ transport: E,
77
+ setConversation: w,
78
+ conversationRef: T,
79
+ resumingPathsRef: R,
80
+ bufferedGenerationsRef: z,
81
+ addStreamingPath: Y,
82
+ removeStreamingPath: X,
83
+ isPathDisplayed: J,
84
+ generationPersistenceErrorMessage: k,
85
+ frameScheduler: j ? M : void 0,
86
+ stoppedGenerationIdsRef: B,
87
+ onReloadError: q,
88
+ onReloadSuccess: K
87
89
  }), [
88
- J,
89
90
  Y,
90
- q,
91
- b,
92
- T,
93
- D,
91
+ X,
92
+ J,
93
+ E,
94
94
  k,
95
- G,
96
- W
97
- ]), ge = f((t, n, o, ee, re, f, p = g.Append, oe = {}) => {
98
- let m = f ?? ae(), h = s(t);
99
- k.flush(h), F.current.delete(h), P.current.set(h, m), pe.current.set(h, m), X(h, !0);
100
- let _;
101
- p === g.Regenerate ? _ = o : p === g.Edit && (_ = o - 1);
102
- let w = () => pe.current.get(h) !== m, E = ue(h, m), D = y.current?.messages[o];
103
- D ? I.current.set(h, {
104
- generationId: m,
105
- messageIndex: o,
106
- message: D
107
- }) : I.current.delete(h), J(h), C?.notifyGenerationStart?.(), S?.ensureConnected();
108
- let A = () => {
109
- w() || Y(h), Z(h, m), x(h, m), S?.notifyGenerationSettled?.();
110
- }, j = () => {
111
- if (w()) return;
112
- let e = I.current.get(h);
113
- !e || e.generationId !== m || (e.message = {
95
+ j,
96
+ M,
97
+ q,
98
+ K
99
+ ]), Se = m((t, n, a, s, ee, re, m = y.Append, h = {}) => {
100
+ let g = re ?? ie(), _ = c(t);
101
+ M.flush(_), R.current.delete(_), L.current.set(_, g), he.current.set(_, g), Z(_, !0);
102
+ let v;
103
+ m === y.Regenerate ? v = a : m === y.Edit && (v = a - 1);
104
+ let b = () => he.current.get(_) !== g, x = ce(_, g), S = T.current?.messages[a];
105
+ S ? z.current.set(_, {
106
+ generationId: g,
107
+ messageIndex: a,
108
+ message: S
109
+ }) : z.current.delete(_), Y(_), O?.notifyGenerationStart?.(), D?.ensureConnected();
110
+ let C = () => {
111
+ b() || X(_), xe(_, g), le(_, g), D?.notifyGenerationSettled?.();
112
+ }, ue = () => {
113
+ if (b()) return;
114
+ let e = z.current.get(_);
115
+ !e || e.generationId !== g || (e.message = {
114
116
  ...e.message,
115
- streamErrorMessage: T
116
- }, O.current?.(new i()), q(h) && v((t) => {
117
- if (!t || w() || !q(h)) return t;
118
- let n = l(t, e);
119
- return y.current = n, n;
117
+ streamErrorMessage: k
118
+ }, fe.current?.(new i()), J(_) && w((t) => {
119
+ if (!t || b() || !J(_)) return t;
120
+ let n = u(t, e);
121
+ return T.current = n, n;
120
122
  }));
121
- }, M = I.current.get(h), N = () => R.current && !w() && I.current.get(h) === M, z = async () => {
122
- if (N()) {
123
- if (!q(h)) {
124
- M && I.current.delete(h);
123
+ }, A = z.current.get(_), j = () => H.current && !b() && z.current.get(_) === A, N = async () => {
124
+ if (j()) {
125
+ if (!J(_)) {
126
+ A && z.current.delete(_);
125
127
  return;
126
128
  }
127
129
  try {
128
- let n = await b.getConversation(e(t));
129
- if (!N()) return;
130
- if (W(h), !q(h)) {
131
- M && I.current.delete(h);
130
+ let n = await E.getConversation(e(t));
131
+ if (!j()) return;
132
+ if (K(_), !J(_)) {
133
+ A && z.current.delete(_);
132
134
  return;
133
135
  }
134
- if (u(n) !== -1) {
135
- Q(t, n, { seedMessage: M?.message });
136
+ if (d(n) !== -1) {
137
+ Q(t, n, { seedMessage: A?.message });
136
138
  return;
137
139
  }
138
- if (M && M.messageIndex === n.messages.length - 1 && d(n) && ne(M.message)) {
139
- j();
140
+ if (A && A.messageIndex === n.messages.length - 1 && f(n) && ne(A.message)) {
141
+ ue();
140
142
  return;
141
143
  }
142
- M && I.current.delete(h), v(n), y.current = n;
144
+ A && z.current.delete(_), w(n), T.current = n;
143
145
  } catch {
144
- N() && G(h, z, N);
146
+ j() && q(_, N, j);
145
147
  }
146
148
  }
147
- }, B = {
148
- signal: E.signal,
149
+ }, P = {
150
+ signal: x.signal,
149
151
  onChunk: (e) => {
150
- if (w()) return;
151
- let t = I.current.get(h);
152
- if (t?.generationId === m) {
153
- let n = c([t.message], 0, e);
152
+ if (b()) return;
153
+ let t = z.current.get(_);
154
+ if (t?.generationId === g) {
155
+ let n = l([t.message], 0, e);
154
156
  n && (t.message = n[0]);
155
157
  }
156
- if (q(h)) {
157
- if (fe.current && t?.generationId === m) {
158
- k.schedule(h, () => {
159
- let e = I.current.get(h);
160
- if (w() || !q(h) || e?.generationId !== m) return;
158
+ if (J(_)) {
159
+ if (pe.current && t?.generationId === g) {
160
+ M.schedule(_, () => {
161
+ let e = z.current.get(_);
162
+ if (b() || !J(_) || e?.generationId !== g) return;
161
163
  let t = { ...e };
162
- v((e) => {
164
+ w((e) => {
163
165
  if (!e) return e;
164
- let n = l(e, t);
165
- return y.current = n, n;
166
+ let n = u(e, t);
167
+ return T.current = n, n;
166
168
  });
167
169
  });
168
170
  return;
169
171
  }
170
- v((t) => {
172
+ w((t) => {
171
173
  if (!t) return t;
172
- let n = I.current.get(h), r;
173
- if (n?.generationId === m) r = l(t, n);
174
+ let n = z.current.get(_), r;
175
+ if (n?.generationId === g) r = u(t, n);
174
176
  else {
175
- let n = c(t.messages, o, e);
177
+ let n = l(t.messages, a, e);
176
178
  if (!n) return t;
177
179
  r = {
178
180
  ...t,
179
181
  messages: n
180
182
  };
181
183
  }
182
- return y.current = r, r;
184
+ return T.current = r, r;
183
185
  });
184
186
  }
185
187
  },
186
188
  onComplete: async () => {
187
- k.flush(h), A(), L.current.has(m) ? L.current.delete(m) : w() || C?.notifyGenerationEnd?.(), await z();
189
+ M.flush(_), C(), B.current.has(g) ? B.current.delete(g) : b() || O?.notifyGenerationEnd?.(), await N();
188
190
  },
189
191
  onError: (e) => {
190
- if (k.flush(h), O.current?.(e), e instanceof a && !w()) {
191
- he(e);
192
+ if (M.flush(_), fe.current?.(e), e instanceof o && !b()) {
193
+ U(e);
192
194
  return;
193
195
  }
194
- if (e instanceof r && oe.resumeOnConflict && !w()) {
195
- K(e);
196
+ if (e instanceof r && h.resumeOnConflict && !b()) {
197
+ ge(e);
196
198
  return;
197
199
  }
198
- V(e);
200
+ F(e);
199
201
  }
200
- }, V = (e) => {
201
- let t = I.current.get(h), n = t?.generationId === m ? t : void 0;
202
- if (n && !(e instanceof i) && I.current.delete(h), A(), n && b.saveConversation && e instanceof i && e.status === ce) {
203
- me(e, n, b.saveConversation.bind(b));
202
+ }, F = (e) => {
203
+ let t = z.current.get(_), n = t?.generationId === g ? t : void 0;
204
+ if (n && !(e instanceof i) && z.current.delete(_), C(), n && E.saveConversation && e instanceof i && e.status === oe) {
205
+ me(e, n, E.saveConversation.bind(E));
204
206
  return;
205
207
  }
206
- H(e, n);
207
- }, H = (e, t) => {
208
+ I(e, n);
209
+ }, I = (e, t) => {
208
210
  if (t && e instanceof i && (t.message = {
209
211
  ...t.message,
210
- streamErrorMessage: T
211
- }), w() || !q(h)) return;
212
- let n = le(e, de, T);
213
- v((e) => {
214
- if (!e || w() || !q(h)) return e;
215
- let r = t?.generationId === m ? l(e, t) : e, i = {
212
+ streamErrorMessage: k
213
+ }), b() || !J(_)) return;
214
+ let n = se(e, de, k);
215
+ w((e) => {
216
+ if (!e || b() || !J(_)) return e;
217
+ let r = t?.generationId === g ? u(e, t) : e, i = {
216
218
  ...r,
217
- messages: r.messages.map((e, t) => t === o ? {
219
+ messages: r.messages.map((e, t) => t === a ? {
218
220
  ...e,
219
221
  streamErrorMessage: n
220
222
  } : e)
221
223
  };
222
- return y.current = i, i;
224
+ return T.current = i, i;
223
225
  });
224
226
  }, me = async (n, r, i) => {
225
- let a = () => R.current && !w() && I.current.get(h) === r;
227
+ let a = () => H.current && !b() && z.current.get(_) === r;
226
228
  try {
227
- let o = await b.getConversation(e(t));
229
+ let o = await E.getConversation(e(t));
228
230
  if (!a()) return;
229
- if (r.messageIndex !== o.messages.length - 1 || !d(o)) {
230
- H(n, r);
231
+ if (r.messageIndex !== o.messages.length - 1 || !f(o)) {
232
+ I(n, r);
231
233
  return;
232
234
  }
233
- let s = await i(h, l(o, r));
234
- if (!a() || (I.current.delete(h), !q(h))) return;
235
- v(s), y.current = s;
235
+ let s = await i(_, u(o, r));
236
+ if (!a() || (z.current.delete(_), !J(_))) return;
237
+ w(s), T.current = s;
236
238
  } catch {
237
- a() && H(n, r);
239
+ a() && I(n, r);
238
240
  }
239
- }, U = () => {
240
- A(), L.current.has(m) ? L.current.delete(m) : w() || C?.notifyGenerationEnd?.();
241
- }, he = async (n) => {
242
- F.current.add(h), ge(await te(() => b.getConversation(e(t)), w), n, !1);
243
- }, K = async (n) => {
244
- P.current.get(h) === m && X(h, !1), F.current.add(h), ge(await te(() => b.getConversation(e(t)), w, (e) => e.messages.length === o && e.messages.at(-1)?.role === ie.User), n, !0);
245
- }, ge = (e, n, r) => {
246
- if (w()) {
247
- A();
241
+ }, V = () => {
242
+ C(), B.current.has(g) ? B.current.delete(g) : b() || O?.notifyGenerationEnd?.();
243
+ }, U = async (n) => {
244
+ R.current.add(_), W(await te(() => E.getConversation(e(t)), b), n, !1);
245
+ }, ge = async (n) => {
246
+ L.current.get(_) === g && Z(_, !1), R.current.add(_), W(await te(() => E.getConversation(e(t)), b, (e) => e.messages.length === a && e.messages.at(-1)?.role === p.User), n, !0);
247
+ }, W = (e, n, r) => {
248
+ if (b()) {
249
+ C();
248
250
  return;
249
251
  }
250
- let i = e?.messages[e.messages.length - 1], a = e != null && e.messages.length - 1 === o && i?.role === ie.Assistant, s = r && e != null && u(e) !== -1;
251
- if (!e || !a && !s) {
252
- F.current.delete(h), V(n);
252
+ let i = e?.messages[e.messages.length - 1], o = e != null && e.messages.length - 1 === a && i?.role === p.Assistant, s = r && e != null && d(e) !== -1;
253
+ if (!e || !o && !s) {
254
+ R.current.delete(_), F(n);
253
255
  return;
254
256
  }
255
- let c = I.current.get(h), l = c?.generationId === m ? c : void 0;
256
- if (d(e)) {
257
+ let c = z.current.get(_), l = c?.generationId === g ? c : void 0;
258
+ if (f(e)) {
257
259
  Q(t, e, {
258
- seedMessage: a ? l?.message : void 0,
260
+ seedMessage: o ? l?.message : void 0,
259
261
  skipDedupe: !0,
260
- onSettled: U
262
+ onSettled: V
261
263
  });
262
264
  return;
263
265
  }
264
- F.current.delete(h), l && I.current.delete(h), q(h) && (v(e), y.current = e), U();
266
+ R.current.delete(_), l && z.current.delete(_), J(_) && (w(e), T.current = e), V();
265
267
  };
266
268
  (async () => {
267
269
  try {
268
- let e = S?.channelId ?? await S?.waitForChannel(se) ?? void 0, t = L.current.has(m);
269
- if (E.signal.aborted || w() || t) {
270
- I.current.get(h)?.generationId === m && I.current.delete(h), w() || Y(h), Z(h, m), x(h, m), S?.notifyGenerationSettled?.(), t ? L.current.delete(m) : w() || C?.notifyGenerationEnd?.();
270
+ let e = D?.channelId ?? await D?.waitForChannel(ae) ?? void 0, t = B.current.has(g);
271
+ if (x.signal.aborted || b() || t) {
272
+ z.current.get(_)?.generationId === g && z.current.delete(_), b() || X(_), xe(_, g), le(_, g), D?.notifyGenerationSettled?.(), t ? B.current.delete(g) : b() || O?.notifyGenerationEnd?.();
271
273
  return;
272
274
  }
273
- b.streamCompletion(h, n, ee, B, re, m, p, _, e);
275
+ E.streamCompletion(_, n, s, P, ee, g, m, v, e);
274
276
  } catch (e) {
275
- B.onError(e instanceof Error ? e : Error(String(e)));
277
+ P.onError(e instanceof Error ? e : Error(String(e)));
276
278
  }
277
279
  })();
278
280
  }, [
279
- ue,
280
- x,
281
- J,
281
+ ce,
282
+ le,
282
283
  Y,
283
284
  X,
284
285
  Z,
285
- q,
286
- S?.channelId,
287
- S?.ensureConnected,
288
- S?.waitForChannel,
289
- S?.notifyGenerationSettled,
290
- C,
291
- b,
286
+ xe,
287
+ J,
288
+ D?.channelId,
289
+ D?.ensureConnected,
290
+ D?.waitForChannel,
291
+ D?.notifyGenerationSettled,
292
+ O,
293
+ E,
292
294
  Q,
293
295
  de,
294
- T,
295
296
  k,
296
- G,
297
- W
298
- ]), _e = f((e, t) => {
299
- let n = s(e), r = I.current.get(n);
300
- return z.current.get(n)?.isCurrent() && r && t.messages.length - 1 >= r.messageIndex && t.messages[r.messageIndex].role === ie.Assistant && !d(t) ? (W(n), I.current.delete(n), t) : r ? l(t, r) : t;
301
- }, [W]), ve = f(() => {
302
- if (!o) return;
303
- let e = s(o), t = P.current.get(e) ?? _(y.current);
304
- if (!t) return;
305
- L.current.add(t), k.flush(e), C?.notifyStopGenerating?.();
306
- let n = I.current.get(e)?.message.content;
307
- b.stopCompletion({
308
- generationId: t,
309
- path: e,
310
- content: n
311
- }).catch((e) => {
312
- let t = e instanceof Error ? e : Error(String(e));
313
- w?.(t);
314
- });
297
+ M,
298
+ q,
299
+ K
300
+ ]), Ce = m((e, t) => {
301
+ let n = c(e), r = z.current.get(n);
302
+ return U.current.get(n)?.isCurrent() && r && t.messages.length - 1 >= r.messageIndex && t.messages[r.messageIndex].role === p.Assistant && !f(t) ? (K(n), z.current.delete(n), t) : r ? u(t, r) : t;
303
+ }, [K]), we = m(() => {
304
+ if (!s) return;
305
+ let e = c(s), t = L.current.get(e), n = t ?? C(T.current);
306
+ if (!n || V.current.has(n)) return;
307
+ V.current.add(n), B.current.add(n), M.flush(e), O?.notifyStopGenerating?.();
308
+ let r = z.current.get(e)?.message.content, i = () => L.current.get(e) === n || t == null && F.current.has(e), o = async () => {
309
+ let e = x / S;
310
+ for (let t = 0; t < e; t++) {
311
+ if (!i() || !H.current) return !0;
312
+ await new Promise((e) => setTimeout(e, S));
313
+ }
314
+ return !i();
315
+ };
316
+ (async () => {
317
+ try {
318
+ await E.stopCompletion({
319
+ generationId: n,
320
+ path: e,
321
+ content: r
322
+ });
323
+ } catch (e) {
324
+ let t = e instanceof Error ? e : Error(String(e));
325
+ if (t instanceof a && t.status === b && await o()) return;
326
+ V.current.delete(n), ue?.(t);
327
+ }
328
+ })();
315
329
  }, [
316
- o,
317
- y,
318
- k,
319
- w,
320
- C,
321
- b
322
- ]), ye = f((e, t) => Q(e, t), [Q]), be = o != null && A.has(s(o)), $ = o == null ? null : s(o), xe = $ != null && (M.has($) || be && _(y.current) != null), Se = $ ? B.get($) : void 0, Ce = Se?.isCurrent() ?? !1;
330
+ s,
331
+ T,
332
+ M,
333
+ ue,
334
+ O,
335
+ E
336
+ ]), Te = m((e, t) => Q(e, t), [Q]), Ee = s != null && N.has(c(s)), $ = s == null ? null : c(s), De = $ != null && (I.has($) || Ee && C(T.current) != null), Oe = $ ? ge.get($) : void 0, ke = Oe?.isCurrent() ?? !1;
323
337
  return {
324
- hasConversationReloadError: Ce,
325
- isReloadingConversation: !!Se && Ce && me.has(Se),
326
- retryConversationReload: he,
327
- startStream: ge,
328
- handleStop: ve,
329
- resumeIfAwaitingGeneration: ye,
330
- restoreBufferedGeneration: _e,
331
- isStreaming: be,
332
- canStopStreaming: xe
338
+ hasConversationReloadError: ke,
339
+ isReloadingConversation: !!Oe && ke && _e.has(Oe),
340
+ retryConversationReload: ye,
341
+ startStream: Se,
342
+ handleStop: we,
343
+ resumeIfAwaitingGeneration: Te,
344
+ restoreBufferedGeneration: Ce,
345
+ isStreaming: Ee,
346
+ canStopStreaming: De
333
347
  };
334
348
  };
335
349
  //#endregion
336
- export { v as useConversationStream };
350
+ export { w as useConversationStream };