@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/agents.d.mts +5 -0
- package/agents.d.ts +5 -0
- package/agents.js +245 -0
- package/agents.mjs +12 -0
- package/astro.d.mts +4 -1
- package/astro.d.ts +4 -1
- package/astro.js +216 -0
- package/astro.mjs +2 -1
- package/chunk-PU5J4TNC.mjs +251 -0
- package/{chunk-ETDFMXER.mjs → chunk-RFX5YRRT.mjs} +9 -34
- package/cloudflare.d.mts +4 -1
- package/cloudflare.d.ts +4 -1
- package/cloudflare.js +216 -0
- package/cloudflare.mjs +2 -1
- package/express.d.mts +4 -1
- package/express.d.ts +4 -1
- package/express.js +216 -0
- package/express.mjs +5 -3
- package/h3.d.mts +4 -1
- package/h3.d.ts +4 -1
- package/h3.js +216 -0
- package/h3.mjs +2 -1
- package/hono.d.mts +4 -1
- package/hono.d.ts +4 -1
- package/hono.js +216 -0
- package/hono.mjs +2 -1
- package/index.d.mts +5 -2
- package/index.d.ts +5 -2
- package/index.js +216 -0
- package/index.mjs +2 -1
- package/nextjs.d.mts +4 -1
- package/nextjs.d.ts +4 -1
- package/nextjs.js +216 -0
- package/nextjs.mjs +2 -1
- package/package.json +1 -1
- package/solidjs.d.mts +4 -1
- package/solidjs.d.ts +4 -1
- package/solidjs.js +216 -0
- package/solidjs.mjs +2 -1
- package/svelte.d.mts +4 -1
- package/svelte.d.ts +4 -1
- package/svelte.js +216 -0
- package/svelte.mjs +2 -1
- package/{types-Bt4-paRy.d.mts → types-BEyIoCRe.d.mts} +76 -1
- package/{types-Bt4-paRy.d.ts → types-BEyIoCRe.d.ts} +76 -1
package/express.js
CHANGED
|
@@ -25304,6 +25304,216 @@ var WorkflowApi = class extends BaseWorkflowApi {
|
|
|
25304
25304
|
}
|
|
25305
25305
|
};
|
|
25306
25306
|
|
|
25307
|
+
// src/agents/adapters.ts
|
|
25308
|
+
var import_openai2 = require("@ai-sdk/openai");
|
|
25309
|
+
var import_ai = require("ai");
|
|
25310
|
+
var AGENT_NAME_HEADER = "upstash-agent-name";
|
|
25311
|
+
var createWorkflowOpenAI = (context) => {
|
|
25312
|
+
return (0, import_openai2.createOpenAI)({
|
|
25313
|
+
compatibility: "strict",
|
|
25314
|
+
fetch: async (input, init) => {
|
|
25315
|
+
try {
|
|
25316
|
+
const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
|
|
25317
|
+
const body = init?.body ? JSON.parse(init.body) : void 0;
|
|
25318
|
+
const agentName = headers[AGENT_NAME_HEADER];
|
|
25319
|
+
const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
|
|
25320
|
+
const responseInfo = await context.call(stepName, {
|
|
25321
|
+
url: input.toString(),
|
|
25322
|
+
method: init?.method,
|
|
25323
|
+
headers,
|
|
25324
|
+
body
|
|
25325
|
+
});
|
|
25326
|
+
const responseHeaders = new Headers(
|
|
25327
|
+
Object.entries(responseInfo.header).reduce(
|
|
25328
|
+
(acc, [key, values]) => {
|
|
25329
|
+
acc[key] = values.join(", ");
|
|
25330
|
+
return acc;
|
|
25331
|
+
},
|
|
25332
|
+
{}
|
|
25333
|
+
)
|
|
25334
|
+
);
|
|
25335
|
+
return new Response(JSON.stringify(responseInfo.body), {
|
|
25336
|
+
status: responseInfo.status,
|
|
25337
|
+
headers: responseHeaders
|
|
25338
|
+
});
|
|
25339
|
+
} catch (error) {
|
|
25340
|
+
if (error instanceof Error && error.name === "WorkflowAbort") {
|
|
25341
|
+
throw error;
|
|
25342
|
+
} else {
|
|
25343
|
+
console.error("Error in fetch implementation:", error);
|
|
25344
|
+
throw error;
|
|
25345
|
+
}
|
|
25346
|
+
}
|
|
25347
|
+
}
|
|
25348
|
+
});
|
|
25349
|
+
};
|
|
25350
|
+
var wrapTools = ({
|
|
25351
|
+
context,
|
|
25352
|
+
tools
|
|
25353
|
+
}) => {
|
|
25354
|
+
return Object.fromEntries(
|
|
25355
|
+
Object.entries(tools).map((toolInfo) => {
|
|
25356
|
+
const [toolName, tool3] = toolInfo;
|
|
25357
|
+
const aiSDKTool = convertToAISDKTool(tool3);
|
|
25358
|
+
const execute = aiSDKTool.execute;
|
|
25359
|
+
if (execute) {
|
|
25360
|
+
const wrappedExecute = (...params) => {
|
|
25361
|
+
return context.run(`Run tool ${toolName}`, () => execute(...params));
|
|
25362
|
+
};
|
|
25363
|
+
aiSDKTool.execute = wrappedExecute;
|
|
25364
|
+
}
|
|
25365
|
+
return [toolName, aiSDKTool];
|
|
25366
|
+
})
|
|
25367
|
+
);
|
|
25368
|
+
};
|
|
25369
|
+
var convertToAISDKTool = (tool3) => {
|
|
25370
|
+
const isLangchainTool = "invoke" in tool3;
|
|
25371
|
+
return isLangchainTool ? convertLangchainTool(tool3) : tool3;
|
|
25372
|
+
};
|
|
25373
|
+
var convertLangchainTool = (langchainTool) => {
|
|
25374
|
+
return (0, import_ai.tool)({
|
|
25375
|
+
description: langchainTool.description,
|
|
25376
|
+
parameters: langchainTool.schema,
|
|
25377
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25378
|
+
execute: async (param) => langchainTool.invoke(param)
|
|
25379
|
+
});
|
|
25380
|
+
};
|
|
25381
|
+
|
|
25382
|
+
// src/agents/agent.ts
|
|
25383
|
+
var import_zod = require("zod");
|
|
25384
|
+
var import_ai2 = require("ai");
|
|
25385
|
+
var Agent = class {
|
|
25386
|
+
name;
|
|
25387
|
+
tools;
|
|
25388
|
+
maxSteps;
|
|
25389
|
+
background;
|
|
25390
|
+
model;
|
|
25391
|
+
constructor({ tools, maxSteps, background, name, model }) {
|
|
25392
|
+
this.name = name;
|
|
25393
|
+
this.tools = tools ?? {};
|
|
25394
|
+
this.maxSteps = maxSteps;
|
|
25395
|
+
this.background = background;
|
|
25396
|
+
this.model = model;
|
|
25397
|
+
}
|
|
25398
|
+
async call({ prompt }) {
|
|
25399
|
+
try {
|
|
25400
|
+
return await (0, import_ai2.generateText)({
|
|
25401
|
+
model: this.model,
|
|
25402
|
+
tools: this.tools,
|
|
25403
|
+
maxSteps: this.maxSteps,
|
|
25404
|
+
system: this.background,
|
|
25405
|
+
prompt,
|
|
25406
|
+
headers: {
|
|
25407
|
+
[AGENT_NAME_HEADER]: this.name
|
|
25408
|
+
}
|
|
25409
|
+
});
|
|
25410
|
+
} catch (error) {
|
|
25411
|
+
if (error instanceof import_ai2.ToolExecutionError) {
|
|
25412
|
+
if (error.cause instanceof Error && error.cause.name === "WorkflowAbort") {
|
|
25413
|
+
throw error.cause;
|
|
25414
|
+
} else if (error.cause instanceof import_ai2.ToolExecutionError && error.cause.cause instanceof Error && error.cause.cause.name === "WorkflowAbort") {
|
|
25415
|
+
throw error.cause.cause;
|
|
25416
|
+
} else {
|
|
25417
|
+
throw error;
|
|
25418
|
+
}
|
|
25419
|
+
} else {
|
|
25420
|
+
throw error;
|
|
25421
|
+
}
|
|
25422
|
+
}
|
|
25423
|
+
}
|
|
25424
|
+
asTool() {
|
|
25425
|
+
const toolDescriptions = Object.values(this.tools).map((tool3) => tool3.description).join("\n");
|
|
25426
|
+
return (0, import_ai2.tool)({
|
|
25427
|
+
parameters: import_zod.z.object({ prompt: import_zod.z.string() }),
|
|
25428
|
+
execute: async ({ prompt }) => {
|
|
25429
|
+
return await this.call({ prompt });
|
|
25430
|
+
},
|
|
25431
|
+
description: `An AI Agent with the following background: ${this.background}Has access to the following tools: ${toolDescriptions}`
|
|
25432
|
+
});
|
|
25433
|
+
}
|
|
25434
|
+
};
|
|
25435
|
+
var MANAGER_AGENT_PROMPT = `You are an AI agent who orchestrates other AI Agents.
|
|
25436
|
+
These other agents have tools available to them.
|
|
25437
|
+
Given a prompt, utilize these agents to address requests.
|
|
25438
|
+
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.
|
|
25439
|
+
`;
|
|
25440
|
+
var ManagerAgent = class extends Agent {
|
|
25441
|
+
agents;
|
|
25442
|
+
constructor({
|
|
25443
|
+
maxSteps,
|
|
25444
|
+
background = MANAGER_AGENT_PROMPT,
|
|
25445
|
+
agents,
|
|
25446
|
+
model,
|
|
25447
|
+
name = "manager llm"
|
|
25448
|
+
}) {
|
|
25449
|
+
super({
|
|
25450
|
+
background,
|
|
25451
|
+
maxSteps,
|
|
25452
|
+
tools: Object.fromEntries(agents.map((agent) => [agent.name, agent.asTool()])),
|
|
25453
|
+
name,
|
|
25454
|
+
model
|
|
25455
|
+
});
|
|
25456
|
+
this.agents = agents;
|
|
25457
|
+
}
|
|
25458
|
+
};
|
|
25459
|
+
|
|
25460
|
+
// src/agents/task.ts
|
|
25461
|
+
var Task = class {
|
|
25462
|
+
context;
|
|
25463
|
+
taskParameters;
|
|
25464
|
+
constructor({
|
|
25465
|
+
context,
|
|
25466
|
+
taskParameters
|
|
25467
|
+
}) {
|
|
25468
|
+
this.context = context;
|
|
25469
|
+
this.taskParameters = taskParameters;
|
|
25470
|
+
}
|
|
25471
|
+
async run() {
|
|
25472
|
+
const { prompt, ...otherParams } = this.taskParameters;
|
|
25473
|
+
const safePrompt = await this.context.run("Get Prompt", () => prompt);
|
|
25474
|
+
if ("agent" in otherParams) {
|
|
25475
|
+
const agent = otherParams.agent;
|
|
25476
|
+
const result = await agent.call({
|
|
25477
|
+
prompt: safePrompt
|
|
25478
|
+
});
|
|
25479
|
+
return { text: result.text };
|
|
25480
|
+
} else {
|
|
25481
|
+
const { agents, maxSteps, model, background } = otherParams;
|
|
25482
|
+
const managerAgent = new ManagerAgent({
|
|
25483
|
+
model,
|
|
25484
|
+
maxSteps,
|
|
25485
|
+
agents,
|
|
25486
|
+
name: "Manager LLM",
|
|
25487
|
+
background
|
|
25488
|
+
});
|
|
25489
|
+
const result = await managerAgent.call({ prompt: safePrompt });
|
|
25490
|
+
return { text: result.text };
|
|
25491
|
+
}
|
|
25492
|
+
}
|
|
25493
|
+
};
|
|
25494
|
+
|
|
25495
|
+
// src/agents/index.ts
|
|
25496
|
+
var WorkflowAgents = class {
|
|
25497
|
+
context;
|
|
25498
|
+
constructor({ context }) {
|
|
25499
|
+
this.context = context;
|
|
25500
|
+
}
|
|
25501
|
+
agent(params) {
|
|
25502
|
+
const wrappedTools = wrapTools({ context: this.context, tools: params.tools });
|
|
25503
|
+
return new Agent({
|
|
25504
|
+
...params,
|
|
25505
|
+
tools: wrappedTools
|
|
25506
|
+
});
|
|
25507
|
+
}
|
|
25508
|
+
task(taskParameters) {
|
|
25509
|
+
return new Task({ context: this.context, taskParameters });
|
|
25510
|
+
}
|
|
25511
|
+
openai(...params) {
|
|
25512
|
+
const openai2 = createWorkflowOpenAI(this.context);
|
|
25513
|
+
return openai2(...params);
|
|
25514
|
+
}
|
|
25515
|
+
};
|
|
25516
|
+
|
|
25307
25517
|
// src/context/context.ts
|
|
25308
25518
|
var WorkflowContext = class {
|
|
25309
25519
|
executor;
|
|
@@ -25689,6 +25899,11 @@ var WorkflowContext = class {
|
|
|
25689
25899
|
context: this
|
|
25690
25900
|
});
|
|
25691
25901
|
}
|
|
25902
|
+
get agents() {
|
|
25903
|
+
return new WorkflowAgents({
|
|
25904
|
+
context: this
|
|
25905
|
+
});
|
|
25906
|
+
}
|
|
25692
25907
|
};
|
|
25693
25908
|
|
|
25694
25909
|
// src/logger.ts
|
|
@@ -25893,6 +26108,7 @@ var checkIfLastOneIsDuplicate = async (steps, debug) => {
|
|
|
25893
26108
|
if (step.stepId === lastStepId && step.targetStep === lastTargetStepId) {
|
|
25894
26109
|
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.`;
|
|
25895
26110
|
await debug?.log("WARN", "RESPONSE_DEFAULT", message);
|
|
26111
|
+
console.log(steps);
|
|
25896
26112
|
console.warn(message);
|
|
25897
26113
|
return true;
|
|
25898
26114
|
}
|
package/express.mjs
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SDK_TELEMETRY,
|
|
3
|
+
serveBase
|
|
4
|
+
} from "./chunk-RFX5YRRT.mjs";
|
|
5
|
+
import {
|
|
3
6
|
__commonJS,
|
|
4
7
|
__require,
|
|
5
|
-
__toESM
|
|
6
|
-
|
|
7
|
-
} from "./chunk-ETDFMXER.mjs";
|
|
8
|
+
__toESM
|
|
9
|
+
} from "./chunk-PU5J4TNC.mjs";
|
|
8
10
|
|
|
9
11
|
// node_modules/depd/index.js
|
|
10
12
|
var require_depd = __commonJS({
|
package/h3.d.mts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
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
|
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
|
|
6
9
|
handler: h3.EventHandler<h3.EventHandlerRequest, Promise<Response | {
|
package/h3.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
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
|
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
|
|
6
9
|
handler: h3.EventHandler<h3.EventHandlerRequest, Promise<Response | {
|
package/h3.js
CHANGED
|
@@ -1944,6 +1944,216 @@ var WorkflowApi = class extends BaseWorkflowApi {
|
|
|
1944
1944
|
}
|
|
1945
1945
|
};
|
|
1946
1946
|
|
|
1947
|
+
// src/agents/adapters.ts
|
|
1948
|
+
var import_openai2 = require("@ai-sdk/openai");
|
|
1949
|
+
var import_ai = require("ai");
|
|
1950
|
+
var AGENT_NAME_HEADER = "upstash-agent-name";
|
|
1951
|
+
var createWorkflowOpenAI = (context) => {
|
|
1952
|
+
return (0, import_openai2.createOpenAI)({
|
|
1953
|
+
compatibility: "strict",
|
|
1954
|
+
fetch: async (input, init) => {
|
|
1955
|
+
try {
|
|
1956
|
+
const headers = init?.headers ? Object.fromEntries(new Headers(init.headers).entries()) : {};
|
|
1957
|
+
const body = init?.body ? JSON.parse(init.body) : void 0;
|
|
1958
|
+
const agentName = headers[AGENT_NAME_HEADER];
|
|
1959
|
+
const stepName = agentName ? `Call Agent ${agentName}` : "Call Agent";
|
|
1960
|
+
const responseInfo = await context.call(stepName, {
|
|
1961
|
+
url: input.toString(),
|
|
1962
|
+
method: init?.method,
|
|
1963
|
+
headers,
|
|
1964
|
+
body
|
|
1965
|
+
});
|
|
1966
|
+
const responseHeaders = new Headers(
|
|
1967
|
+
Object.entries(responseInfo.header).reduce(
|
|
1968
|
+
(acc, [key, values]) => {
|
|
1969
|
+
acc[key] = values.join(", ");
|
|
1970
|
+
return acc;
|
|
1971
|
+
},
|
|
1972
|
+
{}
|
|
1973
|
+
)
|
|
1974
|
+
);
|
|
1975
|
+
return new Response(JSON.stringify(responseInfo.body), {
|
|
1976
|
+
status: responseInfo.status,
|
|
1977
|
+
headers: responseHeaders
|
|
1978
|
+
});
|
|
1979
|
+
} catch (error) {
|
|
1980
|
+
if (error instanceof Error && error.name === "WorkflowAbort") {
|
|
1981
|
+
throw error;
|
|
1982
|
+
} else {
|
|
1983
|
+
console.error("Error in fetch implementation:", error);
|
|
1984
|
+
throw error;
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
});
|
|
1989
|
+
};
|
|
1990
|
+
var wrapTools = ({
|
|
1991
|
+
context,
|
|
1992
|
+
tools
|
|
1993
|
+
}) => {
|
|
1994
|
+
return Object.fromEntries(
|
|
1995
|
+
Object.entries(tools).map((toolInfo) => {
|
|
1996
|
+
const [toolName, tool3] = toolInfo;
|
|
1997
|
+
const aiSDKTool = convertToAISDKTool(tool3);
|
|
1998
|
+
const execute = aiSDKTool.execute;
|
|
1999
|
+
if (execute) {
|
|
2000
|
+
const wrappedExecute = (...params) => {
|
|
2001
|
+
return context.run(`Run tool ${toolName}`, () => execute(...params));
|
|
2002
|
+
};
|
|
2003
|
+
aiSDKTool.execute = wrappedExecute;
|
|
2004
|
+
}
|
|
2005
|
+
return [toolName, aiSDKTool];
|
|
2006
|
+
})
|
|
2007
|
+
);
|
|
2008
|
+
};
|
|
2009
|
+
var convertToAISDKTool = (tool3) => {
|
|
2010
|
+
const isLangchainTool = "invoke" in tool3;
|
|
2011
|
+
return isLangchainTool ? convertLangchainTool(tool3) : tool3;
|
|
2012
|
+
};
|
|
2013
|
+
var convertLangchainTool = (langchainTool) => {
|
|
2014
|
+
return (0, import_ai.tool)({
|
|
2015
|
+
description: langchainTool.description,
|
|
2016
|
+
parameters: langchainTool.schema,
|
|
2017
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2018
|
+
execute: async (param) => langchainTool.invoke(param)
|
|
2019
|
+
});
|
|
2020
|
+
};
|
|
2021
|
+
|
|
2022
|
+
// src/agents/agent.ts
|
|
2023
|
+
var import_zod = require("zod");
|
|
2024
|
+
var import_ai2 = require("ai");
|
|
2025
|
+
var Agent = class {
|
|
2026
|
+
name;
|
|
2027
|
+
tools;
|
|
2028
|
+
maxSteps;
|
|
2029
|
+
background;
|
|
2030
|
+
model;
|
|
2031
|
+
constructor({ tools, maxSteps, background, name, model }) {
|
|
2032
|
+
this.name = name;
|
|
2033
|
+
this.tools = tools ?? {};
|
|
2034
|
+
this.maxSteps = maxSteps;
|
|
2035
|
+
this.background = background;
|
|
2036
|
+
this.model = model;
|
|
2037
|
+
}
|
|
2038
|
+
async call({ prompt }) {
|
|
2039
|
+
try {
|
|
2040
|
+
return await (0, import_ai2.generateText)({
|
|
2041
|
+
model: this.model,
|
|
2042
|
+
tools: this.tools,
|
|
2043
|
+
maxSteps: this.maxSteps,
|
|
2044
|
+
system: this.background,
|
|
2045
|
+
prompt,
|
|
2046
|
+
headers: {
|
|
2047
|
+
[AGENT_NAME_HEADER]: this.name
|
|
2048
|
+
}
|
|
2049
|
+
});
|
|
2050
|
+
} catch (error) {
|
|
2051
|
+
if (error instanceof import_ai2.ToolExecutionError) {
|
|
2052
|
+
if (error.cause instanceof Error && error.cause.name === "WorkflowAbort") {
|
|
2053
|
+
throw error.cause;
|
|
2054
|
+
} else if (error.cause instanceof import_ai2.ToolExecutionError && error.cause.cause instanceof Error && error.cause.cause.name === "WorkflowAbort") {
|
|
2055
|
+
throw error.cause.cause;
|
|
2056
|
+
} else {
|
|
2057
|
+
throw error;
|
|
2058
|
+
}
|
|
2059
|
+
} else {
|
|
2060
|
+
throw error;
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
asTool() {
|
|
2065
|
+
const toolDescriptions = Object.values(this.tools).map((tool3) => tool3.description).join("\n");
|
|
2066
|
+
return (0, import_ai2.tool)({
|
|
2067
|
+
parameters: import_zod.z.object({ prompt: import_zod.z.string() }),
|
|
2068
|
+
execute: async ({ prompt }) => {
|
|
2069
|
+
return await this.call({ prompt });
|
|
2070
|
+
},
|
|
2071
|
+
description: `An AI Agent with the following background: ${this.background}Has access to the following tools: ${toolDescriptions}`
|
|
2072
|
+
});
|
|
2073
|
+
}
|
|
2074
|
+
};
|
|
2075
|
+
var MANAGER_AGENT_PROMPT = `You are an AI agent who orchestrates other AI Agents.
|
|
2076
|
+
These other agents have tools available to them.
|
|
2077
|
+
Given a prompt, utilize these agents to address requests.
|
|
2078
|
+
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.
|
|
2079
|
+
`;
|
|
2080
|
+
var ManagerAgent = class extends Agent {
|
|
2081
|
+
agents;
|
|
2082
|
+
constructor({
|
|
2083
|
+
maxSteps,
|
|
2084
|
+
background = MANAGER_AGENT_PROMPT,
|
|
2085
|
+
agents,
|
|
2086
|
+
model,
|
|
2087
|
+
name = "manager llm"
|
|
2088
|
+
}) {
|
|
2089
|
+
super({
|
|
2090
|
+
background,
|
|
2091
|
+
maxSteps,
|
|
2092
|
+
tools: Object.fromEntries(agents.map((agent) => [agent.name, agent.asTool()])),
|
|
2093
|
+
name,
|
|
2094
|
+
model
|
|
2095
|
+
});
|
|
2096
|
+
this.agents = agents;
|
|
2097
|
+
}
|
|
2098
|
+
};
|
|
2099
|
+
|
|
2100
|
+
// src/agents/task.ts
|
|
2101
|
+
var Task = class {
|
|
2102
|
+
context;
|
|
2103
|
+
taskParameters;
|
|
2104
|
+
constructor({
|
|
2105
|
+
context,
|
|
2106
|
+
taskParameters
|
|
2107
|
+
}) {
|
|
2108
|
+
this.context = context;
|
|
2109
|
+
this.taskParameters = taskParameters;
|
|
2110
|
+
}
|
|
2111
|
+
async run() {
|
|
2112
|
+
const { prompt, ...otherParams } = this.taskParameters;
|
|
2113
|
+
const safePrompt = await this.context.run("Get Prompt", () => prompt);
|
|
2114
|
+
if ("agent" in otherParams) {
|
|
2115
|
+
const agent = otherParams.agent;
|
|
2116
|
+
const result = await agent.call({
|
|
2117
|
+
prompt: safePrompt
|
|
2118
|
+
});
|
|
2119
|
+
return { text: result.text };
|
|
2120
|
+
} else {
|
|
2121
|
+
const { agents, maxSteps, model, background } = otherParams;
|
|
2122
|
+
const managerAgent = new ManagerAgent({
|
|
2123
|
+
model,
|
|
2124
|
+
maxSteps,
|
|
2125
|
+
agents,
|
|
2126
|
+
name: "Manager LLM",
|
|
2127
|
+
background
|
|
2128
|
+
});
|
|
2129
|
+
const result = await managerAgent.call({ prompt: safePrompt });
|
|
2130
|
+
return { text: result.text };
|
|
2131
|
+
}
|
|
2132
|
+
}
|
|
2133
|
+
};
|
|
2134
|
+
|
|
2135
|
+
// src/agents/index.ts
|
|
2136
|
+
var WorkflowAgents = class {
|
|
2137
|
+
context;
|
|
2138
|
+
constructor({ context }) {
|
|
2139
|
+
this.context = context;
|
|
2140
|
+
}
|
|
2141
|
+
agent(params) {
|
|
2142
|
+
const wrappedTools = wrapTools({ context: this.context, tools: params.tools });
|
|
2143
|
+
return new Agent({
|
|
2144
|
+
...params,
|
|
2145
|
+
tools: wrappedTools
|
|
2146
|
+
});
|
|
2147
|
+
}
|
|
2148
|
+
task(taskParameters) {
|
|
2149
|
+
return new Task({ context: this.context, taskParameters });
|
|
2150
|
+
}
|
|
2151
|
+
openai(...params) {
|
|
2152
|
+
const openai2 = createWorkflowOpenAI(this.context);
|
|
2153
|
+
return openai2(...params);
|
|
2154
|
+
}
|
|
2155
|
+
};
|
|
2156
|
+
|
|
1947
2157
|
// src/context/context.ts
|
|
1948
2158
|
var WorkflowContext = class {
|
|
1949
2159
|
executor;
|
|
@@ -2329,6 +2539,11 @@ var WorkflowContext = class {
|
|
|
2329
2539
|
context: this
|
|
2330
2540
|
});
|
|
2331
2541
|
}
|
|
2542
|
+
get agents() {
|
|
2543
|
+
return new WorkflowAgents({
|
|
2544
|
+
context: this
|
|
2545
|
+
});
|
|
2546
|
+
}
|
|
2332
2547
|
};
|
|
2333
2548
|
|
|
2334
2549
|
// src/logger.ts
|
|
@@ -2533,6 +2748,7 @@ var checkIfLastOneIsDuplicate = async (steps, debug) => {
|
|
|
2533
2748
|
if (step.stepId === lastStepId && step.targetStep === lastTargetStepId) {
|
|
2534
2749
|
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.`;
|
|
2535
2750
|
await debug?.log("WARN", "RESPONSE_DEFAULT", message);
|
|
2751
|
+
console.log(steps);
|
|
2536
2752
|
console.warn(message);
|
|
2537
2753
|
return true;
|
|
2538
2754
|
}
|
package/h3.mjs
CHANGED
package/hono.d.mts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Context } from 'hono';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions } from './types-BEyIoCRe.mjs';
|
|
3
3
|
import { Variables } from 'hono/types';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
|
+
import 'ai';
|
|
6
|
+
import '@ai-sdk/openai';
|
|
7
|
+
import 'langchain/tools';
|
|
5
8
|
|
|
6
9
|
type WorkflowBindings = {
|
|
7
10
|
QSTASH_TOKEN: string;
|
package/hono.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Context } from 'hono';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions } from './types-BEyIoCRe.js';
|
|
3
3
|
import { Variables } from 'hono/types';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
|
+
import 'ai';
|
|
6
|
+
import '@ai-sdk/openai';
|
|
7
|
+
import 'langchain/tools';
|
|
5
8
|
|
|
6
9
|
type WorkflowBindings = {
|
|
7
10
|
QSTASH_TOKEN: string;
|