UNPKG

jadq-x-vue

Version:

Craft AI-driven interfaces effortlessly

145 lines (144 loc) 3.79 kB
import { ref as P, computed as $ } from "vue"; import T from "./useSyncState.mjs"; import { useEventCallback as W } from "../_util/hooks/use-event-callback.mjs"; function X(d) { return Array.isArray(d) ? d : [d]; } function B(d) { const { defaultMessages: _, agent: v, requestFallback: f, requestPlaceholder: m, parser: b, transformMessage: q, transformStream: x, resolveAbortController: y } = d, R = P(0), D = $(() => (_ || []).map((r, s) => ({ id: `default_${s}`, status: "local", ...r }))), [p, g] = T(D.value, () => { }), M = (r, s) => { const e = { id: `msg_${R.value}`, message: r, status: s }; return R.value += 1, e; }, F = $(() => { const r = []; return p.value.forEach((s) => { const e = b ? b(s.message) : s.message, l = X(e); l.forEach((i, h) => { let t = s.id; l.length > 1 && (t = `${t}_${h}`), r.push({ id: t, message: i, status: s.status }); }); }), r; }), w = (r) => r.filter((s) => s.status !== "loading" && s.status !== "error").map((s) => s.message), A = () => w(p.value), E = (r) => { const { chunk: s, chunks: e, originMessage: l } = r; if (typeof q == "function") return q(r); if (s) return s; if (Array.isArray(e)) { const i = (e == null ? void 0 : e.length) > 0 ? e == null ? void 0 : e[(e == null ? void 0 : e.length) - 1] : void 0; return l || i; } return e; }; return { onRequest: W((r) => { if (!v) throw new Error( "The agent parameter is required when using the onRequest method in an agent generated by useXAgent." ); let s = null, e, l = {}; if (r && typeof r == "object" && "message" in r) { const { message: t, ...a } = r; e = t, l = a; } else e = r; g((t) => { let a = [...t, M(e, "local")]; if (m) { let n; typeof m == "function" ? n = m(e, { messages: w(a) }) : n = m; const o = M(n, "loading"); s = o.id, a = [...a, o]; } return a; }); let i = null; const h = (t, a, n) => { let o = p.value.find((c) => c.id === i); if (o) g((c) => c.map((u) => { if (u.id === i) { const S = E({ originMessage: u.message, chunk: a, chunks: n, status: t }); return { ...u, message: S, status: t }; } return u; })); else { const c = E({ chunk: a, status: t, chunks: n }); o = M(c, t), g((u) => [...u.filter((I) => I.id !== s), o]), i = o.id; } return o; }; v.request( { message: e, messages: A(), ...l }, { onUpdate: (t) => { h("loading", t, []); }, onSuccess: (t) => { h("success", void 0, t); }, onError: async (t) => { if (f) { let a; typeof f == "function" ? a = await f(e, { error: t, messages: A() }) : a = f, g((n) => [ ...n.filter((o) => o.id !== s && o.id !== i), M(a, "error") ]); } else g((a) => a.filter((n) => n.id !== s && n.id !== i)); }, onStream: (t) => { y == null || y(t); } }, x ); }), messages: p, parsedMessages: F, setMessages: g }; } export { B as default };