ai 3.1.8 → 3.1.10

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.
@@ -1591,7 +1591,158 @@ function useCompletion({
1591
1591
  data: streamData
1592
1592
  };
1593
1593
  }
1594
+
1595
+ // svelte/use-assistant.ts
1596
+ import { isAbortError } from "@ai-sdk/provider-utils";
1597
+ import { get as get3, writable as writable3 } from "svelte/store";
1598
+ var uniqueId3 = 0;
1599
+ var store3 = {};
1600
+ function useAssistant({
1601
+ api,
1602
+ threadId: threadIdParam,
1603
+ credentials,
1604
+ headers,
1605
+ body,
1606
+ onError
1607
+ }) {
1608
+ const threadIdStore = writable3(threadIdParam);
1609
+ const key = `${api}|${threadIdParam != null ? threadIdParam : `completion-${uniqueId3++}`}`;
1610
+ const messages = writable3(store3[key] || []);
1611
+ const input = writable3("");
1612
+ const status = writable3("awaiting_message");
1613
+ const error = writable3(void 0);
1614
+ let abortController = null;
1615
+ const mutateMessages = (newMessages) => {
1616
+ store3[key] = newMessages;
1617
+ messages.set(newMessages);
1618
+ };
1619
+ async function append(message, requestOptions) {
1620
+ var _a, _b, _c, _d;
1621
+ status.set("in_progress");
1622
+ abortController = new AbortController();
1623
+ mutateMessages([
1624
+ ...get3(messages),
1625
+ { ...message, id: (_a = message.id) != null ? _a : generateId() }
1626
+ ]);
1627
+ input.set("");
1628
+ try {
1629
+ const result = await fetch(api, {
1630
+ method: "POST",
1631
+ credentials,
1632
+ signal: abortController.signal,
1633
+ headers: { "Content-Type": "application/json", ...headers },
1634
+ body: JSON.stringify({
1635
+ ...body,
1636
+ // always use user-provided threadId when available:
1637
+ threadId: (_b = threadIdParam != null ? threadIdParam : get3(threadIdStore)) != null ? _b : null,
1638
+ message: message.content,
1639
+ // optional request data:
1640
+ data: requestOptions == null ? void 0 : requestOptions.data
1641
+ })
1642
+ });
1643
+ if (result.body == null) {
1644
+ throw new Error("The response body is empty.");
1645
+ }
1646
+ for await (const { type, value } of readDataStream(
1647
+ result.body.getReader()
1648
+ )) {
1649
+ switch (type) {
1650
+ case "assistant_message": {
1651
+ mutateMessages([
1652
+ ...get3(messages),
1653
+ {
1654
+ id: value.id,
1655
+ role: value.role,
1656
+ content: value.content[0].text.value
1657
+ }
1658
+ ]);
1659
+ break;
1660
+ }
1661
+ case "text": {
1662
+ mutateMessages(
1663
+ get3(messages).map((msg, index, array) => {
1664
+ if (index === array.length - 1) {
1665
+ return { ...msg, content: msg.content + value };
1666
+ }
1667
+ return msg;
1668
+ })
1669
+ );
1670
+ break;
1671
+ }
1672
+ case "data_message": {
1673
+ mutateMessages([
1674
+ ...get3(messages),
1675
+ {
1676
+ id: (_c = value.id) != null ? _c : generateId(),
1677
+ role: "data",
1678
+ content: "",
1679
+ data: value.data
1680
+ }
1681
+ ]);
1682
+ break;
1683
+ }
1684
+ case "assistant_control_data": {
1685
+ threadIdStore.set(value.threadId);
1686
+ mutateMessages(
1687
+ get3(messages).map((msg, index, array) => {
1688
+ if (index === array.length - 1) {
1689
+ return { ...msg, id: value.messageId };
1690
+ }
1691
+ return msg;
1692
+ })
1693
+ );
1694
+ break;
1695
+ }
1696
+ case "error": {
1697
+ error.set(new Error(value));
1698
+ break;
1699
+ }
1700
+ }
1701
+ }
1702
+ } catch (err) {
1703
+ if (isAbortError(error) && ((_d = abortController == null ? void 0 : abortController.signal) == null ? void 0 : _d.aborted)) {
1704
+ abortController = null;
1705
+ return;
1706
+ }
1707
+ if (onError && err instanceof Error) {
1708
+ onError(err);
1709
+ }
1710
+ error.set(err);
1711
+ } finally {
1712
+ abortController = null;
1713
+ status.set("awaiting_message");
1714
+ }
1715
+ }
1716
+ function setMessages(messages2) {
1717
+ mutateMessages(messages2);
1718
+ }
1719
+ function stop() {
1720
+ if (abortController) {
1721
+ abortController.abort();
1722
+ abortController = null;
1723
+ }
1724
+ }
1725
+ async function submitMessage(e, requestOptions) {
1726
+ e.preventDefault();
1727
+ const inputValue = get3(input);
1728
+ if (!inputValue)
1729
+ return;
1730
+ await append({ role: "user", content: inputValue }, requestOptions);
1731
+ }
1732
+ return {
1733
+ messages,
1734
+ error,
1735
+ threadId: threadIdStore,
1736
+ input,
1737
+ append,
1738
+ submitMessage,
1739
+ status,
1740
+ setMessages,
1741
+ stop
1742
+ };
1743
+ }
1594
1744
  export {
1745
+ useAssistant,
1595
1746
  useChat,
1596
1747
  useCompletion
1597
1748
  };