@bratsos/workflow-engine 0.3.0 → 0.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/dist/client.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export { g as AIHelper, k as AVAILABLE_MODELS, l as AsyncBatchStageDefinition, D as DEFAULT_MODEL_KEY, m as EnhancedStageContext, I as InferInput, V as LogPayload, n as ModelConfig, X as ModelFilter, M as ModelKey, o as ModelRegistry, N as NoInputSchema, S as SimpleStageResult, Y as StageCompletedPayload, Z as StageFailedPayload, _ as StageStartedPayload, t as SyncStageDefinition, $ as WorkflowCompletedPayload, W as WorkflowEventType, a0 as WorkflowFailedPayload, u as WorkflowSSEEvent, a1 as WorkflowStartedPayload, a2 as WorkflowSuspendedPayload, v as calculateCost, x as defineAsyncBatchStage, y as defineStage, H as listModels, K as modelSupportsBatch, Q as registerModels } from './client-D4PoxADF.js';
1
+ export { g as AIHelper, k as AVAILABLE_MODELS, l as AsyncBatchStageDefinition, D as DEFAULT_MODEL_KEY, m as EnhancedStageContext, I as InferInput, X as LogPayload, n as ModelConfig, Y as ModelFilter, M as ModelKey, o as ModelRegistry, N as NoInputSchema, S as SimpleStageResult, Z as StageCompletedPayload, _ as StageFailedPayload, $ as StageStartedPayload, t as SyncStageDefinition, a0 as WorkflowCompletedPayload, W as WorkflowEventType, a1 as WorkflowFailedPayload, u as WorkflowSSEEvent, a2 as WorkflowStartedPayload, a3 as WorkflowSuspendedPayload, v as calculateCost, x as defineAsyncBatchStage, y as defineStage, H as listModels, K as modelSupportsBatch, U as registerModels } from './client-DxNS_NoL.js';
2
+ import '@ai-sdk/provider';
2
3
  import 'ai';
3
4
  import 'zod';
4
5
  import './interface-MMqhfQQK.js';
package/dist/client.js CHANGED
@@ -1,4 +1,4 @@
1
- export { AVAILABLE_MODELS, DEFAULT_MODEL_KEY, ModelKey, NoInputSchema, calculateCost, defineAsyncBatchStage, defineStage, listModels, modelSupportsBatch, registerModels } from './chunk-QBYB2PJJ.js';
1
+ export { AVAILABLE_MODELS, DEFAULT_MODEL_KEY, ModelKey, NoInputSchema, calculateCost, defineAsyncBatchStage, defineStage, listModels, modelSupportsBatch, registerModels } from './chunk-XS3ZX4KW.js';
2
2
  import './chunk-MUWP5SF2.js';
3
3
  //# sourceMappingURL=client.js.map
4
4
  //# sourceMappingURL=client.js.map
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { M as ModelKey } from './client-D4PoxADF.js';
2
- export { A as AIBatch, a as AIBatchHandle, b as AIBatchProvider, c as AIBatchRequest, d as AIBatchResult, e as AICallType, f as AIEmbedResult, g as AIHelper, h as AIObjectResult, i as AIStreamResult, j as AITextResult, k as AVAILABLE_MODELS, l as AsyncBatchStageDefinition, B as BatchLogFn, D as DEFAULT_MODEL_KEY, E as EmbedOptions, m as EnhancedStageContext, I as InferInput, L as LogContext, n as ModelConfig, o as ModelRegistry, p as ModelStats, q as ModelStatsTracker, r as ModelSyncConfig, N as NoInputSchema, O as ObjectOptions, R as RecordCallParams, S as SimpleStageResult, s as StreamOptions, t as SyncStageDefinition, T as TextOptions, W as WorkflowEventType, u as WorkflowSSEEvent, v as calculateCost, w as createAIHelper, x as defineAsyncBatchStage, y as defineStage, z as getDefaultModel, C as getModel, F as getModelById, G as getRegisteredModel, H as listModels, J as listRegisteredModels, K as modelSupportsBatch, P as printAvailableModels, Q as registerModels, U as requireStageOutput } from './client-D4PoxADF.js';
1
+ import { M as ModelKey } from './client-DxNS_NoL.js';
2
+ export { A as AIBatch, a as AIBatchHandle, b as AIBatchProvider, c as AIBatchRequest, d as AIBatchResult, e as AICallType, f as AIEmbedResult, g as AIHelper, h as AIObjectResult, i as AIStreamResult, j as AITextResult, k as AVAILABLE_MODELS, l as AsyncBatchStageDefinition, B as BatchLogFn, D as DEFAULT_MODEL_KEY, E as EmbedOptions, m as EnhancedStageContext, I as InferInput, L as LogContext, n as ModelConfig, o as ModelRegistry, p as ModelStats, q as ModelStatsTracker, r as ModelSyncConfig, N as NoInputSchema, O as ObjectOptions, R as RecordCallParams, S as SimpleStageResult, s as StreamOptions, t as SyncStageDefinition, T as TextOptions, W as WorkflowEventType, u as WorkflowSSEEvent, v as calculateCost, w as createAIHelper, x as defineAsyncBatchStage, y as defineStage, z as getDefaultModel, C as getModel, F as getModelById, G as getRegisteredModel, H as listModels, J as listRegisteredModels, K as modelSupportsBatch, P as printAvailableModels, Q as registerEmbeddingProvider, U as registerModels, V as requireStageOutput } from './client-DxNS_NoL.js';
3
3
  import { L as LogLevel } from './stage-BPw7m9Wx.js';
4
4
  export { S as Stage, a as StageResult } from './stage-BPw7m9Wx.js';
5
5
  export { C as CommandResult, I as IdempotencyInProgressError, y as InferWorkflowStageIds, J as JobExecuteCommand, a as JobExecuteResult, b as Kernel, c as KernelCommand, d as KernelCommandType, e as KernelConfig, W as KernelWorkflowRegistry, L as LeaseReapStaleCommand, f as LeaseReapStaleResult, O as OutboxFlushCommand, g as OutboxFlushResult, P as PluginDefinition, h as PluginReplayDLQCommand, i as PluginReplayDLQResult, j as PluginRunner, k as PluginRunnerConfig, R as RunCancelCommand, l as RunCancelResult, m as RunClaimPendingCommand, n as RunClaimPendingResult, o as RunCreateCommand, p as RunCreateResult, q as RunRerunFromCommand, r as RunRerunFromResult, s as RunTransitionCommand, t as RunTransitionResult, S as StagePollSuspendedCommand, u as StagePollSuspendedResult, z as Workflow, A as WorkflowBuilder, v as createKernel, w as createPluginRunner, x as definePlugin } from './plugins-CPC-X0rR.js';
@@ -8,6 +8,7 @@ export { A as AICallLogger, i as AICallRecord, h as AIHelperStats, r as Artifact
8
8
  export { P as PrismaAICallLogger, a as PrismaJobQueue, c as PrismaWorkflowPersistence, e as createPrismaAICallLogger, f as createPrismaJobQueue, g as createPrismaWorkflowPersistence } from './index-DAzCfO1R.js';
9
9
  import { ToolSet } from 'ai';
10
10
  export { B as BlobStore, C as Clock, E as EventSink, J as JobTransport, K as KernelEvent, a as KernelEventType, P as Persistence, S as Scheduler } from './ports-tU3rzPXJ.js';
11
+ import '@ai-sdk/provider';
11
12
 
12
13
  /**
13
14
  * Config Presets - Common configuration patterns for workflow stages
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { ModelKey } from './chunk-QBYB2PJJ.js';
2
- export { AVAILABLE_MODELS, AnthropicBatchProvider, DEFAULT_MODEL_KEY, GoogleBatchProvider, ModelKey, ModelStatsTracker, NoInputSchema, OpenAIBatchProvider, calculateCost, createAIHelper, defineAsyncBatchStage, defineStage, getBestProviderForModel, getDefaultModel, getModel, getModelById, getRegisteredModel, listModels, listRegisteredModels, modelSupportsBatch, printAvailableModels, registerModels, requireStageOutput, resolveModelForProvider } from './chunk-QBYB2PJJ.js';
1
+ import { ModelKey } from './chunk-XS3ZX4KW.js';
2
+ export { AVAILABLE_MODELS, AnthropicBatchProvider, DEFAULT_MODEL_KEY, GoogleBatchProvider, ModelKey, ModelStatsTracker, NoInputSchema, OpenAIBatchProvider, calculateCost, createAIHelper, defineAsyncBatchStage, defineStage, getBestProviderForModel, getDefaultModel, getModel, getModelById, getRegisteredModel, listModels, listRegisteredModels, modelSupportsBatch, printAvailableModels, registerEmbeddingProvider, registerModels, requireStageOutput, resolveModelForProvider } from './chunk-XS3ZX4KW.js';
3
3
  import './chunk-D7RVRRM2.js';
4
4
  export { PrismaAICallLogger, PrismaJobQueue, PrismaWorkflowPersistence, createPrismaAICallLogger, createPrismaJobQueue, createPrismaWorkflowPersistence } from './chunk-NYKMT46J.js';
5
5
  import './chunk-MUWP5SF2.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bratsos/workflow-engine",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Type-safe, distributed workflow engine for AI-orchestrated processes with suspend/resume, parallel execution, and cost tracking",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -78,6 +78,7 @@
78
78
  ],
79
79
  "dependencies": {
80
80
  "@ai-sdk/google": "^3.0.1",
81
+ "@ai-sdk/provider": "^3.0.0",
81
82
  "@openrouter/ai-sdk-provider": "^2.1.1",
82
83
  "ai": "^6.0.3",
83
84
  "js-tiktoken": "^1.0.21",
@@ -108,6 +108,7 @@ await kernel.dispatch({
108
108
  | `createNodeHost` | Function | `@bratsos/workflow-engine-host-node` | Create Node.js host |
109
109
  | `createServerlessHost` | Function | `@bratsos/workflow-engine-host-serverless` | Create serverless host |
110
110
  | `createAIHelper` | Function | `@bratsos/workflow-engine` | AI operations (text, object, embed, batch) |
111
+ | `registerEmbeddingProvider` | Function | `@bratsos/workflow-engine` | Register custom embedding providers (Voyage, Cohere, etc.) |
111
112
  | `definePlugin` | Function | `@bratsos/workflow-engine/kernel` | Define kernel plugins |
112
113
  | `createPluginRunner` | Function | `@bratsos/workflow-engine/kernel` | Create plugin event processor |
113
114
 
@@ -339,6 +340,12 @@ const { object } = await ai.generateObject("gemini-2.5-flash", prompt, schema);
339
340
  const { embedding } = await ai.embed("text-embedding-004", ["text1"], { dimensions: 768 });
340
341
  // OpenRouter embedding models (OpenAI, Cohere, etc.)
341
342
  const { embedding } = await ai.embed("openai/text-embedding-3-small", ["text1"]);
343
+
344
+ // Custom embedding providers (Voyage, Cohere, Jina, etc.)
345
+ import { registerEmbeddingProvider } from "@bratsos/workflow-engine";
346
+ import { voyage } from "voyage-ai-provider";
347
+ registerEmbeddingProvider("voyage", (modelId) => voyage.embeddingModel(modelId));
348
+ // Then register models with provider: "voyage" and use ai.embed() as usual
342
349
  ```
343
350
 
344
351
  ## Persistence Setup
@@ -248,7 +248,7 @@ const result = await ai.generateObject(
248
248
 
249
249
  ## embed
250
250
 
251
- Generate embeddings for text. Supports Google and OpenRouter embedding providers.
251
+ Generate embeddings for text. Supports Google and OpenRouter as built-in providers, plus any custom provider registered via `registerEmbeddingProvider()`.
252
252
 
253
253
  ```typescript
254
254
  // Google embedding model (with Google-specific options)
@@ -287,6 +287,39 @@ console.log(result.embedding); // First embedding (convenience)
287
287
  > OpenRouter embedding models work without provider-specific options. The provider is determined
288
288
  > by the `provider` field in the model's `ModelConfig`.
289
289
 
290
+ ### Custom Embedding Providers
291
+
292
+ Use `registerEmbeddingProvider()` to add support for any AI SDK community embedding provider (Voyage, Cohere, Jina, etc.) without modifying the library. Call this once at application startup, before any `embed()` calls.
293
+
294
+ ```typescript
295
+ import { registerEmbeddingProvider, registerModels } from "@bratsos/workflow-engine";
296
+ import { voyage } from "voyage-ai-provider";
297
+
298
+ // 1. Register the provider factory (once at startup)
299
+ registerEmbeddingProvider("voyage", (modelId) => voyage.embeddingModel(modelId));
300
+
301
+ // 2. Register models that use the provider
302
+ registerModels({
303
+ "voyage-4-large": {
304
+ id: "voyage-4-large",
305
+ name: "Voyage 4 Large",
306
+ provider: "voyage", // Must match the name in registerEmbeddingProvider()
307
+ inputCostPerMillion: 0.06,
308
+ outputCostPerMillion: 0,
309
+ isEmbeddingModel: true,
310
+ },
311
+ });
312
+
313
+ // 3. Use it like any other embedding model
314
+ const { embedding } = await ai.embed("voyage-4-large", "Hello world");
315
+ ```
316
+
317
+ **How it works:**
318
+ - The factory receives the model's `id` from `ModelConfig` and must return an `EmbeddingModelV3` instance (from `@ai-sdk/provider`)
319
+ - Custom providers are checked **before** built-in providers, so you can even override `"openrouter"` or `"google"` if needed
320
+ - The workflow engine stays provider-agnostic — install your chosen provider package as your app's dependency, not the library's
321
+ - Provider-specific options (like Google's `taskType`) are handled by each provider through the AI SDK's standard mechanism
322
+
290
323
  ## streamText
291
324
 
292
325
  Stream text generation.