ai 5.0.35 → 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.js CHANGED
@@ -88,6 +88,7 @@ __export(src_exports, {
88
88
  experimental_generateSpeech: () => generateSpeech,
89
89
  experimental_transcribe: () => transcribe,
90
90
  extractReasoningMiddleware: () => extractReasoningMiddleware,
91
+ gateway: () => import_gateway3.gateway,
91
92
  generateId: () => import_provider_utils29.generateId,
92
93
  generateObject: () => generateObject,
93
94
  generateText: () => generateText,
@@ -121,6 +122,7 @@ __export(src_exports, {
121
122
  zodSchema: () => import_provider_utils29.zodSchema
122
123
  });
123
124
  module.exports = __toCommonJS(src_exports);
125
+ var import_gateway3 = require("@ai-sdk/gateway");
124
126
  var import_provider_utils29 = require("@ai-sdk/provider-utils");
125
127
 
126
128
  // src/generate-text/generate-text.ts
@@ -5745,17 +5747,217 @@ var DefaultStreamTextResult = class {
5745
5747
  }
5746
5748
  };
5747
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
+
5748
5939
  // src/agent/agent.ts
5749
5940
  var Agent = class {
5750
5941
  constructor(settings) {
5751
5942
  this.settings = settings;
5752
5943
  }
5944
+ get tools() {
5945
+ return this.settings.tools;
5946
+ }
5753
5947
  async generate(options) {
5754
5948
  return generateText({ ...this.settings, ...options });
5755
5949
  }
5756
5950
  stream(options) {
5757
5951
  return streamText({ ...this.settings, ...options });
5758
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
+ }
5759
5961
  };
5760
5962
 
5761
5963
  // src/embed/embed.ts
@@ -9636,195 +9838,6 @@ var AbstractChat = class {
9636
9838
  }
9637
9839
  };
9638
9840
 
9639
- // src/ui/convert-to-model-messages.ts
9640
- function convertToModelMessages(messages, options) {
9641
- const modelMessages = [];
9642
- if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
9643
- messages = messages.map((message) => ({
9644
- ...message,
9645
- parts: message.parts.filter(
9646
- (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
9647
- )
9648
- }));
9649
- }
9650
- for (const message of messages) {
9651
- switch (message.role) {
9652
- case "system": {
9653
- const textParts = message.parts.filter((part) => part.type === "text");
9654
- const providerMetadata = textParts.reduce((acc, part) => {
9655
- if (part.providerMetadata != null) {
9656
- return { ...acc, ...part.providerMetadata };
9657
- }
9658
- return acc;
9659
- }, {});
9660
- modelMessages.push({
9661
- role: "system",
9662
- content: textParts.map((part) => part.text).join(""),
9663
- ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
9664
- });
9665
- break;
9666
- }
9667
- case "user": {
9668
- modelMessages.push({
9669
- role: "user",
9670
- content: message.parts.filter(
9671
- (part) => part.type === "text" || part.type === "file"
9672
- ).map((part) => {
9673
- switch (part.type) {
9674
- case "text":
9675
- return {
9676
- type: "text",
9677
- text: part.text,
9678
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9679
- };
9680
- case "file":
9681
- return {
9682
- type: "file",
9683
- mediaType: part.mediaType,
9684
- filename: part.filename,
9685
- data: part.url,
9686
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9687
- };
9688
- default:
9689
- return part;
9690
- }
9691
- })
9692
- });
9693
- break;
9694
- }
9695
- case "assistant": {
9696
- if (message.parts != null) {
9697
- let processBlock2 = function() {
9698
- var _a17, _b;
9699
- if (block.length === 0) {
9700
- return;
9701
- }
9702
- const content = [];
9703
- for (const part of block) {
9704
- if (part.type === "text") {
9705
- content.push({
9706
- type: "text",
9707
- text: part.text,
9708
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9709
- });
9710
- } else if (part.type === "file") {
9711
- content.push({
9712
- type: "file",
9713
- mediaType: part.mediaType,
9714
- filename: part.filename,
9715
- data: part.url
9716
- });
9717
- } else if (part.type === "reasoning") {
9718
- content.push({
9719
- type: "reasoning",
9720
- text: part.text,
9721
- providerOptions: part.providerMetadata
9722
- });
9723
- } else if (part.type === "dynamic-tool") {
9724
- const toolName = part.toolName;
9725
- if (part.state !== "input-streaming") {
9726
- content.push({
9727
- type: "tool-call",
9728
- toolCallId: part.toolCallId,
9729
- toolName,
9730
- input: part.input,
9731
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9732
- });
9733
- }
9734
- } else if (isToolUIPart(part)) {
9735
- const toolName = getToolName(part);
9736
- if (part.state !== "input-streaming") {
9737
- content.push({
9738
- type: "tool-call",
9739
- toolCallId: part.toolCallId,
9740
- toolName,
9741
- input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
9742
- providerExecuted: part.providerExecuted,
9743
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9744
- });
9745
- if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
9746
- content.push({
9747
- type: "tool-result",
9748
- toolCallId: part.toolCallId,
9749
- toolName,
9750
- output: createToolModelOutput({
9751
- output: part.state === "output-error" ? part.errorText : part.output,
9752
- tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
9753
- errorMode: part.state === "output-error" ? "json" : "none"
9754
- })
9755
- });
9756
- }
9757
- }
9758
- } else {
9759
- const _exhaustiveCheck = part;
9760
- throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
9761
- }
9762
- }
9763
- modelMessages.push({
9764
- role: "assistant",
9765
- content
9766
- });
9767
- const toolParts = block.filter(
9768
- (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
9769
- );
9770
- if (toolParts.length > 0) {
9771
- modelMessages.push({
9772
- role: "tool",
9773
- content: toolParts.map((toolPart) => {
9774
- var _a18;
9775
- switch (toolPart.state) {
9776
- case "output-error":
9777
- case "output-available": {
9778
- const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
9779
- return {
9780
- type: "tool-result",
9781
- toolCallId: toolPart.toolCallId,
9782
- toolName,
9783
- output: createToolModelOutput({
9784
- output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
9785
- tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
9786
- errorMode: toolPart.state === "output-error" ? "text" : "none"
9787
- })
9788
- };
9789
- }
9790
- default: {
9791
- return null;
9792
- }
9793
- }
9794
- }).filter(
9795
- (output) => output != null
9796
- )
9797
- });
9798
- }
9799
- block = [];
9800
- };
9801
- var processBlock = processBlock2;
9802
- let block = [];
9803
- for (const part of message.parts) {
9804
- if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
9805
- block.push(part);
9806
- } else if (part.type === "step-start") {
9807
- processBlock2();
9808
- }
9809
- }
9810
- processBlock2();
9811
- break;
9812
- }
9813
- break;
9814
- }
9815
- default: {
9816
- const _exhaustiveCheck = message.role;
9817
- throw new MessageConversionError({
9818
- originalMessage: message,
9819
- message: `Unsupported role: ${_exhaustiveCheck}`
9820
- });
9821
- }
9822
- }
9823
- }
9824
- return modelMessages;
9825
- }
9826
- var convertToCoreMessages = convertToModelMessages;
9827
-
9828
9841
  // src/ui/last-assistant-message-is-complete-with-tool-calls.ts
9829
9842
  function lastAssistantMessageIsCompleteWithToolCalls({
9830
9843
  messages
@@ -10303,6 +10316,7 @@ function readUIMessageStream({
10303
10316
  experimental_generateSpeech,
10304
10317
  experimental_transcribe,
10305
10318
  extractReasoningMiddleware,
10319
+ gateway,
10306
10320
  generateId,
10307
10321
  generateObject,
10308
10322
  generateText,