ai 5.0.36 → 5.0.38

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/dist/index.js CHANGED
@@ -5747,17 +5747,217 @@ var DefaultStreamTextResult = class {
5747
5747
  }
5748
5748
  };
5749
5749
 
5750
+ // src/ui/convert-to-model-messages.ts
5751
+ function convertToModelMessages(messages, options) {
5752
+ const modelMessages = [];
5753
+ if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
5754
+ messages = messages.map((message) => ({
5755
+ ...message,
5756
+ parts: message.parts.filter(
5757
+ (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
5758
+ )
5759
+ }));
5760
+ }
5761
+ for (const message of messages) {
5762
+ switch (message.role) {
5763
+ case "system": {
5764
+ const textParts = message.parts.filter((part) => part.type === "text");
5765
+ const providerMetadata = textParts.reduce((acc, part) => {
5766
+ if (part.providerMetadata != null) {
5767
+ return { ...acc, ...part.providerMetadata };
5768
+ }
5769
+ return acc;
5770
+ }, {});
5771
+ modelMessages.push({
5772
+ role: "system",
5773
+ content: textParts.map((part) => part.text).join(""),
5774
+ ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
5775
+ });
5776
+ break;
5777
+ }
5778
+ case "user": {
5779
+ modelMessages.push({
5780
+ role: "user",
5781
+ content: message.parts.filter(
5782
+ (part) => part.type === "text" || part.type === "file"
5783
+ ).map((part) => {
5784
+ switch (part.type) {
5785
+ case "text":
5786
+ return {
5787
+ type: "text",
5788
+ text: part.text,
5789
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5790
+ };
5791
+ case "file":
5792
+ return {
5793
+ type: "file",
5794
+ mediaType: part.mediaType,
5795
+ filename: part.filename,
5796
+ data: part.url,
5797
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5798
+ };
5799
+ default:
5800
+ return part;
5801
+ }
5802
+ })
5803
+ });
5804
+ break;
5805
+ }
5806
+ case "assistant": {
5807
+ if (message.parts != null) {
5808
+ let processBlock2 = function() {
5809
+ var _a17, _b;
5810
+ if (block.length === 0) {
5811
+ return;
5812
+ }
5813
+ const content = [];
5814
+ for (const part of block) {
5815
+ if (part.type === "text") {
5816
+ content.push({
5817
+ type: "text",
5818
+ text: part.text,
5819
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5820
+ });
5821
+ } else if (part.type === "file") {
5822
+ content.push({
5823
+ type: "file",
5824
+ mediaType: part.mediaType,
5825
+ filename: part.filename,
5826
+ data: part.url
5827
+ });
5828
+ } else if (part.type === "reasoning") {
5829
+ content.push({
5830
+ type: "reasoning",
5831
+ text: part.text,
5832
+ providerOptions: part.providerMetadata
5833
+ });
5834
+ } else if (part.type === "dynamic-tool") {
5835
+ const toolName = part.toolName;
5836
+ if (part.state !== "input-streaming") {
5837
+ content.push({
5838
+ type: "tool-call",
5839
+ toolCallId: part.toolCallId,
5840
+ toolName,
5841
+ input: part.input,
5842
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
5843
+ });
5844
+ }
5845
+ } else if (isToolUIPart(part)) {
5846
+ const toolName = getToolName(part);
5847
+ if (part.state !== "input-streaming") {
5848
+ content.push({
5849
+ type: "tool-call",
5850
+ toolCallId: part.toolCallId,
5851
+ toolName,
5852
+ input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
5853
+ providerExecuted: part.providerExecuted,
5854
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
5855
+ });
5856
+ if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
5857
+ content.push({
5858
+ type: "tool-result",
5859
+ toolCallId: part.toolCallId,
5860
+ toolName,
5861
+ output: createToolModelOutput({
5862
+ output: part.state === "output-error" ? part.errorText : part.output,
5863
+ tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
5864
+ errorMode: part.state === "output-error" ? "json" : "none"
5865
+ })
5866
+ });
5867
+ }
5868
+ }
5869
+ } else {
5870
+ const _exhaustiveCheck = part;
5871
+ throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
5872
+ }
5873
+ }
5874
+ modelMessages.push({
5875
+ role: "assistant",
5876
+ content
5877
+ });
5878
+ const toolParts = block.filter(
5879
+ (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
5880
+ );
5881
+ if (toolParts.length > 0) {
5882
+ modelMessages.push({
5883
+ role: "tool",
5884
+ content: toolParts.map((toolPart) => {
5885
+ var _a18;
5886
+ switch (toolPart.state) {
5887
+ case "output-error":
5888
+ case "output-available": {
5889
+ const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
5890
+ return {
5891
+ type: "tool-result",
5892
+ toolCallId: toolPart.toolCallId,
5893
+ toolName,
5894
+ output: createToolModelOutput({
5895
+ output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
5896
+ tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
5897
+ errorMode: toolPart.state === "output-error" ? "text" : "none"
5898
+ })
5899
+ };
5900
+ }
5901
+ default: {
5902
+ return null;
5903
+ }
5904
+ }
5905
+ }).filter(
5906
+ (output) => output != null
5907
+ )
5908
+ });
5909
+ }
5910
+ block = [];
5911
+ };
5912
+ var processBlock = processBlock2;
5913
+ let block = [];
5914
+ for (const part of message.parts) {
5915
+ if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
5916
+ block.push(part);
5917
+ } else if (part.type === "step-start") {
5918
+ processBlock2();
5919
+ }
5920
+ }
5921
+ processBlock2();
5922
+ break;
5923
+ }
5924
+ break;
5925
+ }
5926
+ default: {
5927
+ const _exhaustiveCheck = message.role;
5928
+ throw new MessageConversionError({
5929
+ originalMessage: message,
5930
+ message: `Unsupported role: ${_exhaustiveCheck}`
5931
+ });
5932
+ }
5933
+ }
5934
+ }
5935
+ return modelMessages;
5936
+ }
5937
+ var convertToCoreMessages = convertToModelMessages;
5938
+
5750
5939
  // src/agent/agent.ts
5751
5940
  var Agent = class {
5752
5941
  constructor(settings) {
5753
5942
  this.settings = settings;
5754
5943
  }
5944
+ get tools() {
5945
+ return this.settings.tools;
5946
+ }
5755
5947
  async generate(options) {
5756
5948
  return generateText({ ...this.settings, ...options });
5757
5949
  }
5758
5950
  stream(options) {
5759
5951
  return streamText({ ...this.settings, ...options });
5760
5952
  }
5953
+ /**
5954
+ * Creates a response object that streams UI messages to the client.
5955
+ */
5956
+ respond(options) {
5957
+ return this.stream({
5958
+ prompt: convertToModelMessages(options.messages)
5959
+ }).toUIMessageStreamResponse();
5960
+ }
5761
5961
  };
5762
5962
 
5763
5963
  // src/embed/embed.ts
@@ -9638,195 +9838,6 @@ var AbstractChat = class {
9638
9838
  }
9639
9839
  };
9640
9840
 
9641
- // src/ui/convert-to-model-messages.ts
9642
- function convertToModelMessages(messages, options) {
9643
- const modelMessages = [];
9644
- if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
9645
- messages = messages.map((message) => ({
9646
- ...message,
9647
- parts: message.parts.filter(
9648
- (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
9649
- )
9650
- }));
9651
- }
9652
- for (const message of messages) {
9653
- switch (message.role) {
9654
- case "system": {
9655
- const textParts = message.parts.filter((part) => part.type === "text");
9656
- const providerMetadata = textParts.reduce((acc, part) => {
9657
- if (part.providerMetadata != null) {
9658
- return { ...acc, ...part.providerMetadata };
9659
- }
9660
- return acc;
9661
- }, {});
9662
- modelMessages.push({
9663
- role: "system",
9664
- content: textParts.map((part) => part.text).join(""),
9665
- ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
9666
- });
9667
- break;
9668
- }
9669
- case "user": {
9670
- modelMessages.push({
9671
- role: "user",
9672
- content: message.parts.filter(
9673
- (part) => part.type === "text" || part.type === "file"
9674
- ).map((part) => {
9675
- switch (part.type) {
9676
- case "text":
9677
- return {
9678
- type: "text",
9679
- text: part.text,
9680
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9681
- };
9682
- case "file":
9683
- return {
9684
- type: "file",
9685
- mediaType: part.mediaType,
9686
- filename: part.filename,
9687
- data: part.url,
9688
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9689
- };
9690
- default:
9691
- return part;
9692
- }
9693
- })
9694
- });
9695
- break;
9696
- }
9697
- case "assistant": {
9698
- if (message.parts != null) {
9699
- let processBlock2 = function() {
9700
- var _a17, _b;
9701
- if (block.length === 0) {
9702
- return;
9703
- }
9704
- const content = [];
9705
- for (const part of block) {
9706
- if (part.type === "text") {
9707
- content.push({
9708
- type: "text",
9709
- text: part.text,
9710
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9711
- });
9712
- } else if (part.type === "file") {
9713
- content.push({
9714
- type: "file",
9715
- mediaType: part.mediaType,
9716
- filename: part.filename,
9717
- data: part.url
9718
- });
9719
- } else if (part.type === "reasoning") {
9720
- content.push({
9721
- type: "reasoning",
9722
- text: part.text,
9723
- providerOptions: part.providerMetadata
9724
- });
9725
- } else if (part.type === "dynamic-tool") {
9726
- const toolName = part.toolName;
9727
- if (part.state !== "input-streaming") {
9728
- content.push({
9729
- type: "tool-call",
9730
- toolCallId: part.toolCallId,
9731
- toolName,
9732
- input: part.input,
9733
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9734
- });
9735
- }
9736
- } else if (isToolUIPart(part)) {
9737
- const toolName = getToolName(part);
9738
- if (part.state !== "input-streaming") {
9739
- content.push({
9740
- type: "tool-call",
9741
- toolCallId: part.toolCallId,
9742
- toolName,
9743
- input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
9744
- providerExecuted: part.providerExecuted,
9745
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9746
- });
9747
- if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
9748
- content.push({
9749
- type: "tool-result",
9750
- toolCallId: part.toolCallId,
9751
- toolName,
9752
- output: createToolModelOutput({
9753
- output: part.state === "output-error" ? part.errorText : part.output,
9754
- tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
9755
- errorMode: part.state === "output-error" ? "json" : "none"
9756
- })
9757
- });
9758
- }
9759
- }
9760
- } else {
9761
- const _exhaustiveCheck = part;
9762
- throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
9763
- }
9764
- }
9765
- modelMessages.push({
9766
- role: "assistant",
9767
- content
9768
- });
9769
- const toolParts = block.filter(
9770
- (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
9771
- );
9772
- if (toolParts.length > 0) {
9773
- modelMessages.push({
9774
- role: "tool",
9775
- content: toolParts.map((toolPart) => {
9776
- var _a18;
9777
- switch (toolPart.state) {
9778
- case "output-error":
9779
- case "output-available": {
9780
- const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
9781
- return {
9782
- type: "tool-result",
9783
- toolCallId: toolPart.toolCallId,
9784
- toolName,
9785
- output: createToolModelOutput({
9786
- output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
9787
- tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
9788
- errorMode: toolPart.state === "output-error" ? "text" : "none"
9789
- })
9790
- };
9791
- }
9792
- default: {
9793
- return null;
9794
- }
9795
- }
9796
- }).filter(
9797
- (output) => output != null
9798
- )
9799
- });
9800
- }
9801
- block = [];
9802
- };
9803
- var processBlock = processBlock2;
9804
- let block = [];
9805
- for (const part of message.parts) {
9806
- if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
9807
- block.push(part);
9808
- } else if (part.type === "step-start") {
9809
- processBlock2();
9810
- }
9811
- }
9812
- processBlock2();
9813
- break;
9814
- }
9815
- break;
9816
- }
9817
- default: {
9818
- const _exhaustiveCheck = message.role;
9819
- throw new MessageConversionError({
9820
- originalMessage: message,
9821
- message: `Unsupported role: ${_exhaustiveCheck}`
9822
- });
9823
- }
9824
- }
9825
- }
9826
- return modelMessages;
9827
- }
9828
- var convertToCoreMessages = convertToModelMessages;
9829
-
9830
9841
  // src/ui/last-assistant-message-is-complete-with-tool-calls.ts
9831
9842
  function lastAssistantMessageIsCompleteWithToolCalls({
9832
9843
  messages