@cogitator-ai/worker 0.3.20 → 0.5.0
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/README.md +141 -55
- package/dist/connection.d.ts +29 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +63 -0
- package/dist/connection.js.map +1 -0
- package/dist/distributed-swarm-worker.d.ts +56 -0
- package/dist/distributed-swarm-worker.d.ts.map +1 -0
- package/dist/distributed-swarm-worker.js +151 -0
- package/dist/distributed-swarm-worker.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +22 -15
- package/dist/metrics.js.map +1 -1
- package/dist/processors/agent.d.ts +12 -2
- package/dist/processors/agent.d.ts.map +1 -1
- package/dist/processors/agent.js +25 -23
- package/dist/processors/agent.js.map +1 -1
- package/dist/processors/index.d.ts +3 -3
- package/dist/processors/index.d.ts.map +1 -1
- package/dist/processors/index.js +3 -3
- package/dist/processors/index.js.map +1 -1
- package/dist/processors/shared.d.ts +26 -3
- package/dist/processors/shared.d.ts.map +1 -1
- package/dist/processors/shared.js +38 -25
- package/dist/processors/shared.js.map +1 -1
- package/dist/processors/swarm-agent.d.ts +25 -4
- package/dist/processors/swarm-agent.d.ts.map +1 -1
- package/dist/processors/swarm-agent.js +33 -47
- package/dist/processors/swarm-agent.js.map +1 -1
- package/dist/processors/swarm.d.ts +7 -2
- package/dist/processors/swarm.d.ts.map +1 -1
- package/dist/processors/swarm.js +75 -50
- package/dist/processors/swarm.js.map +1 -1
- package/dist/processors/workflow.d.ts +21 -5
- package/dist/processors/workflow.d.ts.map +1 -1
- package/dist/processors/workflow.js +304 -8
- package/dist/processors/workflow.js.map +1 -1
- package/dist/queue.d.ts +6 -5
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +16 -19
- package/dist/queue.js.map +1 -1
- package/dist/types.d.ts +58 -33
- package/dist/types.d.ts.map +1 -1
- package/dist/worker.d.ts +10 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +62 -24
- package/dist/worker.js.map +1 -1
- package/package.json +16 -13
package/dist/processors/swarm.js
CHANGED
|
@@ -3,64 +3,89 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Recreates a Swarm from serialized config and executes it.
|
|
5
5
|
*/
|
|
6
|
-
import { Cogitator, Agent } from '@cogitator-ai/core';
|
|
7
6
|
import { Swarm } from '@cogitator-ai/swarms';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
function getStrategyType(topology) {
|
|
21
|
-
switch (topology) {
|
|
7
|
+
import { createAgentFromConfig, resolveCogitator } from './shared.js';
|
|
8
|
+
const DEFAULT_MAX_ROUNDS = 3;
|
|
9
|
+
/**
|
|
10
|
+
* Translate a serialized swarm topology into a full swarm configuration.
|
|
11
|
+
*/
|
|
12
|
+
export function buildSwarmConfig(serialized, runtime, name = `worker-swarm-${Date.now()}`) {
|
|
13
|
+
const create = (agent) => createAgentFromConfig(agent, runtime);
|
|
14
|
+
const agents = serialized.agents.map(create);
|
|
15
|
+
const coordinator = serialized.coordinator ? create(serialized.coordinator) : undefined;
|
|
16
|
+
const maxRounds = serialized.maxRounds ?? DEFAULT_MAX_ROUNDS;
|
|
17
|
+
switch (serialized.topology) {
|
|
22
18
|
case 'sequential':
|
|
23
|
-
return
|
|
19
|
+
return {
|
|
20
|
+
name,
|
|
21
|
+
strategy: 'pipeline',
|
|
22
|
+
pipeline: { stages: agents.map((agent) => ({ name: agent.name, agent })) },
|
|
23
|
+
};
|
|
24
24
|
case 'hierarchical':
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (!coordinator) {
|
|
26
|
+
throw new Error("Swarm topology 'hierarchical' requires a coordinator agent");
|
|
27
|
+
}
|
|
28
|
+
return { name, strategy: 'hierarchical', supervisor: coordinator, workers: agents };
|
|
28
29
|
case 'debate':
|
|
29
|
-
return
|
|
30
|
+
return {
|
|
31
|
+
name,
|
|
32
|
+
strategy: 'debate',
|
|
33
|
+
agents,
|
|
34
|
+
moderator: coordinator,
|
|
35
|
+
debate: { rounds: maxRounds },
|
|
36
|
+
};
|
|
30
37
|
case 'voting':
|
|
31
|
-
return
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
return {
|
|
39
|
+
name,
|
|
40
|
+
strategy: 'consensus',
|
|
41
|
+
agents,
|
|
42
|
+
supervisor: coordinator,
|
|
43
|
+
consensus: {
|
|
44
|
+
threshold: serialized.consensusThreshold ?? 0.5,
|
|
45
|
+
maxRounds,
|
|
46
|
+
resolution: 'majority',
|
|
47
|
+
onNoConsensus: coordinator ? 'supervisor-decides' : 'escalate',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
case 'collaborative':
|
|
51
|
+
return { name, strategy: 'round-robin', agents };
|
|
52
|
+
default: {
|
|
53
|
+
const exhaustive = serialized.topology;
|
|
54
|
+
throw new Error(`Unknown swarm topology: ${String(exhaustive)}`);
|
|
55
|
+
}
|
|
34
56
|
}
|
|
35
57
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
};
|
|
46
|
-
const swarm = new Swarm(cogitator, config);
|
|
47
|
-
const result = await swarm.run({
|
|
48
|
-
input,
|
|
49
|
-
});
|
|
50
|
-
const agentOutputs = [];
|
|
51
|
-
if (result.agentResults) {
|
|
52
|
-
for (const [agentId, runResult] of result.agentResults) {
|
|
53
|
-
agentOutputs.push({
|
|
54
|
-
agent: agentId,
|
|
55
|
-
output: runResult.output,
|
|
56
|
-
});
|
|
58
|
+
function countRounds(config, votes) {
|
|
59
|
+
if (config.strategy === 'debate')
|
|
60
|
+
return config.debate?.rounds ?? 1;
|
|
61
|
+
if (config.strategy === 'consensus' && votes) {
|
|
62
|
+
const rounds = new Set();
|
|
63
|
+
for (const key of votes.keys()) {
|
|
64
|
+
const match = /_round(\d+)$/.exec(key);
|
|
65
|
+
if (match)
|
|
66
|
+
rounds.add(Number(match[1]));
|
|
57
67
|
}
|
|
68
|
+
return Math.max(rounds.size, 1);
|
|
69
|
+
}
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
export async function processSwarmJob(payload, runtime = {}) {
|
|
73
|
+
const config = buildSwarmConfig(payload.swarmConfig, runtime, `worker-swarm-${payload.jobId}`);
|
|
74
|
+
const swarm = new Swarm(resolveCogitator(runtime), config);
|
|
75
|
+
try {
|
|
76
|
+
const result = await swarm.run({ input: payload.input });
|
|
77
|
+
return {
|
|
78
|
+
type: 'swarm',
|
|
79
|
+
output: typeof result.output === 'string' ? result.output : JSON.stringify(result.output),
|
|
80
|
+
rounds: countRounds(config, result.votes),
|
|
81
|
+
agentOutputs: Array.from(result.agentResults, ([agent, runResult]) => ({
|
|
82
|
+
agent,
|
|
83
|
+
output: runResult.output,
|
|
84
|
+
})),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await swarm.close();
|
|
58
89
|
}
|
|
59
|
-
return {
|
|
60
|
-
type: 'swarm',
|
|
61
|
-
output: String(result.output ?? ''),
|
|
62
|
-
rounds: 1,
|
|
63
|
-
agentOutputs,
|
|
64
|
-
};
|
|
65
90
|
}
|
|
66
91
|
//# sourceMappingURL=swarm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/processors/swarm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/processors/swarm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Workflow job processor
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Executes a serialized workflow graph as a DAG over a shared state object. Nodes run as
|
|
5
|
+
* soon as all of their predecessors have settled; independent branches run concurrently.
|
|
6
|
+
* Condition nodes activate their `'true'` or `'false'` outgoing edges; nodes reachable only
|
|
7
|
+
* through inactive edges are skipped.
|
|
7
8
|
*/
|
|
8
|
-
import type { WorkflowJobPayload, WorkflowJobResult } from '../types.js';
|
|
9
|
-
|
|
9
|
+
import type { SerializedWorkflow, WorkerRuntime, WorkflowJobPayload, WorkflowJobResult } from '../types.js';
|
|
10
|
+
type WorkflowState = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Read a dot-separated path from the workflow state.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readStatePath(state: WorkflowState, path: string): unknown;
|
|
15
|
+
/**
|
|
16
|
+
* Render `{{path}}` placeholders against the workflow state.
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderTemplate(template: string, state: WorkflowState): string;
|
|
19
|
+
/**
|
|
20
|
+
* Check the graph before running anything: unique ids, known edge endpoints, branch labels
|
|
21
|
+
* only on condition nodes, valid node configs and no cycles.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateWorkflow(workflow: SerializedWorkflow): void;
|
|
24
|
+
export declare function processWorkflowJob(payload: WorkflowJobPayload, runtime?: WorkerRuntime): Promise<WorkflowJobResult>;
|
|
25
|
+
export {};
|
|
10
26
|
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/processors/workflow.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/processors/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAEV,kBAAkB,EAGlB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAGlB,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA2D7C;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOzE;AAOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAI7E;AAcD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAiEnE;AAyKD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAgB5B"}
|
|
@@ -1,13 +1,309 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Workflow job processor
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
* Executes a serialized workflow graph as a DAG over a shared state object. Nodes run as
|
|
5
|
+
* soon as all of their predecessors have settled; independent branches run concurrently.
|
|
6
|
+
* Condition nodes activate their `'true'` or `'false'` outgoing edges; nodes reachable only
|
|
7
|
+
* through inactive edges are skipped.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { createAgentFromConfig, resolveCogitator } from './shared.js';
|
|
11
|
+
const LLM_PROVIDERS = [
|
|
12
|
+
'ollama',
|
|
13
|
+
'openai',
|
|
14
|
+
'anthropic',
|
|
15
|
+
'google',
|
|
16
|
+
'azure',
|
|
17
|
+
'bedrock',
|
|
18
|
+
'vllm',
|
|
19
|
+
'mistral',
|
|
20
|
+
'groq',
|
|
21
|
+
'together',
|
|
22
|
+
'deepseek',
|
|
23
|
+
];
|
|
24
|
+
const serializedAgentSchema = z.object({
|
|
25
|
+
name: z.string().min(1),
|
|
26
|
+
instructions: z.string(),
|
|
27
|
+
model: z.string().min(1),
|
|
28
|
+
provider: z.enum(LLM_PROVIDERS),
|
|
29
|
+
temperature: z.number().optional(),
|
|
30
|
+
maxTokens: z.number().int().positive().optional(),
|
|
31
|
+
maxIterations: z.number().int().positive().optional(),
|
|
32
|
+
tools: z.array(z.object({
|
|
33
|
+
name: z.string(),
|
|
34
|
+
description: z.string(),
|
|
35
|
+
parameters: z.object({
|
|
36
|
+
type: z.literal('object'),
|
|
37
|
+
properties: z.record(z.string(), z.unknown()),
|
|
38
|
+
required: z.array(z.string()).optional(),
|
|
39
|
+
}),
|
|
40
|
+
})),
|
|
41
|
+
});
|
|
42
|
+
const agentNodeSchema = z.object({
|
|
43
|
+
agentConfig: serializedAgentSchema,
|
|
44
|
+
prompt: z.string().optional(),
|
|
45
|
+
outputKey: z.string().min(1).optional(),
|
|
46
|
+
});
|
|
47
|
+
const transformNodeSchema = z.object({
|
|
48
|
+
transform: z.enum(['uppercase', 'lowercase', 'trim', 'json-parse', 'json-stringify', 'template']),
|
|
49
|
+
inputKey: z.string().min(1).optional(),
|
|
50
|
+
outputKey: z.string().min(1).optional(),
|
|
51
|
+
template: z.string().optional(),
|
|
52
|
+
});
|
|
53
|
+
const conditionNodeSchema = z.object({
|
|
54
|
+
key: z.string().min(1),
|
|
55
|
+
operator: z.enum(['equals', 'not-equals', 'contains', 'exists', 'gt', 'lt']),
|
|
56
|
+
value: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Read a dot-separated path from the workflow state.
|
|
60
|
+
*/
|
|
61
|
+
export function readStatePath(state, path) {
|
|
62
|
+
let current = state;
|
|
63
|
+
for (const segment of path.split('.')) {
|
|
64
|
+
if (typeof current !== 'object' || current === null)
|
|
65
|
+
return undefined;
|
|
66
|
+
current = current[segment];
|
|
67
|
+
}
|
|
68
|
+
return current;
|
|
69
|
+
}
|
|
70
|
+
function stringifyValue(value) {
|
|
71
|
+
if (value === undefined || value === null)
|
|
72
|
+
return '';
|
|
73
|
+
return typeof value === 'string' ? value : JSON.stringify(value);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Render `{{path}}` placeholders against the workflow state.
|
|
77
|
+
*/
|
|
78
|
+
export function renderTemplate(template, state) {
|
|
79
|
+
return template.replace(/\{\{\s*([\w.-]+)\s*\}\}/g, (_match, path) => stringifyValue(readStatePath(state, path)));
|
|
80
|
+
}
|
|
81
|
+
function parseNodeConfig(node, schema) {
|
|
82
|
+
const parsed = schema.safeParse(node.config);
|
|
83
|
+
if (!parsed.success) {
|
|
84
|
+
throw new Error(`Invalid config for ${node.type} node '${node.id}': ${parsed.error.issues
|
|
85
|
+
.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`)
|
|
86
|
+
.join('; ')}`);
|
|
87
|
+
}
|
|
88
|
+
return parsed.data;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check the graph before running anything: unique ids, known edge endpoints, branch labels
|
|
92
|
+
* only on condition nodes, valid node configs and no cycles.
|
|
93
|
+
*/
|
|
94
|
+
export function validateWorkflow(workflow) {
|
|
95
|
+
const nodes = new Map();
|
|
96
|
+
for (const node of workflow.nodes) {
|
|
97
|
+
if (nodes.has(node.id)) {
|
|
98
|
+
throw new Error(`Duplicate workflow node id '${node.id}'`);
|
|
99
|
+
}
|
|
100
|
+
nodes.set(node.id, node);
|
|
101
|
+
}
|
|
102
|
+
for (const edge of workflow.edges) {
|
|
103
|
+
const from = nodes.get(edge.from);
|
|
104
|
+
if (!from)
|
|
105
|
+
throw new Error(`Edge references unknown node '${edge.from}'`);
|
|
106
|
+
if (!nodes.has(edge.to))
|
|
107
|
+
throw new Error(`Edge references unknown node '${edge.to}'`);
|
|
108
|
+
if (from.type === 'condition') {
|
|
109
|
+
if (edge.condition !== 'true' && edge.condition !== 'false') {
|
|
110
|
+
throw new Error(`Edges leaving condition node '${edge.from}' must set condition to 'true' or 'false'`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else if (edge.condition !== undefined) {
|
|
114
|
+
throw new Error(`Edge ${edge.from} -> ${edge.to} has a condition but '${edge.from}' is not a condition node`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
for (const node of workflow.nodes) {
|
|
118
|
+
switch (node.type) {
|
|
119
|
+
case 'agent':
|
|
120
|
+
parseNodeConfig(node, agentNodeSchema);
|
|
121
|
+
break;
|
|
122
|
+
case 'transform': {
|
|
123
|
+
const config = parseNodeConfig(node, transformNodeSchema);
|
|
124
|
+
if (config.transform === 'template' && config.template === undefined) {
|
|
125
|
+
throw new Error(`Transform node '${node.id}' uses 'template' but has no template`);
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case 'condition':
|
|
130
|
+
parseNodeConfig(node, conditionNodeSchema);
|
|
131
|
+
break;
|
|
132
|
+
case 'parallel':
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const indegree = new Map(workflow.nodes.map((n) => [n.id, 0]));
|
|
137
|
+
for (const edge of workflow.edges) {
|
|
138
|
+
indegree.set(edge.to, (indegree.get(edge.to) ?? 0) + 1);
|
|
139
|
+
}
|
|
140
|
+
const queue = workflow.nodes.filter((n) => indegree.get(n.id) === 0).map((n) => n.id);
|
|
141
|
+
let visited = 0;
|
|
142
|
+
while (queue.length > 0) {
|
|
143
|
+
const id = queue.shift();
|
|
144
|
+
visited++;
|
|
145
|
+
for (const edge of workflow.edges.filter((e) => e.from === id)) {
|
|
146
|
+
const remaining = (indegree.get(edge.to) ?? 0) - 1;
|
|
147
|
+
indegree.set(edge.to, remaining);
|
|
148
|
+
if (remaining === 0)
|
|
149
|
+
queue.push(edge.to);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (visited !== workflow.nodes.length) {
|
|
153
|
+
throw new Error(`Workflow '${workflow.name}' contains a cycle`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function evaluateCondition(config, state) {
|
|
157
|
+
const actual = readStatePath(state, config.key);
|
|
158
|
+
switch (config.operator) {
|
|
159
|
+
case 'exists':
|
|
160
|
+
return actual !== undefined && actual !== null;
|
|
161
|
+
case 'equals':
|
|
162
|
+
return actual === config.value;
|
|
163
|
+
case 'not-equals':
|
|
164
|
+
return actual !== config.value;
|
|
165
|
+
case 'contains':
|
|
166
|
+
if (typeof actual === 'string')
|
|
167
|
+
return actual.includes(stringifyValue(config.value));
|
|
168
|
+
if (Array.isArray(actual))
|
|
169
|
+
return actual.includes(config.value);
|
|
170
|
+
return false;
|
|
171
|
+
case 'gt':
|
|
172
|
+
return (typeof actual === 'number' && typeof config.value === 'number' && actual > config.value);
|
|
173
|
+
case 'lt':
|
|
174
|
+
return (typeof actual === 'number' && typeof config.value === 'number' && actual < config.value);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function applyTransform(config, input, state) {
|
|
178
|
+
switch (config.transform) {
|
|
179
|
+
case 'uppercase':
|
|
180
|
+
return stringifyValue(input).toUpperCase();
|
|
181
|
+
case 'lowercase':
|
|
182
|
+
return stringifyValue(input).toLowerCase();
|
|
183
|
+
case 'trim':
|
|
184
|
+
return stringifyValue(input).trim();
|
|
185
|
+
case 'json-parse':
|
|
186
|
+
if (typeof input !== 'string')
|
|
187
|
+
return input;
|
|
188
|
+
try {
|
|
189
|
+
return JSON.parse(input);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
throw new Error('json-parse transform received invalid JSON');
|
|
193
|
+
}
|
|
194
|
+
case 'json-stringify':
|
|
195
|
+
return JSON.stringify(input);
|
|
196
|
+
case 'template':
|
|
197
|
+
return renderTemplate(config.template ?? '', state);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
class WorkflowRun {
|
|
201
|
+
workflow;
|
|
202
|
+
runtime;
|
|
203
|
+
nodes;
|
|
204
|
+
outcomes = new Map();
|
|
205
|
+
outputKeys = new Map();
|
|
206
|
+
state;
|
|
207
|
+
constructor(workflow, input, runtime) {
|
|
208
|
+
this.workflow = workflow;
|
|
209
|
+
this.runtime = runtime;
|
|
210
|
+
this.nodes = new Map(workflow.nodes.map((n) => [n.id, n]));
|
|
211
|
+
this.state = { ...input };
|
|
212
|
+
}
|
|
213
|
+
async execute() {
|
|
214
|
+
const pending = new Set(this.nodes.keys());
|
|
215
|
+
const running = new Map();
|
|
216
|
+
while (pending.size > 0 || running.size > 0) {
|
|
217
|
+
for (const id of [...pending]) {
|
|
218
|
+
const incoming = this.workflow.edges.filter((e) => e.to === id);
|
|
219
|
+
if (!incoming.every((e) => this.outcomes.has(e.from)))
|
|
220
|
+
continue;
|
|
221
|
+
pending.delete(id);
|
|
222
|
+
const active = incoming.length === 0 || incoming.some((e) => this.isEdgeActive(e));
|
|
223
|
+
if (!active) {
|
|
224
|
+
this.outcomes.set(id, { status: 'skipped' });
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
running.set(id, this.runNode(this.nodes.get(id), incoming).then((outcome) => {
|
|
228
|
+
this.outcomes.set(id, outcome);
|
|
229
|
+
running.delete(id);
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
if (running.size > 0) {
|
|
233
|
+
await Promise.race(running.values());
|
|
234
|
+
}
|
|
235
|
+
else if (pending.size > 0 && ![...pending].some((id) => this.isReady(id))) {
|
|
236
|
+
throw new Error(`Workflow '${this.workflow.name}' cannot make progress`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const nodeResults = {};
|
|
240
|
+
for (const [id, outcome] of this.outcomes) {
|
|
241
|
+
nodeResults[id] = outcome.status === 'completed' ? outcome.output : { skipped: true };
|
|
242
|
+
}
|
|
243
|
+
return { state: this.state, nodeResults };
|
|
244
|
+
}
|
|
245
|
+
isReady(id) {
|
|
246
|
+
return this.workflow.edges.filter((e) => e.to === id).every((e) => this.outcomes.has(e.from));
|
|
247
|
+
}
|
|
248
|
+
isEdgeActive(edge) {
|
|
249
|
+
const outcome = this.outcomes.get(edge.from);
|
|
250
|
+
if (outcome?.status !== 'completed')
|
|
251
|
+
return false;
|
|
252
|
+
return outcome.branch === undefined || outcome.branch === edge.condition;
|
|
253
|
+
}
|
|
254
|
+
previousOutput(incoming) {
|
|
255
|
+
for (const edge of incoming) {
|
|
256
|
+
if (!this.isEdgeActive(edge))
|
|
257
|
+
continue;
|
|
258
|
+
const key = this.outputKeys.get(edge.from);
|
|
259
|
+
if (key !== undefined)
|
|
260
|
+
return this.state[key];
|
|
261
|
+
}
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
async runNode(node, incoming) {
|
|
265
|
+
switch (node.type) {
|
|
266
|
+
case 'agent': {
|
|
267
|
+
const config = parseNodeConfig(node, agentNodeSchema);
|
|
268
|
+
const agent = createAgentFromConfig(config.agentConfig, this.runtime);
|
|
269
|
+
const prompt = config.prompt
|
|
270
|
+
? renderTemplate(config.prompt, this.state)
|
|
271
|
+
: JSON.stringify(this.state);
|
|
272
|
+
const result = await resolveCogitator(this.runtime).run(agent, { input: prompt });
|
|
273
|
+
return this.store(node.id, config.outputKey, result.output);
|
|
274
|
+
}
|
|
275
|
+
case 'transform': {
|
|
276
|
+
const config = parseNodeConfig(node, transformNodeSchema);
|
|
277
|
+
const input = config.inputKey !== undefined
|
|
278
|
+
? readStatePath(this.state, config.inputKey)
|
|
279
|
+
: this.previousOutput(incoming);
|
|
280
|
+
return this.store(node.id, config.outputKey, applyTransform(config, input, this.state));
|
|
281
|
+
}
|
|
282
|
+
case 'condition': {
|
|
283
|
+
const config = parseNodeConfig(node, conditionNodeSchema);
|
|
284
|
+
const passed = evaluateCondition(config, this.state);
|
|
285
|
+
return { status: 'completed', output: passed, branch: passed ? 'true' : 'false' };
|
|
286
|
+
}
|
|
287
|
+
case 'parallel':
|
|
288
|
+
return { status: 'completed', output: null };
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
store(nodeId, outputKey, value) {
|
|
292
|
+
const key = outputKey ?? nodeId;
|
|
293
|
+
this.state[key] = value;
|
|
294
|
+
this.outputKeys.set(nodeId, key);
|
|
295
|
+
return { status: 'completed', output: value };
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
export async function processWorkflowJob(payload, runtime = {}) {
|
|
299
|
+
const started = Date.now();
|
|
300
|
+
validateWorkflow(payload.workflowConfig);
|
|
301
|
+
const { state, nodeResults } = await new WorkflowRun(payload.workflowConfig, payload.input, runtime).execute();
|
|
302
|
+
return {
|
|
303
|
+
type: 'workflow',
|
|
304
|
+
output: state,
|
|
305
|
+
nodeResults,
|
|
306
|
+
duration: Date.now() - started,
|
|
307
|
+
};
|
|
12
308
|
}
|
|
13
309
|
//# sourceMappingURL=workflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/processors/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAA4B;IACnE,MAAM,IAAI,KAAK,CACb,kDAAkD;QAChD,uFAAuF;QACvF,sCAAsC,CACzC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/processors/workflow.ts"],"names":[],"mappings":"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"}
|
package/dist/queue.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { Queue, type Job } from 'bullmq';
|
|
|
11
11
|
import type { QueueConfig, QueueMetrics, JobPayload, AgentJobPayload, WorkflowJobPayload, SwarmJobPayload, SwarmAgentJobPayload, SerializedAgent, SerializedWorkflow, SerializedSwarm } from './types.js';
|
|
12
12
|
export declare class JobQueue {
|
|
13
13
|
private queue;
|
|
14
|
+
private connection;
|
|
14
15
|
constructor(config: QueueConfig);
|
|
15
16
|
/**
|
|
16
17
|
* Add an agent execution job to the queue
|
|
@@ -44,13 +45,13 @@ export declare class JobQueue {
|
|
|
44
45
|
*/
|
|
45
46
|
addSwarmAgentJob(swarmId: string, agentName: string, agentConfig: SerializedAgent, input: string, options?: {
|
|
46
47
|
context?: Record<string, unknown>;
|
|
47
|
-
stateKeys?:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
};
|
|
48
|
+
stateKeys?: SwarmAgentJobPayload['stateKeys'];
|
|
49
|
+
runOptions?: SwarmAgentJobPayload['runOptions'];
|
|
50
|
+
/** Key prefix used by the swarm's Redis state (default: 'swarm') */
|
|
51
|
+
keyPrefix?: string;
|
|
52
52
|
priority?: number;
|
|
53
53
|
delay?: number;
|
|
54
|
+
/** Agent run timeout in ms (shorthand for `runOptions.timeout`) */
|
|
54
55
|
timeout?: number;
|
|
55
56
|
}): Promise<Job<SwarmAgentJobPayload>>;
|
|
56
57
|
/**
|
package/dist/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,eAAe,EAChB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
|