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.mjs CHANGED
@@ -5,6 +5,7 @@ var __export = (target, all) => {
5
5
  };
6
6
 
7
7
  // src/index.ts
8
+ import { gateway as gateway2 } from "@ai-sdk/gateway";
8
9
  import {
9
10
  asSchema as asSchema5,
10
11
  createIdGenerator as createIdGenerator5,
@@ -5682,17 +5683,217 @@ var DefaultStreamTextResult = class {
5682
5683
  }
5683
5684
  };
5684
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
+
5685
5875
  // src/agent/agent.ts
5686
5876
  var Agent = class {
5687
5877
  constructor(settings) {
5688
5878
  this.settings = settings;
5689
5879
  }
5880
+ get tools() {
5881
+ return this.settings.tools;
5882
+ }
5690
5883
  async generate(options) {
5691
5884
  return generateText({ ...this.settings, ...options });
5692
5885
  }
5693
5886
  stream(options) {
5694
5887
  return streamText({ ...this.settings, ...options });
5695
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
+ }
5696
5897
  };
5697
5898
 
5698
5899
  // src/embed/embed.ts
@@ -9599,195 +9800,6 @@ var AbstractChat = class {
9599
9800
  }
9600
9801
  };
9601
9802
 
9602
- // src/ui/convert-to-model-messages.ts
9603
- function convertToModelMessages(messages, options) {
9604
- const modelMessages = [];
9605
- if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
9606
- messages = messages.map((message) => ({
9607
- ...message,
9608
- parts: message.parts.filter(
9609
- (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
9610
- )
9611
- }));
9612
- }
9613
- for (const message of messages) {
9614
- switch (message.role) {
9615
- case "system": {
9616
- const textParts = message.parts.filter((part) => part.type === "text");
9617
- const providerMetadata = textParts.reduce((acc, part) => {
9618
- if (part.providerMetadata != null) {
9619
- return { ...acc, ...part.providerMetadata };
9620
- }
9621
- return acc;
9622
- }, {});
9623
- modelMessages.push({
9624
- role: "system",
9625
- content: textParts.map((part) => part.text).join(""),
9626
- ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
9627
- });
9628
- break;
9629
- }
9630
- case "user": {
9631
- modelMessages.push({
9632
- role: "user",
9633
- content: message.parts.filter(
9634
- (part) => part.type === "text" || part.type === "file"
9635
- ).map((part) => {
9636
- switch (part.type) {
9637
- case "text":
9638
- return {
9639
- type: "text",
9640
- text: part.text,
9641
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9642
- };
9643
- case "file":
9644
- return {
9645
- type: "file",
9646
- mediaType: part.mediaType,
9647
- filename: part.filename,
9648
- data: part.url,
9649
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9650
- };
9651
- default:
9652
- return part;
9653
- }
9654
- })
9655
- });
9656
- break;
9657
- }
9658
- case "assistant": {
9659
- if (message.parts != null) {
9660
- let processBlock2 = function() {
9661
- var _a17, _b;
9662
- if (block.length === 0) {
9663
- return;
9664
- }
9665
- const content = [];
9666
- for (const part of block) {
9667
- if (part.type === "text") {
9668
- content.push({
9669
- type: "text",
9670
- text: part.text,
9671
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9672
- });
9673
- } else if (part.type === "file") {
9674
- content.push({
9675
- type: "file",
9676
- mediaType: part.mediaType,
9677
- filename: part.filename,
9678
- data: part.url
9679
- });
9680
- } else if (part.type === "reasoning") {
9681
- content.push({
9682
- type: "reasoning",
9683
- text: part.text,
9684
- providerOptions: part.providerMetadata
9685
- });
9686
- } else if (part.type === "dynamic-tool") {
9687
- const toolName = part.toolName;
9688
- if (part.state !== "input-streaming") {
9689
- content.push({
9690
- type: "tool-call",
9691
- toolCallId: part.toolCallId,
9692
- toolName,
9693
- input: part.input,
9694
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9695
- });
9696
- }
9697
- } else if (isToolUIPart(part)) {
9698
- const toolName = getToolName(part);
9699
- if (part.state !== "input-streaming") {
9700
- content.push({
9701
- type: "tool-call",
9702
- toolCallId: part.toolCallId,
9703
- toolName,
9704
- input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
9705
- providerExecuted: part.providerExecuted,
9706
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9707
- });
9708
- if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
9709
- content.push({
9710
- type: "tool-result",
9711
- toolCallId: part.toolCallId,
9712
- toolName,
9713
- output: createToolModelOutput({
9714
- output: part.state === "output-error" ? part.errorText : part.output,
9715
- tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
9716
- errorMode: part.state === "output-error" ? "json" : "none"
9717
- })
9718
- });
9719
- }
9720
- }
9721
- } else {
9722
- const _exhaustiveCheck = part;
9723
- throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
9724
- }
9725
- }
9726
- modelMessages.push({
9727
- role: "assistant",
9728
- content
9729
- });
9730
- const toolParts = block.filter(
9731
- (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
9732
- );
9733
- if (toolParts.length > 0) {
9734
- modelMessages.push({
9735
- role: "tool",
9736
- content: toolParts.map((toolPart) => {
9737
- var _a18;
9738
- switch (toolPart.state) {
9739
- case "output-error":
9740
- case "output-available": {
9741
- const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
9742
- return {
9743
- type: "tool-result",
9744
- toolCallId: toolPart.toolCallId,
9745
- toolName,
9746
- output: createToolModelOutput({
9747
- output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
9748
- tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
9749
- errorMode: toolPart.state === "output-error" ? "text" : "none"
9750
- })
9751
- };
9752
- }
9753
- default: {
9754
- return null;
9755
- }
9756
- }
9757
- }).filter(
9758
- (output) => output != null
9759
- )
9760
- });
9761
- }
9762
- block = [];
9763
- };
9764
- var processBlock = processBlock2;
9765
- let block = [];
9766
- for (const part of message.parts) {
9767
- if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
9768
- block.push(part);
9769
- } else if (part.type === "step-start") {
9770
- processBlock2();
9771
- }
9772
- }
9773
- processBlock2();
9774
- break;
9775
- }
9776
- break;
9777
- }
9778
- default: {
9779
- const _exhaustiveCheck = message.role;
9780
- throw new MessageConversionError({
9781
- originalMessage: message,
9782
- message: `Unsupported role: ${_exhaustiveCheck}`
9783
- });
9784
- }
9785
- }
9786
- }
9787
- return modelMessages;
9788
- }
9789
- var convertToCoreMessages = convertToModelMessages;
9790
-
9791
9803
  // src/ui/last-assistant-message-is-complete-with-tool-calls.ts
9792
9804
  function lastAssistantMessageIsCompleteWithToolCalls({
9793
9805
  messages
@@ -10270,6 +10282,7 @@ export {
10270
10282
  generateSpeech as experimental_generateSpeech,
10271
10283
  transcribe as experimental_transcribe,
10272
10284
  extractReasoningMiddleware,
10285
+ gateway2 as gateway,
10273
10286
  generateId2 as generateId,
10274
10287
  generateObject,
10275
10288
  generateText,