UNPKG

@artmate/chat

Version:

**开箱即用的AI组件库(基于 Vue3 + ElementPlus)**

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