ai 5.0.36 → 5.0.37

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.mjs CHANGED
@@ -5683,17 +5683,217 @@ var DefaultStreamTextResult = class {
5683
5683
  }
5684
5684
  };
5685
5685
 
5686
+ // src/ui/convert-to-model-messages.ts
5687
+ function convertToModelMessages(messages, options) {
5688
+ const modelMessages = [];
5689
+ if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
5690
+ messages = messages.map((message) => ({
5691
+ ...message,
5692
+ parts: message.parts.filter(
5693
+ (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
5694
+ )
5695
+ }));
5696
+ }
5697
+ for (const message of messages) {
5698
+ switch (message.role) {
5699
+ case "system": {
5700
+ const textParts = message.parts.filter((part) => part.type === "text");
5701
+ const providerMetadata = textParts.reduce((acc, part) => {
5702
+ if (part.providerMetadata != null) {
5703
+ return { ...acc, ...part.providerMetadata };
5704
+ }
5705
+ return acc;
5706
+ }, {});
5707
+ modelMessages.push({
5708
+ role: "system",
5709
+ content: textParts.map((part) => part.text).join(""),
5710
+ ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
5711
+ });
5712
+ break;
5713
+ }
5714
+ case "user": {
5715
+ modelMessages.push({
5716
+ role: "user",
5717
+ content: message.parts.filter(
5718
+ (part) => part.type === "text" || part.type === "file"
5719
+ ).map((part) => {
5720
+ switch (part.type) {
5721
+ case "text":
5722
+ return {
5723
+ type: "text",
5724
+ text: part.text,
5725
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5726
+ };
5727
+ case "file":
5728
+ return {
5729
+ type: "file",
5730
+ mediaType: part.mediaType,
5731
+ filename: part.filename,
5732
+ data: part.url,
5733
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5734
+ };
5735
+ default:
5736
+ return part;
5737
+ }
5738
+ })
5739
+ });
5740
+ break;
5741
+ }
5742
+ case "assistant": {
5743
+ if (message.parts != null) {
5744
+ let processBlock2 = function() {
5745
+ var _a17, _b;
5746
+ if (block.length === 0) {
5747
+ return;
5748
+ }
5749
+ const content = [];
5750
+ for (const part of block) {
5751
+ if (part.type === "text") {
5752
+ content.push({
5753
+ type: "text",
5754
+ text: part.text,
5755
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5756
+ });
5757
+ } else if (part.type === "file") {
5758
+ content.push({
5759
+ type: "file",
5760
+ mediaType: part.mediaType,
5761
+ filename: part.filename,
5762
+ data: part.url
5763
+ });
5764
+ } else if (part.type === "reasoning") {
5765
+ content.push({
5766
+ type: "reasoning",
5767
+ text: part.text,
5768
+ providerOptions: part.providerMetadata
5769
+ });
5770
+ } else if (part.type === "dynamic-tool") {
5771
+ const toolName = part.toolName;
5772
+ if (part.state !== "input-streaming") {
5773
+ content.push({
5774
+ type: "tool-call",
5775
+ toolCallId: part.toolCallId,
5776
+ toolName,
5777
+ input: part.input,
5778
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
5779
+ });
5780
+ }
5781
+ } else if (isToolUIPart(part)) {
5782
+ const toolName = getToolName(part);
5783
+ if (part.state !== "input-streaming") {
5784
+ content.push({
5785
+ type: "tool-call",
5786
+ toolCallId: part.toolCallId,
5787
+ toolName,
5788
+ input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
5789
+ providerExecuted: part.providerExecuted,
5790
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
5791
+ });
5792
+ if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
5793
+ content.push({
5794
+ type: "tool-result",
5795
+ toolCallId: part.toolCallId,
5796
+ toolName,
5797
+ output: createToolModelOutput({
5798
+ output: part.state === "output-error" ? part.errorText : part.output,
5799
+ tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
5800
+ errorMode: part.state === "output-error" ? "json" : "none"
5801
+ })
5802
+ });
5803
+ }
5804
+ }
5805
+ } else {
5806
+ const _exhaustiveCheck = part;
5807
+ throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
5808
+ }
5809
+ }
5810
+ modelMessages.push({
5811
+ role: "assistant",
5812
+ content
5813
+ });
5814
+ const toolParts = block.filter(
5815
+ (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
5816
+ );
5817
+ if (toolParts.length > 0) {
5818
+ modelMessages.push({
5819
+ role: "tool",
5820
+ content: toolParts.map((toolPart) => {
5821
+ var _a18;
5822
+ switch (toolPart.state) {
5823
+ case "output-error":
5824
+ case "output-available": {
5825
+ const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
5826
+ return {
5827
+ type: "tool-result",
5828
+ toolCallId: toolPart.toolCallId,
5829
+ toolName,
5830
+ output: createToolModelOutput({
5831
+ output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
5832
+ tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
5833
+ errorMode: toolPart.state === "output-error" ? "text" : "none"
5834
+ })
5835
+ };
5836
+ }
5837
+ default: {
5838
+ return null;
5839
+ }
5840
+ }
5841
+ }).filter(
5842
+ (output) => output != null
5843
+ )
5844
+ });
5845
+ }
5846
+ block = [];
5847
+ };
5848
+ var processBlock = processBlock2;
5849
+ let block = [];
5850
+ for (const part of message.parts) {
5851
+ if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
5852
+ block.push(part);
5853
+ } else if (part.type === "step-start") {
5854
+ processBlock2();
5855
+ }
5856
+ }
5857
+ processBlock2();
5858
+ break;
5859
+ }
5860
+ break;
5861
+ }
5862
+ default: {
5863
+ const _exhaustiveCheck = message.role;
5864
+ throw new MessageConversionError({
5865
+ originalMessage: message,
5866
+ message: `Unsupported role: ${_exhaustiveCheck}`
5867
+ });
5868
+ }
5869
+ }
5870
+ }
5871
+ return modelMessages;
5872
+ }
5873
+ var convertToCoreMessages = convertToModelMessages;
5874
+
5686
5875
  // src/agent/agent.ts
5687
5876
  var Agent = class {
5688
5877
  constructor(settings) {
5689
5878
  this.settings = settings;
5690
5879
  }
5880
+ get tools() {
5881
+ return this.settings.tools;
5882
+ }
5691
5883
  async generate(options) {
5692
5884
  return generateText({ ...this.settings, ...options });
5693
5885
  }
5694
5886
  stream(options) {
5695
5887
  return streamText({ ...this.settings, ...options });
5696
5888
  }
5889
+ /**
5890
+ * Creates a response object that streams UI messages to the client.
5891
+ */
5892
+ respond(options) {
5893
+ return this.stream({
5894
+ prompt: convertToModelMessages(options.messages)
5895
+ }).toUIMessageStreamResponse();
5896
+ }
5697
5897
  };
5698
5898
 
5699
5899
  // src/embed/embed.ts
@@ -9600,195 +9800,6 @@ var AbstractChat = class {
9600
9800
  }
9601
9801
  };
9602
9802
 
9603
- // src/ui/convert-to-model-messages.ts
9604
- function convertToModelMessages(messages, options) {
9605
- const modelMessages = [];
9606
- if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
9607
- messages = messages.map((message) => ({
9608
- ...message,
9609
- parts: message.parts.filter(
9610
- (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
9611
- )
9612
- }));
9613
- }
9614
- for (const message of messages) {
9615
- switch (message.role) {
9616
- case "system": {
9617
- const textParts = message.parts.filter((part) => part.type === "text");
9618
- const providerMetadata = textParts.reduce((acc, part) => {
9619
- if (part.providerMetadata != null) {
9620
- return { ...acc, ...part.providerMetadata };
9621
- }
9622
- return acc;
9623
- }, {});
9624
- modelMessages.push({
9625
- role: "system",
9626
- content: textParts.map((part) => part.text).join(""),
9627
- ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
9628
- });
9629
- break;
9630
- }
9631
- case "user": {
9632
- modelMessages.push({
9633
- role: "user",
9634
- content: message.parts.filter(
9635
- (part) => part.type === "text" || part.type === "file"
9636
- ).map((part) => {
9637
- switch (part.type) {
9638
- case "text":
9639
- return {
9640
- type: "text",
9641
- text: part.text,
9642
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9643
- };
9644
- case "file":
9645
- return {
9646
- type: "file",
9647
- mediaType: part.mediaType,
9648
- filename: part.filename,
9649
- data: part.url,
9650
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9651
- };
9652
- default:
9653
- return part;
9654
- }
9655
- })
9656
- });
9657
- break;
9658
- }
9659
- case "assistant": {
9660
- if (message.parts != null) {
9661
- let processBlock2 = function() {
9662
- var _a17, _b;
9663
- if (block.length === 0) {
9664
- return;
9665
- }
9666
- const content = [];
9667
- for (const part of block) {
9668
- if (part.type === "text") {
9669
- content.push({
9670
- type: "text",
9671
- text: part.text,
9672
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9673
- });
9674
- } else if (part.type === "file") {
9675
- content.push({
9676
- type: "file",
9677
- mediaType: part.mediaType,
9678
- filename: part.filename,
9679
- data: part.url
9680
- });
9681
- } else if (part.type === "reasoning") {
9682
- content.push({
9683
- type: "reasoning",
9684
- text: part.text,
9685
- providerOptions: part.providerMetadata
9686
- });
9687
- } else if (part.type === "dynamic-tool") {
9688
- const toolName = part.toolName;
9689
- if (part.state !== "input-streaming") {
9690
- content.push({
9691
- type: "tool-call",
9692
- toolCallId: part.toolCallId,
9693
- toolName,
9694
- input: part.input,
9695
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9696
- });
9697
- }
9698
- } else if (isToolUIPart(part)) {
9699
- const toolName = getToolName(part);
9700
- if (part.state !== "input-streaming") {
9701
- content.push({
9702
- type: "tool-call",
9703
- toolCallId: part.toolCallId,
9704
- toolName,
9705
- input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
9706
- providerExecuted: part.providerExecuted,
9707
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9708
- });
9709
- if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
9710
- content.push({
9711
- type: "tool-result",
9712
- toolCallId: part.toolCallId,
9713
- toolName,
9714
- output: createToolModelOutput({
9715
- output: part.state === "output-error" ? part.errorText : part.output,
9716
- tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
9717
- errorMode: part.state === "output-error" ? "json" : "none"
9718
- })
9719
- });
9720
- }
9721
- }
9722
- } else {
9723
- const _exhaustiveCheck = part;
9724
- throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
9725
- }
9726
- }
9727
- modelMessages.push({
9728
- role: "assistant",
9729
- content
9730
- });
9731
- const toolParts = block.filter(
9732
- (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
9733
- );
9734
- if (toolParts.length > 0) {
9735
- modelMessages.push({
9736
- role: "tool",
9737
- content: toolParts.map((toolPart) => {
9738
- var _a18;
9739
- switch (toolPart.state) {
9740
- case "output-error":
9741
- case "output-available": {
9742
- const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
9743
- return {
9744
- type: "tool-result",
9745
- toolCallId: toolPart.toolCallId,
9746
- toolName,
9747
- output: createToolModelOutput({
9748
- output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
9749
- tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
9750
- errorMode: toolPart.state === "output-error" ? "text" : "none"
9751
- })
9752
- };
9753
- }
9754
- default: {
9755
- return null;
9756
- }
9757
- }
9758
- }).filter(
9759
- (output) => output != null
9760
- )
9761
- });
9762
- }
9763
- block = [];
9764
- };
9765
- var processBlock = processBlock2;
9766
- let block = [];
9767
- for (const part of message.parts) {
9768
- if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
9769
- block.push(part);
9770
- } else if (part.type === "step-start") {
9771
- processBlock2();
9772
- }
9773
- }
9774
- processBlock2();
9775
- break;
9776
- }
9777
- break;
9778
- }
9779
- default: {
9780
- const _exhaustiveCheck = message.role;
9781
- throw new MessageConversionError({
9782
- originalMessage: message,
9783
- message: `Unsupported role: ${_exhaustiveCheck}`
9784
- });
9785
- }
9786
- }
9787
- }
9788
- return modelMessages;
9789
- }
9790
- var convertToCoreMessages = convertToModelMessages;
9791
-
9792
9803
  // src/ui/last-assistant-message-is-complete-with-tool-calls.ts
9793
9804
  function lastAssistantMessageIsCompleteWithToolCalls({
9794
9805
  messages