@upstash/workflow 0.2.11 → 0.2.12

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/index.js CHANGED
@@ -146,7 +146,7 @@ var formatWorkflowError = (error) => {
146
146
  message: error.message
147
147
  } : {
148
148
  error: "Error",
149
- message: "An error occured while executing workflow."
149
+ message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
150
150
  };
151
151
  };
152
152
 
@@ -1985,6 +1985,9 @@ var WorkflowApi = class extends BaseWorkflowApi {
1985
1985
  }
1986
1986
  };
1987
1987
 
1988
+ // src/agents/index.ts
1989
+ var import_openai3 = require("@ai-sdk/openai");
1990
+
1988
1991
  // src/agents/adapters.ts
1989
1992
  var import_openai2 = require("@ai-sdk/openai");
1990
1993
  var import_ai = require("ai");
@@ -2004,46 +2007,49 @@ you need from that agent.
2004
2007
  `;
2005
2008
 
2006
2009
  // src/agents/adapters.ts
2007
- var createWorkflowOpenAI = (context, config) => {
2008
- const { baseURL, apiKey } = config ?? {};
2009
- return (0, import_openai2.createOpenAI)({
2010
- baseURL,
2011
- apiKey,
2012
- compatibility: "strict",
2013
- fetch: async (input, init) => {
2014
- try {
2015
- const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
2016
- const body = init?.body ? JSON.parse(init.body) : void 0;
2017
- const agentName = headers[AGENT_NAME_HEADER];
2018
- const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
2019
- const responseInfo = await context.call(stepName, {
2020
- url: input.toString(),
2021
- method: init?.method,
2022
- headers,
2023
- body
2024
- });
2025
- const responseHeaders = new Headers(
2026
- Object.entries(responseInfo.header).reduce(
2027
- (acc, [key, values]) => {
2028
- acc[key] = values.join(", ");
2029
- return acc;
2030
- },
2031
- {}
2032
- )
2033
- );
2034
- return new Response(JSON.stringify(responseInfo.body), {
2035
- status: responseInfo.status,
2036
- headers: responseHeaders
2037
- });
2038
- } catch (error) {
2039
- if (error instanceof Error && error.name === "WorkflowAbort") {
2040
- throw error;
2041
- } else {
2042
- console.error("Error in fetch implementation:", error);
2043
- throw error;
2044
- }
2045
- }
2010
+ var fetchWithContextCall = async (context, ...params) => {
2011
+ const [input, init] = params;
2012
+ try {
2013
+ const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
2014
+ const body = init?.body ? JSON.parse(init.body) : void 0;
2015
+ const agentName = headers[AGENT_NAME_HEADER];
2016
+ const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
2017
+ const responseInfo = await context.call(stepName, {
2018
+ url: input.toString(),
2019
+ method: init?.method,
2020
+ headers,
2021
+ body
2022
+ });
2023
+ const responseHeaders = new Headers(
2024
+ Object.entries(responseInfo.header).reduce(
2025
+ (acc, [key, values]) => {
2026
+ acc[key] = values.join(", ");
2027
+ return acc;
2028
+ },
2029
+ {}
2030
+ )
2031
+ );
2032
+ return new Response(JSON.stringify(responseInfo.body), {
2033
+ status: responseInfo.status,
2034
+ headers: responseHeaders
2035
+ });
2036
+ } catch (error) {
2037
+ if (error instanceof Error && error.name === "WorkflowAbort") {
2038
+ throw error;
2039
+ } else {
2040
+ console.error("Error in fetch implementation:", error);
2041
+ throw error;
2046
2042
  }
2043
+ }
2044
+ };
2045
+ var createWorkflowModel = ({
2046
+ context,
2047
+ provider,
2048
+ providerParams
2049
+ }) => {
2050
+ return provider({
2051
+ fetch: (...params) => fetchWithContextCall(context, ...params),
2052
+ ...providerParams
2047
2053
  });
2048
2054
  };
2049
2055
  var wrapTools = ({
@@ -2314,9 +2320,14 @@ var WorkflowAgents = class {
2314
2320
  openai(...params) {
2315
2321
  const [model, settings] = params;
2316
2322
  const { baseURL, apiKey, ...otherSettings } = settings ?? {};
2317
- const openai2 = createWorkflowOpenAI(this.context, { baseURL, apiKey });
2318
- return openai2(model, otherSettings);
2323
+ const openaiModel = this.AISDKModel({
2324
+ context: this.context,
2325
+ provider: import_openai3.createOpenAI,
2326
+ providerParams: { baseURL, apiKey, compatibility: "strict" }
2327
+ });
2328
+ return openaiModel(model, otherSettings);
2319
2329
  }
2330
+ AISDKModel = createWorkflowModel;
2320
2331
  };
2321
2332
 
2322
2333
  // src/context/context.ts
@@ -3039,6 +3050,7 @@ var processOptions = (options) => {
3039
3050
  retries: DEFAULT_RETRIES,
3040
3051
  useJSONContent: false,
3041
3052
  disableTelemetry: false,
3053
+ onError: console.error,
3042
3054
  ...options
3043
3055
  };
3044
3056
  };
@@ -3088,7 +3100,8 @@ var serveBase = (routeFunction, telemetry, options) => {
3088
3100
  retries,
3089
3101
  useJSONContent,
3090
3102
  disableTelemetry,
3091
- flowControl
3103
+ flowControl,
3104
+ onError
3092
3105
  } = processOptions(options);
3093
3106
  telemetry = disableTelemetry ? void 0 : telemetry;
3094
3107
  const debug = WorkflowLogger.getLogger(verbose);
@@ -3217,8 +3230,19 @@ var serveBase = (routeFunction, telemetry, options) => {
3217
3230
  try {
3218
3231
  return await handler(request);
3219
3232
  } catch (error) {
3220
- console.error(error);
3221
- return new Response(JSON.stringify(formatWorkflowError(error)), {
3233
+ const formattedError = formatWorkflowError(error);
3234
+ try {
3235
+ onError?.(error);
3236
+ } catch (onErrorError) {
3237
+ const formattedOnErrorError = formatWorkflowError(onErrorError);
3238
+ const errorMessage = `Error while running onError callback: '${formattedOnErrorError.message}'.
3239
+ Original error: '${formattedError.message}'`;
3240
+ console.error(errorMessage);
3241
+ return new Response(errorMessage, {
3242
+ status: 500
3243
+ });
3244
+ }
3245
+ return new Response(JSON.stringify(formattedError), {
3222
3246
  status: 500
3223
3247
  });
3224
3248
  }
package/index.mjs CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  makeNotifyRequest,
11
11
  serve,
12
12
  triggerFirstInvocation
13
- } from "./chunk-WQAJ2RSZ.mjs";
13
+ } from "./chunk-4GTHIL7S.mjs";
14
14
 
15
15
  // src/client/index.ts
16
16
  import { Client as QStashClient } from "@upstash/qstash";
package/nextjs.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
2
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-DS9q8FyV.mjs';
3
- import { s as serveManyBase } from './serve-many-Fuovl7gl.mjs';
2
+ import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-D1W0VOpy.mjs';
3
+ import { s as serveManyBase } from './serve-many-DLguU9iR.mjs';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/nextjs.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
2
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-DS9q8FyV.js';
3
- import { s as serveManyBase } from './serve-many-DNnLsDIp.js';
2
+ import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-D1W0VOpy.js';
3
+ import { s as serveManyBase } from './serve-many-BdMq5rFX.js';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/nextjs.js CHANGED
@@ -137,7 +137,7 @@ var formatWorkflowError = (error) => {
137
137
  message: error.message
138
138
  } : {
139
139
  error: "Error",
140
- message: "An error occured while executing workflow."
140
+ message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
141
141
  };
142
142
  };
143
143
 
@@ -2037,6 +2037,9 @@ var WorkflowApi = class extends BaseWorkflowApi {
2037
2037
  }
2038
2038
  };
2039
2039
 
2040
+ // src/agents/index.ts
2041
+ var import_openai3 = require("@ai-sdk/openai");
2042
+
2040
2043
  // src/agents/adapters.ts
2041
2044
  var import_openai2 = require("@ai-sdk/openai");
2042
2045
  var import_ai = require("ai");
@@ -2056,46 +2059,49 @@ you need from that agent.
2056
2059
  `;
2057
2060
 
2058
2061
  // src/agents/adapters.ts
2059
- var createWorkflowOpenAI = (context, config) => {
2060
- const { baseURL, apiKey } = config ?? {};
2061
- return (0, import_openai2.createOpenAI)({
2062
- baseURL,
2063
- apiKey,
2064
- compatibility: "strict",
2065
- fetch: async (input, init) => {
2066
- try {
2067
- const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
2068
- const body = init?.body ? JSON.parse(init.body) : void 0;
2069
- const agentName = headers[AGENT_NAME_HEADER];
2070
- const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
2071
- const responseInfo = await context.call(stepName, {
2072
- url: input.toString(),
2073
- method: init?.method,
2074
- headers,
2075
- body
2076
- });
2077
- const responseHeaders = new Headers(
2078
- Object.entries(responseInfo.header).reduce(
2079
- (acc, [key, values]) => {
2080
- acc[key] = values.join(", ");
2081
- return acc;
2082
- },
2083
- {}
2084
- )
2085
- );
2086
- return new Response(JSON.stringify(responseInfo.body), {
2087
- status: responseInfo.status,
2088
- headers: responseHeaders
2089
- });
2090
- } catch (error) {
2091
- if (error instanceof Error && error.name === "WorkflowAbort") {
2092
- throw error;
2093
- } else {
2094
- console.error("Error in fetch implementation:", error);
2095
- throw error;
2096
- }
2097
- }
2062
+ var fetchWithContextCall = async (context, ...params) => {
2063
+ const [input, init] = params;
2064
+ try {
2065
+ const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
2066
+ const body = init?.body ? JSON.parse(init.body) : void 0;
2067
+ const agentName = headers[AGENT_NAME_HEADER];
2068
+ const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
2069
+ const responseInfo = await context.call(stepName, {
2070
+ url: input.toString(),
2071
+ method: init?.method,
2072
+ headers,
2073
+ body
2074
+ });
2075
+ const responseHeaders = new Headers(
2076
+ Object.entries(responseInfo.header).reduce(
2077
+ (acc, [key, values]) => {
2078
+ acc[key] = values.join(", ");
2079
+ return acc;
2080
+ },
2081
+ {}
2082
+ )
2083
+ );
2084
+ return new Response(JSON.stringify(responseInfo.body), {
2085
+ status: responseInfo.status,
2086
+ headers: responseHeaders
2087
+ });
2088
+ } catch (error) {
2089
+ if (error instanceof Error && error.name === "WorkflowAbort") {
2090
+ throw error;
2091
+ } else {
2092
+ console.error("Error in fetch implementation:", error);
2093
+ throw error;
2098
2094
  }
2095
+ }
2096
+ };
2097
+ var createWorkflowModel = ({
2098
+ context,
2099
+ provider,
2100
+ providerParams
2101
+ }) => {
2102
+ return provider({
2103
+ fetch: (...params) => fetchWithContextCall(context, ...params),
2104
+ ...providerParams
2099
2105
  });
2100
2106
  };
2101
2107
  var wrapTools = ({
@@ -2335,9 +2341,14 @@ var WorkflowAgents = class {
2335
2341
  openai(...params) {
2336
2342
  const [model, settings] = params;
2337
2343
  const { baseURL, apiKey, ...otherSettings } = settings ?? {};
2338
- const openai2 = createWorkflowOpenAI(this.context, { baseURL, apiKey });
2339
- return openai2(model, otherSettings);
2344
+ const openaiModel = this.AISDKModel({
2345
+ context: this.context,
2346
+ provider: import_openai3.createOpenAI,
2347
+ providerParams: { baseURL, apiKey, compatibility: "strict" }
2348
+ });
2349
+ return openaiModel(model, otherSettings);
2340
2350
  }
2351
+ AISDKModel = createWorkflowModel;
2341
2352
  };
2342
2353
 
2343
2354
  // src/context/context.ts
@@ -3060,6 +3071,7 @@ var processOptions = (options) => {
3060
3071
  retries: DEFAULT_RETRIES,
3061
3072
  useJSONContent: false,
3062
3073
  disableTelemetry: false,
3074
+ onError: console.error,
3063
3075
  ...options
3064
3076
  };
3065
3077
  };
@@ -3109,7 +3121,8 @@ var serveBase = (routeFunction, telemetry, options) => {
3109
3121
  retries,
3110
3122
  useJSONContent,
3111
3123
  disableTelemetry,
3112
- flowControl
3124
+ flowControl,
3125
+ onError
3113
3126
  } = processOptions(options);
3114
3127
  telemetry = disableTelemetry ? void 0 : telemetry;
3115
3128
  const debug = WorkflowLogger.getLogger(verbose);
@@ -3238,8 +3251,19 @@ var serveBase = (routeFunction, telemetry, options) => {
3238
3251
  try {
3239
3252
  return await handler(request);
3240
3253
  } catch (error) {
3241
- console.error(error);
3242
- return new Response(JSON.stringify(formatWorkflowError(error)), {
3254
+ const formattedError = formatWorkflowError(error);
3255
+ try {
3256
+ onError?.(error);
3257
+ } catch (onErrorError) {
3258
+ const formattedOnErrorError = formatWorkflowError(onErrorError);
3259
+ const errorMessage = `Error while running onError callback: '${formattedOnErrorError.message}'.
3260
+ Original error: '${formattedError.message}'`;
3261
+ console.error(errorMessage);
3262
+ return new Response(errorMessage, {
3263
+ status: 500
3264
+ });
3265
+ }
3266
+ return new Response(JSON.stringify(formattedError), {
3243
3267
  status: 500
3244
3268
  });
3245
3269
  }
package/nextjs.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-WQAJ2RSZ.mjs";
5
+ } from "./chunk-4GTHIL7S.mjs";
6
6
 
7
7
  // platforms/nextjs.ts
8
8
  var appTelemetry = {
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@upstash/workflow","version":"v0.2.11","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.20","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.22","ai":"^4.0.30","zod":"^3.24.1"},"directories":{"example":"examples"}}
1
+ {"name":"@upstash/workflow","version":"v0.2.12","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":{"@ai-sdk/anthropic":"^1.1.15","@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.20","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.22","ai":"^4.0.30","zod":"^3.24.1"},"directories":{"example":"examples"}}
@@ -1,4 +1,4 @@
1
- import { k as PublicServeOptions, R as RouteFunction, t as InvokableWorkflow } from './types-DS9q8FyV.js';
1
+ import { k as PublicServeOptions, R as RouteFunction, t as InvokableWorkflow } from './types-D1W0VOpy.js';
2
2
 
3
3
  type OmitOptionsInServeMany<TOptions> = Omit<TOptions, "env" | "url" | "schema" | "initialPayloadParser">;
4
4
  declare const serveManyBase: <THandler extends (...params: any[]) => any, TOptions extends OmitOptionsInServeMany<PublicServeOptions> = OmitOptionsInServeMany<PublicServeOptions>, TServeParams extends [routeFunction: RouteFunction<any, any>, options: TOptions] = [routeFunction: RouteFunction<any, any>, options: TOptions]>({ workflows, getUrl, serveMethod, options, }: {
@@ -1,4 +1,4 @@
1
- import { k as PublicServeOptions, R as RouteFunction, t as InvokableWorkflow } from './types-DS9q8FyV.mjs';
1
+ import { k as PublicServeOptions, R as RouteFunction, t as InvokableWorkflow } from './types-D1W0VOpy.mjs';
2
2
 
3
3
  type OmitOptionsInServeMany<TOptions> = Omit<TOptions, "env" | "url" | "schema" | "initialPayloadParser">;
4
4
  declare const serveManyBase: <THandler extends (...params: any[]) => any, TOptions extends OmitOptionsInServeMany<PublicServeOptions> = OmitOptionsInServeMany<PublicServeOptions>, TServeParams extends [routeFunction: RouteFunction<any, any>, options: TOptions] = [routeFunction: RouteFunction<any, any>, options: TOptions]>({ workflows, getUrl, serveMethod, options, }: {
package/solidjs.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, k as PublicServeOptions } from './types-DS9q8FyV.mjs';
2
+ import { R as RouteFunction, k as PublicServeOptions } from './types-D1W0VOpy.mjs';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
package/solidjs.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, k as PublicServeOptions } from './types-DS9q8FyV.js';
2
+ import { R as RouteFunction, k as PublicServeOptions } from './types-D1W0VOpy.js';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
package/solidjs.js CHANGED
@@ -132,7 +132,7 @@ var formatWorkflowError = (error) => {
132
132
  message: error.message
133
133
  } : {
134
134
  error: "Error",
135
- message: "An error occured while executing workflow."
135
+ message: `An error occured while executing workflow: '${typeof error === "string" ? error : JSON.stringify(error)}'`
136
136
  };
137
137
  };
138
138
 
@@ -1971,6 +1971,9 @@ var WorkflowApi = class extends BaseWorkflowApi {
1971
1971
  }
1972
1972
  };
1973
1973
 
1974
+ // src/agents/index.ts
1975
+ var import_openai3 = require("@ai-sdk/openai");
1976
+
1974
1977
  // src/agents/adapters.ts
1975
1978
  var import_openai2 = require("@ai-sdk/openai");
1976
1979
  var import_ai = require("ai");
@@ -1990,46 +1993,49 @@ you need from that agent.
1990
1993
  `;
1991
1994
 
1992
1995
  // src/agents/adapters.ts
1993
- var createWorkflowOpenAI = (context, config) => {
1994
- const { baseURL, apiKey } = config ?? {};
1995
- return (0, import_openai2.createOpenAI)({
1996
- baseURL,
1997
- apiKey,
1998
- compatibility: "strict",
1999
- fetch: async (input, init) => {
2000
- try {
2001
- const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
2002
- const body = init?.body ? JSON.parse(init.body) : void 0;
2003
- const agentName = headers[AGENT_NAME_HEADER];
2004
- const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
2005
- const responseInfo = await context.call(stepName, {
2006
- url: input.toString(),
2007
- method: init?.method,
2008
- headers,
2009
- body
2010
- });
2011
- const responseHeaders = new Headers(
2012
- Object.entries(responseInfo.header).reduce(
2013
- (acc, [key, values]) => {
2014
- acc[key] = values.join(", ");
2015
- return acc;
2016
- },
2017
- {}
2018
- )
2019
- );
2020
- return new Response(JSON.stringify(responseInfo.body), {
2021
- status: responseInfo.status,
2022
- headers: responseHeaders
2023
- });
2024
- } catch (error) {
2025
- if (error instanceof Error && error.name === "WorkflowAbort") {
2026
- throw error;
2027
- } else {
2028
- console.error("Error in fetch implementation:", error);
2029
- throw error;
2030
- }
2031
- }
1996
+ var fetchWithContextCall = async (context, ...params) => {
1997
+ const [input, init] = params;
1998
+ try {
1999
+ const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
2000
+ const body = init?.body ? JSON.parse(init.body) : void 0;
2001
+ const agentName = headers[AGENT_NAME_HEADER];
2002
+ const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
2003
+ const responseInfo = await context.call(stepName, {
2004
+ url: input.toString(),
2005
+ method: init?.method,
2006
+ headers,
2007
+ body
2008
+ });
2009
+ const responseHeaders = new Headers(
2010
+ Object.entries(responseInfo.header).reduce(
2011
+ (acc, [key, values]) => {
2012
+ acc[key] = values.join(", ");
2013
+ return acc;
2014
+ },
2015
+ {}
2016
+ )
2017
+ );
2018
+ return new Response(JSON.stringify(responseInfo.body), {
2019
+ status: responseInfo.status,
2020
+ headers: responseHeaders
2021
+ });
2022
+ } catch (error) {
2023
+ if (error instanceof Error && error.name === "WorkflowAbort") {
2024
+ throw error;
2025
+ } else {
2026
+ console.error("Error in fetch implementation:", error);
2027
+ throw error;
2032
2028
  }
2029
+ }
2030
+ };
2031
+ var createWorkflowModel = ({
2032
+ context,
2033
+ provider,
2034
+ providerParams
2035
+ }) => {
2036
+ return provider({
2037
+ fetch: (...params) => fetchWithContextCall(context, ...params),
2038
+ ...providerParams
2033
2039
  });
2034
2040
  };
2035
2041
  var wrapTools = ({
@@ -2269,9 +2275,14 @@ var WorkflowAgents = class {
2269
2275
  openai(...params) {
2270
2276
  const [model, settings] = params;
2271
2277
  const { baseURL, apiKey, ...otherSettings } = settings ?? {};
2272
- const openai2 = createWorkflowOpenAI(this.context, { baseURL, apiKey });
2273
- return openai2(model, otherSettings);
2278
+ const openaiModel = this.AISDKModel({
2279
+ context: this.context,
2280
+ provider: import_openai3.createOpenAI,
2281
+ providerParams: { baseURL, apiKey, compatibility: "strict" }
2282
+ });
2283
+ return openaiModel(model, otherSettings);
2274
2284
  }
2285
+ AISDKModel = createWorkflowModel;
2275
2286
  };
2276
2287
 
2277
2288
  // src/context/context.ts
@@ -2994,6 +3005,7 @@ var processOptions = (options) => {
2994
3005
  retries: DEFAULT_RETRIES,
2995
3006
  useJSONContent: false,
2996
3007
  disableTelemetry: false,
3008
+ onError: console.error,
2997
3009
  ...options
2998
3010
  };
2999
3011
  };
@@ -3043,7 +3055,8 @@ var serveBase = (routeFunction, telemetry, options) => {
3043
3055
  retries,
3044
3056
  useJSONContent,
3045
3057
  disableTelemetry,
3046
- flowControl
3058
+ flowControl,
3059
+ onError
3047
3060
  } = processOptions(options);
3048
3061
  telemetry = disableTelemetry ? void 0 : telemetry;
3049
3062
  const debug = WorkflowLogger.getLogger(verbose);
@@ -3172,8 +3185,19 @@ var serveBase = (routeFunction, telemetry, options) => {
3172
3185
  try {
3173
3186
  return await handler(request);
3174
3187
  } catch (error) {
3175
- console.error(error);
3176
- return new Response(JSON.stringify(formatWorkflowError(error)), {
3188
+ const formattedError = formatWorkflowError(error);
3189
+ try {
3190
+ onError?.(error);
3191
+ } catch (onErrorError) {
3192
+ const formattedOnErrorError = formatWorkflowError(onErrorError);
3193
+ const errorMessage = `Error while running onError callback: '${formattedOnErrorError.message}'.
3194
+ Original error: '${formattedError.message}'`;
3195
+ console.error(errorMessage);
3196
+ return new Response(errorMessage, {
3197
+ status: 500
3198
+ });
3199
+ }
3200
+ return new Response(JSON.stringify(formattedError), {
3177
3201
  status: 500
3178
3202
  });
3179
3203
  }
package/solidjs.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase
4
- } from "./chunk-WQAJ2RSZ.mjs";
4
+ } from "./chunk-4GTHIL7S.mjs";
5
5
 
6
6
  // platforms/solidjs.ts
7
7
  var serve = (routeFunction, options) => {
package/svelte.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _sveltejs_kit from '@sveltejs/kit';
2
2
  import { RequestHandler } from '@sveltejs/kit';
3
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-DS9q8FyV.mjs';
4
- import { s as serveManyBase } from './serve-many-Fuovl7gl.mjs';
3
+ import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-D1W0VOpy.mjs';
4
+ import { s as serveManyBase } from './serve-many-DLguU9iR.mjs';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';
package/svelte.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _sveltejs_kit from '@sveltejs/kit';
2
2
  import { RequestHandler } from '@sveltejs/kit';
3
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-DS9q8FyV.js';
4
- import { s as serveManyBase } from './serve-many-DNnLsDIp.js';
3
+ import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-D1W0VOpy.js';
4
+ import { s as serveManyBase } from './serve-many-BdMq5rFX.js';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';