@cogitator-ai/worker 0.3.20 → 0.4.1
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 +6 -5
package/dist/queue.js
CHANGED
|
@@ -9,24 +9,15 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { Queue } from 'bullmq';
|
|
11
11
|
import { nanoid } from 'nanoid';
|
|
12
|
-
|
|
12
|
+
import { DEFAULT_QUEUE_NAME, createBullConnection, queuePrefix, } from './connection.js';
|
|
13
13
|
export class JobQueue {
|
|
14
14
|
queue;
|
|
15
|
+
connection;
|
|
15
16
|
constructor(config) {
|
|
16
|
-
|
|
17
|
-
? {
|
|
18
|
-
host: config.redis.cluster.nodes[0]?.host ?? 'localhost',
|
|
19
|
-
port: config.redis.cluster.nodes[0]?.port ?? 6379,
|
|
20
|
-
password: config.redis.password,
|
|
21
|
-
}
|
|
22
|
-
: {
|
|
23
|
-
host: config.redis.host ?? 'localhost',
|
|
24
|
-
port: config.redis.port ?? 6379,
|
|
25
|
-
password: config.redis.password,
|
|
26
|
-
};
|
|
17
|
+
this.connection = createBullConnection(config.redis);
|
|
27
18
|
this.queue = new Queue(config.name ?? DEFAULT_QUEUE_NAME, {
|
|
28
|
-
connection,
|
|
29
|
-
prefix: config.redis
|
|
19
|
+
connection: this.connection.connection,
|
|
20
|
+
prefix: queuePrefix(config.redis),
|
|
30
21
|
defaultJobOptions: {
|
|
31
22
|
attempts: config.defaultJobOptions?.attempts ?? 3,
|
|
32
23
|
backoff: config.defaultJobOptions?.backoff ?? {
|
|
@@ -102,6 +93,7 @@ export class JobQueue {
|
|
|
102
93
|
*/
|
|
103
94
|
async addSwarmAgentJob(swarmId, agentName, agentConfig, input, options) {
|
|
104
95
|
const jobId = nanoid();
|
|
96
|
+
const keyPrefix = options?.keyPrefix ?? 'swarm';
|
|
105
97
|
const payload = {
|
|
106
98
|
type: 'swarm-agent',
|
|
107
99
|
jobId,
|
|
@@ -110,10 +102,13 @@ export class JobQueue {
|
|
|
110
102
|
agentConfig,
|
|
111
103
|
input,
|
|
112
104
|
context: options?.context,
|
|
105
|
+
runOptions: options?.timeout !== undefined
|
|
106
|
+
? { ...options.runOptions, timeout: options.timeout }
|
|
107
|
+
: options?.runOptions,
|
|
113
108
|
stateKeys: options?.stateKeys ?? {
|
|
114
|
-
blackboard:
|
|
115
|
-
messages:
|
|
116
|
-
results:
|
|
109
|
+
blackboard: `${keyPrefix}:${swarmId}:blackboard`,
|
|
110
|
+
messages: `${keyPrefix}:${swarmId}:messages`,
|
|
111
|
+
results: `${keyPrefix}:${swarmId}:results`,
|
|
117
112
|
},
|
|
118
113
|
};
|
|
119
114
|
return this.queue.add('swarm-agent', payload, {
|
|
@@ -141,12 +136,13 @@ export class JobQueue {
|
|
|
141
136
|
* Get queue metrics for monitoring and HPA
|
|
142
137
|
*/
|
|
143
138
|
async getMetrics() {
|
|
144
|
-
const [waiting, active, completed, failed, delayed] = await Promise.all([
|
|
139
|
+
const [waiting, active, completed, failed, delayed, workerCount] = await Promise.all([
|
|
145
140
|
this.queue.getWaitingCount(),
|
|
146
141
|
this.queue.getActiveCount(),
|
|
147
142
|
this.queue.getCompletedCount(),
|
|
148
143
|
this.queue.getFailedCount(),
|
|
149
144
|
this.queue.getDelayedCount(),
|
|
145
|
+
this.queue.getWorkersCount(),
|
|
150
146
|
]);
|
|
151
147
|
return {
|
|
152
148
|
waiting,
|
|
@@ -155,7 +151,7 @@ export class JobQueue {
|
|
|
155
151
|
failed,
|
|
156
152
|
delayed,
|
|
157
153
|
depth: waiting + delayed,
|
|
158
|
-
workerCount
|
|
154
|
+
workerCount,
|
|
159
155
|
};
|
|
160
156
|
}
|
|
161
157
|
/**
|
|
@@ -187,6 +183,7 @@ export class JobQueue {
|
|
|
187
183
|
*/
|
|
188
184
|
async close() {
|
|
189
185
|
await this.queue.close();
|
|
186
|
+
await this.connection.dispose();
|
|
190
187
|
}
|
|
191
188
|
}
|
|
192
189
|
//# sourceMappingURL=queue.js.map
|
package/dist/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAY,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Worker types for distributed job processing
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { Cogitator } from '@cogitator-ai/core';
|
|
5
|
+
import type { LLMProvider, Tool, ToolSchema } from '@cogitator-ai/types';
|
|
6
|
+
import type { SwarmAgentJobPayload as SwarmAgentJobContract, SwarmAgentJobResult as SwarmAgentJobResultContract } from '@cogitator-ai/swarms';
|
|
5
7
|
/**
|
|
6
8
|
* Serialized agent configuration for queue transport
|
|
7
9
|
* Tools are stored as schemas, recreated on worker side
|
|
@@ -9,14 +11,25 @@ import type { ToolSchema } from '@cogitator-ai/types';
|
|
|
9
11
|
export interface SerializedAgent {
|
|
10
12
|
name: string;
|
|
11
13
|
instructions: string;
|
|
14
|
+
/** Model name; may already carry a provider prefix (e.g. 'openai/gpt-4o') */
|
|
12
15
|
model: string;
|
|
13
|
-
|
|
16
|
+
/** Provider used when `model` has no provider prefix */
|
|
17
|
+
provider: LLMProvider;
|
|
14
18
|
temperature?: number;
|
|
15
19
|
maxTokens?: number;
|
|
20
|
+
maxIterations?: number;
|
|
21
|
+
/** Tool schemas; tools are resolved by name from the worker's tool registry */
|
|
16
22
|
tools: ToolSchema[];
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
19
25
|
* Serialized workflow configuration
|
|
26
|
+
*
|
|
27
|
+
* Workflows run as a DAG over a shared state object (initialised from the job input).
|
|
28
|
+
* Node configs by type:
|
|
29
|
+
* - `agent`: {@link AgentNodeConfig}
|
|
30
|
+
* - `transform`: {@link TransformNodeConfig}
|
|
31
|
+
* - `condition`: {@link ConditionNodeConfig}; outgoing edges use `condition: 'true' | 'false'`
|
|
32
|
+
* - `parallel`: no config; a fan-out marker whose successors run concurrently
|
|
20
33
|
*/
|
|
21
34
|
export interface SerializedWorkflow {
|
|
22
35
|
id: string;
|
|
@@ -32,8 +45,33 @@ export interface SerializedWorkflowNode {
|
|
|
32
45
|
export interface SerializedWorkflowEdge {
|
|
33
46
|
from: string;
|
|
34
47
|
to: string;
|
|
48
|
+
/** Branch taken from a condition node: 'true' or 'false' */
|
|
35
49
|
condition?: string;
|
|
36
50
|
}
|
|
51
|
+
export interface AgentNodeConfig {
|
|
52
|
+
agentConfig: SerializedAgent;
|
|
53
|
+
/** Prompt template; `{{path}}` placeholders read from workflow state. Defaults to the state as JSON */
|
|
54
|
+
prompt?: string;
|
|
55
|
+
/** State key that receives the agent output (default: node id) */
|
|
56
|
+
outputKey?: string;
|
|
57
|
+
}
|
|
58
|
+
export type TransformOperation = 'uppercase' | 'lowercase' | 'trim' | 'json-parse' | 'json-stringify' | 'template';
|
|
59
|
+
export interface TransformNodeConfig {
|
|
60
|
+
transform: TransformOperation;
|
|
61
|
+
/** State path to read (default: the previous node's output key) */
|
|
62
|
+
inputKey?: string;
|
|
63
|
+
/** State key to write (default: node id) */
|
|
64
|
+
outputKey?: string;
|
|
65
|
+
/** Template used by the 'template' operation */
|
|
66
|
+
template?: string;
|
|
67
|
+
}
|
|
68
|
+
export type ConditionOperator = 'equals' | 'not-equals' | 'contains' | 'exists' | 'gt' | 'lt';
|
|
69
|
+
export interface ConditionNodeConfig {
|
|
70
|
+
/** State path to test */
|
|
71
|
+
key: string;
|
|
72
|
+
operator: ConditionOperator;
|
|
73
|
+
value?: string | number | boolean | null;
|
|
74
|
+
}
|
|
37
75
|
/**
|
|
38
76
|
* Serialized swarm configuration
|
|
39
77
|
*/
|
|
@@ -67,20 +105,10 @@ export interface SwarmJobPayload {
|
|
|
67
105
|
input: string;
|
|
68
106
|
metadata?: Record<string, unknown>;
|
|
69
107
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
agentName: string;
|
|
75
|
-
agentConfig: SerializedAgent;
|
|
76
|
-
input: string;
|
|
77
|
-
context?: Record<string, unknown>;
|
|
78
|
-
stateKeys: {
|
|
79
|
-
blackboard: string;
|
|
80
|
-
messages: string;
|
|
81
|
-
results: string;
|
|
82
|
-
};
|
|
83
|
-
}
|
|
108
|
+
/**
|
|
109
|
+
* Single agent turn of a distributed swarm (contract shared with `@cogitator-ai/swarms`)
|
|
110
|
+
*/
|
|
111
|
+
export type SwarmAgentJobPayload = SwarmAgentJobContract;
|
|
84
112
|
export type JobPayload = AgentJobPayload | WorkflowJobPayload | SwarmJobPayload | SwarmAgentJobPayload;
|
|
85
113
|
export interface AgentJobResult {
|
|
86
114
|
type: 'agent';
|
|
@@ -111,23 +139,8 @@ export interface SwarmJobResult {
|
|
|
111
139
|
output: string;
|
|
112
140
|
}[];
|
|
113
141
|
}
|
|
114
|
-
export interface SwarmAgentJobResult {
|
|
142
|
+
export interface SwarmAgentJobResult extends SwarmAgentJobResultContract {
|
|
115
143
|
type: 'swarm-agent';
|
|
116
|
-
swarmId: string;
|
|
117
|
-
agentName: string;
|
|
118
|
-
output: string;
|
|
119
|
-
structured?: unknown;
|
|
120
|
-
toolCalls: {
|
|
121
|
-
name: string;
|
|
122
|
-
input: unknown;
|
|
123
|
-
output: unknown;
|
|
124
|
-
}[];
|
|
125
|
-
tokenUsage: {
|
|
126
|
-
prompt: number;
|
|
127
|
-
completion: number;
|
|
128
|
-
total: number;
|
|
129
|
-
};
|
|
130
|
-
error?: string;
|
|
131
144
|
}
|
|
132
145
|
export type JobResult = AgentJobResult | WorkflowJobResult | SwarmJobResult | SwarmAgentJobResult;
|
|
133
146
|
export interface QueueConfig {
|
|
@@ -161,7 +174,19 @@ export interface QueueConfig {
|
|
|
161
174
|
removeOnFail?: boolean | number;
|
|
162
175
|
};
|
|
163
176
|
}
|
|
164
|
-
|
|
177
|
+
/**
|
|
178
|
+
* Runtime dependencies used to execute jobs on a worker
|
|
179
|
+
*/
|
|
180
|
+
export interface WorkerRuntime {
|
|
181
|
+
/** Cogitator used to run agents (provider keys, memory, etc). Default: `new Cogitator()` */
|
|
182
|
+
cogitator?: Cogitator;
|
|
183
|
+
/**
|
|
184
|
+
* Tool implementations available on this worker. Serialized agents reference tools by
|
|
185
|
+
* name; a job that needs a tool missing from this list fails.
|
|
186
|
+
*/
|
|
187
|
+
tools?: Tool[];
|
|
188
|
+
}
|
|
189
|
+
export interface WorkerConfig extends QueueConfig, WorkerRuntime {
|
|
165
190
|
/** Number of worker instances */
|
|
166
191
|
workerCount?: number;
|
|
167
192
|
/** Concurrent jobs per worker */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/worker.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Supports graceful shutdown and health monitoring.
|
|
6
6
|
*/
|
|
7
7
|
import type { WorkerConfig, JobPayload, JobResult, QueueMetrics } from './types.js';
|
|
8
|
+
import { MetricsCollector } from './metrics.js';
|
|
8
9
|
export interface WorkerPoolEvents {
|
|
9
10
|
onJobStarted?: (jobId: string, type: JobPayload['type']) => void;
|
|
10
11
|
onJobCompleted?: (jobId: string, result: JobResult) => void;
|
|
@@ -13,9 +14,14 @@ export interface WorkerPoolEvents {
|
|
|
13
14
|
}
|
|
14
15
|
export declare class WorkerPool {
|
|
15
16
|
private workers;
|
|
17
|
+
private connections;
|
|
16
18
|
private readonly config;
|
|
17
19
|
private readonly events;
|
|
20
|
+
private readonly runtime;
|
|
21
|
+
private publisher?;
|
|
18
22
|
private isRunning;
|
|
23
|
+
/** Job duration and per-type counters, ready for Prometheus exposition */
|
|
24
|
+
readonly metrics: MetricsCollector;
|
|
19
25
|
constructor(config: WorkerConfig, events?: WorkerPoolEvents);
|
|
20
26
|
/**
|
|
21
27
|
* Start the worker pool
|
|
@@ -25,6 +31,7 @@ export declare class WorkerPool {
|
|
|
25
31
|
* Process a job based on its type
|
|
26
32
|
*/
|
|
27
33
|
private processJob;
|
|
34
|
+
private getPublisher;
|
|
28
35
|
/**
|
|
29
36
|
* Get current worker count
|
|
30
37
|
*/
|
|
@@ -39,12 +46,14 @@ export declare class WorkerPool {
|
|
|
39
46
|
getMetrics(baseMetrics: Omit<QueueMetrics, 'workerCount'>): Promise<QueueMetrics>;
|
|
40
47
|
/**
|
|
41
48
|
* Graceful shutdown
|
|
42
|
-
* Waits for active jobs to complete
|
|
49
|
+
* Waits up to `timeout` ms for active jobs to complete, then force-closes the workers.
|
|
43
50
|
*/
|
|
44
51
|
stop(timeout?: number): Promise<void>;
|
|
45
52
|
/**
|
|
46
53
|
* Force shutdown without waiting for jobs
|
|
47
54
|
*/
|
|
48
55
|
forceStop(): Promise<void>;
|
|
56
|
+
private releaseConnections;
|
|
57
|
+
private closePublisher;
|
|
49
58
|
}
|
|
50
59
|
//# sourceMappingURL=worker.d.ts.map
|
package/dist/worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAiB,MAAM,SAAS,CAAC;AAKhG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAUhD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IACjE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACpD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,SAAS,CAAC,CAAc;IAChC,OAAO,CAAC,SAAS,CAAS;IAE1B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,mBAA0B;gBAE9B,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,gBAAqB;IAS/D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C5B;;OAEG;YACW,UAAU;IAuBxB,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAOvF;;;OAGG;IACG,IAAI,CAAC,OAAO,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAQlB,kBAAkB;YAOlB,cAAc;CAO7B"}
|
package/dist/worker.js
CHANGED
|
@@ -5,19 +5,30 @@
|
|
|
5
5
|
* Supports graceful shutdown and health monitoring.
|
|
6
6
|
*/
|
|
7
7
|
import { Worker } from 'bullmq';
|
|
8
|
+
import { Cogitator } from '@cogitator-ai/core';
|
|
8
9
|
import { processAgentJob } from './processors/agent.js';
|
|
9
10
|
import { processWorkflowJob } from './processors/workflow.js';
|
|
10
11
|
import { processSwarmJob } from './processors/swarm.js';
|
|
11
12
|
import { processSwarmAgentJob } from './processors/swarm-agent.js';
|
|
12
|
-
|
|
13
|
+
import { MetricsCollector } from './metrics.js';
|
|
14
|
+
import { DEFAULT_QUEUE_NAME, createBullConnection, createRedisClient, queuePrefix, } from './connection.js';
|
|
13
15
|
export class WorkerPool {
|
|
14
16
|
workers = [];
|
|
17
|
+
connections = [];
|
|
15
18
|
config;
|
|
16
19
|
events;
|
|
20
|
+
runtime;
|
|
21
|
+
publisher;
|
|
17
22
|
isRunning = false;
|
|
23
|
+
/** Job duration and per-type counters, ready for Prometheus exposition */
|
|
24
|
+
metrics = new MetricsCollector();
|
|
18
25
|
constructor(config, events = {}) {
|
|
19
26
|
this.config = config;
|
|
20
27
|
this.events = events;
|
|
28
|
+
this.runtime = {
|
|
29
|
+
cogitator: config.cogitator ?? new Cogitator(),
|
|
30
|
+
tools: config.tools ?? [],
|
|
31
|
+
};
|
|
21
32
|
}
|
|
22
33
|
/**
|
|
23
34
|
* Start the worker pool
|
|
@@ -27,26 +38,20 @@ export class WorkerPool {
|
|
|
27
38
|
return;
|
|
28
39
|
const workerCount = this.config.workerCount ?? 1;
|
|
29
40
|
const concurrency = this.config.concurrency ?? 5;
|
|
30
|
-
const connection = this.config.redis.cluster
|
|
31
|
-
? {
|
|
32
|
-
host: this.config.redis.cluster.nodes[0]?.host ?? 'localhost',
|
|
33
|
-
port: this.config.redis.cluster.nodes[0]?.port ?? 6379,
|
|
34
|
-
password: this.config.redis.password,
|
|
35
|
-
}
|
|
36
|
-
: {
|
|
37
|
-
host: this.config.redis.host ?? 'localhost',
|
|
38
|
-
port: this.config.redis.port ?? 6379,
|
|
39
|
-
password: this.config.redis.password,
|
|
40
|
-
};
|
|
41
41
|
for (let i = 0; i < workerCount; i++) {
|
|
42
|
+
const connection = createBullConnection(this.config.redis, { blocking: true });
|
|
43
|
+
this.connections.push(connection);
|
|
42
44
|
const worker = new Worker(this.config.name ?? DEFAULT_QUEUE_NAME, async (job) => this.processJob(job), {
|
|
43
|
-
connection,
|
|
44
|
-
prefix: this.config.redis
|
|
45
|
+
connection: connection.connection,
|
|
46
|
+
prefix: queuePrefix(this.config.redis),
|
|
45
47
|
concurrency,
|
|
46
48
|
lockDuration: this.config.lockDuration ?? 30000,
|
|
47
49
|
stalledInterval: this.config.stalledInterval ?? 30000,
|
|
48
50
|
});
|
|
49
51
|
worker.on('completed', (job, result) => {
|
|
52
|
+
if (job.processedOn !== undefined && job.finishedOn !== undefined) {
|
|
53
|
+
this.metrics.recordJob(job.data.type, job.finishedOn - job.processedOn);
|
|
54
|
+
}
|
|
50
55
|
this.events.onJobCompleted?.(job.id ?? job.data.jobId, result);
|
|
51
56
|
});
|
|
52
57
|
worker.on('failed', (job, error) => {
|
|
@@ -68,19 +73,27 @@ export class WorkerPool {
|
|
|
68
73
|
this.events.onJobStarted?.(job.id ?? job.data.jobId, job.data.type);
|
|
69
74
|
switch (job.data.type) {
|
|
70
75
|
case 'agent':
|
|
71
|
-
return processAgentJob(job.data);
|
|
76
|
+
return processAgentJob(job.data, this.runtime);
|
|
72
77
|
case 'workflow':
|
|
73
|
-
return processWorkflowJob(job.data);
|
|
78
|
+
return processWorkflowJob(job.data, this.runtime);
|
|
74
79
|
case 'swarm':
|
|
75
|
-
return processSwarmJob(job.data);
|
|
80
|
+
return processSwarmJob(job.data, this.runtime);
|
|
76
81
|
case 'swarm-agent':
|
|
77
|
-
return processSwarmAgentJob(job.data
|
|
82
|
+
return processSwarmAgentJob(job.data, {
|
|
83
|
+
...this.runtime,
|
|
84
|
+
publisher: this.getPublisher(),
|
|
85
|
+
isFinalAttempt: job.attemptsMade + 1 >= (job.opts.attempts ?? 1),
|
|
86
|
+
});
|
|
78
87
|
default: {
|
|
79
88
|
const _exhaustive = job.data;
|
|
80
89
|
throw new Error(`Unknown job type: ${_exhaustive.type}`);
|
|
81
90
|
}
|
|
82
91
|
}
|
|
83
92
|
}
|
|
93
|
+
getPublisher() {
|
|
94
|
+
this.publisher ??= createRedisClient(this.config.redis);
|
|
95
|
+
return this.publisher;
|
|
96
|
+
}
|
|
84
97
|
/**
|
|
85
98
|
* Get current worker count
|
|
86
99
|
*/
|
|
@@ -104,25 +117,50 @@ export class WorkerPool {
|
|
|
104
117
|
}
|
|
105
118
|
/**
|
|
106
119
|
* Graceful shutdown
|
|
107
|
-
* Waits for active jobs to complete
|
|
120
|
+
* Waits up to `timeout` ms for active jobs to complete, then force-closes the workers.
|
|
108
121
|
*/
|
|
109
122
|
async stop(timeout = 30000) {
|
|
110
123
|
if (!this.isRunning)
|
|
111
124
|
return;
|
|
112
125
|
this.isRunning = false;
|
|
113
|
-
|
|
114
|
-
Promise.all(this.workers.map((w) => w.close())),
|
|
115
|
-
new Promise((resolve) => setTimeout(resolve, timeout)),
|
|
116
|
-
]);
|
|
126
|
+
const workers = this.workers;
|
|
117
127
|
this.workers = [];
|
|
128
|
+
let timer;
|
|
129
|
+
const timedOut = await Promise.race([
|
|
130
|
+
Promise.all(workers.map((w) => w.close())).then(() => false),
|
|
131
|
+
new Promise((resolve) => {
|
|
132
|
+
timer = setTimeout(() => resolve(true), timeout);
|
|
133
|
+
}),
|
|
134
|
+
]);
|
|
135
|
+
if (timer)
|
|
136
|
+
clearTimeout(timer);
|
|
137
|
+
if (timedOut) {
|
|
138
|
+
await Promise.all(workers.map((w) => w.close(true)));
|
|
139
|
+
}
|
|
140
|
+
await this.releaseConnections();
|
|
118
141
|
}
|
|
119
142
|
/**
|
|
120
143
|
* Force shutdown without waiting for jobs
|
|
121
144
|
*/
|
|
122
145
|
async forceStop() {
|
|
123
146
|
this.isRunning = false;
|
|
124
|
-
|
|
147
|
+
const workers = this.workers;
|
|
125
148
|
this.workers = [];
|
|
149
|
+
await Promise.all(workers.map((w) => w.close(true)));
|
|
150
|
+
await this.releaseConnections();
|
|
151
|
+
}
|
|
152
|
+
async releaseConnections() {
|
|
153
|
+
const connections = this.connections;
|
|
154
|
+
this.connections = [];
|
|
155
|
+
await Promise.all(connections.map((c) => c.dispose()));
|
|
156
|
+
await this.closePublisher();
|
|
157
|
+
}
|
|
158
|
+
async closePublisher() {
|
|
159
|
+
const publisher = this.publisher;
|
|
160
|
+
this.publisher = undefined;
|
|
161
|
+
if (publisher) {
|
|
162
|
+
await publisher.quit();
|
|
163
|
+
}
|
|
126
164
|
}
|
|
127
165
|
}
|
|
128
166
|
//# sourceMappingURL=worker.js.map
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,GAGZ,MAAM,iBAAiB,CAAC;AASzB,MAAM,OAAO,UAAU;IACb,OAAO,GAAoC,EAAE,CAAC;IAC9C,WAAW,GAAqB,EAAE,CAAC;IAC1B,MAAM,CAAe;IACrB,MAAM,CAAmB;IACzB,OAAO,CAA0B;IAC1C,SAAS,CAAe;IACxB,SAAS,GAAG,KAAK,CAAC;IAE1B,0EAA0E;IACjE,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAE1C,YAAY,MAAoB,EAAE,SAA2B,EAAE;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG;YACb,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,SAAS,EAAE;YAC9C,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE3B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;QAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,kBAAkB,EACtC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EACnC;gBACE,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACtC,WAAW;gBACX,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK;gBAC/C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK;aACtD,CACF,CAAC;YAEF,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAClE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC1E,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACjC,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,GAAoB;QAC3C,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpE,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,OAAO;gBACV,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,KAAK,UAAU;gBACb,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpD,KAAK,OAAO;gBACV,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,KAAK,aAAa;gBAChB,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE;oBACpC,GAAG,IAAI,CAAC,OAAO;oBACf,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;oBAC9B,cAAc,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;iBACjE,CAAC,CAAC;YACL,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,WAAW,GAAU,GAAG,CAAC,IAAI,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,qBAAsB,WAA0B,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,SAAS,KAAK,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,WAA8C;QAC7D,OAAO;YACL,GAAG,WAAW;YACd,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;SACjC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK;QACxB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAElB,IAAI,KAAgD,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YAC5D,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC,CAAC;SACH,CAAC,CAAC;QACH,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cogitator-ai/worker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Distributed job queue for Cogitator agent execution",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
"bullmq": "^5.69.3",
|
|
19
19
|
"nanoid": "^5.0.9",
|
|
20
20
|
"zod": "^4.3.6",
|
|
21
|
-
"@cogitator-ai/core": "0.
|
|
22
|
-
"@cogitator-ai/types": "0.
|
|
23
|
-
"@cogitator-ai/swarms": "0.
|
|
21
|
+
"@cogitator-ai/core": "0.20.0",
|
|
22
|
+
"@cogitator-ai/types": "0.23.0",
|
|
23
|
+
"@cogitator-ai/swarms": "0.5.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
+
"ioredis": "5.9.2",
|
|
26
27
|
"typescript": "^5.3.0",
|
|
27
28
|
"vitest": "^4.0.18"
|
|
28
29
|
},
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
},
|
|
41
42
|
"license": "MIT",
|
|
42
43
|
"scripts": {
|
|
43
|
-
"build": "tsc",
|
|
44
|
+
"build": "tsc && tsx ../../scripts/fix-esm-imports.ts .",
|
|
44
45
|
"dev": "tsc --watch",
|
|
45
46
|
"clean": "rm -rf dist",
|
|
46
47
|
"typecheck": "tsc --noEmit",
|