ai-props 2.1.3 → 2.4.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/.dev.vars +2 -0
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +20 -0
- package/README.md +2 -0
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +4 -4
- package/dist/ai.js.map +1 -1
- package/dist/cascade.d.ts +329 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +522 -0
- package/dist/cascade.js.map +1 -0
- package/dist/client.d.ts +233 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +191 -0
- package/dist/client.js.map +1 -0
- package/dist/durable-cascade.d.ts +280 -0
- package/dist/durable-cascade.d.ts.map +1 -0
- package/dist/durable-cascade.js +469 -0
- package/dist/durable-cascade.js.map +1 -0
- package/dist/event-bridge.d.ts +257 -0
- package/dist/event-bridge.d.ts.map +1 -0
- package/dist/event-bridge.js +317 -0
- package/dist/event-bridge.js.map +1 -0
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +12 -6
- package/dist/generate.js.map +1 -1
- package/dist/hoc.d.ts.map +1 -1
- package/dist/hoc.js +13 -13
- package/dist/hoc.js.map +1 -1
- package/dist/hono-jsx.d.ts +208 -0
- package/dist/hono-jsx.d.ts.map +1 -0
- package/dist/hono-jsx.js +459 -0
- package/dist/hono-jsx.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mdx-types.d.ts +152 -0
- package/dist/mdx-types.d.ts.map +1 -0
- package/dist/mdx-types.js +9 -0
- package/dist/mdx-types.js.map +1 -0
- package/dist/mdx-utils.d.ts +106 -0
- package/dist/mdx-utils.d.ts.map +1 -0
- package/dist/mdx-utils.js +384 -0
- package/dist/mdx-utils.js.map +1 -0
- package/dist/mdx.d.ts +230 -0
- package/dist/mdx.d.ts.map +1 -0
- package/dist/mdx.js +820 -0
- package/dist/mdx.js.map +1 -0
- package/dist/rpc.d.ts +313 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +359 -0
- package/dist/rpc.js.map +1 -0
- package/dist/streaming.d.ts +199 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +402 -0
- package/dist/streaming.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +11 -13
- package/dist/validate.js.map +1 -1
- package/dist/worker.d.ts +270 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +405 -0
- package/dist/worker.js.map +1 -0
- package/package.json +39 -13
- package/src/ai.ts +12 -31
- package/src/cascade.ts +795 -0
- package/src/client.ts +440 -0
- package/src/durable-cascade.ts +743 -0
- package/src/event-bridge.ts +478 -0
- package/src/generate.ts +14 -12
- package/src/hoc.ts +15 -19
- package/src/hono-jsx.ts +675 -0
- package/src/index.ts +30 -0
- package/src/mdx-types.ts +169 -0
- package/src/mdx-utils.ts +437 -0
- package/src/mdx.ts +1008 -0
- package/src/rpc.ts +614 -0
- package/src/streaming.ts +618 -0
- package/src/validate.ts +15 -29
- package/src/worker.ts +547 -0
- package/test/cascade.test.ts +338 -0
- package/test/durable-cascade.test.ts +319 -0
- package/test/event-bridge.test.ts +351 -0
- package/test/generate.test.ts +6 -16
- package/test/mdx.test.ts +817 -0
- package/test/worker/capnweb-rpc.test.ts +1084 -0
- package/test/worker/full-flow.integration.test.ts +1463 -0
- package/test/worker/hono-jsx.test.ts +1258 -0
- package/test/worker/mdx-parsing.test.ts +1148 -0
- package/test/worker/setup.ts +56 -0
- package/test/worker.test.ts +595 -0
- package/tsconfig.json +2 -1
- package/vitest.config.js +6 -0
- package/vitest.config.ts +15 -1
- package/vitest.workers.config.ts +58 -0
- package/wrangler.jsonc +27 -0
- package/LICENSE +0 -21
- package/src/ai.js +0 -198
- package/src/cache.js +0 -182
- package/src/generate.js +0 -220
- package/src/hoc.js +0 -235
- package/src/index.js +0 -20
- package/src/types.js +0 -6
- package/src/validate.js +0 -252
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DurableCascadeExecutor - Durable tiered execution with cascade pattern for Workers
|
|
3
|
+
*
|
|
4
|
+
* Combines the cascade pattern (code -> generative -> agentic -> human)
|
|
5
|
+
* with Cloudflare Workflows durability guarantees for use in worker contexts.
|
|
6
|
+
*
|
|
7
|
+
* ## Features
|
|
8
|
+
*
|
|
9
|
+
* - **Durable Execution**: Steps are persisted and can resume after failures
|
|
10
|
+
* - **AI Gateway Integration**: Helpers for Cloudflare AI Gateway configuration
|
|
11
|
+
* - **Automatic Checkpointing**: Each tier creates a durable checkpoint
|
|
12
|
+
* - **Tier Escalation**: Automatic escalation on failure
|
|
13
|
+
* - **5W+H Audit Events**: Full audit trail support
|
|
14
|
+
*
|
|
15
|
+
* ## Basic Usage
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { DurableCascadeExecutor, createAIGatewayConfig } from 'ai-props/worker'
|
|
20
|
+
*
|
|
21
|
+
* const cascade = new DurableCascadeExecutor('generate-content', {
|
|
22
|
+
* code: async (input) => {
|
|
23
|
+
* if (input.template) return { content: input.template }
|
|
24
|
+
* throw new Error('No template')
|
|
25
|
+
* },
|
|
26
|
+
* generative: async (input, ctx) => {
|
|
27
|
+
* const result = await ctx.ai.run('@cf/meta/llama-3-8b-instruct', {
|
|
28
|
+
* messages: [{ role: 'user', content: 'Generate content' }]
|
|
29
|
+
* })
|
|
30
|
+
* return { content: result.response }
|
|
31
|
+
* }
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* // In workflow
|
|
35
|
+
* const result = await cascade.run(step, { topic: 'AI' })
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @packageDocumentation
|
|
39
|
+
*/
|
|
40
|
+
import { CascadeExecutor, TIER_ORDER, DEFAULT_TIER_TIMEOUTS, createCascadeContext, recordStep, AllTiersFailedError, CascadeTimeoutError, } from './cascade.js';
|
|
41
|
+
// Re-export base types
|
|
42
|
+
export { CascadeExecutor, TIER_ORDER, DEFAULT_TIER_TIMEOUTS, createCascadeContext, recordStep, AllTiersFailedError, CascadeTimeoutError, };
|
|
43
|
+
/**
|
|
44
|
+
* Create AI Gateway configuration for use with cascades
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const gatewayConfig = createAIGatewayConfig({
|
|
49
|
+
* gatewayId: 'my-gateway',
|
|
50
|
+
* accountId: env.CF_ACCOUNT_ID,
|
|
51
|
+
* cacheTtl: 3600, // 1 hour
|
|
52
|
+
* })
|
|
53
|
+
*
|
|
54
|
+
* // Use with AI binding
|
|
55
|
+
* const result = await env.AI.run('@cf/meta/llama-3-8b-instruct', {
|
|
56
|
+
* messages: [...],
|
|
57
|
+
* ...gatewayConfig.toRequestOptions()
|
|
58
|
+
* })
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export function createAIGatewayConfig(config) {
|
|
62
|
+
return {
|
|
63
|
+
config,
|
|
64
|
+
toRequestOptions: () => ({
|
|
65
|
+
gateway: {
|
|
66
|
+
id: config.gatewayId,
|
|
67
|
+
skipCache: config.skipCache ?? false,
|
|
68
|
+
cacheTtl: config.cacheTtl ?? 0,
|
|
69
|
+
metadata: config.metadata,
|
|
70
|
+
},
|
|
71
|
+
}),
|
|
72
|
+
getCacheKey: (input) => {
|
|
73
|
+
const inputStr = JSON.stringify(input);
|
|
74
|
+
return `${config.gatewayId}:${inputStr.slice(0, 100)}`;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// DurableCascadeExecutor
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/**
|
|
82
|
+
* DurableCascadeExecutor - Durable tiered execution with cascade pattern
|
|
83
|
+
*
|
|
84
|
+
* Combines the cascade pattern (code -> generative -> agentic -> human)
|
|
85
|
+
* with Cloudflare Workflows durability guarantees. Each tier execution
|
|
86
|
+
* creates a durable checkpoint that survives process restarts.
|
|
87
|
+
*/
|
|
88
|
+
export class DurableCascadeExecutor {
|
|
89
|
+
/** Cascade name */
|
|
90
|
+
name;
|
|
91
|
+
/** Cascade configuration */
|
|
92
|
+
config;
|
|
93
|
+
/** AI binding (injected at runtime) */
|
|
94
|
+
ai;
|
|
95
|
+
/** Human review handler */
|
|
96
|
+
humanReviewHandler;
|
|
97
|
+
constructor(name, config) {
|
|
98
|
+
this.name = name;
|
|
99
|
+
this.config = config;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Set the AI binding for generative/agentic tiers
|
|
103
|
+
*/
|
|
104
|
+
setAi(ai) {
|
|
105
|
+
this.ai = ai;
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Set the human review handler
|
|
110
|
+
*/
|
|
111
|
+
setHumanReviewHandler(handler) {
|
|
112
|
+
this.humanReviewHandler = handler;
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Run the cascade with durable execution
|
|
117
|
+
*/
|
|
118
|
+
async run(workflowStep, input, options) {
|
|
119
|
+
const ai = options?.ai ?? this.ai;
|
|
120
|
+
const humanReviewHandler = options?.humanReviewHandler ?? this.humanReviewHandler;
|
|
121
|
+
// Create cascade context for tracing
|
|
122
|
+
const cascadeContext = createCascadeContext({ name: this.name });
|
|
123
|
+
const startTime = Date.now();
|
|
124
|
+
const history = [];
|
|
125
|
+
const skippedTiers = [];
|
|
126
|
+
const tierDurations = {};
|
|
127
|
+
const previousErrors = [];
|
|
128
|
+
// Emit cascade start event
|
|
129
|
+
this.emitEvent({
|
|
130
|
+
who: this.config.actor ?? 'system',
|
|
131
|
+
what: 'cascade-start',
|
|
132
|
+
when: startTime,
|
|
133
|
+
where: this.name,
|
|
134
|
+
how: {
|
|
135
|
+
status: 'running',
|
|
136
|
+
metadata: { input },
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
// Execute tiers in order
|
|
140
|
+
for (const tier of TIER_ORDER) {
|
|
141
|
+
const handler = this.getTierHandler(tier);
|
|
142
|
+
// Skip unconfigured tiers
|
|
143
|
+
if (!handler) {
|
|
144
|
+
skippedTiers.push(tier);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
// Check total timeout
|
|
148
|
+
if (this.config.totalTimeout) {
|
|
149
|
+
const elapsed = Date.now() - startTime;
|
|
150
|
+
if (elapsed >= this.config.totalTimeout) {
|
|
151
|
+
throw new CascadeTimeoutError(this.config.totalTimeout, elapsed);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Create tier context
|
|
155
|
+
const tierContext = {
|
|
156
|
+
correlationId: cascadeContext.correlationId,
|
|
157
|
+
tier,
|
|
158
|
+
input,
|
|
159
|
+
cascadeContext,
|
|
160
|
+
previousErrors: [...previousErrors],
|
|
161
|
+
ai: ai ?? this.createMockAi(),
|
|
162
|
+
requestHumanReview: async (request) => {
|
|
163
|
+
if (humanReviewHandler) {
|
|
164
|
+
return humanReviewHandler(request);
|
|
165
|
+
}
|
|
166
|
+
const reviewId = `review-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
167
|
+
return { reviewId, status: 'pending-human' };
|
|
168
|
+
},
|
|
169
|
+
workflowStep,
|
|
170
|
+
};
|
|
171
|
+
// Execute tier with durability
|
|
172
|
+
const tierResult = await this.executeTier(workflowStep, tier, handler, input, tierContext, cascadeContext);
|
|
173
|
+
history.push(tierResult);
|
|
174
|
+
tierDurations[tier] = tierResult.duration;
|
|
175
|
+
// If tier succeeded, we're done
|
|
176
|
+
if (tierResult.success && tierResult.value !== undefined) {
|
|
177
|
+
// Check custom success condition
|
|
178
|
+
const tierConfig = this.config.tierConfig?.[tier];
|
|
179
|
+
if (tierConfig?.successCondition && !tierConfig.successCondition(tierResult.value)) {
|
|
180
|
+
// Success condition not met, treat as failure and continue
|
|
181
|
+
previousErrors.push({
|
|
182
|
+
tier,
|
|
183
|
+
error: 'Success condition not met',
|
|
184
|
+
});
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const endTime = Date.now();
|
|
188
|
+
this.emitEvent({
|
|
189
|
+
who: this.config.actor ?? 'system',
|
|
190
|
+
what: 'cascade-complete',
|
|
191
|
+
when: endTime,
|
|
192
|
+
where: this.name,
|
|
193
|
+
how: {
|
|
194
|
+
status: 'completed',
|
|
195
|
+
duration: endTime - startTime,
|
|
196
|
+
metadata: { tier, value: tierResult.value },
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
value: tierResult.value,
|
|
201
|
+
tier,
|
|
202
|
+
history,
|
|
203
|
+
skippedTiers,
|
|
204
|
+
context: cascadeContext,
|
|
205
|
+
metrics: {
|
|
206
|
+
totalDuration: endTime - startTime,
|
|
207
|
+
tierDurations,
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// Record error for next tier
|
|
212
|
+
if (tierResult.error) {
|
|
213
|
+
previousErrors.push({
|
|
214
|
+
tier,
|
|
215
|
+
error: tierResult.error.message,
|
|
216
|
+
});
|
|
217
|
+
// Emit escalation event
|
|
218
|
+
const nextTier = this.getNextConfiguredTier(tier);
|
|
219
|
+
if (nextTier) {
|
|
220
|
+
this.emitEvent({
|
|
221
|
+
who: this.config.actor ?? 'system',
|
|
222
|
+
what: `escalate-to-${nextTier}`,
|
|
223
|
+
when: Date.now(),
|
|
224
|
+
where: this.name,
|
|
225
|
+
why: tierResult.error.message,
|
|
226
|
+
how: {
|
|
227
|
+
status: 'running',
|
|
228
|
+
metadata: { fromTier: tier, toTier: nextTier },
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// All tiers failed
|
|
235
|
+
const endTime = Date.now();
|
|
236
|
+
this.emitEvent({
|
|
237
|
+
who: this.config.actor ?? 'system',
|
|
238
|
+
what: 'cascade-failed',
|
|
239
|
+
when: endTime,
|
|
240
|
+
where: this.name,
|
|
241
|
+
why: 'All tiers failed',
|
|
242
|
+
how: {
|
|
243
|
+
status: 'failed',
|
|
244
|
+
duration: endTime - startTime,
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
throw new AllTiersFailedError(history);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Execute a single tier with durability
|
|
251
|
+
*/
|
|
252
|
+
async executeTier(workflowStep, tier, handler, input, tierContext, cascadeContext) {
|
|
253
|
+
const tierStartTime = Date.now();
|
|
254
|
+
const tierConfig = this.config.tierConfig?.[tier];
|
|
255
|
+
const timeout = this.config.timeouts?.[tier] ?? DEFAULT_TIER_TIMEOUTS[tier];
|
|
256
|
+
const maxRetries = tierConfig?.retries?.limit ?? 0;
|
|
257
|
+
// Record step in cascade context
|
|
258
|
+
const step = recordStep(cascadeContext, tier, {
|
|
259
|
+
actor: this.config.actor ?? 'system',
|
|
260
|
+
action: `execute-${tier}`,
|
|
261
|
+
});
|
|
262
|
+
// Emit tier start event
|
|
263
|
+
this.emitEvent({
|
|
264
|
+
who: this.config.actor ?? 'system',
|
|
265
|
+
what: `tier-${tier}-execute`,
|
|
266
|
+
when: tierStartTime,
|
|
267
|
+
where: this.name,
|
|
268
|
+
how: {
|
|
269
|
+
status: 'running',
|
|
270
|
+
metadata: { tier },
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
let lastError;
|
|
274
|
+
let attempts = 0;
|
|
275
|
+
while (attempts <= maxRetries) {
|
|
276
|
+
attempts++;
|
|
277
|
+
try {
|
|
278
|
+
// Execute with timeout using workflow step (durable)
|
|
279
|
+
const result = await workflowStep.do(`${this.name}-${tier}-attempt-${attempts}`, timeout !== undefined ? { timeout: `${timeout} milliseconds` } : {}, async () => {
|
|
280
|
+
if (tier === 'code') {
|
|
281
|
+
return handler(input);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
return handler(input, tierContext);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
const duration = Date.now() - tierStartTime;
|
|
288
|
+
// Mark step complete
|
|
289
|
+
step.complete();
|
|
290
|
+
// Emit tier success event
|
|
291
|
+
this.emitEvent({
|
|
292
|
+
who: this.config.actor ?? 'system',
|
|
293
|
+
what: `tier-${tier}-execute`,
|
|
294
|
+
when: Date.now(),
|
|
295
|
+
where: this.name,
|
|
296
|
+
how: {
|
|
297
|
+
status: 'completed',
|
|
298
|
+
duration,
|
|
299
|
+
metadata: { tier, result, attempts },
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
return {
|
|
303
|
+
tier,
|
|
304
|
+
success: true,
|
|
305
|
+
value: result,
|
|
306
|
+
duration,
|
|
307
|
+
attempts,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
312
|
+
// Check if it's a timeout error
|
|
313
|
+
const isTimeout = lastError.message.includes('timed out') ||
|
|
314
|
+
lastError.message.includes('timeout') ||
|
|
315
|
+
lastError.name === 'TimeoutError';
|
|
316
|
+
// Call custom error handler if provided
|
|
317
|
+
if (tierConfig?.onError) {
|
|
318
|
+
tierConfig.onError(lastError, tier);
|
|
319
|
+
}
|
|
320
|
+
// If we've exhausted retries, stop
|
|
321
|
+
if (attempts > maxRetries) {
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
// Wait before retry with backoff (using durable sleep)
|
|
325
|
+
if (tierConfig?.retries?.delay) {
|
|
326
|
+
const backoff = tierConfig.retries.backoff ?? 'constant';
|
|
327
|
+
let delay = tierConfig.retries.delay;
|
|
328
|
+
if (backoff === 'exponential') {
|
|
329
|
+
delay = tierConfig.retries.delay * Math.pow(2, attempts - 1);
|
|
330
|
+
}
|
|
331
|
+
else if (backoff === 'linear') {
|
|
332
|
+
delay = tierConfig.retries.delay * attempts;
|
|
333
|
+
}
|
|
334
|
+
await workflowStep.sleep(`${this.name}-${tier}-retry-wait-${attempts}`, delay);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const duration = Date.now() - tierStartTime;
|
|
339
|
+
const isTimeout = lastError?.message.includes('timed out') ||
|
|
340
|
+
lastError?.message.includes('timeout') ||
|
|
341
|
+
lastError?.name === 'TimeoutError';
|
|
342
|
+
// Mark step failed
|
|
343
|
+
if (lastError) {
|
|
344
|
+
step.fail(lastError);
|
|
345
|
+
}
|
|
346
|
+
// Emit tier failure event
|
|
347
|
+
this.emitEvent({
|
|
348
|
+
who: this.config.actor ?? 'system',
|
|
349
|
+
what: `tier-${tier}-execute`,
|
|
350
|
+
when: Date.now(),
|
|
351
|
+
where: this.name,
|
|
352
|
+
...(lastError?.message !== undefined && { why: lastError.message }),
|
|
353
|
+
how: {
|
|
354
|
+
status: 'failed',
|
|
355
|
+
duration,
|
|
356
|
+
metadata: { tier, error: lastError?.message, attempts },
|
|
357
|
+
},
|
|
358
|
+
});
|
|
359
|
+
return {
|
|
360
|
+
tier,
|
|
361
|
+
success: false,
|
|
362
|
+
...(lastError !== undefined && { error: lastError }),
|
|
363
|
+
timedOut: isTimeout,
|
|
364
|
+
duration,
|
|
365
|
+
attempts,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Get the handler for a tier
|
|
370
|
+
*/
|
|
371
|
+
getTierHandler(tier) {
|
|
372
|
+
switch (tier) {
|
|
373
|
+
case 'code':
|
|
374
|
+
return this.config.code;
|
|
375
|
+
case 'generative':
|
|
376
|
+
return this.config.generative;
|
|
377
|
+
case 'agentic':
|
|
378
|
+
return this.config.agentic;
|
|
379
|
+
case 'human':
|
|
380
|
+
return this.config.human;
|
|
381
|
+
default:
|
|
382
|
+
return undefined;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Get the next configured tier
|
|
387
|
+
*/
|
|
388
|
+
getNextConfiguredTier(currentTier) {
|
|
389
|
+
const currentIndex = TIER_ORDER.indexOf(currentTier);
|
|
390
|
+
for (let i = currentIndex + 1; i < TIER_ORDER.length; i++) {
|
|
391
|
+
const tier = TIER_ORDER[i];
|
|
392
|
+
if (tier && this.getTierHandler(tier)) {
|
|
393
|
+
return tier;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return undefined;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Emit a 5W+H event
|
|
400
|
+
*/
|
|
401
|
+
emitEvent(event) {
|
|
402
|
+
if (this.config.onEvent) {
|
|
403
|
+
this.config.onEvent(event);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Create a mock AI binding for testing
|
|
408
|
+
*/
|
|
409
|
+
createMockAi() {
|
|
410
|
+
return {
|
|
411
|
+
run: async () => ({ response: 'mock response' }),
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// ============================================================================
|
|
416
|
+
// Helper Functions
|
|
417
|
+
// ============================================================================
|
|
418
|
+
/**
|
|
419
|
+
* Create a durable cascade step for common AI props patterns
|
|
420
|
+
*
|
|
421
|
+
* @example
|
|
422
|
+
* ```typescript
|
|
423
|
+
* const titleCascade = createDurableCascadeStep({
|
|
424
|
+
* name: 'generate-title',
|
|
425
|
+
* code: async (input) => {
|
|
426
|
+
* if (input.template) return { title: input.template }
|
|
427
|
+
* throw new Error('No template')
|
|
428
|
+
* },
|
|
429
|
+
* generative: async (input, ctx) => {
|
|
430
|
+
* const result = await ctx.ai.run('@cf/meta/llama-3-8b-instruct', {
|
|
431
|
+
* messages: [{ role: 'user', content: `Generate a title for: ${input.topic}` }]
|
|
432
|
+
* })
|
|
433
|
+
* return { title: result.response }
|
|
434
|
+
* }
|
|
435
|
+
* })
|
|
436
|
+
*
|
|
437
|
+
* // In workflow
|
|
438
|
+
* const result = await titleCascade.run(step, { topic: 'AI' })
|
|
439
|
+
* ```
|
|
440
|
+
*/
|
|
441
|
+
export function createDurableCascadeStep(config) {
|
|
442
|
+
const durableConfig = {};
|
|
443
|
+
if (config.code) {
|
|
444
|
+
durableConfig.code = config.code;
|
|
445
|
+
}
|
|
446
|
+
if (config.generative) {
|
|
447
|
+
durableConfig.generative = config.generative;
|
|
448
|
+
}
|
|
449
|
+
if (config.agentic) {
|
|
450
|
+
durableConfig.agentic = config.agentic;
|
|
451
|
+
}
|
|
452
|
+
if (config.human) {
|
|
453
|
+
durableConfig.human = config.human;
|
|
454
|
+
}
|
|
455
|
+
if (config.timeouts) {
|
|
456
|
+
durableConfig.timeouts = config.timeouts;
|
|
457
|
+
}
|
|
458
|
+
if (config.tierConfig) {
|
|
459
|
+
durableConfig.tierConfig = config.tierConfig;
|
|
460
|
+
}
|
|
461
|
+
if (config.onEvent) {
|
|
462
|
+
durableConfig.onEvent = config.onEvent;
|
|
463
|
+
}
|
|
464
|
+
if (config.actor) {
|
|
465
|
+
durableConfig.actor = config.actor;
|
|
466
|
+
}
|
|
467
|
+
return new DurableCascadeExecutor(config.name, durableConfig);
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=durable-cascade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-cascade.js","sourceRoot":"","sources":["../src/durable-cascade.ts"],"names":[],"mappings":"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"}
|