@upstash/workflow 0.2.4 → 0.2.5-agents

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/nextjs.js CHANGED
@@ -1633,6 +1633,216 @@ var WorkflowApi = class extends BaseWorkflowApi {
1633
1633
  }
1634
1634
  };
1635
1635
 
1636
+ // src/agents/adapters.ts
1637
+ var import_openai2 = require("@ai-sdk/openai");
1638
+ var import_ai = require("ai");
1639
+ var AGENT_NAME_HEADER = "upstash-agent-name";
1640
+ var createWorkflowOpenAI = (context) => {
1641
+ return (0, import_openai2.createOpenAI)({
1642
+ compatibility: "strict",
1643
+ fetch: async (input, init) => {
1644
+ try {
1645
+ const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
1646
+ const body = init?.body ? JSON.parse(init.body) : void 0;
1647
+ const agentName = headers[AGENT_NAME_HEADER];
1648
+ const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
1649
+ const responseInfo = await context.call(stepName, {
1650
+ url: input.toString(),
1651
+ method: init?.method,
1652
+ headers,
1653
+ body
1654
+ });
1655
+ const responseHeaders = new Headers(
1656
+ Object.entries(responseInfo.header).reduce(
1657
+ (acc, [key, values]) => {
1658
+ acc[key] = values.join(", ");
1659
+ return acc;
1660
+ },
1661
+ {}
1662
+ )
1663
+ );
1664
+ return new Response(JSON.stringify(responseInfo.body), {
1665
+ status: responseInfo.status,
1666
+ headers: responseHeaders
1667
+ });
1668
+ } catch (error) {
1669
+ if (error instanceof Error && error.name === "WorkflowAbort") {
1670
+ throw error;
1671
+ } else {
1672
+ console.error("Error in fetch implementation:", error);
1673
+ throw error;
1674
+ }
1675
+ }
1676
+ }
1677
+ });
1678
+ };
1679
+ var wrapTools = ({
1680
+ context,
1681
+ tools
1682
+ }) => {
1683
+ return Object.fromEntries(
1684
+ Object.entries(tools).map((toolInfo) => {
1685
+ const [toolName, tool3] = toolInfo;
1686
+ const aiSDKTool = convertToAISDKTool(tool3);
1687
+ const execute = aiSDKTool.execute;
1688
+ if (execute) {
1689
+ const wrappedExecute = (...params) => {
1690
+ return context.run(`Run tool ${toolName}`, () => execute(...params));
1691
+ };
1692
+ aiSDKTool.execute = wrappedExecute;
1693
+ }
1694
+ return [toolName, aiSDKTool];
1695
+ })
1696
+ );
1697
+ };
1698
+ var convertToAISDKTool = (tool3) => {
1699
+ const isLangchainTool = "invoke" in tool3;
1700
+ return isLangchainTool ? convertLangchainTool(tool3) : tool3;
1701
+ };
1702
+ var convertLangchainTool = (langchainTool) => {
1703
+ return (0, import_ai.tool)({
1704
+ description: langchainTool.description,
1705
+ parameters: langchainTool.schema,
1706
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1707
+ execute: async (param) => langchainTool.invoke(param)
1708
+ });
1709
+ };
1710
+
1711
+ // src/agents/agent.ts
1712
+ var import_zod = require("zod");
1713
+ var import_ai2 = require("ai");
1714
+ var Agent = class {
1715
+ name;
1716
+ tools;
1717
+ maxSteps;
1718
+ background;
1719
+ model;
1720
+ constructor({ tools, maxSteps, background, name, model }) {
1721
+ this.name = name;
1722
+ this.tools = tools ?? {};
1723
+ this.maxSteps = maxSteps;
1724
+ this.background = background;
1725
+ this.model = model;
1726
+ }
1727
+ async call({ prompt }) {
1728
+ try {
1729
+ return await (0, import_ai2.generateText)({
1730
+ model: this.model,
1731
+ tools: this.tools,
1732
+ maxSteps: this.maxSteps,
1733
+ system: this.background,
1734
+ prompt,
1735
+ headers: {
1736
+ [AGENT_NAME_HEADER]: this.name
1737
+ }
1738
+ });
1739
+ } catch (error) {
1740
+ if (error instanceof import_ai2.ToolExecutionError) {
1741
+ if (error.cause instanceof Error && error.cause.name === "WorkflowAbort") {
1742
+ throw error.cause;
1743
+ } else if (error.cause instanceof import_ai2.ToolExecutionError && error.cause.cause instanceof Error && error.cause.cause.name === "WorkflowAbort") {
1744
+ throw error.cause.cause;
1745
+ } else {
1746
+ throw error;
1747
+ }
1748
+ } else {
1749
+ throw error;
1750
+ }
1751
+ }
1752
+ }
1753
+ asTool() {
1754
+ const toolDescriptions = Object.values(this.tools).map((tool3) => tool3.description).join("\n");
1755
+ return (0, import_ai2.tool)({
1756
+ parameters: import_zod.z.object({ prompt: import_zod.z.string() }),
1757
+ execute: async ({ prompt }) => {
1758
+ return await this.call({ prompt });
1759
+ },
1760
+ description: `An AI Agent with the following background: ${this.background}Has access to the following tools: ${toolDescriptions}`
1761
+ });
1762
+ }
1763
+ };
1764
+ var MANAGER_AGENT_PROMPT = `You are an AI agent who orchestrates other AI Agents.
1765
+ These other agents have tools available to them.
1766
+ Given a prompt, utilize these agents to address requests.
1767
+ Don't always call all the agents provided to you at the same time. You can call one and use it's response to call another.
1768
+ `;
1769
+ var ManagerAgent = class extends Agent {
1770
+ agents;
1771
+ constructor({
1772
+ maxSteps,
1773
+ background = MANAGER_AGENT_PROMPT,
1774
+ agents,
1775
+ model,
1776
+ name = "manager llm"
1777
+ }) {
1778
+ super({
1779
+ background,
1780
+ maxSteps,
1781
+ tools: Object.fromEntries(agents.map((agent) => [agent.name, agent.asTool()])),
1782
+ name,
1783
+ model
1784
+ });
1785
+ this.agents = agents;
1786
+ }
1787
+ };
1788
+
1789
+ // src/agents/task.ts
1790
+ var Task = class {
1791
+ context;
1792
+ taskParameters;
1793
+ constructor({
1794
+ context,
1795
+ taskParameters
1796
+ }) {
1797
+ this.context = context;
1798
+ this.taskParameters = taskParameters;
1799
+ }
1800
+ async run() {
1801
+ const { prompt, ...otherParams } = this.taskParameters;
1802
+ const safePrompt = await this.context.run("Get Prompt", () => prompt);
1803
+ if ("agent" in otherParams) {
1804
+ const agent = otherParams.agent;
1805
+ const result = await agent.call({
1806
+ prompt: safePrompt
1807
+ });
1808
+ return { text: result.text };
1809
+ } else {
1810
+ const { agents, maxSteps, model, background } = otherParams;
1811
+ const managerAgent = new ManagerAgent({
1812
+ model,
1813
+ maxSteps,
1814
+ agents,
1815
+ name: "Manager LLM",
1816
+ background
1817
+ });
1818
+ const result = await managerAgent.call({ prompt: safePrompt });
1819
+ return { text: result.text };
1820
+ }
1821
+ }
1822
+ };
1823
+
1824
+ // src/agents/index.ts
1825
+ var WorkflowAgents = class {
1826
+ context;
1827
+ constructor({ context }) {
1828
+ this.context = context;
1829
+ }
1830
+ agent(params) {
1831
+ const wrappedTools = wrapTools({ context: this.context, tools: params.tools });
1832
+ return new Agent({
1833
+ ...params,
1834
+ tools: wrappedTools
1835
+ });
1836
+ }
1837
+ task(taskParameters) {
1838
+ return new Task({ context: this.context, taskParameters });
1839
+ }
1840
+ openai(...params) {
1841
+ const openai2 = createWorkflowOpenAI(this.context);
1842
+ return openai2(...params);
1843
+ }
1844
+ };
1845
+
1636
1846
  // src/context/context.ts
1637
1847
  var WorkflowContext = class {
1638
1848
  executor;
@@ -2018,6 +2228,11 @@ var WorkflowContext = class {
2018
2228
  context: this
2019
2229
  });
2020
2230
  }
2231
+ get agents() {
2232
+ return new WorkflowAgents({
2233
+ context: this
2234
+ });
2235
+ }
2021
2236
  };
2022
2237
 
2023
2238
  // src/logger.ts
@@ -2222,6 +2437,7 @@ var checkIfLastOneIsDuplicate = async (steps, debug) => {
2222
2437
  if (step.stepId === lastStepId && step.targetStep === lastTargetStepId) {
2223
2438
  const message = `Upstash Workflow: The step '${step.stepName}' with id '${step.stepId}' has run twice during workflow execution. Rest of the workflow will continue running as usual.`;
2224
2439
  await debug?.log("WARN", "RESPONSE_DEFAULT", message);
2440
+ console.log(steps);
2225
2441
  console.warn(message);
2226
2442
  return true;
2227
2443
  }
package/nextjs.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase
4
- } from "./chunk-ETDFMXER.mjs";
4
+ } from "./chunk-RFX5YRRT.mjs";
5
+ import "./chunk-PU5J4TNC.mjs";
5
6
 
6
7
  // platforms/nextjs.ts
7
8
  var serve = (routeFunction, options) => {
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@upstash/workflow","version":"v0.2.4","description":"Durable, Reliable and Performant Serverless Functions","main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./*"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"},"./astro":{"import":"./astro.mjs","require":"./astro.js"},"./express":{"import":"./express.mjs","require":"./express.js"}},"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"repository":{"type":"git","url":"git+https://github.com/upstash/workflow-ts.git"},"keywords":["upstash","qstash","workflow","serverless"],"author":"Cahid Arda Oz","license":"MIT","bugs":{"url":"https://github.com/upstash/workflow-ts/issues"},"homepage":"https://github.com/upstash/workflow-ts#readme","devDependencies":{"@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@eslint/js":"^9.11.1","@solidjs/start":"^1.0.8","@sveltejs/kit":"^2.6.1","@types/bun":"^1.1.10","@types/express":"^5.0.0","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^4.21.1","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.3","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@upstash/qstash":"^2.7.20"},"directories":{"example":"examples"}}
1
+ {"name":"@upstash/workflow","version":"v0.2.5-agents","description":"Durable, Reliable and Performant Serverless Functions","main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./*"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"},"./astro":{"import":"./astro.mjs","require":"./astro.js"},"./express":{"import":"./express.mjs","require":"./express.js"},"./agents":{"import":"./agents.mjs","require":"./agents.js"}},"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"repository":{"type":"git","url":"git+https://github.com/upstash/workflow-ts.git"},"keywords":["upstash","qstash","workflow","serverless"],"author":"Cahid Arda Oz","license":"MIT","bugs":{"url":"https://github.com/upstash/workflow-ts/issues"},"homepage":"https://github.com/upstash/workflow-ts#readme","devDependencies":{"@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@eslint/js":"^9.11.1","@solidjs/start":"^1.0.8","@sveltejs/kit":"^2.6.1","@types/bun":"^1.1.10","@types/express":"^5.0.0","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^4.21.1","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.3","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@ai-sdk/openai":"^1.0.15","@upstash/qstash":"^2.7.20","ai":"^4.0.30","langchain":"^0.3.11","zod":"^3.24.1"},"directories":{"example":"examples"}}
package/solidjs.d.mts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.mjs';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-BEyIoCRe.mjs';
3
3
  import '@upstash/qstash';
4
+ import 'ai';
5
+ import '@ai-sdk/openai';
6
+ import 'langchain/tools';
4
7
 
5
8
  /**
6
9
  * Serve method to serve a Upstash Workflow in a Nextjs project
package/solidjs.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.js';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-BEyIoCRe.js';
3
3
  import '@upstash/qstash';
4
+ import 'ai';
5
+ import '@ai-sdk/openai';
6
+ import 'langchain/tools';
4
7
 
5
8
  /**
6
9
  * Serve method to serve a Upstash Workflow in a Nextjs project
package/solidjs.js CHANGED
@@ -1632,6 +1632,216 @@ var WorkflowApi = class extends BaseWorkflowApi {
1632
1632
  }
1633
1633
  };
1634
1634
 
1635
+ // src/agents/adapters.ts
1636
+ var import_openai2 = require("@ai-sdk/openai");
1637
+ var import_ai = require("ai");
1638
+ var AGENT_NAME_HEADER = "upstash-agent-name";
1639
+ var createWorkflowOpenAI = (context) => {
1640
+ return (0, import_openai2.createOpenAI)({
1641
+ compatibility: "strict",
1642
+ fetch: async (input, init) => {
1643
+ try {
1644
+ const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
1645
+ const body = init?.body ? JSON.parse(init.body) : void 0;
1646
+ const agentName = headers[AGENT_NAME_HEADER];
1647
+ const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
1648
+ const responseInfo = await context.call(stepName, {
1649
+ url: input.toString(),
1650
+ method: init?.method,
1651
+ headers,
1652
+ body
1653
+ });
1654
+ const responseHeaders = new Headers(
1655
+ Object.entries(responseInfo.header).reduce(
1656
+ (acc, [key, values]) => {
1657
+ acc[key] = values.join(", ");
1658
+ return acc;
1659
+ },
1660
+ {}
1661
+ )
1662
+ );
1663
+ return new Response(JSON.stringify(responseInfo.body), {
1664
+ status: responseInfo.status,
1665
+ headers: responseHeaders
1666
+ });
1667
+ } catch (error) {
1668
+ if (error instanceof Error && error.name === "WorkflowAbort") {
1669
+ throw error;
1670
+ } else {
1671
+ console.error("Error in fetch implementation:", error);
1672
+ throw error;
1673
+ }
1674
+ }
1675
+ }
1676
+ });
1677
+ };
1678
+ var wrapTools = ({
1679
+ context,
1680
+ tools
1681
+ }) => {
1682
+ return Object.fromEntries(
1683
+ Object.entries(tools).map((toolInfo) => {
1684
+ const [toolName, tool3] = toolInfo;
1685
+ const aiSDKTool = convertToAISDKTool(tool3);
1686
+ const execute = aiSDKTool.execute;
1687
+ if (execute) {
1688
+ const wrappedExecute = (...params) => {
1689
+ return context.run(`Run tool ${toolName}`, () => execute(...params));
1690
+ };
1691
+ aiSDKTool.execute = wrappedExecute;
1692
+ }
1693
+ return [toolName, aiSDKTool];
1694
+ })
1695
+ );
1696
+ };
1697
+ var convertToAISDKTool = (tool3) => {
1698
+ const isLangchainTool = "invoke" in tool3;
1699
+ return isLangchainTool ? convertLangchainTool(tool3) : tool3;
1700
+ };
1701
+ var convertLangchainTool = (langchainTool) => {
1702
+ return (0, import_ai.tool)({
1703
+ description: langchainTool.description,
1704
+ parameters: langchainTool.schema,
1705
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1706
+ execute: async (param) => langchainTool.invoke(param)
1707
+ });
1708
+ };
1709
+
1710
+ // src/agents/agent.ts
1711
+ var import_zod = require("zod");
1712
+ var import_ai2 = require("ai");
1713
+ var Agent = class {
1714
+ name;
1715
+ tools;
1716
+ maxSteps;
1717
+ background;
1718
+ model;
1719
+ constructor({ tools, maxSteps, background, name, model }) {
1720
+ this.name = name;
1721
+ this.tools = tools ?? {};
1722
+ this.maxSteps = maxSteps;
1723
+ this.background = background;
1724
+ this.model = model;
1725
+ }
1726
+ async call({ prompt }) {
1727
+ try {
1728
+ return await (0, import_ai2.generateText)({
1729
+ model: this.model,
1730
+ tools: this.tools,
1731
+ maxSteps: this.maxSteps,
1732
+ system: this.background,
1733
+ prompt,
1734
+ headers: {
1735
+ [AGENT_NAME_HEADER]: this.name
1736
+ }
1737
+ });
1738
+ } catch (error) {
1739
+ if (error instanceof import_ai2.ToolExecutionError) {
1740
+ if (error.cause instanceof Error && error.cause.name === "WorkflowAbort") {
1741
+ throw error.cause;
1742
+ } else if (error.cause instanceof import_ai2.ToolExecutionError && error.cause.cause instanceof Error && error.cause.cause.name === "WorkflowAbort") {
1743
+ throw error.cause.cause;
1744
+ } else {
1745
+ throw error;
1746
+ }
1747
+ } else {
1748
+ throw error;
1749
+ }
1750
+ }
1751
+ }
1752
+ asTool() {
1753
+ const toolDescriptions = Object.values(this.tools).map((tool3) => tool3.description).join("\n");
1754
+ return (0, import_ai2.tool)({
1755
+ parameters: import_zod.z.object({ prompt: import_zod.z.string() }),
1756
+ execute: async ({ prompt }) => {
1757
+ return await this.call({ prompt });
1758
+ },
1759
+ description: `An AI Agent with the following background: ${this.background}Has access to the following tools: ${toolDescriptions}`
1760
+ });
1761
+ }
1762
+ };
1763
+ var MANAGER_AGENT_PROMPT = `You are an AI agent who orchestrates other AI Agents.
1764
+ These other agents have tools available to them.
1765
+ Given a prompt, utilize these agents to address requests.
1766
+ Don't always call all the agents provided to you at the same time. You can call one and use it's response to call another.
1767
+ `;
1768
+ var ManagerAgent = class extends Agent {
1769
+ agents;
1770
+ constructor({
1771
+ maxSteps,
1772
+ background = MANAGER_AGENT_PROMPT,
1773
+ agents,
1774
+ model,
1775
+ name = "manager llm"
1776
+ }) {
1777
+ super({
1778
+ background,
1779
+ maxSteps,
1780
+ tools: Object.fromEntries(agents.map((agent) => [agent.name, agent.asTool()])),
1781
+ name,
1782
+ model
1783
+ });
1784
+ this.agents = agents;
1785
+ }
1786
+ };
1787
+
1788
+ // src/agents/task.ts
1789
+ var Task = class {
1790
+ context;
1791
+ taskParameters;
1792
+ constructor({
1793
+ context,
1794
+ taskParameters
1795
+ }) {
1796
+ this.context = context;
1797
+ this.taskParameters = taskParameters;
1798
+ }
1799
+ async run() {
1800
+ const { prompt, ...otherParams } = this.taskParameters;
1801
+ const safePrompt = await this.context.run("Get Prompt", () => prompt);
1802
+ if ("agent" in otherParams) {
1803
+ const agent = otherParams.agent;
1804
+ const result = await agent.call({
1805
+ prompt: safePrompt
1806
+ });
1807
+ return { text: result.text };
1808
+ } else {
1809
+ const { agents, maxSteps, model, background } = otherParams;
1810
+ const managerAgent = new ManagerAgent({
1811
+ model,
1812
+ maxSteps,
1813
+ agents,
1814
+ name: "Manager LLM",
1815
+ background
1816
+ });
1817
+ const result = await managerAgent.call({ prompt: safePrompt });
1818
+ return { text: result.text };
1819
+ }
1820
+ }
1821
+ };
1822
+
1823
+ // src/agents/index.ts
1824
+ var WorkflowAgents = class {
1825
+ context;
1826
+ constructor({ context }) {
1827
+ this.context = context;
1828
+ }
1829
+ agent(params) {
1830
+ const wrappedTools = wrapTools({ context: this.context, tools: params.tools });
1831
+ return new Agent({
1832
+ ...params,
1833
+ tools: wrappedTools
1834
+ });
1835
+ }
1836
+ task(taskParameters) {
1837
+ return new Task({ context: this.context, taskParameters });
1838
+ }
1839
+ openai(...params) {
1840
+ const openai2 = createWorkflowOpenAI(this.context);
1841
+ return openai2(...params);
1842
+ }
1843
+ };
1844
+
1635
1845
  // src/context/context.ts
1636
1846
  var WorkflowContext = class {
1637
1847
  executor;
@@ -2017,6 +2227,11 @@ var WorkflowContext = class {
2017
2227
  context: this
2018
2228
  });
2019
2229
  }
2230
+ get agents() {
2231
+ return new WorkflowAgents({
2232
+ context: this
2233
+ });
2234
+ }
2020
2235
  };
2021
2236
 
2022
2237
  // src/logger.ts
@@ -2221,6 +2436,7 @@ var checkIfLastOneIsDuplicate = async (steps, debug) => {
2221
2436
  if (step.stepId === lastStepId && step.targetStep === lastTargetStepId) {
2222
2437
  const message = `Upstash Workflow: The step '${step.stepName}' with id '${step.stepId}' has run twice during workflow execution. Rest of the workflow will continue running as usual.`;
2223
2438
  await debug?.log("WARN", "RESPONSE_DEFAULT", message);
2439
+ console.log(steps);
2224
2440
  console.warn(message);
2225
2441
  return true;
2226
2442
  }
package/solidjs.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase
4
- } from "./chunk-ETDFMXER.mjs";
4
+ } from "./chunk-RFX5YRRT.mjs";
5
+ import "./chunk-PU5J4TNC.mjs";
5
6
 
6
7
  // platforms/solidjs.ts
7
8
  var serve = (routeFunction, options) => {
package/svelte.d.mts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { RequestHandler } from '@sveltejs/kit';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.mjs';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-BEyIoCRe.mjs';
3
3
  import '@upstash/qstash';
4
+ import 'ai';
5
+ import '@ai-sdk/openai';
6
+ import 'langchain/tools';
4
7
 
5
8
  /**
6
9
  * Serve method to serve a Upstash Workflow in a Nextjs project
package/svelte.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { RequestHandler } from '@sveltejs/kit';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.js';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-BEyIoCRe.js';
3
3
  import '@upstash/qstash';
4
+ import 'ai';
5
+ import '@ai-sdk/openai';
6
+ import 'langchain/tools';
4
7
 
5
8
  /**
6
9
  * Serve method to serve a Upstash Workflow in a Nextjs project