blazen 0.6.2 → 0.6.4

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 CHANGED
@@ -130,20 +130,20 @@ console.log(result.data); // { status: "done" }
130
130
 
131
131
  ## LLM Integration
132
132
 
133
- `Model` provides a unified interface to 15 LLM providers. Create a model instance with a static factory method and call `complete()` or `completeWithOptions()`. All messages and responses are fully typed.
133
+ Blazen exposes a unified interface across 15+ LLM providers. All messages and responses are fully typed.
134
134
 
135
- ### ChatMessage and Role
135
+ ### Tier 1: construct a provider, call `complete()`
136
136
 
137
- Build messages with the `ChatMessage` class and `Role` enum:
137
+ Each provider class has a static `create({...})` constructor:
138
138
 
139
139
  ```typescript
140
- import { Model, ChatMessage, Role } from "blazen";
140
+ import { OpenAiProvider, ChatMessage } from "blazen";
141
141
  import type { ModelResponse, ToolCall, TokenUsage } from "blazen";
142
142
 
143
- const model = Model.openrouter({ apiKey: process.env.OPENROUTER_API_KEY! });
144
- // or rely on the OPENROUTER_API_KEY env var: Model.openrouter();
143
+ const model = OpenAiProvider.create({ apiKey: "sk-..." });
144
+ // also: AnthropicProvider, GroqProvider, OpenRouterProvider, FalProvider, ...
145
+ // omit the arg to read the key from the provider's env var (OPENAI_API_KEY, ...)
145
146
 
146
- // Using static factory methods (recommended)
147
147
  const response: ModelResponse = await model.complete([
148
148
  ChatMessage.system("You are helpful."),
149
149
  ChatMessage.user("What is 2+2?"),
@@ -156,7 +156,26 @@ console.log(response.finishReason); // "stop", "tool_calls", etc.
156
156
  console.log(response.toolCalls); // ToolCall[] | undefined
157
157
  ```
158
158
 
159
- You can also construct messages with the `ChatMessage` constructor:
159
+ ### Tier 2: register many providers in one `ModelManager`
160
+
161
+ Scaling past a single model? Register providers — **local and remote** — under names in one manager and dispatch by name. Fetch an instance back with `get()` to pass around or compose:
162
+
163
+ ```typescript
164
+ import { ModelManager, FalProvider, AnthropicProvider, ChatMessage } from "blazen";
165
+
166
+ const mgr = new ModelManager();
167
+ await mgr.register("fast", FalProvider.create({ apiKey: "fal-..." }));
168
+ await mgr.register("smart", AnthropicProvider.create({ apiKey: "sk-ant-..." }));
169
+
170
+ const response = await mgr.complete("fast", [ChatMessage.user("What is 2+2?")]);
171
+ const smart = await mgr.get("smart"); // the AnthropicProvider, to call or compose directly
172
+ ```
173
+
174
+ > Shorthand: `Model.openai(...)`, `Model.anthropic(...)`, `Model.fal(...)`, etc. are optional static factories that build the same providers — use whichever reads better.
175
+
176
+ ### ChatMessage and Role
177
+
178
+ Build messages with the `ChatMessage` class and `Role` enum. You can also construct messages with the `ChatMessage` constructor:
160
179
 
161
180
  ```typescript
162
181
  const msg = new ChatMessage({ role: Role.User, content: "Hello" });
package/blazen.workers.js CHANGED
@@ -55,7 +55,18 @@ const __wasi = new __WASI({ version: 'preview1' })
55
55
  const __emnapiContext = __emnapiGetDefaultContext()
56
56
 
57
57
  const __sharedMemory = new WebAssembly.Memory({
58
- initial: 256,
58
+ // 1152 pages * 64 KiB = 72 MiB initial (grows on demand up to `maximum`).
59
+ // This MUST be >= the wasm module's own declared minimum memory (the
60
+ // `(import "env" "memory" (memory <min> ...))` field), or workerd rejects
61
+ // instantiation with `LinkError: memory import has N pages which is smaller
62
+ // than the declared initial of M`. The blazen wasm declares ~988 pages
63
+ // (lean) / ~1094 pages (the -tiktoken variant), so 1152 covers both with a
64
+ // small margin. It must ALSO stay <= 2048 pages (128 MiB), the Cloudflare
65
+ // Workers isolate cap — napi-rs's own 4000-page (~250 MiB) default exceeds
66
+ // it and fails with RangeError CF 10021. Valid window: [1094, 2048].
67
+ // Keep this in lockstep with napi.wasm.initialMemory in package.json (which
68
+ // controls the napi-generated blazen.wasi*.{cjs,js}).
69
+ initial: 1152,
59
70
  maximum: 65536,
60
71
  shared: true,
61
72
  })
@@ -95,10 +106,6 @@ export const AnthropicProvider = __napiModule.exports.AnthropicProvider
95
106
  export const JsAnthropicProvider = __napiModule.exports.JsAnthropicProvider
96
107
  export const ApiProtocol = __napiModule.exports.ApiProtocol
97
108
  export const JsApiProtocol = __napiModule.exports.JsApiProtocol
98
- export const AssignmentContext = __napiModule.exports.AssignmentContext
99
- export const JsAssignmentContext = __napiModule.exports.JsAssignmentContext
100
- export const AudioGenBackend = __napiModule.exports.AudioGenBackend
101
- export const JsAudioGenBackend = __napiModule.exports.JsAudioGenBackend
102
109
  export const AudioMusicProviderDefaults = __napiModule.exports.AudioMusicProviderDefaults
103
110
  export const JsAudioMusicProviderDefaults = __napiModule.exports.JsAudioMusicProviderDefaults
104
111
  export const AudioSpeechProviderDefaults = __napiModule.exports.AudioSpeechProviderDefaults
@@ -117,52 +124,28 @@ export const BatchResult = __napiModule.exports.BatchResult
117
124
  export const JsBatchResult = __napiModule.exports.JsBatchResult
118
125
  export const BedrockProvider = __napiModule.exports.BedrockProvider
119
126
  export const JsBedrockProvider = __napiModule.exports.JsBedrockProvider
120
- export const BlazenPeerClient = __napiModule.exports.BlazenPeerClient
121
- export const JsBlazenPeerClient = __napiModule.exports.JsBlazenPeerClient
122
- export const BlazenPeerServer = __napiModule.exports.BlazenPeerServer
123
- export const JsBlazenPeerServer = __napiModule.exports.JsBlazenPeerServer
124
127
  export const BytesWrapper = __napiModule.exports.BytesWrapper
125
128
  export const JsBytesWrapper = __napiModule.exports.JsBytesWrapper
126
129
  export const CachedModel = __napiModule.exports.CachedModel
127
130
  export const JsCachedModel = __napiModule.exports.JsCachedModel
128
131
  export const CacheMiddleware = __napiModule.exports.CacheMiddleware
129
132
  export const JsCacheMiddleware = __napiModule.exports.JsCacheMiddleware
130
- export const CandleEmbedProvider = __napiModule.exports.CandleEmbedProvider
131
- export const JsCandleEmbedProvider = __napiModule.exports.JsCandleEmbedProvider
132
- export const CandleInferenceResult = __napiModule.exports.CandleInferenceResult
133
- export const JsCandleInferenceResult = __napiModule.exports.JsCandleInferenceResult
134
- export const CandleLlmProvider = __napiModule.exports.CandleLlmProvider
135
- export const JsCandleLlmProvider = __napiModule.exports.JsCandleLlmProvider
136
133
  export const ChatMessage = __napiModule.exports.ChatMessage
137
134
  export const JsChatMessage = __napiModule.exports.JsChatMessage
138
- export const ChatMessageInput = __napiModule.exports.ChatMessageInput
139
- export const JsChatMessageInput = __napiModule.exports.JsChatMessageInput
140
135
  export const ChatWindow = __napiModule.exports.ChatWindow
141
136
  export const JsChatWindow = __napiModule.exports.JsChatWindow
142
- export const CheckpointStore = __napiModule.exports.CheckpointStore
143
- export const JsCheckpointStore = __napiModule.exports.JsCheckpointStore
144
137
  export const Citation = __napiModule.exports.Citation
145
138
  export const JsCitationClass = __napiModule.exports.JsCitationClass
146
- export const CodecBackendHandle = __napiModule.exports.CodecBackendHandle
147
- export const JsCodecBackendHandle = __napiModule.exports.JsCodecBackendHandle
148
139
  export const CohereProvider = __napiModule.exports.CohereProvider
149
140
  export const JsCohereProvider = __napiModule.exports.JsCohereProvider
150
141
  export const ContentStore = __napiModule.exports.ContentStore
151
142
  export const JsContentStore = __napiModule.exports.JsContentStore
152
143
  export const Context = __napiModule.exports.Context
153
144
  export const JsContext = __napiModule.exports.JsContext
154
- export const ControlPlaneClient = __napiModule.exports.ControlPlaneClient
155
- export const JsControlPlaneClient = __napiModule.exports.JsControlPlaneClient
156
- export const ControlPlaneWorker = __napiModule.exports.ControlPlaneWorker
157
- export const JsControlPlaneWorker = __napiModule.exports.JsControlPlaneWorker
158
- export const ControlPlaneWorkerConfig = __napiModule.exports.ControlPlaneWorkerConfig
159
- export const JsControlPlaneWorkerConfig = __napiModule.exports.JsControlPlaneWorkerConfig
160
145
  export const CustomProvider = __napiModule.exports.CustomProvider
161
146
  export const JsCustomProvider = __napiModule.exports.JsCustomProvider
162
147
  export const DeepSeekProvider = __napiModule.exports.DeepSeekProvider
163
148
  export const JsDeepSeekProvider = __napiModule.exports.JsDeepSeekProvider
164
- export const DiffusionProvider = __napiModule.exports.DiffusionProvider
165
- export const JsDiffusionProvider = __napiModule.exports.JsDiffusionProvider
166
149
  export const DynamicEvent = __napiModule.exports.DynamicEvent
167
150
  export const JsDynamicEvent = __napiModule.exports.JsDynamicEvent
168
151
  export const EmbeddingModel = __napiModule.exports.EmbeddingModel
@@ -171,8 +154,6 @@ export const EmbeddingProvider = __napiModule.exports.EmbeddingProvider
171
154
  export const JsEmbeddingProvider = __napiModule.exports.JsEmbeddingProvider
172
155
  export const EmbeddingProviderDefaults = __napiModule.exports.EmbeddingProviderDefaults
173
156
  export const JsEmbeddingProviderDefaults = __napiModule.exports.JsEmbeddingProviderDefaults
174
- export const EmbedProvider = __napiModule.exports.EmbedProvider
175
- export const JsEmbedProvider = __napiModule.exports.JsEmbedProvider
176
157
  export const EstimateCounter = __napiModule.exports.EstimateCounter
177
158
  export const JsEstimateCounter = __napiModule.exports.JsEstimateCounter
178
159
  export const FalEmbeddingModel = __napiModule.exports.FalEmbeddingModel
@@ -181,10 +162,6 @@ export const FallbackModel = __napiModule.exports.FallbackModel
181
162
  export const JsFallbackModel = __napiModule.exports.JsFallbackModel
182
163
  export const FalProvider = __napiModule.exports.FalProvider
183
164
  export const JsFalProvider = __napiModule.exports.JsFalProvider
184
- export const FastEmbedModel = __napiModule.exports.FastEmbedModel
185
- export const JsFastEmbedModel = __napiModule.exports.JsFastEmbedModel
186
- export const FasterWhisperBackend = __napiModule.exports.FasterWhisperBackend
187
- export const JsFasterWhisperBackend = __napiModule.exports.JsFasterWhisperBackend
188
165
  export const FireworksProvider = __napiModule.exports.FireworksProvider
189
166
  export const JsFireworksProvider = __napiModule.exports.JsFireworksProvider
190
167
  export const GeminiProvider = __napiModule.exports.GeminiProvider
@@ -207,42 +184,12 @@ export const ImageProvider = __napiModule.exports.ImageProvider
207
184
  export const JsImageProvider = __napiModule.exports.JsImageProvider
208
185
  export const ImageUpscaleProviderDefaults = __napiModule.exports.ImageUpscaleProviderDefaults
209
186
  export const JsImageUpscaleProviderDefaults = __napiModule.exports.JsImageUpscaleProviderDefaults
210
- export const InferenceChunk = __napiModule.exports.InferenceChunk
211
- export const JsInferenceChunk = __napiModule.exports.JsInferenceChunk
212
- export const InferenceChunkStream = __napiModule.exports.InferenceChunkStream
213
- export const JsInferenceChunkStream = __napiModule.exports.JsInferenceChunkStream
214
- export const InferenceImage = __napiModule.exports.InferenceImage
215
- export const JsInferenceImage = __napiModule.exports.JsInferenceImage
216
- export const InferenceImageSource = __napiModule.exports.InferenceImageSource
217
- export const JsInferenceImageSource = __napiModule.exports.JsInferenceImageSource
218
- export const InferenceResult = __napiModule.exports.InferenceResult
219
- export const JsInferenceResult = __napiModule.exports.JsInferenceResult
220
- export const InferenceToolCall = __napiModule.exports.InferenceToolCall
221
- export const JsInferenceToolCall = __napiModule.exports.JsInferenceToolCall
222
- export const InferenceUsage = __napiModule.exports.InferenceUsage
223
- export const JsInferenceUsage = __napiModule.exports.JsInferenceUsage
224
187
  export const InMemoryBackend = __napiModule.exports.InMemoryBackend
225
188
  export const JsInMemoryBackend = __napiModule.exports.JsInMemoryBackend
226
189
  export const JobHandle = __napiModule.exports.JobHandle
227
190
  export const JsJobHandleClass = __napiModule.exports.JsJobHandleClass
228
- export const JsonlBackend = __napiModule.exports.JsonlBackend
229
- export const JsJsonlBackend = __napiModule.exports.JsJsonlBackend
230
- export const JsonlDataset = __napiModule.exports.JsonlDataset
231
- export const JsJsonlDataset = __napiModule.exports.JsJsonlDataset
232
191
  export const LangfuseConfig = __napiModule.exports.LangfuseConfig
233
192
  export const JsLangfuseConfig = __napiModule.exports.JsLangfuseConfig
234
- export const LlamaCppChatMessageInput = __napiModule.exports.LlamaCppChatMessageInput
235
- export const JsLlamaCppChatMessageInput = __napiModule.exports.JsLlamaCppChatMessageInput
236
- export const LlamaCppInferenceChunk = __napiModule.exports.LlamaCppInferenceChunk
237
- export const JsLlamaCppInferenceChunk = __napiModule.exports.JsLlamaCppInferenceChunk
238
- export const LlamaCppInferenceChunkStream = __napiModule.exports.LlamaCppInferenceChunkStream
239
- export const JsLlamaCppInferenceChunkStream = __napiModule.exports.JsLlamaCppInferenceChunkStream
240
- export const LlamaCppInferenceResult = __napiModule.exports.LlamaCppInferenceResult
241
- export const JsLlamaCppInferenceResult = __napiModule.exports.JsLlamaCppInferenceResult
242
- export const LlamaCppInferenceUsage = __napiModule.exports.LlamaCppInferenceUsage
243
- export const JsLlamaCppInferenceUsage = __napiModule.exports.JsLlamaCppInferenceUsage
244
- export const LlamaCppProvider = __napiModule.exports.LlamaCppProvider
245
- export const JsLlamaCppProvider = __napiModule.exports.JsLlamaCppProvider
246
193
  export const LLMProvider = __napiModule.exports.LLMProvider
247
194
  export const JsLLMProvider = __napiModule.exports.JsLLMProvider
248
195
  export const LlmProviderDefaults = __napiModule.exports.LlmProviderDefaults
@@ -263,24 +210,12 @@ export const MiddlewareStack = __napiModule.exports.MiddlewareStack
263
210
  export const JsMiddlewareStack = __napiModule.exports.JsMiddlewareStack
264
211
  export const MistralProvider = __napiModule.exports.MistralProvider
265
212
  export const JsMistralProvider = __napiModule.exports.JsMistralProvider
266
- export const MistralRsProvider = __napiModule.exports.MistralRsProvider
267
- export const JsMistralRsProvider = __napiModule.exports.JsMistralRsProvider
268
213
  export const Model = __napiModule.exports.Model
269
214
  export const JsModel = __napiModule.exports.JsModel
270
- export const ModelCache = __napiModule.exports.ModelCache
271
- export const JsModelCache = __napiModule.exports.JsModelCache
272
- export const ModelClient = __napiModule.exports.ModelClient
273
- export const JsModelClient = __napiModule.exports.JsModelClient
274
215
  export const ModelManager = __napiModule.exports.ModelManager
275
216
  export const JsModelManager = __napiModule.exports.JsModelManager
276
217
  export const ModelRegistry = __napiModule.exports.ModelRegistry
277
218
  export const JsModelRegistry = __napiModule.exports.JsModelRegistry
278
- export const MusicBackendHandle = __napiModule.exports.MusicBackendHandle
279
- export const JsMusicBackendHandle = __napiModule.exports.JsMusicBackendHandle
280
- export const MusicgenBackend = __napiModule.exports.MusicgenBackend
281
- export const JsMusicgenBackend = __napiModule.exports.JsMusicgenBackend
282
- export const MusicModel = __napiModule.exports.MusicModel
283
- export const JsMusicModel = __napiModule.exports.JsMusicModel
284
219
  export const MusicProvider = __napiModule.exports.MusicProvider
285
220
  export const JsMusicProvider = __napiModule.exports.JsMusicProvider
286
221
  export const NoopUsageEmitter = __napiModule.exports.NoopUsageEmitter
@@ -299,8 +234,6 @@ export const ParallelStage = __napiModule.exports.ParallelStage
299
234
  export const JsParallelStage = __napiModule.exports.JsParallelStage
300
235
  export const ParallelSubWorkflowsStep = __napiModule.exports.ParallelSubWorkflowsStep
301
236
  export const JsParallelSubWorkflowsStep = __napiModule.exports.JsParallelSubWorkflowsStep
302
- export const PeerClient = __napiModule.exports.PeerClient
303
- export const JsPeerClient = __napiModule.exports.JsPeerClient
304
237
  export const PerplexityProvider = __napiModule.exports.PerplexityProvider
305
238
  export const JsPerplexityProvider = __napiModule.exports.JsPerplexityProvider
306
239
  export const Pipeline = __napiModule.exports.Pipeline
@@ -315,10 +248,6 @@ export const PipelineResult = __napiModule.exports.PipelineResult
315
248
  export const JsPipelineResult = __napiModule.exports.JsPipelineResult
316
249
  export const PipelineSnapshot = __napiModule.exports.PipelineSnapshot
317
250
  export const JsPipelineSnapshot = __napiModule.exports.JsPipelineSnapshot
318
- export const PreferenceJsonlDataset = __napiModule.exports.PreferenceJsonlDataset
319
- export const JsPreferenceJsonlDataset = __napiModule.exports.JsPreferenceJsonlDataset
320
- export const ProgressCallback = __napiModule.exports.ProgressCallback
321
- export const JsProgressCallback = __napiModule.exports.JsProgressCallback
322
251
  export const PromptFile = __napiModule.exports.PromptFile
323
252
  export const JsPromptFile = __napiModule.exports.JsPromptFile
324
253
  export const PromptRegistry = __napiModule.exports.PromptRegistry
@@ -327,12 +256,8 @@ export const PromptTemplate = __napiModule.exports.PromptTemplate
327
256
  export const JsPromptTemplate = __napiModule.exports.JsPromptTemplate
328
257
  export const ProviderDefaults = __napiModule.exports.ProviderDefaults
329
258
  export const JsProviderDefaults = __napiModule.exports.JsProviderDefaults
330
- export const RatedJsonlDataset = __napiModule.exports.RatedJsonlDataset
331
- export const JsRatedJsonlDataset = __napiModule.exports.JsRatedJsonlDataset
332
259
  export const ReasoningTrace = __napiModule.exports.ReasoningTrace
333
260
  export const JsReasoningTraceClass = __napiModule.exports.JsReasoningTraceClass
334
- export const RedbCheckpointStore = __napiModule.exports.RedbCheckpointStore
335
- export const JsRedbCheckpointStore = __napiModule.exports.JsRedbCheckpointStore
336
261
  export const RegistryKey = __napiModule.exports.RegistryKey
337
262
  export const JsRegistryKey = __napiModule.exports.JsRegistryKey
338
263
  export const RequestTiming = __napiModule.exports.RequestTiming
@@ -343,16 +268,10 @@ export const RetryMiddleware = __napiModule.exports.RetryMiddleware
343
268
  export const JsRetryMiddleware = __napiModule.exports.JsRetryMiddleware
344
269
  export const RetryModel = __napiModule.exports.RetryModel
345
270
  export const JsRetryModel = __napiModule.exports.JsRetryModel
346
- export const RvcBackend = __napiModule.exports.RvcBackend
347
- export const JsRvcBackend = __napiModule.exports.JsRvcBackend
348
271
  export const SessionNamespace = __napiModule.exports.SessionNamespace
349
272
  export const JsSessionNamespace = __napiModule.exports.JsSessionNamespace
350
273
  export const SessionRefRegistry = __napiModule.exports.SessionRefRegistry
351
274
  export const JsSessionRefRegistry = __napiModule.exports.JsSessionRefRegistry
352
- export const SparkTtsBackend = __napiModule.exports.SparkTtsBackend
353
- export const JsSparkTtsBackend = __napiModule.exports.JsSparkTtsBackend
354
- export const StableAudioBackend = __napiModule.exports.StableAudioBackend
355
- export const JsStableAudioBackend = __napiModule.exports.JsStableAudioBackend
356
275
  export const Stage = __napiModule.exports.Stage
357
276
  export const JsStage = __napiModule.exports.JsStage
358
277
  export const StageResult = __napiModule.exports.StageResult
@@ -373,8 +292,6 @@ export const StopEvent = __napiModule.exports.StopEvent
373
292
  export const JsStopEventClass = __napiModule.exports.JsStopEventClass
374
293
  export const StructuredOutput = __napiModule.exports.StructuredOutput
375
294
  export const JsStructuredOutput = __napiModule.exports.JsStructuredOutput
376
- export const SttBackendHandle = __napiModule.exports.SttBackendHandle
377
- export const JsSttBackendHandle = __napiModule.exports.JsSttBackendHandle
378
295
  export const SubExecutable = __napiModule.exports.SubExecutable
379
296
  export const JsSubExecutable = __napiModule.exports.JsSubExecutable
380
297
  export const SubPipelineStep = __napiModule.exports.SubPipelineStep
@@ -399,16 +316,10 @@ export const ToolCall = __napiModule.exports.ToolCall
399
316
  export const JsToolCallClass = __napiModule.exports.JsToolCallClass
400
317
  export const ToolDefinition = __napiModule.exports.ToolDefinition
401
318
  export const JsToolDefinitionClass = __napiModule.exports.JsToolDefinitionClass
402
- export const TractEmbedModel = __napiModule.exports.TractEmbedModel
403
- export const JsTractEmbedModel = __napiModule.exports.JsTractEmbedModel
404
319
  export const Transcription = __napiModule.exports.Transcription
405
320
  export const JsTranscription = __napiModule.exports.JsTranscription
406
321
  export const TranscriptionProviderDefaults = __napiModule.exports.TranscriptionProviderDefaults
407
322
  export const JsTranscriptionProviderDefaults = __napiModule.exports.JsTranscriptionProviderDefaults
408
- export const TtsBackendHandle = __napiModule.exports.TtsBackendHandle
409
- export const JsTtsBackendHandle = __napiModule.exports.JsTtsBackendHandle
410
- export const TtsProvider = __napiModule.exports.TtsProvider
411
- export const JsTtsProvider = __napiModule.exports.JsTtsProvider
412
323
  export const TTSProvider = __napiModule.exports.TTSProvider
413
324
  export const JsTTSProvider = __napiModule.exports.JsTTSProvider
414
325
  export const TypedTool = __napiModule.exports.TypedTool
@@ -421,12 +332,6 @@ export const UsageRecordingEmbeddingModel = __napiModule.exports.UsageRecordingE
421
332
  export const JsUsageRecordingEmbeddingModel = __napiModule.exports.JsUsageRecordingEmbeddingModel
422
333
  export const UsageRecordingModel = __napiModule.exports.UsageRecordingModel
423
334
  export const JsUsageRecordingModel = __napiModule.exports.JsUsageRecordingModel
424
- export const ValkeyBackend = __napiModule.exports.ValkeyBackend
425
- export const JsValkeyBackend = __napiModule.exports.JsValkeyBackend
426
- export const ValkeyCheckpointStore = __napiModule.exports.ValkeyCheckpointStore
427
- export const JsValkeyCheckpointStore = __napiModule.exports.JsValkeyCheckpointStore
428
- export const VcModel = __napiModule.exports.VcModel
429
- export const JsVcModel = __napiModule.exports.JsVcModel
430
335
  export const VcProvider = __napiModule.exports.VcProvider
431
336
  export const JsVcProvider = __napiModule.exports.JsVcProvider
432
337
  export const VideoProvider = __napiModule.exports.VideoProvider
@@ -437,14 +342,10 @@ export const VoiceCloningProviderDefaults = __napiModule.exports.VoiceCloningPro
437
342
  export const JsVoiceCloningProviderDefaults = __napiModule.exports.JsVoiceCloningProviderDefaults
438
343
  export const VoiceProvider = __napiModule.exports.VoiceProvider
439
344
  export const JsVoiceProvider = __napiModule.exports.JsVoiceProvider
440
- export const WhisperCppProvider = __napiModule.exports.WhisperCppProvider
441
- export const JsWhisperCppProvider = __napiModule.exports.JsWhisperCppProvider
442
345
  export const Workflow = __napiModule.exports.Workflow
443
346
  export const JsWorkflow = __napiModule.exports.JsWorkflow
444
347
  export const WorkflowBuilder = __napiModule.exports.WorkflowBuilder
445
348
  export const JsWorkflowBuilder = __napiModule.exports.JsWorkflowBuilder
446
- export const WorkflowCheckpoint = __napiModule.exports.WorkflowCheckpoint
447
- export const JsWorkflowCheckpoint = __napiModule.exports.JsWorkflowCheckpoint
448
349
  export const WorkflowHandler = __napiModule.exports.WorkflowHandler
449
350
  export const JsWorkflowHandler = __napiModule.exports.JsWorkflowHandler
450
351
  export const WorkflowHistory = __napiModule.exports.WorkflowHistory
@@ -453,13 +354,12 @@ export const WorkflowSnapshot = __napiModule.exports.WorkflowSnapshot
453
354
  export const JsWorkflowSnapshot = __napiModule.exports.JsWorkflowSnapshot
454
355
  export const XaiProvider = __napiModule.exports.XaiProvider
455
356
  export const JsXaiProvider = __napiModule.exports.JsXaiProvider
357
+ export const __blazenDrainAsyncQueue = __napiModule.exports.__blazenDrainAsyncQueue
456
358
  export const addUsageToTokenUsage = __napiModule.exports.addUsageToTokenUsage
457
359
  export const audioInput = __napiModule.exports.audioInput
458
360
  export const cadInput = __napiModule.exports.cadInput
459
361
  export const CapabilityKind = __napiModule.exports.CapabilityKind
460
362
  export const JsCapabilityKind = __napiModule.exports.JsCapabilityKind
461
- export const ChatRole = __napiModule.exports.ChatRole
462
- export const JsChatRole = __napiModule.exports.JsChatRole
463
363
  export const completeBatch = __napiModule.exports.completeBatch
464
364
  export const completeBatchConfig = __napiModule.exports.completeBatchConfig
465
365
  export const computeAudioCost = __napiModule.exports.computeAudioCost
@@ -487,31 +387,15 @@ export const HistoryEventKindTag = __napiModule.exports.HistoryEventKindTag
487
387
  export const JsHistoryEventKindTag = __napiModule.exports.JsHistoryEventKindTag
488
388
  export const imageInput = __napiModule.exports.imageInput
489
389
  export const initLangfuse = __napiModule.exports.initLangfuse
490
- export const initOtlp = __napiModule.exports.initOtlp
491
- export const initPrometheus = __napiModule.exports.initPrometheus
492
390
  export const internEventType = __napiModule.exports.internEventType
493
391
  export const JoinStrategy = __napiModule.exports.JoinStrategy
494
392
  export const JsJoinStrategy = __napiModule.exports.JsJoinStrategy
495
- export const JsAdmissionModeTag = __napiModule.exports.JsAdmissionModeTag
496
393
  export const JsAuthMethod = __napiModule.exports.JsAuthMethod
497
- export const JsBackendHint = __napiModule.exports.JsBackendHint
498
394
  export const JsCacheStrategy = __napiModule.exports.JsCacheStrategy
499
395
  export const JsContentKind = __napiModule.exports.JsContentKind
500
- export const JsDiffusionScheduler = __napiModule.exports.JsDiffusionScheduler
501
396
  export const JsFalLlmEndpointKind = __napiModule.exports.JsFalLlmEndpointKind
502
397
  export const JsJobStatus = __napiModule.exports.JsJobStatus
503
- export const JsMixedPrecision = __napiModule.exports.JsMixedPrecision
504
- export const JsMusicgenVariant = __napiModule.exports.JsMusicgenVariant
505
398
  export const JsRole = __napiModule.exports.JsRole
506
- export const JsRunStatus = __napiModule.exports.JsRunStatus
507
- export const JsSchedulerKind = __napiModule.exports.JsSchedulerKind
508
- export const JsStableAudioVariant = __napiModule.exports.JsStableAudioVariant
509
- export const JsTtsModel = __napiModule.exports.JsTtsModel
510
- export const JsWhisperModel = __napiModule.exports.JsWhisperModel
511
- export const LlamaCppChatRole = __napiModule.exports.LlamaCppChatRole
512
- export const JsLlamaCppChatRole = __napiModule.exports.JsLlamaCppChatRole
513
- export const loadClientTls = __napiModule.exports.loadClientTls
514
- export const loadServerTls = __napiModule.exports.loadServerTls
515
399
  export const lookupPricing = __napiModule.exports.lookupPricing
516
400
  export const lookupStepBuilder = __napiModule.exports.lookupStepBuilder
517
401
  export const LoopDecision = __napiModule.exports.LoopDecision
@@ -520,12 +404,8 @@ export const Modality = __napiModule.exports.Modality
520
404
  export const JsModality = __napiModule.exports.JsModality
521
405
  export const newRetryStack = __napiModule.exports.newRetryStack
522
406
  export const newUsageEvent = __napiModule.exports.newUsageEvent
523
- export const OtlpProtocol = __napiModule.exports.OtlpProtocol
524
- export const JsOtlpProtocol = __napiModule.exports.JsOtlpProtocol
525
407
  export const PauseReason = __napiModule.exports.PauseReason
526
408
  export const JsPauseReason = __napiModule.exports.JsPauseReason
527
- export const peerEnvelopeVersion = __napiModule.exports.peerEnvelopeVersion
528
- export const peerTokenEnv = __napiModule.exports.peerTokenEnv
529
409
  export const ProgressKind = __napiModule.exports.ProgressKind
530
410
  export const JsProgressKind = __napiModule.exports.JsProgressKind
531
411
  export const providerEnvVars = __napiModule.exports.providerEnvVars
@@ -543,12 +423,12 @@ export const registerNativeSerializer = __napiModule.exports.registerNativeSeria
543
423
  export const registerPricing = __napiModule.exports.registerPricing
544
424
  export const registerStepBuilder = __napiModule.exports.registerStepBuilder
545
425
  export const resolveApiKey = __napiModule.exports.resolveApiKey
546
- export const resolvePeerToken = __napiModule.exports.resolvePeerToken
547
426
  export const resolveRetryStack = __napiModule.exports.resolveRetryStack
548
427
  export const runAgent = __napiModule.exports.runAgent
549
428
  export const runAgentWithCallback = __napiModule.exports.runAgentWithCallback
550
429
  export const SessionPausePolicy = __napiModule.exports.SessionPausePolicy
551
430
  export const JsSessionPausePolicy = __napiModule.exports.JsSessionPausePolicy
431
+ export const setDefaultHttpClient = __napiModule.exports.setDefaultHttpClient
552
432
  export const simhashFromHex = __napiModule.exports.simhashFromHex
553
433
  export const simhashToHex = __napiModule.exports.simhashToHex
554
434
  export const StateValueKind = __napiModule.exports.StateValueKind
package/index.d.ts CHANGED
@@ -110,6 +110,14 @@ export declare class AssignmentContext {
110
110
  * string, number, boolean, null).
111
111
  */
112
112
  emitEvent(eventType: string, data: any): Promise<void>
113
+ /**
114
+ * Request input from the orchestrator and await the response.
115
+ *
116
+ * `prompt` is shown to the responder; `metadata` is an arbitrary
117
+ * JSON-serializable payload. `timeoutMs`, when set, bounds the wait.
118
+ * Resolves with the JSON response value.
119
+ */
120
+ requestInput(prompt: string, metadata: any, timeoutMs?: bigint | undefined | null): Promise<any>
113
121
  }
114
122
  export type JsAssignmentContext = AssignmentContext
115
123
 
@@ -1129,6 +1137,8 @@ export declare class ControlPlaneClient {
1129
1137
  * away; otherwise let in-flight runs finish first.
1130
1138
  */
1131
1139
  drainWorker(nodeId: string, immediate: boolean): Promise<void>
1140
+ /** Respond to a pending input request raised by a worker for a run. */
1141
+ respondToInput(runId: string, requestId: string, response: any): Promise<void>
1132
1142
  /**
1133
1143
  * Subscribe to events for a specific run. The returned stream is
1134
1144
  * a JS `AsyncIterableIterator<RunEvent>` (object with both `next`
@@ -1210,6 +1220,8 @@ export declare class ControlPlaneWorkerConfig {
1210
1220
  * predicates.
1211
1221
  */
1212
1222
  withTag(key: string, value: string): this
1223
+ /** Attach a bearer token sent on the worker handshake. */
1224
+ withBearerToken(token: string): this
1213
1225
  /** Override the admission mode declared at handshake. */
1214
1226
  withAdmission(mode: JsAdmissionMode): this
1215
1227
  /** Override the heartbeat cadence (milliseconds). */
@@ -3738,19 +3750,41 @@ export declare class ModelManager {
3738
3750
  */
3739
3751
  constructor(config?: ModelManagerConfig | undefined | null)
3740
3752
  /**
3741
- * Register a `Model`-backed local model with the manager.
3753
+ * Register a provider under `id` so it can be dispatched by name with
3754
+ * [`Self::complete`] / [`Self::stream`].
3742
3755
  *
3743
- * The model starts in the unloaded state. An optional
3744
- * `memoryEstimateBytes` overrides the model's self-reported
3745
- * estimate.
3756
+ * Works for **both** tiers in one place:
3757
+ * - **Remote providers** (`Model.openai()`, `FalProvider.create()`, …)
3758
+ * register as dispatch-only entries — they own no local weights, so
3759
+ * they never count against a memory budget.
3760
+ * - **Local in-process providers** (mistral.rs, llama.cpp, candle)
3761
+ * additionally participate in load/unload lifecycle and per-pool LRU
3762
+ * eviction; `memoryEstimateBytes` reports their footprint.
3746
3763
  *
3747
- * Only local in-process providers (mistral.rs, llama.cpp, candle)
3748
- * can be registered remote HTTP providers will throw. To
3749
- * register an arbitrary JS-managed resource (embedding model,
3750
- * tokenizer, custom runtime, …), use
3764
+ * To register an arbitrary JS-managed resource (embedding model,
3765
+ * tokenizer, custom runtime, …) with raw lifecycle callbacks, use
3751
3766
  * [`Self::register_local_model`] instead.
3752
3767
  */
3753
3768
  register(id: string, model: JsModel, memoryEstimateBytes?: bigint | undefined | null): Promise<void>
3769
+ /**
3770
+ * Run a chat completion against the provider registered under `id`.
3771
+ *
3772
+ * Local entries are auto-loaded on first use; remote entries dispatch
3773
+ * straight through. Throws if `id` is not registered or was registered
3774
+ * for lifecycle only.
3775
+ */
3776
+ complete(id: string, messages: Array<JsChatMessage>): Promise<JsModelResponse>
3777
+ /**
3778
+ * Streaming counterpart to [`Self::complete`]. The `onChunk` callback
3779
+ * receives each chunk as a typed `StreamChunk`.
3780
+ */
3781
+ stream(id: string, messages: Array<JsChatMessage>, onChunk: StreamChunkCallbackTsfn): Promise<void>
3782
+ /**
3783
+ * Fetch the chat interface registered under `id` to use or compose
3784
+ * directly. Returns `null` if `id` is unknown or was registered for
3785
+ * lifecycle only (no chat `Model`).
3786
+ */
3787
+ get(id: string): Promise<JsModel | null>
3754
3788
  /**
3755
3789
  * Register an arbitrary JS-managed local model with the manager.
3756
3790
  *
@@ -4266,16 +4300,15 @@ export declare class OpenAiEmbeddingModel {
4266
4300
  export type JsOpenAiEmbeddingModel = OpenAiEmbeddingModel
4267
4301
 
4268
4302
  /**
4269
- * An `OpenAI` compute provider exposing text-to-speech.
4303
+ * An `OpenAI` provider exposing chat completion, streaming, and text-to-speech.
4270
4304
  *
4271
- * For chat completions and embeddings, use
4272
- * [`Model.openai`](crate::providers::model::JsModel::openai)
4273
- * instead — this class is the standalone entry point for the compute
4274
- * capabilities (currently text-to-speech) that the `OpenAI` provider
4275
- * implements directly.
4305
+ * This is the standalone class form of
4306
+ * [`Model.openai`](crate::providers::model::JsModel::openai); both surfaces
4307
+ * wrap the same Rust provider.
4276
4308
  *
4277
4309
  * ```typescript
4278
4310
  * const openai = OpenAiProvider.create({ apiKey: "sk-..." });
4311
+ * const response = await openai.complete([ChatMessage.user("Hi")]);
4279
4312
  * const audio = await openai.textToSpeech({
4280
4313
  * text: "Hello, world!",
4281
4314
  * voice: "alloy",
@@ -4292,6 +4325,16 @@ export declare class OpenAiProvider {
4292
4325
  * [`OpenAiProvider::from_options`] are applied.
4293
4326
  */
4294
4327
  static create(options?: JsProviderOptions | undefined | null): OpenAiProvider
4328
+ /** Get the model ID. */
4329
+ get modelId(): string
4330
+ /** Perform a chat completion. */
4331
+ complete(messages: Array<JsChatMessage>): Promise<JsModelResponse>
4332
+ /** Perform a chat completion with additional options. */
4333
+ completeWithOptions(messages: Array<JsChatMessage>, options: JsModelOptions): Promise<JsModelResponse>
4334
+ /** Stream a chat completion. */
4335
+ stream(messages: Array<JsChatMessage>, onChunk: StreamChunkCallbackTsfn): Promise<void>
4336
+ /** Stream a chat completion with additional options. */
4337
+ streamWithOptions(messages: Array<JsChatMessage>, onChunk: StreamChunkCallbackTsfn, options: JsModelOptions): Promise<void>
4295
4338
  /** Synthesize speech from text via `OpenAI`'s `/v1/audio/speech`. */
4296
4339
  textToSpeech(request: JsSpeechRequest): Promise<JsAudioResult>
4297
4340
  }
@@ -8246,6 +8289,8 @@ export interface JsCitation {
8246
8289
  export interface JsClientConnectOptions {
8247
8290
  /** mTLS configuration. `None` = plaintext. */
8248
8291
  mtls?: JsMtlsOptions
8292
+ /** Bearer token attached to control-plane requests. `None` = anonymous. */
8293
+ bearerToken?: string
8249
8294
  }
8250
8295
 
8251
8296
  export interface JsComputeRequest {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blazen",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "Blazen - Event-driven AI workflow framework for Node.js/TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -30,7 +30,7 @@
30
30
  "wasm32-wasi"
31
31
  ],
32
32
  "wasm": {
33
- "initialMemory": 256
33
+ "initialMemory": 1152
34
34
  }
35
35
  },
36
36
  "publishConfig": {
@@ -90,13 +90,13 @@
90
90
  "verbose": true
91
91
  },
92
92
  "optionalDependencies": {
93
- "@blazen-dev/blazen-linux-x64-gnu": "0.6.2",
94
- "@blazen-dev/blazen-linux-x64-musl": "0.6.2",
95
- "@blazen-dev/blazen-linux-arm64-gnu": "0.6.2",
96
- "@blazen-dev/blazen-linux-arm64-musl": "0.6.2",
97
- "@blazen-dev/blazen-darwin-arm64": "0.6.2",
98
- "@blazen-dev/blazen-win32-x64-msvc": "0.6.2",
99
- "@blazen-dev/blazen-wasm32-wasi": "0.6.2"
93
+ "@blazen-dev/blazen-linux-x64-gnu": "0.6.4",
94
+ "@blazen-dev/blazen-linux-x64-musl": "0.6.4",
95
+ "@blazen-dev/blazen-linux-arm64-gnu": "0.6.4",
96
+ "@blazen-dev/blazen-linux-arm64-musl": "0.6.4",
97
+ "@blazen-dev/blazen-darwin-arm64": "0.6.4",
98
+ "@blazen-dev/blazen-win32-x64-msvc": "0.6.4",
99
+ "@blazen-dev/blazen-wasm32-wasi": "0.6.4"
100
100
  },
101
101
  "scripts": {
102
102
  "build": "napi build --release --platform --features local-all,langfuse --js index.js && node scripts/post-build.mjs",