jadq-x-vue
Version:
Craft AI-driven interfaces effortlessly
145 lines (144 loc) • 3.79 kB
JavaScript
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
};