ai 3.1.24 → 3.1.26

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai",
3
- "version": "3.1.24",
3
+ "version": "3.1.26",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -1640,7 +1640,7 @@ async function streamUI({
1640
1640
  const ui = createStreamableUI(initial);
1641
1641
  const textRender = text || defaultTextRenderer;
1642
1642
  let finished;
1643
- async function handleRender(args, renderer, res) {
1643
+ async function handleRender(args, renderer, res, lastCall = false) {
1644
1644
  if (!renderer)
1645
1645
  return;
1646
1646
  const resolvable = createResolvablePromise();
@@ -1652,13 +1652,21 @@ async function streamUI({
1652
1652
  const value = renderer(...args);
1653
1653
  if (value instanceof Promise || value && typeof value === "object" && "then" in value && typeof value.then === "function") {
1654
1654
  const node = await value;
1655
- res.update(node);
1655
+ if (lastCall) {
1656
+ res.done(node);
1657
+ } else {
1658
+ res.update(node);
1659
+ }
1656
1660
  resolvable.resolve(void 0);
1657
1661
  } else if (value && typeof value === "object" && Symbol.asyncIterator in value) {
1658
1662
  const it = value;
1659
1663
  while (true) {
1660
1664
  const { done, value: value2 } = await it.next();
1661
- res.update(value2);
1665
+ if (lastCall && done) {
1666
+ res.done(value2);
1667
+ } else {
1668
+ res.update(value2);
1669
+ }
1662
1670
  if (done)
1663
1671
  break;
1664
1672
  }
@@ -1667,13 +1675,21 @@ async function streamUI({
1667
1675
  const it = value;
1668
1676
  while (true) {
1669
1677
  const { done, value: value2 } = it.next();
1670
- res.update(value2);
1678
+ if (lastCall && done) {
1679
+ res.done(value2);
1680
+ } else {
1681
+ res.update(value2);
1682
+ }
1671
1683
  if (done)
1672
1684
  break;
1673
1685
  }
1674
1686
  resolvable.resolve(void 0);
1675
1687
  } else {
1676
- res.update(value);
1688
+ if (lastCall) {
1689
+ res.done(value);
1690
+ } else {
1691
+ res.update(value);
1692
+ }
1677
1693
  resolvable.resolve(void 0);
1678
1694
  }
1679
1695
  }
@@ -1727,6 +1743,7 @@ async function streamUI({
1727
1743
  availableTools: Object.keys(tools)
1728
1744
  });
1729
1745
  }
1746
+ hasToolCall = true;
1730
1747
  const parseResult = safeParseJSON({
1731
1748
  text: value.args,
1732
1749
  schema: tool.parameters
@@ -1747,7 +1764,8 @@ async function streamUI({
1747
1764
  }
1748
1765
  ],
1749
1766
  tool.generate,
1750
- ui
1767
+ ui,
1768
+ true
1751
1769
  );
1752
1770
  break;
1753
1771
  }
@@ -1760,11 +1778,9 @@ async function streamUI({
1760
1778
  }
1761
1779
  if (hasToolCall) {
1762
1780
  await finished;
1763
- ui.done();
1764
1781
  } else {
1765
- handleRender([{ content, done: true }], textRender, ui);
1782
+ handleRender([{ content, done: true }], textRender, ui, true);
1766
1783
  await finished;
1767
- ui.done();
1768
1784
  }
1769
1785
  } catch (error) {
1770
1786
  ui.error(error);