@epam/ai-dial-chat-hooks 1.2.0-dev.164 → 1.2.0-dev.170

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.
@@ -12,7 +12,31 @@ var e = { "Content-Type": "application/json" }, t = 409, n = "The response could
12
12
  constructor(e) {
13
13
  super(e), this.name = "StreamUpstreamError";
14
14
  }
15
- }, s = (e, t, n) => {
15
+ }, s = class extends Error {
16
+ constructor(e) {
17
+ super("The completion stream was interrupted", { cause: e }), this.name = "StreamInterruptedError";
18
+ }
19
+ }, c = 45e3, l = (e, t) => {
20
+ let n = Date.now(), r, i = !1, a = () => {
21
+ if (i) return;
22
+ let o = Date.now() - n;
23
+ if (o >= e) {
24
+ t();
25
+ return;
26
+ }
27
+ clearTimeout(r), r = setTimeout(a, e - o);
28
+ }, o = () => {
29
+ document.visibilityState === "visible" && a();
30
+ }, s = typeof window < "u" && typeof document < "u";
31
+ return s && (document.addEventListener("visibilitychange", o), window.addEventListener("online", a), window.addEventListener("pageshow", a)), r = setTimeout(a, e), {
32
+ touch: () => {
33
+ n = Date.now();
34
+ },
35
+ stop: () => {
36
+ i || (i = !0, clearTimeout(r), s && (document.removeEventListener("visibilitychange", o), window.removeEventListener("online", a), window.removeEventListener("pageshow", a)));
37
+ }
38
+ };
39
+ }, u = (e) => typeof e == "object" && !!e && e.name === "AbortError", d = (e, t, n) => {
16
40
  let i = e.trim();
17
41
  if (!i || i.startsWith(":") || !i.startsWith("data: ")) return;
18
42
  let a = i.slice(6);
@@ -24,19 +48,19 @@ var e = { "Content-Type": "application/json" }, t = 409, n = "The response could
24
48
  }
25
49
  t(e);
26
50
  } catch {}
27
- }, c = (n) => {
51
+ }, f = (n) => {
28
52
  let { completionsBasePath: r } = n, i = (...e) => (n.fetchImpl ?? fetch)(...e);
29
53
  return {
30
- streamCompletion: (o, c, l, u, d, f, p, m, h) => {
31
- let { onChunk: g, onComplete: _, onError: v, signal: y } = u;
54
+ streamCompletion: (o, c, f, p, m, h, g, _, v) => {
55
+ let { onChunk: y, onComplete: b, onError: x, signal: S } = p;
32
56
  (async () => {
33
- let u;
57
+ let p;
34
58
  try {
35
59
  let t = n.getTimezone?.();
36
- u = await i(`${r}/completions`, {
60
+ p = await i(`${r}/completions`, {
37
61
  method: "POST",
38
62
  credentials: "include",
39
- signal: y,
63
+ signal: S,
40
64
  headers: {
41
65
  ...e,
42
66
  ...n.getCsrfToken() == null ? {} : { "X-CSRF-Token": n.getCsrfToken() },
@@ -45,53 +69,56 @@ var e = { "Content-Type": "application/json" }, t = 409, n = "The response could
45
69
  body: JSON.stringify({
46
70
  path: o,
47
71
  message: c ?? "",
48
- model: l,
49
- custom_content: d || {},
50
- ...f != null && { generationId: f },
51
- ...p != null && { mode: p },
52
- ...m != null && { messageIndex: m },
53
- ...h != null && { clientChannelId: h }
72
+ model: f,
73
+ custom_content: m || {},
74
+ ...h != null && { generationId: h },
75
+ ...g != null && { mode: g },
76
+ ..._ != null && { messageIndex: _ },
77
+ ...v != null && { clientChannelId: v }
54
78
  })
55
79
  });
56
80
  } catch (e) {
57
- if (e instanceof Error && e.name === "AbortError") return;
58
- v(e instanceof Error ? e : Error(String(e)));
81
+ if (u(e)) return;
82
+ x(new s(e));
59
83
  return;
60
84
  }
61
- let b = u.headers.get("x-csrf-token");
62
- if (b && n.setCsrfToken(b), !u.ok) {
63
- if (u.status === t) {
64
- v(new a());
85
+ let C = p.headers.get("x-csrf-token");
86
+ if (C && n.setCsrfToken(C), !p.ok) {
87
+ if (p.status === t) {
88
+ x(new a());
65
89
  return;
66
90
  }
67
- v(/* @__PURE__ */ Error(`Stream request failed with status ${u.status}`));
91
+ x(/* @__PURE__ */ Error(`Stream request failed with status ${p.status}`));
68
92
  return;
69
93
  }
70
- if (!u.body) {
71
- v(/* @__PURE__ */ Error("No response body"));
94
+ if (!p.body) {
95
+ x(/* @__PURE__ */ Error("No response body"));
72
96
  return;
73
97
  }
74
- let x = u.body.getReader(), S = new TextDecoder(), C = "", w = !1, T = (e) => {
75
- w = !0, v(e);
76
- };
98
+ let w = p.body.getReader(), T = new TextDecoder(), E = "", D = !1, O = !1, k = (e) => {
99
+ D || (D = !0, A.stop(), x(e));
100
+ }, A = l(n.idleTimeoutMs ?? 45e3, () => {
101
+ O = !0, k(new s()), w.cancel().catch(() => void 0);
102
+ });
77
103
  try {
78
104
  for (;;) {
79
- let { done: e, value: t } = await x.read();
105
+ let { done: e, value: t } = await w.read();
106
+ if (O) break;
80
107
  if (e) {
81
- C.trim() && s(C, g, T);
108
+ E.trim() && d(E, y, k);
82
109
  break;
83
110
  }
84
- C += S.decode(t, { stream: !0 });
85
- let n = C.split("\n");
86
- C = n.pop() ?? "";
87
- for (let e of n) s(e, g, T);
111
+ A.touch(), E += T.decode(t, { stream: !0 });
112
+ let n = E.split("\n");
113
+ E = n.pop() ?? "";
114
+ for (let e of n) d(e, y, k);
88
115
  }
89
- w || _();
116
+ D || (D = !0, b());
90
117
  } catch (e) {
91
- if (e instanceof Error && e.name === "AbortError") return;
92
- v(e instanceof Error ? e : Error(String(e)));
118
+ if (u(e)) return;
119
+ k(new s(e));
93
120
  } finally {
94
- x.releaseLock();
121
+ A.stop(), w.releaseLock();
95
122
  }
96
123
  })();
97
124
  },
@@ -110,4 +137,4 @@ var e = { "Content-Type": "application/json" }, t = 409, n = "The response could
110
137
  };
111
138
  };
112
139
  //#endregion
113
- export { i as DEFAULT_GENERATION_CONFLICT_MESSAGE, n as DEFAULT_GENERATION_PERSISTENCE_ERROR_MESSAGE, a as GenerationConflictError, r as GenerationPersistenceError, o as StreamUpstreamError, c as createChatStreamApi };
140
+ export { i as DEFAULT_GENERATION_CONFLICT_MESSAGE, n as DEFAULT_GENERATION_PERSISTENCE_ERROR_MESSAGE, c as DEFAULT_STREAM_IDLE_TIMEOUT_MS, a as GenerationConflictError, r as GenerationPersistenceError, s as StreamInterruptedError, o as StreamUpstreamError, f as createChatStreamApi };
@@ -11,7 +11,29 @@ var s = (e) => {
11
11
  }, c = (e) => {
12
12
  let t = e.messages[e.messages.length - 1];
13
13
  return !!t && t.role === o.Assistant && !s(t) && t.streamErrorMessage == null && !t.wasStoppedByUser;
14
- }, l = 300 * 1e3, u = "awaiting-resume", d = async (e, t) => {
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) => {
15
37
  let n = e.getReader(), r = new TextDecoder(), i = "";
16
38
  try {
17
39
  for (;;) {
@@ -40,99 +62,106 @@ var s = (e) => {
40
62
  } catch {} finally {
41
63
  n.releaseLock();
42
64
  }
43
- }, f = ({ transport: o, setConversation: f, conversationRef: p, resumingPathsRef: m, bufferedGenerationsRef: h, addStreamingPath: g, removeStreamingPath: _, isPathDisplayed: v, generationPersistenceErrorMessage: y = t }) => (t, b) => {
44
- if (!c(b)) return;
45
- let x = r(t);
46
- if (m.current.has(x)) return;
47
- m.current.add(x), g(x);
48
- let S = b.messages.length - 1, C = {
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 = {
49
74
  generationId: u,
50
- messageIndex: S,
51
- message: b.messages[S]
75
+ messageIndex: C,
76
+ message: x.seedMessage ?? b.messages[C]
52
77
  };
53
- h.current.set(x, C);
54
- let w = () => h.current.get(x) === C, T = (e, t = !1) => {
55
- if (!w()) return;
56
- m.current.delete(x), _(x);
57
- let n = e && e.messages.length - 1 === S && c(e) && s(C.message);
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);
58
83
  if (t || n) {
59
- C.message = {
60
- ...C.message,
84
+ w.message = {
85
+ ...w.message,
61
86
  streamErrorMessage: y
62
- }, v(x) && f((e) => {
63
- if (!e || !w() || !v(x)) return e;
64
- let t = a(e, C);
65
- return p.current = t, t;
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;
66
91
  });
67
92
  return;
68
93
  }
69
- h.current.delete(x), e && v(x) && (f(e), p.current = e);
70
- }, E = async () => {
94
+ h.current.delete(S), e && v(S) && (d(e), f.current = e);
95
+ }, D = async () => {
71
96
  try {
72
- T(await o.getConversation(e(t)));
97
+ E(await o.getConversation(e(t)));
73
98
  } catch {
74
- T(void 0, s(C.message));
99
+ E(void 0, s(w.message));
75
100
  }
76
- }, D = (e) => {
77
- w() && (C.message = e, v(x) && f((e) => {
78
- if (!e || !w() || !v(x)) return e;
79
- let t = a(e, C);
80
- return p.current = t, t;
81
- }));
82
101
  }, O = (e) => {
83
- if (!w()) return;
84
- let t = i([C.message], 0, e);
85
- t && (C.message = t[0]), v(x) && f((e) => {
86
- if (!e || !w() || !v(x)) return e;
87
- let t = a(e, C);
88
- return p.current = t, t;
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;
89
114
  });
90
- }, k = async () => {
115
+ }, A = async () => {
91
116
  let n = new AbortController(), r;
92
117
  try {
93
- r = await o.watchConversation(x, n.signal);
118
+ r = await o.watchConversation(S, n.signal);
94
119
  } catch {
95
- await E();
120
+ await D();
96
121
  return;
97
122
  }
98
123
  let i = !1, a = window.setTimeout(() => {
99
124
  n.abort();
100
125
  }, l);
101
126
  try {
102
- await d(r, async (n) => {
127
+ await m(r, async (n) => {
103
128
  if (n?.action !== "UPDATE") return !1;
104
129
  try {
105
130
  let n = await o.getConversation(e(t));
106
- if (!c(n)) return T(n), i = !0, !0;
131
+ if (!c(n)) return E(n), i = !0, !0;
107
132
  } catch {}
108
133
  return !1;
109
134
  });
110
135
  } finally {
111
136
  clearTimeout(a);
112
137
  }
113
- i || await E();
114
- }, A = async () => {
138
+ i || await D();
139
+ }, j = async () => {
115
140
  let e = new AbortController(), t;
116
141
  try {
117
- t = await o.attachToGeneration(x, e.signal);
142
+ t = await o.attachToGeneration(S, e.signal);
118
143
  } catch {
119
144
  return !1;
120
145
  }
121
146
  let r = !1, i = !1;
122
- return await d(t, (e) => {
123
- if (!w()) return !0;
147
+ return await m(t, (e) => {
148
+ if (!T()) return !0;
124
149
  switch (e.type) {
125
- case "snapshot": return D(e.message), !1;
126
- case "chunk": return O(e.chunk), !1;
150
+ case "snapshot": return O(e.message), !1;
151
+ case "chunk": return k(e.chunk), !1;
127
152
  case "done":
128
153
  case "error":
129
154
  case "stopped": return i = e.type === "error" && e.errorType === n.type, r = !0, !0;
130
155
  }
131
- }), r ? (i ? T(void 0, !0) : await E(), !0) : !w();
156
+ }), r ? (i ? E(void 0, !0) : await D(), !0) : !T();
132
157
  };
133
158
  (async () => {
134
- await A() || await k();
159
+ try {
160
+ await j() || await A();
161
+ } finally {
162
+ x.onSettled?.();
163
+ }
135
164
  })();
136
165
  };
137
166
  //#endregion
138
- export { f as createResumeIfAwaitingGeneration, s as hasGeneratedPayload, c as isAwaitingGenerationResume };
167
+ export { h as createResumeIfAwaitingGeneration, p as fetchConversationForRecovery, s as hasGeneratedPayload, c as isAwaitingGenerationResume };