@workglow/ai 0.2.8 → 0.2.9

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/bun.js.map CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/job/AiJob.ts", "../src/provider/AiProviderRegistry.ts", "../src/execution/DirectExecutionStrategy.ts", "../src/execution/QueuedExecutionStrategy.ts", "../src/task/ToolCallingUtils.ts", "../src/model/InMemoryModelRepository.ts", "../src/model/ModelRepository.ts", "../src/model/ModelSchema.ts", "../src/model/ModelRegistry.ts", "../src/provider/AiProvider.ts", "../src/provider/QueuedAiProvider.ts", "../src/task/index.ts", "../src/task/BackgroundRemovalTask.ts", "../src/task/base/AiTaskSchemas.ts", "../src/task/base/AiVisionTask.ts", "../src/task/base/AiTask.ts", "../src/task/ChunkRetrievalTask.ts", "../src/task/TextEmbeddingTask.ts", "../src/task/ChunkToVectorTask.ts", "../src/task/ChunkVectorHybridSearchTask.ts", "../src/task/ChunkVectorSearchTask.ts", "../src/task/ChunkVectorUpsertTask.ts", "../src/task/ContextBuilderTask.ts", "../src/task/CountTokensTask.ts", "../src/task/DocumentEnricherTask.ts", "../src/task/TextNamedEntityRecognitionTask.ts", "../src/task/TextSummaryTask.ts", "../src/task/base/StreamingAiTask.ts", "../src/task/DocumentUpsertTask.ts", "../src/task/DownloadModelTask.ts", "../src/task/FaceDetectorTask.ts", "../src/task/FaceLandmarkerTask.ts", "../src/task/GestureRecognizerTask.ts", "../src/task/HandLandmarkerTask.ts", "../src/task/HierarchicalChunkerTask.ts", "../src/task/HierarchyJoinTask.ts", "../src/task/KbToDocumentsTask.ts", "../src/task/ImageClassificationTask.ts", "../src/task/ImageEmbeddingTask.ts", "../src/task/ImageSegmentationTask.ts", "../src/task/ImageToTextTask.ts", "../src/task/ModelInfoTask.ts", "../src/task/ModelSearchTask.ts", "../src/task/ObjectDetectionTask.ts", "../src/task/PoseLandmarkerTask.ts", "../src/task/QueryExpanderTask.ts", "../src/task/RerankerTask.ts", "../src/task/TextClassificationTask.ts", "../src/task/StructuralParserTask.ts", "../src/task/StructuredGenerationTask.ts", "../src/task/TextChunkerTask.ts", "../src/task/TextFillMaskTask.ts", "../src/task/TextGenerationTask.ts", "../src/task/TextLanguageDetectionTask.ts", "../src/task/TextQuestionAnswerTask.ts", "../src/task/TextRewriterTask.ts", "../src/task/TextTranslationTask.ts", "../src/task/ToolCallingTask.ts", "../src/task/TopicSegmenterTask.ts", "../src/task/UnloadModelTask.ts", "../src/task/VectorQuantizeTask.ts", "../src/task/VectorSimilarityTask.ts", "../src/task/MessageConversion.ts"],
3
+ "sources": ["../src/job/AiJob.ts", "../src/provider/AiProviderRegistry.ts", "../src/execution/DirectExecutionStrategy.ts", "../src/execution/QueuedExecutionStrategy.ts", "../src/task/ToolCallingUtils.ts", "../src/model/InMemoryModelRepository.ts", "../src/model/ModelRepository.ts", "../src/model/ModelSchema.ts", "../src/model/ModelRegistry.ts", "../src/provider/AiProvider.ts", "../src/provider/QueuedAiProvider.ts", "../src/task/index.ts", "../src/task/AiChatTask.ts", "../src/task/base/AiTaskSchemas.ts", "../src/task/base/StreamingAiTask.ts", "../src/task/base/AiTask.ts", "../src/task/ChatMessage.ts", "../src/task/BackgroundRemovalTask.ts", "../src/task/base/AiVisionTask.ts", "../src/task/ChunkRetrievalTask.ts", "../src/task/TextEmbeddingTask.ts", "../src/task/ChunkToVectorTask.ts", "../src/task/ChunkVectorHybridSearchTask.ts", "../src/task/ChunkVectorSearchTask.ts", "../src/task/ChunkVectorUpsertTask.ts", "../src/task/ContextBuilderTask.ts", "../src/task/CountTokensTask.ts", "../src/task/DocumentEnricherTask.ts", "../src/task/TextNamedEntityRecognitionTask.ts", "../src/task/TextSummaryTask.ts", "../src/task/DocumentUpsertTask.ts", "../src/task/DownloadModelTask.ts", "../src/task/FaceDetectorTask.ts", "../src/task/FaceLandmarkerTask.ts", "../src/task/GestureRecognizerTask.ts", "../src/task/HandLandmarkerTask.ts", "../src/task/HierarchicalChunkerTask.ts", "../src/task/HierarchyJoinTask.ts", "../src/task/KbToDocumentsTask.ts", "../src/task/ImageClassificationTask.ts", "../src/task/ImageEmbeddingTask.ts", "../src/task/ImageSegmentationTask.ts", "../src/task/ImageToTextTask.ts", "../src/task/ModelInfoTask.ts", "../src/task/ModelSearchTask.ts", "../src/task/ObjectDetectionTask.ts", "../src/task/PoseLandmarkerTask.ts", "../src/task/QueryExpanderTask.ts", "../src/task/RerankerTask.ts", "../src/task/TextClassificationTask.ts", "../src/task/StructuralParserTask.ts", "../src/task/StructuredGenerationTask.ts", "../src/task/TextChunkerTask.ts", "../src/task/TextFillMaskTask.ts", "../src/task/TextGenerationTask.ts", "../src/task/TextLanguageDetectionTask.ts", "../src/task/TextQuestionAnswerTask.ts", "../src/task/TextRewriterTask.ts", "../src/task/TextTranslationTask.ts", "../src/task/ToolCallingTask.ts", "../src/task/TopicSegmenterTask.ts", "../src/task/UnloadModelTask.ts", "../src/task/VectorQuantizeTask.ts", "../src/task/VectorSimilarityTask.ts", "../src/task/MessageConversion.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AbortSignalJobError,\n IJobExecuteContext,\n Job,\n JobStatus,\n PermanentJobError,\n RetryableJobError,\n withJobErrorDiagnostics,\n} from \"@workglow/job-queue\";\nimport { TaskInput, TaskOutput } from \"@workglow/task-graph\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { JsonSchema } from \"@workglow/util/schema\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\n\n/** Default timeout for provider API calls (2 minutes). */\nconst DEFAULT_AI_TIMEOUT_MS = 120_000;\n\n/** Local inference (CPU/WASM) often needs several minutes (downloads, load, multi-turn tool follow-up). */\nconst LOCAL_INFERENCE_DEFAULT_TIMEOUT_MS = 300_000;\n\nfunction resolveAiJobTimeoutMs(aiProvider: string, explicitMs: number | undefined): number {\n if (explicitMs !== undefined) {\n return explicitMs;\n }\n if (aiProvider === \"LOCAL_LLAMACPP\" || aiProvider === \"HF_TRANSFORMERS_ONNX\") {\n return LOCAL_INFERENCE_DEFAULT_TIMEOUT_MS;\n }\n return DEFAULT_AI_TIMEOUT_MS;\n}\n\n/**\n * Input data for the AiJob\n */\nexport interface AiJobInput<Input extends TaskInput = TaskInput> {\n taskType: string;\n aiProvider: string;\n taskInput: Input & { model: ModelConfig };\n /** JSON Schema for structured output, when the task declares x-structured-output. */\n outputSchema?: JsonSchema;\n /** Timeout in milliseconds for the provider API call. Defaults to 120s. */\n timeoutMs?: number;\n /** Opaque session token for multi-turn conversation caching (KV cache for local models, prompt caching for API providers). */\n sessionId?: string;\n}\n\n/**\n * Classifies a provider error as retryable or permanent based on known patterns.\n * Returns a RetryableJobError for transient issues (rate limits, network errors,\n * server errors) and a PermanentJobError for non-recoverable issues (auth, not found).\n */\nfunction classifyProviderError(err: unknown, taskType: string, provider: string): Error {\n if (\n err instanceof PermanentJobError ||\n err instanceof RetryableJobError ||\n err instanceof AbortSignalJobError\n ) {\n return err;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n const status =\n typeof (err as any)?.status === \"number\"\n ? (err as any).status\n : typeof (err as any)?.statusCode === \"number\"\n ? (err as any).statusCode\n : (() => {\n const m = message.match(/\\b([45]\\d{2})\\b/);\n return m ? parseInt(m[1], 10) : undefined;\n })();\n\n // Check for abort/cancellation\n if (err instanceof Error && err.name === \"AbortError\") {\n return new AbortSignalJobError(\n withJobErrorDiagnostics(`Provider call aborted for ${taskType} (${provider})`, err)\n );\n }\n if (err instanceof Error && err.name === \"TimeoutError\") {\n return new AbortSignalJobError(\n withJobErrorDiagnostics(`Provider call timed out for ${taskType} (${provider})`, err)\n );\n }\n // Catch abort patterns re-thrown as plain Errors (e.g. \"Pipeline download aborted\" from HFT)\n if (\n message.includes(\"Pipeline download aborted\") ||\n message.includes(\"Operation aborted\") ||\n message.includes(\"operation was aborted\") ||\n message.includes(\"The operation was aborted\")\n ) {\n return new AbortSignalJobError(\n withJobErrorDiagnostics(\n `Provider call aborted for ${taskType} (${provider}): ${message}`,\n err\n )\n );\n }\n\n // Incomplete model cache (e.g. missing preprocessor_config.json) — let the queue retry\n // so the provider re-downloads missing files on the next attempt.\n // The \"HFT_NULL_PROCESSOR:\" prefix is produced by HFT_Pipeline.ts\n // (HFT_NULL_PROCESSOR_PREFIX constant) when an image processor fails to initialize.\n if (message.startsWith(\"HFT_NULL_PROCESSOR:\")) {\n return new RetryableJobError(withJobErrorDiagnostics(message, err));\n }\n\n // Rate limiting (429) — retryable with backoff\n if (status === 429) {\n const retryAfterMatch = message.match(/retry.after[:\\s]*(\\d+)/i);\n const retryMs = retryAfterMatch ? parseInt(retryAfterMatch[1], 10) * 1000 : 30_000;\n return new RetryableJobError(\n withJobErrorDiagnostics(`Rate limited by ${provider} for ${taskType}: ${message}`, err),\n new Date(Date.now() + retryMs)\n );\n }\n\n // Auth errors (401, 403) — permanent\n if (status === 401 || status === 403) {\n return new PermanentJobError(\n withJobErrorDiagnostics(\n `Authentication failed for ${provider} (${taskType}): ${message}`,\n err\n )\n );\n }\n\n // Not found / invalid request (400, 404) — permanent\n if (status === 400 || status === 404) {\n return new PermanentJobError(\n withJobErrorDiagnostics(`Invalid request to ${provider} for ${taskType}: ${message}`, err)\n );\n }\n\n // Server errors (500, 502, 503, 529) — retryable\n if (status && status >= 500) {\n return new RetryableJobError(\n withJobErrorDiagnostics(\n `Server error from ${provider} for ${taskType} (HTTP ${status}): ${message}`,\n err\n )\n );\n }\n\n // Network errors — retryable\n if (\n message.includes(\"ECONNREFUSED\") ||\n message.includes(\"ECONNRESET\") ||\n message.includes(\"ETIMEDOUT\") ||\n message.includes(\"fetch failed\") ||\n message.includes(\"network\") ||\n (err instanceof TypeError && message.includes(\"fetch\"))\n ) {\n return new RetryableJobError(\n withJobErrorDiagnostics(`Network error calling ${provider} for ${taskType}: ${message}`, err)\n );\n }\n\n // Timeout errors — retryable\n if (message.includes(\"timed out\") || message.includes(\"timeout\")) {\n return new RetryableJobError(\n withJobErrorDiagnostics(`Timeout calling ${provider} for ${taskType}: ${message}`, err)\n );\n }\n\n // Default: treat unknown errors as permanent to avoid infinite retries\n return new PermanentJobError(\n withJobErrorDiagnostics(`Provider ${provider} failed for ${taskType}: ${message}`, err)\n );\n}\n\n/**\n * Extends the base Job class to provide custom execution functionality\n * through a provided function.\n */\nexport class AiJob<\n Input extends AiJobInput<TaskInput> = AiJobInput<TaskInput>,\n Output extends TaskOutput = TaskOutput,\n> extends Job<Input, Output> {\n /**\n * Executes the job using the provided function.\n */\n override async execute(input: Input, context: IJobExecuteContext): Promise<Output> {\n if (context.signal.aborted || this.status === JobStatus.ABORTING) {\n throw new AbortSignalJobError(\"Abort signal aborted before execution of job\");\n }\n\n let abortHandler: (() => void) | undefined;\n\n try {\n const abortPromise = new Promise<never>((_resolve, reject) => {\n const handler = () => {\n reject(new AbortSignalJobError(\"Abort signal seen, ending job\"));\n };\n\n context.signal.addEventListener(\"abort\", handler, { once: true });\n abortHandler = () => context.signal.removeEventListener(\"abort\", handler);\n });\n\n const runFn = async () => {\n const fn = getAiProviderRegistry().getDirectRunFn<Input[\"taskInput\"], Output>(\n input.aiProvider,\n input.taskType\n );\n const model = input.taskInput.model;\n // Second abort check after resolving run function (covers async gap)\n if (context.signal.aborted) {\n throw new AbortSignalJobError(\"Job aborted\");\n }\n\n // Apply timeout via AbortSignal.timeout combined with the caller's signal\n const timeoutMs = resolveAiJobTimeoutMs(input.aiProvider, input.timeoutMs);\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n const combinedSignal = AbortSignal.any([context.signal, timeoutSignal]);\n\n return await fn(\n input.taskInput,\n model,\n context.updateProgress,\n combinedSignal,\n input.outputSchema,\n input.sessionId\n );\n };\n const runFnPromise = runFn();\n\n return await Promise.race([runFnPromise, abortPromise]);\n } catch (err) {\n throw classifyProviderError(err, input.taskType, input.aiProvider);\n } finally {\n // Clean up the abort event listener to prevent memory leaks\n if (abortHandler) {\n abortHandler();\n }\n }\n }\n\n /**\n * Streaming execution: yields StreamEvents from the provider's stream function.\n * Falls back to non-streaming execute() if no stream function is registered.\n * On mid-stream errors, logs the failure, yields a finish event with the last\n * finish payload received (or an empty object if none was received), then\n * re-throws the classified error. Delta accumulation is the responsibility of\n * the caller (e.g. TaskRunner).\n */\n async *executeStream(\n input: Input,\n context: IJobExecuteContext\n ): AsyncIterable<StreamEvent<Output>> {\n if (context.signal.aborted || this.status === JobStatus.ABORTING) {\n throw new AbortSignalJobError(\"Abort signal aborted before streaming execution of job\");\n }\n\n const streamFn = getAiProviderRegistry().getStreamFn<Input[\"taskInput\"], Output>(\n input.aiProvider,\n input.taskType\n );\n\n if (!streamFn) {\n const result = await this.execute(input, context);\n yield { type: \"finish\", data: result } as StreamEvent<Output>;\n return;\n }\n\n const model = input.taskInput.model;\n let lastFinishData: Output | undefined;\n\n // Apply timeout via AbortSignal.timeout combined with the caller's signal\n const timeoutMs = resolveAiJobTimeoutMs(input.aiProvider, input.timeoutMs);\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n const combinedSignal = AbortSignal.any([context.signal, timeoutSignal]);\n\n try {\n for await (const event of streamFn(\n input.taskInput,\n model,\n combinedSignal,\n input.outputSchema,\n input.sessionId\n )) {\n if (event.type === \"finish\") {\n lastFinishData = event.data;\n }\n yield event;\n }\n } catch (err) {\n const logger = getLogger();\n logger.warn(\n `AiJob: Stream error for ${input.taskType} (${input.aiProvider}): ${err instanceof Error ? err.message : String(err)}`\n );\n\n // Yield a finish event with whatever data we accumulated\n if (lastFinishData === undefined) {\n yield { type: \"finish\", data: {} as Output } as StreamEvent<Output>;\n }\n\n throw classifyProviderError(err, input.taskType, input.aiProvider);\n }\n }\n}\n",
6
6
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TaskInput, TaskOutput } from \"@workglow/task-graph\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { globalServiceRegistry, WORKER_MANAGER } from \"@workglow/util/worker\";\nimport type { JsonSchema } from \"@workglow/util/worker\";\nimport { DirectExecutionStrategy } from \"../execution/DirectExecutionStrategy\";\nimport type { IAiExecutionStrategy, AiStrategyResolver } from \"../execution/IAiExecutionStrategy\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport type { AiProvider } from \"./AiProvider\";\n\n/**\n * Type for the run function for the AiJob.\n * The optional `outputSchema` is provided when the task declares structured output\n * (via `x-structured-output: true`). Providers use it to request schema-conformant\n * JSON output from the model API.\n */\nexport type AiProviderRunFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Model extends ModelConfig = ModelConfig,\n> = (\n input: Input,\n model: Model | undefined,\n update_progress: (progress: number, message?: string, details?: any) => void,\n signal: AbortSignal,\n outputSchema?: JsonSchema,\n sessionId?: string\n) => Promise<Output>;\n\n/**\n * Type for the reactive run function for AiTask.executeReactive().\n * Receives the current output alongside the input so it can return a fast preview.\n * No `signal` or `update_progress` -- reactive execution is lightweight and synchronous-ish.\n */\nexport type AiProviderReactiveRunFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Model extends ModelConfig = ModelConfig,\n> = (input: Input, output: Output, model: Model | undefined) => Promise<Output | undefined>;\n\n/**\n * Type for the streaming run function for the AiJob.\n * Returns an AsyncIterable of StreamEvents instead of a Promise.\n * No `update_progress` callback -- for streaming providers, the stream itself IS the progress signal.\n * The optional `outputSchema` is provided for structured output tasks.\n */\nexport type AiProviderStreamFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n Model extends ModelConfig = ModelConfig,\n> = (\n input: Input,\n model: Model | undefined,\n signal: AbortSignal,\n outputSchema?: JsonSchema,\n sessionId?: string\n) => AsyncIterable<StreamEvent<Output>>;\n\n/**\n * Registry that manages provider-specific task execution functions and job queues.\n * Handles the registration, retrieval, and execution of task processing functions\n * for different model providers and task types.\n */\nexport class AiProviderRegistry {\n runFnRegistry: Map<string, Map<string, AiProviderRunFn<any, any>>> = new Map();\n streamFnRegistry: Map<string, Map<string, AiProviderStreamFn<any, any>>> = new Map();\n reactiveRunFnRegistry: Map<string, Map<string, AiProviderReactiveRunFn<any, any>>> = new Map();\n private providers: Map<string, AiProvider<any>> = new Map();\n private strategyResolvers: Map<string, AiStrategyResolver> = new Map();\n private defaultStrategy: IAiExecutionStrategy | undefined;\n\n /**\n * Registers an AiProvider instance for lifecycle management and introspection.\n * @param provider - The provider instance to register\n */\n registerProvider(provider: AiProvider<any>): void {\n this.providers.set(provider.name, provider);\n }\n\n /**\n * Removes a previously registered provider and all of its run/stream/reactive functions.\n * Used for cleanup when provider initialization fails partway through.\n * @param name - The provider name to unregister\n */\n unregisterProvider(name: string): void {\n this.providers.delete(name);\n this.strategyResolvers.delete(name);\n // Remove all run functions for this provider\n for (const [, providerMap] of this.runFnRegistry) {\n providerMap.delete(name);\n }\n for (const [, providerMap] of this.streamFnRegistry) {\n providerMap.delete(name);\n }\n for (const [, providerMap] of this.reactiveRunFnRegistry) {\n providerMap.delete(name);\n }\n }\n\n /**\n * Retrieves a registered AiProvider instance by name.\n * @param name - The provider name (e.g., \"HF_TRANSFORMERS_ONNX\")\n * @returns The provider instance, or undefined if not found\n */\n getProvider(name: string): AiProvider<any> | undefined {\n return this.providers.get(name);\n }\n\n /**\n * Returns all registered AiProvider instances.\n */\n getProviders(): Map<string, AiProvider<any>> {\n return new Map(this.providers);\n }\n\n /**\n * Stable-sorted ids of all {@link AiProvider} instances currently registered\n * via {@link registerProvider} (typically after {@link AiProvider.register}).\n */\n getInstalledProviderIds(): string[] {\n return [...this.providers.keys()].sort();\n }\n\n /**\n * Registers a strategy resolver for a provider. The resolver receives the full\n * ModelConfig at execution time and returns the appropriate execution strategy.\n * This allows model-aware decisions (e.g., HFT WebGPU → queued, HFT WASM → direct).\n */\n registerStrategyResolver(providerName: string, resolver: AiStrategyResolver): void {\n this.strategyResolvers.set(providerName, resolver);\n }\n\n /**\n * Resolves the execution strategy for a given model config.\n * Falls back to DirectExecutionStrategy if no resolver is registered.\n */\n getStrategy(model: ModelConfig): IAiExecutionStrategy {\n const resolver = this.strategyResolvers.get(model.provider);\n if (resolver) return resolver(model);\n if (!this.defaultStrategy) {\n this.defaultStrategy = new DirectExecutionStrategy();\n }\n return this.defaultStrategy;\n }\n\n /**\n * Creates a session on the named provider.\n * @param providerName - The provider to create a session on\n * @param model - The model configuration for the session\n * @returns An opaque session ID\n * @throws If the provider is not registered\n */\n createSession(providerName: string, model: ModelConfig): string {\n const provider = this.providers.get(providerName);\n if (!provider) {\n throw new Error(\n `No provider found for \"${providerName}\". Register the provider before creating sessions.`\n );\n }\n return provider.createSession(model);\n }\n\n /**\n * Disposes a session on the named provider. Silently ignores unknown providers.\n * @param providerName - The provider that owns the session\n * @param sessionId - The session ID to dispose\n */\n async disposeSession(providerName: string, sessionId: string): Promise<void> {\n const provider = this.providers.get(providerName);\n if (provider) {\n await provider.disposeSession(sessionId);\n }\n }\n\n /**\n * Stable-sorted provider ids that have a direct run function registered for `taskType`.\n * Use this when the UI or validation should only offer providers that can execute a task\n * (e.g. {@link ModelSearchTask}).\n */\n getProviderIdsForTask(taskType: string): string[] {\n const taskMap = this.runFnRegistry.get(taskType);\n if (!taskMap) return [];\n return [...taskMap.keys()].sort();\n }\n\n /**\n * Registers a task execution function for a specific task type and model provider\n * @param taskType - The type of task (e.g., 'text-generation', 'embedding')\n * @param modelProvider - The provider of the model (e.g., 'hf-transformers', 'tf-mediapipe', 'openai', etc)\n * @param runFn - The function that executes the task\n */\n registerRunFn<Input extends TaskInput = TaskInput, Output extends TaskOutput = TaskOutput>(\n modelProvider: string,\n taskType: string,\n runFn: AiProviderRunFn<Input, Output>\n ) {\n if (!this.runFnRegistry.has(taskType)) {\n this.runFnRegistry.set(taskType, new Map());\n }\n this.runFnRegistry.get(taskType)!.set(modelProvider, runFn);\n }\n\n registerAsWorkerRunFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n >(modelProvider: string, taskType: string) {\n const workerFn: AiProviderRunFn<Input, Output> = async (\n input: Input,\n model: ModelConfig | undefined,\n update_progress: (progress: number, message?: string, details?: any) => void,\n signal?: AbortSignal,\n outputSchema?: JsonSchema,\n sessionId?: string\n ) => {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n const result = await workerManager.callWorkerFunction<Output>(\n modelProvider,\n taskType,\n [input, model, outputSchema, sessionId],\n {\n signal: signal,\n onProgress: update_progress,\n }\n );\n return result;\n };\n this.registerRunFn<Input, Output>(modelProvider, taskType, workerFn);\n }\n\n /**\n * Registers a streaming execution function for a specific task type and model provider.\n * @param modelProvider - The provider of the model (e.g., 'openai', 'anthropic', etc.)\n * @param taskType - The type of task (e.g., 'TextGenerationTask')\n * @param streamFn - The async generator function that yields StreamEvents\n */\n registerStreamFn<Input extends TaskInput = TaskInput, Output extends TaskOutput = TaskOutput>(\n modelProvider: string,\n taskType: string,\n streamFn: AiProviderStreamFn<Input, Output>\n ) {\n if (!this.streamFnRegistry.has(taskType)) {\n this.streamFnRegistry.set(taskType, new Map());\n }\n this.streamFnRegistry.get(taskType)!.set(modelProvider, streamFn);\n }\n\n /**\n * Registers a worker-proxied streaming function for a specific task type and model provider.\n * Creates a proxy that delegates streaming to a Web Worker via WorkerManager.\n * The proxy calls `callWorkerStreamFunction()` which sends a `stream: true` call message\n * and yields `stream_chunk` messages from the worker as an AsyncIterable.\n */\n registerAsWorkerStreamFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n >(modelProvider: string, taskType: string) {\n const streamFn: AiProviderStreamFn<Input, Output> = async function* (\n input: Input,\n model: ModelConfig | undefined,\n signal: AbortSignal,\n outputSchema?: JsonSchema,\n sessionId?: string\n ) {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n yield* workerManager.callWorkerStreamFunction<StreamEvent<Output>>(\n modelProvider,\n taskType,\n [input, model, outputSchema, sessionId],\n { signal }\n );\n };\n this.registerStreamFn<Input, Output>(modelProvider, taskType, streamFn);\n }\n\n /**\n * Retrieves the streaming execution function for a task type and model provider.\n * Returns undefined if no streaming function is registered (fallback to non-streaming).\n */\n getStreamFn<Input extends TaskInput = TaskInput, Output extends TaskOutput = TaskOutput>(\n modelProvider: string,\n taskType: string\n ): AiProviderStreamFn<Input, Output> | undefined {\n const taskTypeMap = this.streamFnRegistry.get(taskType);\n return taskTypeMap?.get(modelProvider) as AiProviderStreamFn<Input, Output> | undefined;\n }\n\n /**\n * Registers a worker-proxied reactive function for a specific task type and model provider.\n * Creates a proxy that delegates reactive execution to a Web Worker via WorkerManager.\n * Returns undefined (non-throwing) if the worker has no reactive function for the task type.\n */\n registerAsWorkerReactiveRunFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n >(modelProvider: string, taskType: string) {\n const reactiveFn: AiProviderReactiveRunFn<Input, Output> = async (\n input: Input,\n output: Output,\n model: ModelConfig | undefined\n ) => {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n return workerManager.callWorkerReactiveFunction<Output>(modelProvider, taskType, [\n input,\n output,\n model,\n ]);\n };\n this.registerReactiveRunFn<Input, Output>(modelProvider, taskType, reactiveFn);\n }\n\n /**\n * Registers a reactive execution function for a specific task type and model provider.\n * Called by AiTask.executeReactive() to provide a fast, lightweight preview without a network call.\n */\n registerReactiveRunFn<\n Input extends TaskInput = TaskInput,\n Output extends TaskOutput = TaskOutput,\n >(\n modelProvider: string,\n taskType: string,\n reactiveRunFn: AiProviderReactiveRunFn<Input, Output>\n ) {\n if (!this.reactiveRunFnRegistry.has(taskType)) {\n this.reactiveRunFnRegistry.set(taskType, new Map());\n }\n this.reactiveRunFnRegistry.get(taskType)!.set(modelProvider, reactiveRunFn);\n }\n\n /**\n * Retrieves the reactive execution function for a task type and model provider.\n * Returns undefined if no reactive function is registered (fallback to default behavior).\n */\n getReactiveRunFn<Input extends TaskInput = TaskInput, Output extends TaskOutput = TaskOutput>(\n modelProvider: string,\n taskType: string\n ): AiProviderReactiveRunFn<Input, Output> | undefined {\n const taskTypeMap = this.reactiveRunFnRegistry.get(taskType);\n return taskTypeMap?.get(modelProvider) as AiProviderReactiveRunFn<Input, Output> | undefined;\n }\n\n /**\n * Retrieves the direct execution function for a task type and model\n * Bypasses the job queue system for immediate execution\n */\n getDirectRunFn<Input extends TaskInput = TaskInput, Output extends TaskOutput = TaskOutput>(\n modelProvider: string,\n taskType: string\n ) {\n const taskTypeMap = this.runFnRegistry.get(taskType);\n const runFn = taskTypeMap?.get(modelProvider) as AiProviderRunFn<Input, Output> | undefined;\n if (!runFn) {\n const installedProviders = this.getInstalledProviderIds();\n const providersForTask = this.getProviderIdsForTask(taskType);\n const hint =\n providersForTask.length > 0\n ? ` Providers supporting \"${taskType}\": [${providersForTask.join(\", \")}].`\n : installedProviders.length > 0\n ? ` Installed providers: [${installedProviders.join(\", \")}] (none support \"${taskType}\").`\n : \" No providers are registered. Call provider.register() before running AI tasks.\";\n throw new Error(\n `No run function found for task type \"${taskType}\" and provider \"${modelProvider}\".${hint}`\n );\n }\n return runFn;\n }\n}\n\n// Singleton instance management for the ProviderRegistry\nlet providerRegistry: AiProviderRegistry = new AiProviderRegistry();\nexport function getAiProviderRegistry() {\n return providerRegistry;\n}\nexport function setAiProviderRegistry(pr: AiProviderRegistry) {\n providerRegistry = pr;\n}\n",
7
7
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { IExecuteContext, TaskInput, TaskOutput } from \"@workglow/task-graph\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { AiJob } from \"../job/AiJob\";\nimport type { AiJobInput } from \"../job/AiJob\";\nimport type { IAiExecutionStrategy } from \"./IAiExecutionStrategy\";\n\n/**\n * Executes AI jobs directly without a queue. Used by API providers\n * (OpenAI, Anthropic, etc.) and local providers that don't require\n * GPU serialization or concurrency control.\n */\nexport class DirectExecutionStrategy implements IAiExecutionStrategy {\n async execute(\n jobInput: AiJobInput<TaskInput>,\n context: IExecuteContext,\n runnerId: string | undefined\n ): Promise<TaskOutput> {\n const job = new AiJob({\n queueName: jobInput.aiProvider,\n jobRunId: runnerId,\n input: jobInput,\n });\n\n const cleanup = job.onJobProgress(\n (progress: number, message: string, details: Record<string, any> | null) => {\n context.updateProgress(progress, message, details);\n }\n );\n\n try {\n return await job.execute(jobInput, {\n signal: context.signal,\n updateProgress: context.updateProgress,\n });\n } finally {\n cleanup();\n }\n }\n\n async *executeStream(\n jobInput: AiJobInput<TaskInput>,\n context: IExecuteContext,\n runnerId: string | undefined\n ): AsyncIterable<StreamEvent<TaskOutput>> {\n const job = new AiJob({\n queueName: jobInput.aiProvider,\n jobRunId: runnerId,\n input: jobInput,\n });\n\n yield* job.executeStream(jobInput, {\n signal: context.signal,\n updateProgress: context.updateProgress,\n });\n }\n\n abort(): void {\n // No-op — abort handled via AbortSignal passed through context\n }\n}\n",
8
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AbortSignalJobError,\n ConcurrencyLimiter,\n JobQueueClient,\n JobQueueServer,\n} from \"@workglow/job-queue\";\nimport { InMemoryQueueStorage } from \"@workglow/storage\";\nimport { getTaskQueueRegistry, TaskConfigurationError } from \"@workglow/task-graph\";\nimport type { RegisteredQueue, IExecuteContext, TaskInput, TaskOutput } from \"@workglow/task-graph\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { AiJob } from \"../job/AiJob\";\nimport type { AiJobInput } from \"../job/AiJob\";\nimport type { IAiExecutionStrategy } from \"./IAiExecutionStrategy\";\n\n/**\n * Executes AI jobs through a job queue with concurrency control.\n * Used by providers that need GPU serialization (e.g., HFT with WebGPU,\n * LlamaCpp).\n *\n * The queue is created lazily on first use and registered in the\n * global TaskQueueRegistry for deduplication.\n */\nexport class QueuedExecutionStrategy implements IAiExecutionStrategy {\n /**\n * Memoized initialization promise so that concurrent calls to ensureQueue()\n * within the same strategy instance share a single queue-creation flow.\n */\n private initPromise: Promise<RegisteredQueue<AiJobInput<TaskInput>, TaskOutput>> | null = null;\n\n constructor(\n private readonly queueName: string,\n private readonly concurrency: number = 1,\n /**\n * When false, the strategy will use a pre-registered queue and throw if\n * none exists. When true (default), it auto-creates the queue on first use.\n */\n private readonly autoCreate: boolean = true\n ) {}\n\n async execute(\n jobInput: AiJobInput<TaskInput>,\n context: IExecuteContext,\n runnerId: string | undefined\n ): Promise<TaskOutput> {\n // Bail early to avoid submitting a job that's already been cancelled.\n if (context.signal.aborted) {\n throw context.signal.reason ?? new AbortSignalJobError(\"The operation was aborted\");\n }\n\n const registeredQueue = await this.ensureQueue();\n const { client } = registeredQueue;\n\n const handle = await client.submit(jobInput, {\n jobRunId: runnerId,\n maxRetries: 10,\n });\n\n // Wire the task abort signal to the queued job so that aborting the task\n // (e.g., via TaskRunner timeout) also cancels the in-flight queue job.\n const onAbort = () => {\n handle.abort().catch((err) => {\n console.warn(`Failed to abort queued job`, err);\n });\n };\n context.signal.addEventListener(\"abort\", onAbort);\n\n const cleanupProgress = handle.onProgress(\n (progress: number, message: string | undefined, details: Record<string, any> | null) => {\n context.updateProgress(progress, message, details);\n }\n );\n\n try {\n // Re-check after registering the listener to close the race window\n // between submit and listener registration.\n if (context.signal.aborted) {\n throw context.signal.reason ?? new AbortSignalJobError(\"The operation was aborted\");\n }\n const output = await handle.waitFor();\n return output as TaskOutput;\n } finally {\n cleanupProgress();\n context.signal.removeEventListener(\"abort\", onAbort);\n }\n }\n\n abort(): void {\n // No-op — abort is handled via the AbortSignal wired in execute().\n }\n\n /**\n * Streaming execution for queued providers. Because the job queue does not\n * support streaming outputs, this method routes through `execute()` so that\n * GPU serialization is preserved, then yields a single `finish` event with\n * the result. Callers that need true token-by-token streaming should use a\n * DirectExecutionStrategy provider instead.\n */\n async *executeStream(\n jobInput: AiJobInput<TaskInput>,\n context: IExecuteContext,\n runnerId: string | undefined\n ): AsyncIterable<StreamEvent<TaskOutput>> {\n const result = await this.execute(jobInput, context, runnerId);\n yield { type: \"finish\", data: result } as StreamEvent<TaskOutput>;\n }\n\n private ensureQueue(): Promise<RegisteredQueue<AiJobInput<TaskInput>, TaskOutput>> {\n if (!this.initPromise) {\n this.initPromise = this.createQueue().catch((err) => {\n // Reset so next execution retries (e.g., transient storage error or late queue registration).\n this.initPromise = null;\n throw err;\n });\n }\n return this.initPromise;\n }\n\n private async createQueue(): Promise<RegisteredQueue<AiJobInput<TaskInput>, TaskOutput>> {\n const registry = getTaskQueueRegistry();\n const existing = registry.getQueue<AiJobInput<TaskInput>, TaskOutput>(this.queueName);\n if (existing) {\n if (!existing.server.isRunning()) {\n await existing.server.start();\n }\n return existing;\n }\n\n if (!this.autoCreate) {\n throw new TaskConfigurationError(\n `Queue \"${this.queueName}\" is not registered and autoCreate is disabled. ` +\n `Register the queue before executing tasks with this provider.`\n );\n }\n\n const storage = new InMemoryQueueStorage<AiJobInput<TaskInput>, TaskOutput>(this.queueName);\n await storage.setupDatabase();\n\n const server = new JobQueueServer<AiJobInput<TaskInput>, TaskOutput>(AiJob, {\n storage,\n queueName: this.queueName,\n limiter: new ConcurrencyLimiter(this.concurrency),\n });\n\n const client = new JobQueueClient<AiJobInput<TaskInput>, TaskOutput>({\n storage,\n queueName: this.queueName,\n });\n\n client.attach(server);\n\n const registeredQueue: RegisteredQueue<AiJobInput<TaskInput>, TaskOutput> = {\n server,\n client,\n storage,\n };\n\n try {\n registry.registerQueue(registeredQueue);\n } catch (err: unknown) {\n if (err instanceof Error && err.message.includes(\"already exists\")) {\n // Another strategy instance won the race; use its queue. Stop the server\n // we just created (safe no-op since it was never started) to release any\n // resources eagerly, and drop our references so they can be GC'd.\n server.stop().catch((stopErr) => {\n console.warn(\"QueuedExecutionStrategy: failed to stop raced-out queue server\", stopErr);\n });\n const raced = registry.getQueue<AiJobInput<TaskInput>, TaskOutput>(this.queueName);\n if (raced) {\n if (!raced.server.isRunning()) {\n await raced.server.start();\n }\n return raced;\n }\n }\n throw err;\n }\n\n await server.start();\n return registeredQueue;\n }\n}\n",
8
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AbortSignalJobError,\n ConcurrencyLimiter,\n JobQueueClient,\n JobQueueServer,\n} from \"@workglow/job-queue\";\nimport type { ILimiter } from \"@workglow/job-queue\";\nimport { InMemoryQueueStorage } from \"@workglow/storage\";\nimport { getTaskQueueRegistry, TaskConfigurationError } from \"@workglow/task-graph\";\nimport type { RegisteredQueue, IExecuteContext, TaskInput, TaskOutput } from \"@workglow/task-graph\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { AiJob } from \"../job/AiJob\";\nimport type { AiJobInput } from \"../job/AiJob\";\nimport type { IAiExecutionStrategy } from \"./IAiExecutionStrategy\";\n\n/**\n * Executes AI jobs through a job queue with concurrency control.\n * Used by providers that need GPU serialization (e.g., HFT with WebGPU,\n * LlamaCpp).\n *\n * The queue is created lazily on first use and registered in the\n * global TaskQueueRegistry for deduplication.\n */\nexport class QueuedExecutionStrategy implements IAiExecutionStrategy {\n /**\n * Memoized initialization promise so that concurrent calls to ensureQueue()\n * within the same strategy instance share a single queue-creation flow.\n */\n private initPromise: Promise<RegisteredQueue<AiJobInput<TaskInput>, TaskOutput>> | null = null;\n\n /**\n * Shared limiter used by both the underlying JobQueueServer (for `execute`)\n * and `executeStream` below. Created lazily in createQueue() and reused so\n * streaming calls compete for the same concurrency slots as queued jobs.\n */\n private limiter: ILimiter | undefined;\n\n constructor(\n private readonly queueName: string,\n private readonly concurrency: number = 1,\n /**\n * When false, the strategy will use a pre-registered queue and throw if\n * none exists. When true (default), it auto-creates the queue on first use.\n */\n private readonly autoCreate: boolean = true\n ) {}\n\n async execute(\n jobInput: AiJobInput<TaskInput>,\n context: IExecuteContext,\n runnerId: string | undefined\n ): Promise<TaskOutput> {\n // Bail early to avoid submitting a job that's already been cancelled.\n if (context.signal.aborted) {\n throw context.signal.reason ?? new AbortSignalJobError(\"The operation was aborted\");\n }\n\n const registeredQueue = await this.ensureQueue();\n const { client } = registeredQueue;\n\n const handle = await client.submit(jobInput, {\n jobRunId: runnerId,\n maxRetries: 10,\n });\n\n // Wire the task abort signal to the queued job so that aborting the task\n // (e.g., via TaskRunner timeout) also cancels the in-flight queue job.\n const onAbort = () => {\n handle.abort().catch((err) => {\n console.warn(`Failed to abort queued job`, err);\n });\n };\n context.signal.addEventListener(\"abort\", onAbort);\n\n const cleanupProgress = handle.onProgress(\n (progress: number, message: string | undefined, details: Record<string, any> | null) => {\n context.updateProgress(progress, message, details);\n }\n );\n\n try {\n // Re-check after registering the listener to close the race window\n // between submit and listener registration.\n if (context.signal.aborted) {\n throw context.signal.reason ?? new AbortSignalJobError(\"The operation was aborted\");\n }\n const output = await handle.waitFor();\n return output as TaskOutput;\n } finally {\n cleanupProgress();\n context.signal.removeEventListener(\"abort\", onAbort);\n }\n }\n\n abort(): void {\n // No-op — abort is handled via the AbortSignal wired in execute().\n }\n\n /**\n * Streaming execution for queued providers. Runs the provider's stream\n * function directly (bypassing the storage-backed queue, which can't\n * forward mid-stream events) while still acquiring a slot from the same\n * concurrency limiter the queue uses so GPU serialization is preserved.\n *\n * AiJob.executeStream handles worker-proxy lookup, abort wiring, timeouts,\n * and error classification; we just gate it through the limiter.\n */\n async *executeStream(\n jobInput: AiJobInput<TaskInput>,\n context: IExecuteContext,\n runnerId: string | undefined\n ): AsyncIterable<StreamEvent<TaskOutput>> {\n if (context.signal.aborted) {\n throw context.signal.reason ?? new AbortSignalJobError(\"The operation was aborted\");\n }\n\n // Ensure the queue (and thus the shared limiter) has been created.\n await this.ensureQueue();\n const limiter = this.limiter;\n if (!limiter) {\n throw new TaskConfigurationError(\n `QueuedExecutionStrategy: limiter was not initialized for queue \"${this.queueName}\"`\n );\n }\n\n await this.acquireLimiterSlot(limiter, context.signal);\n\n try {\n const job = new AiJob({\n queueName: jobInput.aiProvider,\n jobRunId: runnerId,\n input: jobInput,\n });\n\n yield* job.executeStream(jobInput, {\n signal: context.signal,\n updateProgress: context.updateProgress,\n });\n } finally {\n await limiter.recordJobCompletion();\n }\n }\n\n /**\n * Spin-wait on `limiter.canProceed()` until a slot is available or the\n * abort signal fires. Yields to the microtask queue between polls; for\n * concurrency=1 with one caller at a time this usually takes one check.\n */\n private async acquireLimiterSlot(limiter: ILimiter, signal: AbortSignal): Promise<void> {\n const poll = async (): Promise<void> => {\n while (!(await limiter.canProceed())) {\n if (signal.aborted) {\n throw signal.reason ?? new AbortSignalJobError(\"The operation was aborted\");\n }\n const next = await limiter.getNextAvailableTime();\n const delay = Math.max(0, next.getTime() - Date.now());\n await new Promise<void>((resolve) => setTimeout(resolve, Math.min(delay, 50)));\n }\n };\n await poll();\n await limiter.recordJobStart();\n }\n\n private ensureQueue(): Promise<RegisteredQueue<AiJobInput<TaskInput>, TaskOutput>> {\n if (!this.initPromise) {\n this.initPromise = this.createQueue().catch((err) => {\n // Reset so next execution retries (e.g., transient storage error or late queue registration).\n this.initPromise = null;\n throw err;\n });\n }\n return this.initPromise;\n }\n\n private async createQueue(): Promise<RegisteredQueue<AiJobInput<TaskInput>, TaskOutput>> {\n const registry = getTaskQueueRegistry();\n const existing = registry.getQueue<AiJobInput<TaskInput>, TaskOutput>(this.queueName);\n if (existing) {\n if (!existing.server.isRunning()) {\n await existing.server.start();\n }\n this.limiter = existing.server.limiter;\n return existing;\n }\n\n if (!this.autoCreate) {\n throw new TaskConfigurationError(\n `Queue \"${this.queueName}\" is not registered and autoCreate is disabled. ` +\n `Register the queue before executing tasks with this provider.`\n );\n }\n\n const storage = new InMemoryQueueStorage<AiJobInput<TaskInput>, TaskOutput>(this.queueName);\n await storage.setupDatabase();\n\n this.limiter = new ConcurrencyLimiter(this.concurrency);\n const server = new JobQueueServer<AiJobInput<TaskInput>, TaskOutput>(AiJob, {\n storage,\n queueName: this.queueName,\n limiter: this.limiter,\n });\n\n const client = new JobQueueClient<AiJobInput<TaskInput>, TaskOutput>({\n storage,\n queueName: this.queueName,\n });\n\n client.attach(server);\n\n const registeredQueue: RegisteredQueue<AiJobInput<TaskInput>, TaskOutput> = {\n server,\n client,\n storage,\n };\n\n try {\n registry.registerQueue(registeredQueue);\n } catch (err: unknown) {\n if (err instanceof Error && err.message.includes(\"already exists\")) {\n // Another strategy instance won the race; use its queue. Stop the server\n // we just created (safe no-op since it was never started) to release any\n // resources eagerly, and drop our references so they can be GC'd.\n server.stop().catch((stopErr) => {\n console.warn(\"QueuedExecutionStrategy: failed to stop raced-out queue server\", stopErr);\n });\n const raced = registry.getQueue<AiJobInput<TaskInput>, TaskOutput>(this.queueName);\n if (raced) {\n if (!raced.server.isRunning()) {\n await raced.server.start();\n }\n this.limiter = raced.server.limiter;\n return raced;\n }\n }\n throw err;\n }\n\n await server.start();\n return registeredQueue;\n }\n}\n",
9
9
  "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { JsonSchema } from \"@workglow/util/worker\";\n\n/**\n * A tool definition that can be passed to an LLM for tool calling.\n * Can be created manually or generated from TaskRegistry entries via `taskTypesToTools` in ToolCallingTask.\n *\n * The `name` is used both as the tool name presented to the LLM and as a\n * lookup key for the backing Task in the TaskRegistry. When a tool is\n * backed by a configurable task (e.g. `McpToolCallTask`, `JavaScriptTask`),\n * `configSchema` describes what configuration the task accepts and `config`\n * provides the concrete values. The LLM never sees `configSchema` or\n * `config` — they are setup-time concerns used when instantiating the task.\n */\nexport interface ToolDefinition {\n name: string;\n description: string;\n inputSchema: JsonSchema;\n outputSchema?: JsonSchema;\n /**\n * Optional discriminator for tool resolution. When specified, skips\n * duck-typing heuristics:\n * - `\"function\"` — uses the `execute` function directly\n * - `\"task\"` — looks up the task by `name` in the TaskRegistry\n *\n * When omitted, resolution falls back to the existing heuristic\n * (check `execute`, then registry lookup, then stub).\n */\n type?: \"function\" | \"task\";\n /** JSON Schema describing the task's configuration options. */\n configSchema?: JsonSchema;\n /** Concrete configuration values matching {@link configSchema}. */\n config?: Record<string, unknown>;\n /**\n * Optional custom executor function. When provided, the tool is executed\n * by calling this function directly instead of instantiating a Task.\n */\n execute?: (input: Record<string, unknown>) => Promise<Record<string, unknown>>;\n}\n\n/**\n * A tool call returned by the LLM, requesting invocation of a specific tool.\n */\nexport interface ToolCall {\n id: string;\n name: string;\n input: Record<string, unknown>;\n}\n\nexport type ToolCalls = Array<ToolCall>;\n\n/**\n * Controls which tools the model may call.\n * - `\"auto\"` — model decides whether to call tools\n * - `\"none\"` — model must not call any tools\n * - `\"required\"` — model must call at least one tool\n * - any other string — model must call the tool with that name\n */\nexport type ToolChoiceOption = \"auto\" | \"none\" | \"required\" | (string & {});\n\n/**\n * Builds a tool description string for provider APIs, appending the output\n * schema when present. Shared across all provider implementations.\n */\nexport function buildToolDescription(tool: ToolDefinition): string {\n let desc = tool.description;\n if (tool.outputSchema && typeof tool.outputSchema === \"object\") {\n desc += `\\n\\nReturns: ${JSON.stringify(tool.outputSchema)}`;\n }\n return desc;\n}\n\n/**\n * Validates that a tool call name returned by the LLM matches one of the\n * allowed tool definitions. Returns true if valid, false otherwise.\n */\nexport function isAllowedToolName(\n name: string,\n allowedTools: ReadonlyArray<ToolDefinition>\n): boolean {\n return allowedTools.some((t) => t.name === name);\n}\n\n/**\n * Filters an array of tool calls, removing any whose name does not appear\n * in the provided tools list. Returns the filtered array.\n */\nexport function filterValidToolCalls(\n toolCalls: ToolCalls,\n allowedTools: ReadonlyArray<ToolDefinition>\n): ToolCalls {\n return toolCalls.filter((tc) => {\n if (tc.name && isAllowedToolName(tc.name, allowedTools)) {\n return true;\n }\n getLogger().warn(`Filtered out tool call with unknown name \"${tc.name ?? \"(missing)\"}\"`, {\n callId: tc.id,\n toolName: tc.name,\n });\n return false;\n });\n}\n",
10
10
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { InMemoryTabularStorage } from \"@workglow/storage\";\nimport { ModelRepository } from \"./ModelRepository\";\nimport { ModelPrimaryKeyNames, ModelRecordSchema } from \"./ModelSchema\";\n\n/**\n * In-memory implementation of a model repository.\n * Provides storage and retrieval for models and task-to-model mappings.\n */\nexport class InMemoryModelRepository extends ModelRepository {\n constructor() {\n super(new InMemoryTabularStorage(ModelRecordSchema, ModelPrimaryKeyNames));\n }\n}\n",
11
11
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ITabularStorage } from \"@workglow/storage\";\nimport { EventEmitter, EventParameters } from \"@workglow/util\";\nimport { compileSchema } from \"@workglow/util/schema\";\nimport type { DataPortSchemaObject, SchemaNode } from \"@workglow/util/schema\";\n\nimport { ModelPrimaryKeyNames, ModelRecord, ModelRecordSchema } from \"./ModelSchema\";\n\n/**\n * Events that can be emitted by the ModelRepository\n */\n\nexport type ModelEventListeners = {\n model_added: (model: ModelRecord) => void;\n model_removed: (model: ModelRecord) => void;\n model_updated: (model: ModelRecord) => void;\n};\n\nexport type ModelEvents = keyof ModelEventListeners;\n\nexport type ModelEventListener<Event extends ModelEvents> = ModelEventListeners[Event];\n\nexport type ModelEventParameters<Event extends ModelEvents> = EventParameters<\n ModelEventListeners,\n Event\n>;\n\n/**\n * Base class for managing AI models and their relationships with tasks.\n * Provides functionality for storing, retrieving, and managing the lifecycle of models\n * and their associations with specific tasks.\n */\nexport class ModelRepository {\n /**\n * Repository for storing and managing Model instances\n */\n protected readonly modelTabularRepository: ITabularStorage<\n typeof ModelRecordSchema,\n typeof ModelPrimaryKeyNames\n >;\n constructor(\n modelTabularRepository: ITabularStorage<\n typeof ModelRecordSchema,\n typeof ModelPrimaryKeyNames,\n ModelRecord\n >\n ) {\n this.modelTabularRepository = modelTabularRepository;\n }\n\n /** Event emitter for repository events */\n protected events = new EventEmitter<ModelEventListeners>();\n\n /** Cached compiled validation schema, lazily built on first validate call */\n private compiledValidationSchema: SchemaNode | undefined;\n\n /**\n * Returns the JSON schema used to validate model records before persistence.\n * Subclasses can override this to accept additional properties (for example,\n * owner/project IDs in repositories scoped to a user's workspace).\n */\n protected getValidationSchema(): DataPortSchemaObject {\n return ModelRecordSchema;\n }\n\n /**\n * Validates a model record against {@link getValidationSchema}.\n * @throws if the record fails schema validation\n */\n protected validateModelRecord(model: ModelRecord): void {\n if (!this.compiledValidationSchema) {\n this.compiledValidationSchema = compileSchema(this.getValidationSchema());\n }\n const result = this.compiledValidationSchema.validate(model);\n if (!result.valid) {\n const errorMessages = result.errors.map((e) => {\n const path = e.data?.pointer || \"\";\n return `${e.message}${path ? ` (${path})` : \"\"}`;\n });\n throw new Error(`Invalid model record: ${errorMessages.join(\", \")}`);\n }\n }\n\n /**\n * Sets up the database for the repository.\n * Must be called before using any other methods.\n */\n async setupDatabase(): Promise<void> {\n await this.modelTabularRepository.setupDatabase?.();\n }\n\n /**\n * Registers an event listener for the specified event\n * @param name - The event name to listen for\n * @param fn - The callback function to execute when the event occurs\n */\n on<Event extends ModelEvents>(name: Event, fn: ModelEventListener<Event>) {\n this.events.on(name, fn);\n }\n\n /**\n * Removes an event listener for the specified event\n * @param name - The event name to stop listening for\n * @param fn - The callback function to remove\n */\n off<Event extends ModelEvents>(name: Event, fn: ModelEventListener<Event>) {\n this.events.off(name, fn);\n }\n\n /**\n * Adds an event listener that will only be called once\n * @param name - The event name to listen for\n * @param fn - The callback function to execute when the event occurs\n */\n once<Event extends ModelEvents>(name: Event, fn: ModelEventListener<Event>) {\n this.events.once(name, fn);\n }\n\n /**\n * Returns when the event was emitted (promise form of once)\n * @param name - The event name to check\n * @returns a promise that resolves to the event listener parameters\n */\n waitOn<Event extends ModelEvents>(name: Event) {\n return this.events.waitOn(name);\n }\n\n /**\n * Adds a new model to the repository.\n * Validates against the schema returned by {@link getValidationSchema} and rejects duplicates.\n * @param model - The model instance to add\n * @throws if the model fails schema validation or a model with the same model_id already exists\n */\n async addModel(model: ModelRecord): Promise<ModelRecord> {\n this.validateModelRecord(model);\n\n const existing = await this.modelTabularRepository.get({ model_id: model.model_id });\n if (existing) {\n throw new Error(`Model with id \"${model.model_id}\" already exists`);\n }\n\n await this.modelTabularRepository.put(model);\n this.events.emit(\"model_added\", model);\n return model;\n }\n\n /**\n * Updates an existing model in the repository.\n * Validates against the schema returned by {@link getValidationSchema} and requires the model to already exist.\n * @param model - The model instance with updated fields\n * @throws if the model fails schema validation or the model_id does not exist\n */\n async updateModel(model: ModelRecord): Promise<ModelRecord> {\n this.validateModelRecord(model);\n\n const existing = await this.modelTabularRepository.get({ model_id: model.model_id });\n if (!existing) {\n throw new Error(`Model with id \"${model.model_id}\" not found`);\n }\n\n await this.modelTabularRepository.put(model);\n this.events.emit(\"model_updated\", model);\n return model;\n }\n\n /**\n * Removes a model from the repository\n * @param model_id - The model_id of the model to remove\n */\n async removeModel(model_id: string): Promise<void> {\n const model = await this.modelTabularRepository.get({ model_id });\n if (!model) {\n throw new Error(`Model with id \"${model_id}\" not found`);\n }\n await this.modelTabularRepository.delete({ model_id });\n this.events.emit(\"model_removed\", model);\n }\n\n /**\n * Finds all models associated with a specific task\n * @param task - The task identifier to search for\n * @returns Promise resolving to an array of associated models, or undefined if none found\n */\n async findModelsByTask(task: string) {\n if (typeof task != \"string\") return undefined;\n const allModels = await this.modelTabularRepository.getAll();\n if (!allModels || allModels.length === 0) return undefined;\n const models = allModels.filter((model) => model.tasks?.includes(task));\n if (models.length === 0) return undefined;\n return models;\n }\n\n /**\n * Finds all tasks associated with a specific model\n * @param model - The model identifier to search for\n * @returns Promise resolving to an array of associated tasks, or undefined if none found\n */\n async findTasksByModel(model_id: string) {\n if (typeof model_id != \"string\") return undefined;\n const modelRecord = await this.modelTabularRepository.get({ model_id });\n if (!modelRecord) return undefined;\n return modelRecord.tasks && modelRecord.tasks.length > 0 ? modelRecord.tasks : undefined;\n }\n\n /**\n * Enumerates all tasks in the repository\n * @returns Promise resolving to an array of task identifiers\n */\n async enumerateAllTasks() {\n const allModels = await this.modelTabularRepository.getAll();\n if (!allModels || allModels.length === 0) return undefined;\n const uniqueTasks = new Set<string>();\n for (const model of allModels) {\n if (model.tasks) {\n for (const task of model.tasks) {\n uniqueTasks.add(task);\n }\n }\n }\n return uniqueTasks.size > 0 ? Array.from(uniqueTasks) : undefined;\n }\n\n /**\n * Enumerates all models in the repository\n * @returns Promise resolving to an array of model instances\n */\n async enumerateAllModels(): Promise<ModelRecord[] | undefined> {\n const models = await this.modelTabularRepository.getAll();\n if (!models || models.length === 0) return undefined;\n return models;\n }\n\n /**\n * Retrieves a model by its identifier\n * @param modelId - The model_id of the model to find\n * @returns Promise resolving to the found model or undefined if not found\n */\n async findByName(model_id: string): Promise<ModelRecord | undefined> {\n if (typeof model_id != \"string\") return undefined;\n const model = await this.modelTabularRepository.get({ model_id });\n return model ?? undefined;\n }\n\n /**\n * Gets the total number of models in the repository\n * @returns Promise resolving to the number of stored models\n */\n async size(): Promise<number> {\n return await this.modelTabularRepository.size();\n }\n}\n",
@@ -13,15 +13,18 @@
13
13
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n createServiceToken,\n globalServiceRegistry,\n registerInputCompactor,\n registerInputResolver,\n ServiceRegistry,\n} from \"@workglow/util\";\nimport { InMemoryModelRepository } from \"./InMemoryModelRepository\";\nimport { ModelRepository } from \"./ModelRepository\";\nimport type { ModelConfig } from \"./ModelSchema\";\n\n/**\n * Service token for the global model repository\n */\nexport const MODEL_REPOSITORY = createServiceToken<ModelRepository>(\"model.repository\");\n\n// Register default factory if not already registered\nglobalServiceRegistry.registerIfAbsent(\n MODEL_REPOSITORY,\n (): ModelRepository => new InMemoryModelRepository(),\n true\n);\n\n/**\n * Gets the global model repository instance\n * @returns The model repository instance\n */\nexport function getGlobalModelRepository(): ModelRepository {\n return globalServiceRegistry.get(MODEL_REPOSITORY);\n}\n\n/**\n * Sets the global model repository instance\n * @param repository The model repository instance to register\n */\nexport function setGlobalModelRepository(repository: ModelRepository): void {\n globalServiceRegistry.registerInstance(MODEL_REPOSITORY, repository);\n}\n\n/**\n * Resolves a model ID to a ModelConfig from the repository.\n * Used by the input resolver system.\n */\nasync function resolveModelFromRegistry(\n id: string,\n format: string,\n registry: ServiceRegistry\n): Promise<ModelConfig | undefined> {\n const modelRepo = registry.has(MODEL_REPOSITORY)\n ? registry.get<ModelRepository>(MODEL_REPOSITORY)\n : getGlobalModelRepository();\n\n const model = await modelRepo.findByName(id);\n if (!model) {\n throw new Error(`Model \"${id}\" not found in repository`);\n }\n return model;\n}\n\n// Register the model resolver for format: \"model\" and \"model:*\"\nregisterInputResolver(\"model\", resolveModelFromRegistry);\n\n// Register the model compactor — extracts model_id from a ModelConfig\nregisterInputCompactor(\"model\", async (value, _format, registry) => {\n if (typeof value === \"object\" && value !== null && \"model_id\" in value) {\n const id = (value as Record<string, unknown>).model_id;\n if (typeof id !== \"string\") return undefined;\n const modelRepo = registry.has(MODEL_REPOSITORY)\n ? registry.get<ModelRepository>(MODEL_REPOSITORY)\n : getGlobalModelRepository();\n\n const model = await modelRepo.findByName(id);\n if (!model) return undefined;\n return id;\n }\n return undefined;\n});\n",
14
14
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TaskInput, TaskOutput } from \"@workglow/task-graph\";\nimport type { WorkerServerBase as WorkerServer } from \"@workglow/util/worker\";\nimport { globalServiceRegistry, WORKER_MANAGER } from \"@workglow/util/worker\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport type {\n AiProviderReactiveRunFn,\n AiProviderRunFn,\n AiProviderStreamFn,\n} from \"./AiProviderRegistry\";\nimport { getAiProviderRegistry } from \"./AiProviderRegistry\";\n\n/**\n * Job queue concurrency: one limit for the primary ({@link QueuedAiProvider} hardware) queue,\n * or per-slot limits. Hugging Face Transformers ONNX uses `gpu` and `cpu` for its two queues.\n */\nexport type AiProviderQueueConcurrency = number | Record<string, number>;\nexport const DEFAULT_AI_PROVIDER_WORKER_IDLE_TIMEOUT_MS = 15 * 60 * 1000;\n\n/**\n * Resolves the primary (e.g. WebGPU) queue limit for {@link QueuedAiProvider}.\n * A numeric `concurrency` sets that queue; a record uses `gpu` (default 1).\n */\nexport function resolveAiProviderGpuQueueConcurrency(\n concurrency: AiProviderQueueConcurrency | undefined\n): number {\n if (concurrency === undefined) {\n return 1;\n }\n if (typeof concurrency === \"number\") {\n return concurrency;\n }\n return concurrency.gpu ?? 1;\n}\n\n/**\n * Options for registering an AI provider on the main thread.\n *\n * - If the provider was constructed **with** task run functions → **inline** registration\n * (direct run fns). No `worker` option.\n * - If the provider was constructed **without** tasks → **worker** registration (proxies).\n * A `worker` (instance or lazy factory) is **required**.\n */\nexport interface AiProviderRegisterOptions {\n /**\n * Web Worker for worker-backed registration. Pass a `Worker` or a factory\n * `() => Worker` to defer instantiation until the first job (lazy worker).\n */\n worker?: Worker | (() => Worker);\n /**\n * Idle timeout for factory-backed worker registrations. `0` disables idle termination.\n * Defaults to 15 minutes for AI providers when `worker` is a factory.\n */\n workerIdleTimeoutMs?: number;\n /** Job queue configuration */\n queue?: {\n /**\n * Concurrent jobs on the provider's primary queued path (e.g. GPU), default 1.\n * Use a record for multiple queues — e.g. `{ gpu: 1, cpu: 4 }` for Hugging Face\n * Transformers ONNX (`cpu` defaults to 4 in production and 1 under test when omitted).\n */\n concurrency?: AiProviderQueueConcurrency;\n /** Set to false to skip automatic queue creation. Defaults to true. */\n autoCreate?: boolean;\n };\n}\n\n/**\n * Registration context passed to {@link AiProvider.onInitialize}, including whether\n * the provider is registering inline (tasks present) or worker-backed (no tasks).\n */\nexport interface AiProviderRegisterContext extends AiProviderRegisterOptions {\n readonly isInline: boolean;\n}\n\n/**\n * Abstract base class for AI providers.\n *\n * Each provider subclass declares a `taskTypes` array listing the task type\n * names it supports. The actual run function implementations (`tasks` record)\n * are **injected via the constructor** so that heavy ML library imports remain\n * at the call site. This allows the provider class to be imported on the main\n * thread without pulling in heavy dependencies when running in worker mode.\n *\n * The base class handles:\n * - Registering run functions with the AiProviderRegistry (inline or worker proxies)\n * - Registering functions on a WorkerServer (for worker-side code)\n * - Lifecycle management (initialize / dispose)\n *\n * @example\n * ```typescript\n * // Worker host (main thread) -- lightweight, no heavy task imports:\n * await new MyProvider().register({\n * worker: () => new Worker(new URL(\"./worker.ts\", import.meta.url), { type: \"module\" }),\n * });\n *\n * // Inline -- caller provides the tasks (imports heavy library):\n * import { MY_TASKS } from \"./MyJobRunFns\";\n * await new MyProvider(MY_TASKS).register();\n *\n * // Worker side -- caller provides the tasks:\n * import { MY_TASKS } from \"./MyJobRunFns\";\n * new MyProvider(MY_TASKS).registerOnWorkerServer(workerServer);\n * ```\n */\nexport abstract class AiProvider<TModelConfig extends ModelConfig = ModelConfig> {\n /** Unique provider identifier (e.g., \"HF_TRANSFORMERS_ONNX\") */\n abstract readonly name: string;\n\n /**\n * Human-readable label for the provider (UI, JSON Schema `x-ui-enum-labels`, etc.).\n */\n abstract readonly displayName: string;\n\n /** Whether this provider runs models locally (on the same machine). */\n abstract readonly isLocal: boolean;\n\n /** Whether this provider can run in a browser environment. */\n abstract readonly supportsBrowser: boolean;\n\n /**\n * List of task type names this provider supports.\n * This is lightweight metadata -- no heavy library imports needed.\n */\n abstract readonly taskTypes: readonly string[];\n\n /**\n * Map of task type names to their run functions.\n * Injected via constructor. Required for inline mode and worker-server\n * registration; not needed for worker-mode registration on the main thread.\n */\n protected readonly tasks?: Record<string, AiProviderRunFn<any, any, TModelConfig>>;\n\n /**\n * Map of task type names to their streaming run functions.\n * Injected via constructor alongside `tasks`. Only needed for tasks that\n * support streaming output (e.g., text generation, summarization).\n */\n protected readonly streamTasks?: Record<string, AiProviderStreamFn<any, any, TModelConfig>>;\n\n /**\n * Map of task type names to their reactive run functions.\n * Injected via constructor alongside `tasks`. Only needed for tasks that\n * provide lightweight reactive previews via executeReactive().\n */\n protected readonly reactiveTasks?: Record<\n string,\n AiProviderReactiveRunFn<any, any, TModelConfig>\n >;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, TModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, TModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, TModelConfig>>\n ) {\n this.tasks = tasks;\n this.streamTasks = streamTasks;\n this.reactiveTasks = reactiveTasks;\n }\n\n /** Get all task type names this provider supports */\n get supportedTaskTypes(): readonly string[] {\n return this.taskTypes;\n }\n\n /**\n * Get the run function for a specific task type.\n * @param taskType - The task type name (e.g., \"TextEmbeddingTask\")\n * @returns The run function, or undefined if the task type is not supported or tasks not provided\n */\n getRunFn<I extends TaskInput = TaskInput, O extends TaskOutput = TaskOutput>(\n taskType: string\n ): AiProviderRunFn<I, O, TModelConfig> | undefined {\n return this.tasks?.[taskType] as AiProviderRunFn<I, O, TModelConfig> | undefined;\n }\n\n /**\n * Get the streaming function for a specific task type.\n * @param taskType - The task type name (e.g., \"TextGenerationTask\")\n * @returns The stream function, or undefined if streaming is not supported for this task type\n */\n getStreamFn<I extends TaskInput = TaskInput, O extends TaskOutput = TaskOutput>(\n taskType: string\n ): AiProviderStreamFn<I, O, TModelConfig> | undefined {\n return this.streamTasks?.[taskType] as AiProviderStreamFn<I, O, TModelConfig> | undefined;\n }\n\n /**\n * Get the reactive run function for a specific task type.\n * @param taskType - The task type name (e.g., \"CountTokensTask\")\n * @returns The reactive function, or undefined if not supported for this task type\n */\n getReactiveRunFn<I extends TaskInput = TaskInput, O extends TaskOutput = TaskOutput>(\n taskType: string\n ): AiProviderReactiveRunFn<I, O, TModelConfig> | undefined {\n return this.reactiveTasks?.[taskType] as\n | AiProviderReactiveRunFn<I, O, TModelConfig>\n | undefined;\n }\n\n /**\n * Register this provider on the main thread.\n *\n * Inferred from constructor: **with** tasks → direct run functions; **without** tasks →\n * worker proxies (requires `worker` in options).\n *\n * Creates a job queue unless `queue.autoCreate` is set to false.\n *\n * @param options - Registration options (worker for worker-backed, queue config)\n */\n async register(options: AiProviderRegisterOptions = {}): Promise<void> {\n const isInline = !!this.tasks;\n const context: AiProviderRegisterContext = { ...options, isInline };\n await this.onInitialize(context);\n\n if (isInline) {\n if (!this.tasks) {\n throw new Error(\n `AiProvider \"${this.name}\": tasks must be provided via the constructor for inline registration. ` +\n `Pass the tasks record when constructing the provider, e.g. new MyProvider(MY_TASKS).`\n );\n }\n } else {\n if (!options.worker) {\n throw new Error(\n `AiProvider \"${this.name}\": worker is required when no tasks are provided (worker-backed registration). ` +\n `Pass worker: new Worker(...) or worker: () => new Worker(...).`\n );\n }\n }\n\n const registry = getAiProviderRegistry();\n\n if (!isInline && options.worker) {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n if (typeof options.worker === \"function\") {\n workerManager.registerWorker(this.name, options.worker, {\n idleTimeoutMs: options.workerIdleTimeoutMs ?? DEFAULT_AI_PROVIDER_WORKER_IDLE_TIMEOUT_MS,\n });\n } else {\n workerManager.registerWorker(this.name, options.worker);\n }\n for (const taskType of this.taskTypes) {\n registry.registerAsWorkerRunFn(this.name, taskType);\n registry.registerAsWorkerStreamFn(this.name, taskType);\n registry.registerAsWorkerReactiveRunFn(this.name, taskType);\n }\n } else {\n for (const [taskType, fn] of Object.entries(this.tasks!)) {\n registry.registerRunFn(this.name, taskType, fn as AiProviderRunFn);\n }\n if (this.streamTasks) {\n for (const [taskType, fn] of Object.entries(this.streamTasks)) {\n registry.registerStreamFn(this.name, taskType, fn as AiProviderStreamFn);\n }\n }\n }\n\n if (this.reactiveTasks) {\n for (const [taskType, fn] of Object.entries(this.reactiveTasks)) {\n registry.registerReactiveRunFn(this.name, taskType, fn as AiProviderReactiveRunFn);\n }\n }\n\n registry.registerProvider(this);\n\n try {\n await this.afterRegister(options);\n } catch (err) {\n // Clean up the partially-registered provider so the registry isn't left\n // in an inconsistent state (e.g., functions registered but no queue).\n registry.unregisterProvider(this.name);\n throw err;\n }\n }\n\n /**\n * Register this provider's run functions on a WorkerServer.\n * Call this inside a Web Worker to make the provider's functions\n * available for remote invocation from the main thread.\n *\n * Requires `tasks` to have been provided via the constructor.\n *\n * @param workerServer - The WorkerServer instance to register on\n */\n registerOnWorkerServer(workerServer: WorkerServer): void {\n if (!this.tasks) {\n throw new Error(\n `AiProvider \"${this.name}\": tasks must be provided via the constructor for worker server registration. ` +\n `Pass the tasks record when constructing the provider, e.g. new MyProvider(MY_TASKS).`\n );\n }\n for (const [taskType, fn] of Object.entries(this.tasks)) {\n workerServer.registerFunction(taskType, fn);\n }\n if (this.streamTasks) {\n for (const [taskType, fn] of Object.entries(this.streamTasks)) {\n workerServer.registerStreamFunction(taskType, fn);\n }\n }\n if (this.reactiveTasks) {\n for (const [taskType, fn] of Object.entries(this.reactiveTasks)) {\n workerServer.registerReactiveFunction(taskType, fn);\n }\n }\n }\n\n /**\n * Hook for provider-specific initialization.\n * Called at the start of `register()`, before any functions are registered.\n * Override in subclasses to perform setup (e.g., configuring WASM backends).\n */\n protected async onInitialize(_options: AiProviderRegisterContext): Promise<void> {}\n\n /**\n * Dispose of provider resources.\n * Override in subclasses to clean up (e.g., clearing pipeline caches).\n */\n async dispose(): Promise<void> {}\n\n /**\n * Create a session for the given model configuration.\n * Returns an opaque session ID that can be passed to run/stream functions\n * to reuse provider-side resources (e.g., a loaded pipeline or KV cache).\n *\n * The base implementation returns a random UUID; provider subclasses\n * (e.g., HF Transformers, llama-cpp) override this to allocate real resources.\n */\n createSession(_model: ModelConfig): string {\n return crypto.randomUUID();\n }\n\n /**\n * Dispose of a previously created session.\n * Provider subclasses override this to release resources tied to the session.\n * The base implementation is a no-op.\n */\n async disposeSession(_sessionId: string): Promise<void> {}\n\n /**\n * Called at the end of {@link register} after registry wiring.\n * {@link QueuedAiProvider} overrides this to create the default job queue; the base\n * implementation is a no-op so worker-only provider classes stay free of queue/storage.\n */\n protected async afterRegister(_options: AiProviderRegisterOptions): Promise<void> {}\n}\n",
15
15
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { QueuedExecutionStrategy } from \"../execution/QueuedExecutionStrategy\";\nimport type { IAiExecutionStrategy } from \"../execution/IAiExecutionStrategy\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { AiProvider, resolveAiProviderGpuQueueConcurrency } from \"./AiProvider\";\nimport type { AiProviderRegisterOptions } from \"./AiProvider\";\nimport { getAiProviderRegistry } from \"./AiProviderRegistry\";\n\n/**\n * AI provider base that registers a {@link QueuedExecutionStrategy} for\n * GPU-bound providers that need serialized access to hardware resources.\n *\n * Subclasses can override {@link getStrategyForModel} to make the decision\n * model-aware (e.g., HFT returns queued for WebGPU but direct for WASM).\n *\n * When `queue.autoCreate` is `false` (default: `true`), the strategy resolver\n * is still registered but the queue is not auto-created — execution will succeed\n * only if a matching queue was pre-registered in the {@link TaskQueueRegistry}.\n *\n * Web worker entrypoints should use a provider that extends {@link AiProvider} only\n * (no queue / storage), so bundles for `registerOnWorkerServer` stay lean.\n */\nexport abstract class QueuedAiProvider<\n TModelConfig extends ModelConfig = ModelConfig,\n> extends AiProvider<TModelConfig> {\n protected queuedStrategy: QueuedExecutionStrategy | undefined;\n\n protected override async afterRegister(options: AiProviderRegisterOptions): Promise<void> {\n const autoCreate = options.queue?.autoCreate !== false;\n this.queuedStrategy = new QueuedExecutionStrategy(\n `${this.name}_gpu`,\n resolveAiProviderGpuQueueConcurrency(options.queue?.concurrency),\n autoCreate\n );\n getAiProviderRegistry().registerStrategyResolver(this.name, (model) =>\n this.getStrategyForModel(model)\n );\n }\n\n /**\n * Helper to create a named {@link QueuedExecutionStrategy} using the same\n * `autoCreate` setting from the registration options.\n */\n protected createQueuedStrategy(\n queueName: string,\n concurrency: number,\n options: AiProviderRegisterOptions\n ): QueuedExecutionStrategy {\n const autoCreate = options.queue?.autoCreate !== false;\n return new QueuedExecutionStrategy(queueName, concurrency, autoCreate);\n }\n\n /**\n * Returns the execution strategy for a given model. By default, always\n * returns the queued strategy. Subclasses can override to make this\n * model-dependent (e.g., HFT checks `provider_config.device`).\n */\n protected getStrategyForModel(_model: ModelConfig): IAiExecutionStrategy {\n return this.queuedStrategy!;\n }\n}\n",
16
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TaskRegistry } from \"@workglow/task-graph\";\nimport { BackgroundRemovalTask } from \"./BackgroundRemovalTask\";\nimport { ChunkRetrievalTask } from \"./ChunkRetrievalTask\";\nimport { ChunkToVectorTask } from \"./ChunkToVectorTask\";\nimport { ChunkVectorHybridSearchTask } from \"./ChunkVectorHybridSearchTask\";\nimport { ChunkVectorSearchTask } from \"./ChunkVectorSearchTask\";\nimport { ChunkVectorUpsertTask } from \"./ChunkVectorUpsertTask\";\nimport { ContextBuilderTask } from \"./ContextBuilderTask\";\nimport { CountTokensTask } from \"./CountTokensTask\";\nimport { DocumentEnricherTask } from \"./DocumentEnricherTask\";\nimport { DocumentUpsertTask } from \"./DocumentUpsertTask\";\nimport { DownloadModelTask } from \"./DownloadModelTask\";\nimport { FaceDetectorTask } from \"./FaceDetectorTask\";\nimport { FaceLandmarkerTask } from \"./FaceLandmarkerTask\";\nimport { GestureRecognizerTask } from \"./GestureRecognizerTask\";\nimport { HandLandmarkerTask } from \"./HandLandmarkerTask\";\nimport { HierarchicalChunkerTask } from \"./HierarchicalChunkerTask\";\nimport { HierarchyJoinTask } from \"./HierarchyJoinTask\";\nimport { KbToDocumentsTask } from \"./KbToDocumentsTask\";\nimport { ImageClassificationTask } from \"./ImageClassificationTask\";\nimport { ImageEmbeddingTask } from \"./ImageEmbeddingTask\";\nimport { ImageSegmentationTask } from \"./ImageSegmentationTask\";\nimport { ImageToTextTask } from \"./ImageToTextTask\";\nimport { ModelInfoTask } from \"./ModelInfoTask\";\nimport { ModelSearchTask } from \"./ModelSearchTask\";\nimport { ObjectDetectionTask } from \"./ObjectDetectionTask\";\nimport { PoseLandmarkerTask } from \"./PoseLandmarkerTask\";\nimport { QueryExpanderTask } from \"./QueryExpanderTask\";\nimport { RerankerTask } from \"./RerankerTask\";\nimport { StructuralParserTask } from \"./StructuralParserTask\";\nimport { StructuredGenerationTask } from \"./StructuredGenerationTask\";\nimport { TextChunkerTask } from \"./TextChunkerTask\";\nimport { TextClassificationTask } from \"./TextClassificationTask\";\nimport { TextEmbeddingTask } from \"./TextEmbeddingTask\";\nimport { TextFillMaskTask } from \"./TextFillMaskTask\";\nimport { TextGenerationTask } from \"./TextGenerationTask\";\nimport { TextLanguageDetectionTask } from \"./TextLanguageDetectionTask\";\nimport { TextNamedEntityRecognitionTask } from \"./TextNamedEntityRecognitionTask\";\nimport { TextQuestionAnswerTask } from \"./TextQuestionAnswerTask\";\nimport { TextRewriterTask } from \"./TextRewriterTask\";\nimport { TextSummaryTask } from \"./TextSummaryTask\";\nimport { TextTranslationTask } from \"./TextTranslationTask\";\nimport { ToolCallingTask } from \"./ToolCallingTask\";\nimport { TopicSegmenterTask } from \"./TopicSegmenterTask\";\nimport { UnloadModelTask } from \"./UnloadModelTask\";\nimport { VectorQuantizeTask } from \"./VectorQuantizeTask\";\nimport { VectorSimilarityTask } from \"./VectorSimilarityTask\";\n\n// Register all AI tasks with the TaskRegistry.\n// Centralized registration ensures tasks are available for JSON deserialization\n// and prevents tree-shaking issues.\nexport const registerAiTasks = () => {\n const tasks = [\n BackgroundRemovalTask,\n ChunkToVectorTask,\n CountTokensTask,\n ContextBuilderTask,\n DocumentEnricherTask,\n DocumentUpsertTask,\n ChunkRetrievalTask,\n ChunkVectorHybridSearchTask,\n ChunkVectorSearchTask,\n ChunkVectorUpsertTask,\n DownloadModelTask,\n FaceDetectorTask,\n FaceLandmarkerTask,\n GestureRecognizerTask,\n HandLandmarkerTask,\n HierarchicalChunkerTask,\n HierarchyJoinTask,\n KbToDocumentsTask,\n ImageClassificationTask,\n ImageEmbeddingTask,\n ImageSegmentationTask,\n ImageToTextTask,\n ModelInfoTask,\n ModelSearchTask,\n ObjectDetectionTask,\n PoseLandmarkerTask,\n QueryExpanderTask,\n RerankerTask,\n StructuralParserTask,\n StructuredGenerationTask,\n TextChunkerTask,\n TextClassificationTask,\n TextEmbeddingTask,\n TextFillMaskTask,\n TextGenerationTask,\n TextLanguageDetectionTask,\n TextNamedEntityRecognitionTask,\n TextQuestionAnswerTask,\n TextRewriterTask,\n TextSummaryTask,\n TextTranslationTask,\n ToolCallingTask,\n TopicSegmenterTask,\n UnloadModelTask,\n VectorQuantizeTask,\n VectorSimilarityTask,\n ];\n tasks.map(TaskRegistry.registerTask);\n return tasks;\n};\n\nexport * from \"./MessageConversion\";\nexport * from \"./ToolCallingUtils\";\nexport * from \"./BackgroundRemovalTask\";\nexport * from \"./base/AiTask\";\nexport * from \"./base/AiTaskSchemas\";\nexport * from \"./base/StreamingAiTask\";\nexport * from \"./ChunkRetrievalTask\";\nexport * from \"./ChunkToVectorTask\";\nexport * from \"./ChunkVectorHybridSearchTask\";\nexport * from \"./ChunkVectorSearchTask\";\nexport * from \"./ChunkVectorUpsertTask\";\nexport * from \"./ContextBuilderTask\";\nexport * from \"./CountTokensTask\";\nexport * from \"./DocumentEnricherTask\";\nexport * from \"./DocumentUpsertTask\";\nexport * from \"./DownloadModelTask\";\nexport * from \"./FaceDetectorTask\";\nexport * from \"./FaceLandmarkerTask\";\nexport * from \"./GestureRecognizerTask\";\nexport * from \"./HandLandmarkerTask\";\nexport * from \"./HierarchicalChunkerTask\";\nexport * from \"./HierarchyJoinTask\";\nexport * from \"./KbToDocumentsTask\";\nexport * from \"./ImageClassificationTask\";\nexport * from \"./ImageEmbeddingTask\";\nexport * from \"./ImageSegmentationTask\";\nexport * from \"./ImageToTextTask\";\nexport * from \"./ModelInfoTask\";\nexport * from \"./ModelSearchTask\";\nexport * from \"./ObjectDetectionTask\";\nexport * from \"./PoseLandmarkerTask\";\nexport * from \"./QueryExpanderTask\";\nexport * from \"./RerankerTask\";\nexport * from \"./StructuralParserTask\";\nexport * from \"./StructuredGenerationTask\";\nexport * from \"./TextChunkerTask\";\nexport * from \"./TextClassificationTask\";\nexport * from \"./TextEmbeddingTask\";\nexport * from \"./TextFillMaskTask\";\nexport * from \"./TextGenerationTask\";\nexport * from \"./TextLanguageDetectionTask\";\nexport * from \"./TextNamedEntityRecognitionTask\";\nexport * from \"./TextQuestionAnswerTask\";\nexport * from \"./TextRewriterTask\";\nexport * from \"./TextSummaryTask\";\nexport * from \"./TextTranslationTask\";\nexport * from \"./ToolCallingTask\";\nexport * from \"./TopicSegmenterTask\";\nexport * from \"./UnloadModelTask\";\nexport * from \"./VectorQuantizeTask\";\nexport * from \"./VectorSimilarityTask\";\n",
17
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:BackgroundRemovalTask\");\n\nconst processedImageSchema = {\n type: \"string\",\n contentEncoding: \"base64\",\n contentMediaType: \"image/png\",\n title: \"Image\",\n description: \"Base64-encoded PNG image with transparent background\",\n} as const;\n\nexport const BackgroundRemovalInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const BackgroundRemovalOutputSchema = {\n type: \"object\",\n properties: {\n image: processedImageSchema,\n },\n required: [\"image\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type BackgroundRemovalTaskInput = FromSchema<typeof BackgroundRemovalInputSchema>;\nexport type BackgroundRemovalTaskOutput = FromSchema<typeof BackgroundRemovalOutputSchema>;\nexport type BackgroundRemovalTaskConfig = TaskConfig<BackgroundRemovalTaskInput>;\n\n/**\n * Removes backgrounds from images using computer vision models\n */\nexport class BackgroundRemovalTask extends AiVisionTask<\n BackgroundRemovalTaskInput,\n BackgroundRemovalTaskOutput,\n BackgroundRemovalTaskConfig\n> {\n public static override type = \"BackgroundRemovalTask\";\n public static override category = \"AI Vision Model\";\n public static override title = \"Background Removal\";\n public static override description =\n \"Removes backgrounds from images, producing images with transparent backgrounds\";\n public static override inputSchema(): DataPortSchema {\n return BackgroundRemovalInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return BackgroundRemovalOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run background removal tasks.\n * Creates and executes a BackgroundRemovalTask with the provided input.\n * @param input The input parameters for background removal (image and model)\n * @returns Promise resolving to the image with transparent background\n */\nexport const backgroundRemoval = (\n input: BackgroundRemovalTaskInput,\n config?: BackgroundRemovalTaskConfig\n) => {\n return new BackgroundRemovalTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n backgroundRemoval: CreateWorkflow<\n BackgroundRemovalTaskInput,\n BackgroundRemovalTaskOutput,\n BackgroundRemovalTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.backgroundRemoval = CreateWorkflow(BackgroundRemovalTask);\n",
16
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TaskRegistry } from \"@workglow/task-graph\";\nimport { AiChatTask } from \"./AiChatTask\";\nimport { BackgroundRemovalTask } from \"./BackgroundRemovalTask\";\nimport { ChunkRetrievalTask } from \"./ChunkRetrievalTask\";\nimport { ChunkToVectorTask } from \"./ChunkToVectorTask\";\nimport { ChunkVectorHybridSearchTask } from \"./ChunkVectorHybridSearchTask\";\nimport { ChunkVectorSearchTask } from \"./ChunkVectorSearchTask\";\nimport { ChunkVectorUpsertTask } from \"./ChunkVectorUpsertTask\";\nimport { ContextBuilderTask } from \"./ContextBuilderTask\";\nimport { CountTokensTask } from \"./CountTokensTask\";\nimport { DocumentEnricherTask } from \"./DocumentEnricherTask\";\nimport { DocumentUpsertTask } from \"./DocumentUpsertTask\";\nimport { DownloadModelTask } from \"./DownloadModelTask\";\nimport { FaceDetectorTask } from \"./FaceDetectorTask\";\nimport { FaceLandmarkerTask } from \"./FaceLandmarkerTask\";\nimport { GestureRecognizerTask } from \"./GestureRecognizerTask\";\nimport { HandLandmarkerTask } from \"./HandLandmarkerTask\";\nimport { HierarchicalChunkerTask } from \"./HierarchicalChunkerTask\";\nimport { HierarchyJoinTask } from \"./HierarchyJoinTask\";\nimport { KbToDocumentsTask } from \"./KbToDocumentsTask\";\nimport { ImageClassificationTask } from \"./ImageClassificationTask\";\nimport { ImageEmbeddingTask } from \"./ImageEmbeddingTask\";\nimport { ImageSegmentationTask } from \"./ImageSegmentationTask\";\nimport { ImageToTextTask } from \"./ImageToTextTask\";\nimport { ModelInfoTask } from \"./ModelInfoTask\";\nimport { ModelSearchTask } from \"./ModelSearchTask\";\nimport { ObjectDetectionTask } from \"./ObjectDetectionTask\";\nimport { PoseLandmarkerTask } from \"./PoseLandmarkerTask\";\nimport { QueryExpanderTask } from \"./QueryExpanderTask\";\nimport { RerankerTask } from \"./RerankerTask\";\nimport { StructuralParserTask } from \"./StructuralParserTask\";\nimport { StructuredGenerationTask } from \"./StructuredGenerationTask\";\nimport { TextChunkerTask } from \"./TextChunkerTask\";\nimport { TextClassificationTask } from \"./TextClassificationTask\";\nimport { TextEmbeddingTask } from \"./TextEmbeddingTask\";\nimport { TextFillMaskTask } from \"./TextFillMaskTask\";\nimport { TextGenerationTask } from \"./TextGenerationTask\";\nimport { TextLanguageDetectionTask } from \"./TextLanguageDetectionTask\";\nimport { TextNamedEntityRecognitionTask } from \"./TextNamedEntityRecognitionTask\";\nimport { TextQuestionAnswerTask } from \"./TextQuestionAnswerTask\";\nimport { TextRewriterTask } from \"./TextRewriterTask\";\nimport { TextSummaryTask } from \"./TextSummaryTask\";\nimport { TextTranslationTask } from \"./TextTranslationTask\";\nimport { ToolCallingTask } from \"./ToolCallingTask\";\nimport { TopicSegmenterTask } from \"./TopicSegmenterTask\";\nimport { UnloadModelTask } from \"./UnloadModelTask\";\nimport { VectorQuantizeTask } from \"./VectorQuantizeTask\";\nimport { VectorSimilarityTask } from \"./VectorSimilarityTask\";\n\n// Register all AI tasks with the TaskRegistry.\n// Centralized registration ensures tasks are available for JSON deserialization\n// and prevents tree-shaking issues.\nexport const registerAiTasks = () => {\n const tasks = [\n AiChatTask,\n BackgroundRemovalTask,\n ChunkToVectorTask,\n CountTokensTask,\n ContextBuilderTask,\n DocumentEnricherTask,\n DocumentUpsertTask,\n ChunkRetrievalTask,\n ChunkVectorHybridSearchTask,\n ChunkVectorSearchTask,\n ChunkVectorUpsertTask,\n DownloadModelTask,\n FaceDetectorTask,\n FaceLandmarkerTask,\n GestureRecognizerTask,\n HandLandmarkerTask,\n HierarchicalChunkerTask,\n HierarchyJoinTask,\n KbToDocumentsTask,\n ImageClassificationTask,\n ImageEmbeddingTask,\n ImageSegmentationTask,\n ImageToTextTask,\n ModelInfoTask,\n ModelSearchTask,\n ObjectDetectionTask,\n PoseLandmarkerTask,\n QueryExpanderTask,\n RerankerTask,\n StructuralParserTask,\n StructuredGenerationTask,\n TextChunkerTask,\n TextClassificationTask,\n TextEmbeddingTask,\n TextFillMaskTask,\n TextGenerationTask,\n TextLanguageDetectionTask,\n TextNamedEntityRecognitionTask,\n TextQuestionAnswerTask,\n TextRewriterTask,\n TextSummaryTask,\n TextTranslationTask,\n ToolCallingTask,\n TopicSegmenterTask,\n UnloadModelTask,\n VectorQuantizeTask,\n VectorSimilarityTask,\n ];\n tasks.map(TaskRegistry.registerTask);\n return tasks;\n};\n\nexport * from \"./AiChatTask\";\nexport * from \"./ChatMessage\";\nexport * from \"./BackgroundRemovalTask\";\nexport * from \"./base/AiTask\";\nexport * from \"./base/AiTaskSchemas\";\nexport * from \"./base/StreamingAiTask\";\nexport * from \"./ChunkRetrievalTask\";\nexport * from \"./ChunkToVectorTask\";\nexport * from \"./ChunkVectorHybridSearchTask\";\nexport * from \"./ChunkVectorSearchTask\";\nexport * from \"./ChunkVectorUpsertTask\";\nexport * from \"./ContextBuilderTask\";\nexport * from \"./CountTokensTask\";\nexport * from \"./DocumentEnricherTask\";\nexport * from \"./DocumentUpsertTask\";\nexport * from \"./DownloadModelTask\";\nexport * from \"./FaceDetectorTask\";\nexport * from \"./FaceLandmarkerTask\";\nexport * from \"./GestureRecognizerTask\";\nexport * from \"./HandLandmarkerTask\";\nexport * from \"./HierarchicalChunkerTask\";\nexport * from \"./HierarchyJoinTask\";\nexport * from \"./KbToDocumentsTask\";\nexport * from \"./ImageClassificationTask\";\nexport * from \"./ImageEmbeddingTask\";\nexport * from \"./ImageSegmentationTask\";\nexport * from \"./ImageToTextTask\";\nexport * from \"./MessageConversion\";\nexport * from \"./ModelInfoTask\";\nexport * from \"./ModelSearchTask\";\nexport * from \"./ObjectDetectionTask\";\nexport * from \"./PoseLandmarkerTask\";\nexport * from \"./QueryExpanderTask\";\nexport * from \"./RerankerTask\";\nexport * from \"./StructuralParserTask\";\nexport * from \"./StructuredGenerationTask\";\nexport * from \"./TextChunkerTask\";\nexport * from \"./TextClassificationTask\";\nexport * from \"./TextEmbeddingTask\";\nexport * from \"./TextFillMaskTask\";\nexport * from \"./TextGenerationTask\";\nexport * from \"./TextLanguageDetectionTask\";\nexport * from \"./TextNamedEntityRecognitionTask\";\nexport * from \"./TextQuestionAnswerTask\";\nexport * from \"./TextRewriterTask\";\nexport * from \"./TextSummaryTask\";\nexport * from \"./TextTranslationTask\";\nexport * from \"./ToolCallingTask\";\nexport * from \"./ToolCallingUtils\";\nexport * from \"./TopicSegmenterTask\";\nexport * from \"./UnloadModelTask\";\nexport * from \"./VectorQuantizeTask\";\nexport * from \"./VectorSimilarityTask\";\n",
17
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { IExecuteContext, StreamEvent } from \"@workglow/task-graph\";\nimport { TaskConfigSchema } from \"@workglow/task-graph\";\nimport type { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport type { AiJobInput } from \"../job/AiJob\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\nimport type { ChatMessage, ContentBlock } from \"./ChatMessage\";\nimport { ChatMessageSchema, ContentBlockSchema } from \"./ChatMessage\";\nimport type { IHumanRequest } from \"@workglow/util\";\nimport { resolveHumanConnector } from \"@workglow/util\";\n\n// ========================================================================\n// Schemas\n// ========================================================================\n\nconst modelSchema = TypeModel(\"model:AiChatTask\");\n\n/**\n * Connector elicit schema. The connector side renders a plain text field\n * for this — chat UIs let the user type a message, not author a JSON\n * ContentBlock array. AiChatTask wraps the string into\n * `[{ type: \"text\", text }]` before appending to the conversation.\n *\n * `content` is intentionally optional: submitting an empty message ends\n * the conversation (the chat loop treats empty content as \"done\"). A\n * consumer that wants to send structured content blocks directly (e.g.,\n * an image) can still bypass the elicit form and call `connector.send`\n * with `content: { content: ContentBlock[] }` — the task accepts both shapes.\n */\nconst chatConnectorContentSchema = {\n type: \"object\",\n properties: {\n content: {\n type: \"string\",\n title: \"Message\",\n description: \"Your reply (leave blank to end the conversation)\",\n },\n },\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const AiChatInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n oneOf: [\n { type: \"string\", title: \"Prompt\", description: \"The initial user message\" },\n {\n type: \"array\",\n title: \"Prompt\",\n description: \"The initial user message as structured content blocks\",\n items: ContentBlockSchema,\n },\n ],\n title: \"Prompt\",\n description: \"The first user message to start the conversation\",\n },\n messages: {\n type: \"array\",\n title: \"Messages\",\n description:\n \"Conversation history (managed internally by the chat loop; not a user-facing input)\",\n items: ChatMessageSchema,\n \"x-ui-hidden\": true,\n },\n systemPrompt: {\n type: \"string\",\n title: \"System Prompt\",\n description: \"Optional system instructions for the model\",\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"Per-turn token limit\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"Sampling temperature\",\n minimum: 0,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n maxIterations: {\n type: \"number\",\n title: \"Max Iterations\",\n description: \"Safety cap on conversation turns\",\n minimum: 1,\n default: 100,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"model\", \"prompt\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const AiChatOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"Last assistant response\",\n \"x-stream\": \"append\",\n },\n messages: {\n type: \"array\",\n title: \"Messages\",\n description: \"Full conversation history\",\n items: ChatMessageSchema,\n \"x-stream\": \"object\",\n },\n iterations: {\n type: \"number\",\n title: \"Iterations\",\n description: \"Number of completed turns\",\n },\n },\n required: [\"text\", \"messages\", \"iterations\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\n// ========================================================================\n// Runtime types\n// ========================================================================\n\nexport type AiChatTaskInput = Omit<FromSchema<typeof AiChatInputSchema>, \"messages\"> & {\n readonly messages?: ReadonlyArray<ChatMessage>;\n};\n\nexport type AiChatTaskOutput = FromSchema<typeof AiChatOutputSchema>;\n\n/** Provider-facing input: same structural type as AiChatTaskInput, named separately for intent. */\nexport type AiChatProviderInput = AiChatTaskInput;\n\nexport interface AiChatProviderOutput {\n readonly text: string;\n [key: string]: unknown;\n}\n\n// ========================================================================\n// Task class\n// ========================================================================\n\nexport class AiChatTask extends StreamingAiTask<AiChatTaskInput, AiChatTaskOutput> {\n public static override type = \"AiChatTask\";\n public static override category = \"AI Chat\";\n public static override title = \"AI Chat\";\n public static override description =\n \"Multi-turn chat with a language model, using a human connector to collect user input between turns.\";\n public static override cacheable = false;\n\n public static override configSchema(): DataPortSchema {\n return {\n type: \"object\",\n properties: {\n ...TaskConfigSchema[\"properties\"],\n },\n additionalProperties: false,\n } as const satisfies DataPortSchema;\n }\n\n public static override inputSchema(): DataPortSchema {\n return AiChatInputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return AiChatOutputSchema as DataPortSchema;\n }\n\n private _sessionId: string | undefined;\n\n protected override async getJobInput(\n input: AiChatTaskInput\n ): Promise<AiJobInput<AiChatTaskInput>> {\n const model = input.model as ModelConfig;\n if (!this._sessionId) {\n this._sessionId = getAiProviderRegistry().createSession(model.provider, model);\n }\n return {\n taskType: \"AiChatTask\",\n aiProvider: model.provider,\n taskInput: input as AiChatTaskInput & { model: ModelConfig },\n sessionId: this._sessionId,\n };\n }\n\n override async *executeStream(\n input: AiChatTaskInput,\n context: IExecuteContext\n ): AsyncIterable<StreamEvent<AiChatTaskOutput>> {\n // Reset session so re-running the task starts a fresh conversation.\n this._sessionId = undefined;\n\n const model = input.model as ModelConfig;\n if (!model || typeof model !== \"object\") {\n throw new Error(\"AiChatTask: model was not resolved to ModelConfig\");\n }\n const connector = resolveHumanConnector(context);\n\n // Build initial history.\n const history: ChatMessage[] = [];\n if (input.systemPrompt) {\n history.push({ role: \"system\", content: [{ type: \"text\", text: input.systemPrompt }] });\n }\n const firstUserBlocks: ReadonlyArray<ContentBlock> =\n typeof input.prompt === \"string\"\n ? [{ type: \"text\", text: input.prompt }]\n : (input.prompt as ReadonlyArray<ContentBlock>);\n history.push({ role: \"user\", content: firstUserBlocks });\n\n // Call getJobInput once before the loop to initialize _sessionId.\n const workingInput: AiChatTaskInput = { ...input, messages: history };\n await this.getJobInput(workingInput);\n const strategy = getAiProviderRegistry().getStrategy(model);\n const maxIterations = input.maxIterations ?? 100;\n\n // Register session disposal so it's cleaned up at end of the resource scope.\n if (context.resourceScope && this._sessionId) {\n const sessionId = this._sessionId;\n context.resourceScope.register(`ai:session:${sessionId}`, async () => {\n await getAiProviderRegistry().disposeSession(model.provider, sessionId);\n });\n }\n\n // Emit the initial messages as an object-delta. TaskRunner accumulates\n // array object-deltas by appending items (upsert-by-id when an `id`\n // field is present; plain append otherwise). ChatMessage has no id,\n // so we yield *deltas* — just the messages added since the last yield —\n // rather than full snapshots, or the accumulator would duplicate every\n // existing message on each emission.\n yield {\n type: \"object-delta\",\n port: \"messages\",\n objectDelta: [...history],\n } as StreamEvent<AiChatTaskOutput>;\n\n let iterations = 0;\n let lastAssistantText = \"\";\n for (let turn = 0; turn < maxIterations; turn++) {\n // Fresh job input per turn with current history snapshot.\n const perTurnInput: AiChatTaskInput = { ...input, messages: [...history] };\n const turnJobInput = await this.getJobInput(perTurnInput);\n\n let assistantText = \"\";\n for await (const event of strategy.executeStream(\n turnJobInput as any,\n context,\n this.runConfig.runnerId\n )) {\n if (event.type === \"text-delta\") {\n assistantText += (event as any).textDelta;\n yield {\n ...event,\n port: (event as any).port ?? \"text\",\n } as StreamEvent<AiChatTaskOutput>;\n } else if (event.type === \"finish\") {\n // swallow — we emit our own finish at the end\n } else {\n yield event as StreamEvent<AiChatTaskOutput>;\n }\n }\n\n iterations++;\n lastAssistantText = assistantText;\n const assistantMsg: ChatMessage = {\n role: \"assistant\",\n content: [{ type: \"text\", text: assistantText }],\n };\n history.push(assistantMsg);\n yield {\n type: \"object-delta\",\n port: \"messages\",\n objectDelta: [assistantMsg],\n } as StreamEvent<AiChatTaskOutput>;\n\n // Ask the human for the next turn.\n const request: IHumanRequest = {\n requestId: crypto.randomUUID(),\n targetHumanId: \"default\",\n kind: \"elicit\",\n message: \"\",\n contentSchema: chatConnectorContentSchema,\n contentData: undefined,\n expectsResponse: true,\n mode: \"multi-turn\",\n metadata: { iteration: turn, taskId: this.id },\n };\n\n const response = await connector.send(request, context.signal);\n if (response.action === \"cancel\" || response.action === \"decline\") break;\n\n // The elicit schema asks for a plain string; accept either shape so\n // programmatic callers can also send raw ContentBlock[] (e.g. images).\n // `response.done` is a form-completion flag (the submit happened), not\n // a conversation signal — do NOT treat it as end-of-chat. The signal\n // that the user wants to end the conversation is empty content.\n const raw = response.content?.content;\n let userContent: ContentBlock[];\n if (typeof raw === \"string\") {\n const text = raw.trim();\n userContent = text.length > 0 ? [{ type: \"text\", text: raw }] : [];\n } else if (Array.isArray(raw)) {\n userContent = raw as ContentBlock[];\n } else {\n userContent = [];\n }\n if (userContent.length === 0) break;\n\n const userMsg: ChatMessage = { role: \"user\", content: userContent };\n history.push(userMsg);\n yield {\n type: \"object-delta\",\n port: \"messages\",\n objectDelta: [userMsg],\n } as StreamEvent<AiChatTaskOutput>;\n }\n\n yield {\n type: \"finish\",\n data: {\n text: lastAssistantText,\n messages: [...history] as AiChatTaskOutput[\"messages\"],\n iterations,\n } satisfies AiChatTaskOutput,\n } as StreamEvent<AiChatTaskOutput>;\n }\n\n override async execute(\n input: AiChatTaskInput,\n context: IExecuteContext\n ): Promise<AiChatTaskOutput | undefined> {\n let result: AiChatTaskOutput | undefined;\n for await (const event of this.executeStream(input, context)) {\n if (event.type === \"finish\") {\n result = (event as { type: \"finish\"; data: AiChatTaskOutput }).data;\n }\n }\n return result;\n }\n}\n",
18
18
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DataPortSchemaNonBoolean, JsonSchema } from \"@workglow/util/schema\";\nimport { ModelConfigSchema } from \"../../model/ModelSchema\";\n\nexport const TypeLanguage = (annotations: Record<string, unknown> = {}) =>\n ({\n type: \"string\",\n title: \"Language\",\n description: \"The language to use\",\n maxLength: 2,\n minLength: 2,\n ...annotations,\n }) as const;\n\nexport type TypeModelSemantic = \"model\" | `model:${string}`;\n\nexport type TTypeModel = DataPortSchemaNonBoolean & {\n readonly type: \"string\";\n readonly format: TypeModelSemantic;\n};\n\nexport function TypeModelAsString<\n S extends TypeModelSemantic = \"model\",\n O extends Record<string, unknown> = {},\n>(semantic: S = \"model\" as S, options: O = {} as O) {\n if (semantic !== \"model\" && !semantic.startsWith(\"model:\")) {\n throw new Error(\"Invalid semantic value\");\n }\n const taskName = semantic.startsWith(\"model:\")\n ? semantic\n .slice(6)\n .replace(/Task$/, \"\")\n .replaceAll(/[A-Z]/g, (char) => \" \" + char.toLowerCase())\n .trim()\n : null;\n return {\n title: \"Model\",\n description: `The model ${taskName ? `for ${taskName} ` : \"to use\"}`,\n ...options,\n format: semantic,\n type: \"string\",\n } as const satisfies JsonSchema;\n}\n\nexport function TypeModelByDetail<\n S extends TypeModelSemantic = \"model\",\n O extends Record<string, unknown> = {},\n>(semantic: S = \"model\" as S, options: O = {} as O) {\n if (semantic !== \"model\" && !semantic.startsWith(\"model:\")) {\n throw new Error(\"Invalid semantic value\");\n }\n return {\n ...ModelConfigSchema,\n ...options,\n format: semantic,\n } as const satisfies JsonSchema;\n}\n\nexport function TypeModel<\n S extends TypeModelSemantic = \"model\",\n O extends Record<string, unknown> = {},\n>(semantic: S = \"model\" as S, options: O = {} as O) {\n return {\n oneOf: [TypeModelAsString<S, O>(semantic, options), TypeModelByDetail<S, O>(semantic, options)],\n ...options,\n format: semantic,\n } as const satisfies JsonSchema;\n}\n\nexport function TypeSingleOrArray<const T extends DataPortSchemaNonBoolean>(type: T) {\n return {\n anyOf: [type, { type: \"array\", items: type }],\n } as const satisfies JsonSchema;\n}\n\nexport type ImageSource = ImageBitmap | OffscreenCanvas | VideoFrame;\n\n/**\n * Image input schema supporting URIs and base64-encoded images in multiple formats\n */\nexport const TypeImageInput = {\n oneOf: [\n {\n type: \"string\",\n title: \"Image Data\",\n description: \"Image as data-uri\",\n format: \"image:data-uri\",\n },\n {\n type: \"object\",\n additionalProperties: false,\n properties: {\n data: {\n oneOf: [\n {\n type: \"object\",\n format: \"image:ImageBitmap\",\n title: \"ImageBitmap\",\n },\n {\n type: \"object\",\n format: \"image:OffscreenCanvas\",\n title: \"OffscreenCanvas\",\n },\n {\n type: \"object\",\n format: \"image:VideoFrame\",\n title: \"VideoFrame\",\n },\n {\n type: \"object\",\n properties: {\n data: {\n type: \"array\",\n items: { type: \"number\", format: \"Uint8Clamped\" },\n format: \"Uint8ClampedArray\",\n title: \"Data\",\n description: \"Data of the image\",\n },\n width: { type: \"number\", title: \"Width\", description: \"Width of the image\" },\n height: { type: \"number\", title: \"Height\", description: \"Height of the image\" },\n channels: {\n type: \"number\",\n title: \"Channels\",\n description: \"Channels of the image\",\n },\n rawChannels: {\n type: \"number\",\n title: \"Raw Channels\",\n description: \"Raw channels of the image\",\n },\n },\n additionalProperties: false,\n required: [\"data\", \"width\", \"height\", \"channels\"],\n format: \"image:ImageBinary\",\n title: \"ImageBinary\",\n },\n ],\n },\n width: { type: \"number\", title: \"Width\", description: \"Width of the image\" },\n height: { type: \"number\", title: \"Height\", description: \"Height of the image\" },\n channels: {\n type: \"number\",\n title: \"Channels\",\n description: \"Channels of the image\",\n minimum: 1,\n maximum: 4,\n },\n },\n required: [\"data\", \"width\", \"height\", \"channels\"],\n },\n ],\n title: \"Image\",\n format: \"image\",\n description: \"Image as URL or base64-encoded data\",\n} as const satisfies JsonSchema;\n\n/**\n * Audio input schema supporting URIs and base64-encoded audio in multiple formats\n */\nexport const TypeAudioInput = {\n type: \"string\",\n title: \"Audio\",\n format: \"audio:data-uri\",\n description: \"Audio as data-uri, or Blob\",\n} as const satisfies JsonSchema;\n\n/**\n * Bounding box coordinates\n */\nexport const TypeBoundingBox = {\n type: \"object\",\n properties: {\n x: { type: \"number\", title: \"X coordinate\", description: \"Left edge of the bounding box\" },\n y: { type: \"number\", title: \"Y coordinate\", description: \"Top edge of the bounding box\" },\n width: { type: \"number\", title: \"Width\", description: \"Width of the bounding box\" },\n height: { type: \"number\", title: \"Height\", description: \"Height of the bounding box\" },\n },\n required: [\"x\", \"y\", \"width\", \"height\"],\n additionalProperties: false,\n title: \"Bounding Box\",\n description: \"Bounding box coordinates\",\n} as const satisfies JsonSchema;\n\n/**\n * Classification category with label and confidence score\n */\nexport const TypeCategory = {\n type: \"object\",\n properties: {\n label: { type: \"string\", title: \"Label\", description: \"Category label\" },\n score: {\n type: \"number\",\n title: \"Confidence Score\",\n description: \"Confidence score between 0 and 1\",\n minimum: 0,\n maximum: 1,\n },\n },\n required: [\"label\", \"score\"],\n additionalProperties: false,\n title: \"Category\",\n description: \"Classification category with label and score\",\n} as const satisfies JsonSchema;\n",
19
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TaskConfig, TaskOutput } from \"@workglow/task-graph\";\nimport { convertImageDataToUseableForm, ImageDataSupport } from \"@workglow/util/media\";\n\nimport { AiJobInput } from \"../../job/AiJob\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\nimport { AiTask, AiTaskInput } from \"./AiTask\";\n\n/**\n * A base class for AI vision tasks.\n * Handles image format conversion based on the target provider's capabilities.\n */\nexport class AiVisionTask<\n Input extends AiTaskInput = AiTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig<Input> = TaskConfig<Input>,\n> extends AiTask<Input, Output, Config> {\n public static override type: string = \"AiVisionTask\";\n\n /**\n * Get the input to submit for execution.\n * Converts image data to a format supported by the target provider.\n */\n protected override async getJobInput(input: Input): Promise<AiJobInput<Input>> {\n const jobInput = await super.getJobInput(input);\n const providerName = (input.model as ModelConfig).provider;\n\n // Image format support by model type and platform, that are transferable:\n // ┌─────────────────────────┬──────────────────────────────────────────────────────────────┬────────────────────────────────────────────┐\n // Model Type │ Web Support │ Node Support │\n // ├─────────────────────────┼──────────────────────────────────────────────────────────────┼────────────────────────────────────────────┤\n // TENSORFLOW_MEDIAPIPE Blob, ImageBitmap, VideoFrame, │ (none) │\n // │ │ OffscreenCanvas (no rendering ctx) │ │\n // ├─────────────────────────┼──────────────────────────────────────────────────────────────┼────────────────────────────────────────────┤\n // HF_TRANSFORMERS_ONNX │ Blob, OffscreenCanvas (no rendering ctx), │ Blob, Tensor, ImageBinary, │\n // │ │ ImageBinary, Tensor, DataUri │ DataUri, Sharp │\n // └─────────────────────────┴──────────────────────────────────────────────────────────────┴────────────────────────────────────────────┘\n const supports: ImageDataSupport[] = [\"Blob\"];\n if (input.image) {\n if (\n typeof providerName === \"string\" &&\n providerName.startsWith(\"TENSORFLOW_MEDIAPIPE\") &&\n \"ImageBitmap\" in globalThis\n ) {\n supports.push(\"ImageBitmap\");\n } else if (\n typeof providerName === \"string\" &&\n providerName.startsWith(\"TENSORFLOW_MEDIAPIPE\") &&\n \"VideoFrame\" in globalThis\n ) {\n supports.push(\"VideoFrame\");\n }\n const image = Array.isArray(input.image)\n ? await Promise.all(input.image.map((img) => convertImageDataToUseableForm(img, supports)))\n : await convertImageDataToUseableForm(input.image, supports);\n // @ts-ignore\n jobInput.taskInput.image = image;\n }\n return jobInput;\n }\n}\n",
19
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @description Base class for AI tasks that support streaming output.\n * Extends AiTask with executeStream() that yields StreamEvents from the provider.\n */\n\nimport { getStreamingPorts, TaskConfigurationError } from \"@workglow/task-graph\";\nimport type { TaskConfig, IExecuteContext, StreamEvent, TaskOutput } from \"@workglow/task-graph\";\n\nimport { AiTask } from \"./AiTask\";\nimport type { AiTaskInput } from \"./AiTask\";\nimport { getAiProviderRegistry } from \"../../provider/AiProviderRegistry\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\n\n/**\n * A base class for streaming AI tasks.\n * Extends AiTask to provide streaming output via executeStream().\n *\n * Subclasses set `streamMode` to control streaming behavior:\n * - 'append': each chunk is a delta (e.g., a new token). Default for text generation.\n * - 'object': each chunk is a progressively more complete partial object.\n * - 'replace': each chunk is a revised full snapshot of the output.\n *\n * The standard execute() method is preserved as a fallback that internally\n * consumes the stream to completion (so non-streaming callers get the same result).\n *\n * Port annotation: providers yield raw events without a `port` field.\n * This class wraps text-delta events with the correct port from the task's\n * output schema before they reach the TaskRunner.\n */\nexport class StreamingAiTask<\n Input extends AiTaskInput = AiTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig<Input> = TaskConfig<Input>,\n> extends AiTask<Input, Output, Config> {\n public static override type: string = \"StreamingAiTask\";\n\n /**\n * Streaming execution: resolves the provider strategy and yields StreamEvents from it.\n * Routes through the same strategy as execute() (queued vs direct) so GPU\n * serialization is respected even for streaming tasks.\n *\n * Wraps port-less text-delta and object-delta events from providers with\n * the port determined by the task's output schema `x-stream` annotations.\n */\n async *executeStream(input: Input, context: IExecuteContext): AsyncIterable<StreamEvent<Output>> {\n const model = input.model as ModelConfig;\n if (!model || typeof model !== \"object\") {\n throw new TaskConfigurationError(\n \"StreamingAiTask: Model was not resolved to ModelConfig - this indicates a bug in the resolution system\"\n );\n }\n const jobInput = await this.getJobInput(input);\n const strategy = getAiProviderRegistry().getStrategy(model);\n\n // Resolve the streaming port(s) from the output schema for wrapping.\n // Falls back to the first property in the output schema rather than\n // hardcoding \"text\", so non-text streaming tasks work correctly.\n const outSchema = this.outputSchema();\n const ports = getStreamingPorts(outSchema);\n let defaultPort = \"text\";\n if (ports.length > 0) {\n defaultPort = ports[0].port;\n } else {\n if (typeof outSchema === \"object\" && outSchema.properties) {\n const firstProp = Object.keys(outSchema.properties)[0];\n if (firstProp) defaultPort = firstProp;\n }\n }\n\n for await (const event of strategy.executeStream(jobInput, context, this.runConfig.runnerId)) {\n if (event.type === \"text-delta\") {\n yield { ...event, port: event.port ?? defaultPort } as StreamEvent<Output>;\n } else if (event.type === \"object-delta\") {\n yield { ...event, port: event.port ?? defaultPort } as StreamEvent<Output>;\n } else {\n yield event as StreamEvent<Output>;\n }\n }\n }\n}\n",
20
20
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @description Base class for AI tasks that delegate execution to a\n * provider-registered strategy (direct or queued).\n */\n\nimport { Job } from \"@workglow/job-queue\";\nimport type {\n IExecuteContext,\n IExecuteReactiveContext,\n TaskConfig,\n TaskEntitlement,\n TaskEntitlements,\n TaskOutput,\n} from \"@workglow/task-graph\";\nimport {\n Entitlements,\n Task,\n TaskConfigSchema,\n TaskConfigurationError,\n TaskInput,\n hasStructuredOutput,\n} from \"@workglow/task-graph\";\nimport type { ServiceRegistry } from \"@workglow/util\";\nimport type { DataPortSchema, JsonSchema } from \"@workglow/util/schema\";\n\nimport { AiJob, AiJobInput } from \"../../job/AiJob\";\nimport { MODEL_REPOSITORY } from \"../../model/ModelRegistry\";\nimport type { ModelRepository } from \"../../model/ModelRepository\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../../provider/AiProviderRegistry\";\n\nfunction schemaFormat(schema: JsonSchema): string | undefined {\n return typeof schema === \"object\" && schema !== null && \"format\" in schema\n ? schema.format\n : undefined;\n}\n\nconst aiTaskConfigSchema = {\n type: \"object\",\n properties: {\n ...TaskConfigSchema[\"properties\"],\n },\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport interface AiTaskInput extends TaskInput {\n model: string | ModelConfig;\n}\n\n/**\n * A base class for AI related tasks that use an execution strategy\n * (direct or queued) determined by the provider at registration time.\n *\n * Model resolution is handled automatically by the TaskRunner before execution.\n * By the time execute() is called, input.model is always a ModelConfig object.\n */\nexport class AiTask<\n Input extends AiTaskInput = AiTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig<Input> = TaskConfig<Input>,\n> extends Task<Input, Output, Config> {\n public static override type: string = \"AiTask\";\n public static override hasDynamicEntitlements: boolean = true;\n\n public static override entitlements(): TaskEntitlements {\n return {\n entitlements: [{ id: Entitlements.AI_INFERENCE, reason: \"Runs AI model inference\" }],\n };\n }\n\n public override entitlements(): TaskEntitlements {\n const base: TaskEntitlement[] = [\n { id: Entitlements.AI_INFERENCE, reason: \"Runs AI model inference\" },\n ];\n // Prefer runInputData.model (runtime) over defaults.model (construction-time)\n const runModel = this.runInputData?.model;\n const modelId =\n typeof runModel === \"string\"\n ? runModel\n : typeof this.defaults.model === \"string\"\n ? this.defaults.model\n : undefined;\n if (modelId) {\n base.push({\n id: Entitlements.AI_MODEL,\n reason: `Uses model ${modelId}`,\n resources: [modelId],\n });\n }\n return { entitlements: base };\n }\n\n public static override configSchema(): DataPortSchema {\n return aiTaskConfigSchema;\n }\n\n // ========================================================================\n // Execution\n // ========================================================================\n\n override async execute(\n input: Input,\n executeContext: IExecuteContext\n ): Promise<Output | undefined> {\n const model = input.model as ModelConfig;\n if (!model || typeof model !== \"object\") {\n throw new TaskConfigurationError(\n \"AiTask: Model was not resolved to ModelConfig - this indicates a bug in the resolution system\"\n );\n }\n\n const jobInput = await this.getJobInput(input);\n const strategy = getAiProviderRegistry().getStrategy(model);\n\n const output = await strategy.execute(jobInput, executeContext, this.runConfig.runnerId);\n\n // Register a disposer so the caller can unload the model when done.\n if (executeContext.resourceScope) {\n const registry = getAiProviderRegistry();\n const provider = registry.getProvider(model.provider);\n const unloadFn = provider?.getRunFn(\"UnloadModelTask\");\n if (unloadFn) {\n const modelPath = model.provider_config?.model_path ?? model.model;\n const resourceKey = `ai:${model.provider}:${modelPath}`;\n executeContext.resourceScope.register(resourceKey, async () => {\n await unloadFn({ model }, model, () => {}, AbortSignal.timeout(30_000));\n });\n }\n }\n\n return output as Output;\n }\n\n // ========================================================================\n // Job creation\n // ========================================================================\n\n /**\n * Get the input to submit to the job queue (or direct execution).\n * Transforms the task input to AiJobInput format.\n */\n protected async getJobInput(input: Input): Promise<AiJobInput<Input>> {\n const model = input.model as ModelConfig;\n\n const runtype = (this.constructor as any).runtype ?? (this.constructor as any).type;\n\n const jobInput: AiJobInput<Input> = {\n taskType: runtype,\n aiProvider: model.provider,\n taskInput: input as Input & { model: ModelConfig },\n };\n\n const taskTimeoutMs = (this.config as TaskConfig).timeout;\n if (typeof taskTimeoutMs === \"number\" && taskTimeoutMs > 0) {\n jobInput.timeoutMs = taskTimeoutMs;\n }\n\n // Attach structured output schema if the task declares it.\n const inputOutputSchema = input.outputSchema as DataPortSchema;\n if (\n inputOutputSchema &&\n typeof inputOutputSchema === \"object\" &&\n !Array.isArray(inputOutputSchema) &&\n typeof inputOutputSchema.type === \"string\"\n ) {\n jobInput.outputSchema = inputOutputSchema;\n } else {\n const taskOutputSchema = this.outputSchema();\n if (hasStructuredOutput(taskOutputSchema)) {\n jobInput.outputSchema = taskOutputSchema;\n }\n }\n\n const sessionId = (input as any).sessionId as string | undefined;\n if (sessionId) {\n jobInput.sessionId = sessionId;\n }\n\n return jobInput;\n }\n\n /**\n * Creates a new Job instance for direct execution (without a queue).\n */\n async createJob(input: Input, queueName?: string): Promise<Job<AiJobInput<Input>, Output>> {\n const jobInput = await this.getJobInput(input);\n const resolvedQueueName = queueName ?? (await this.getDefaultQueueName(input));\n if (!resolvedQueueName) {\n throw new TaskConfigurationError(\"AiTask: Unable to determine queue for AI provider\");\n }\n const job = new AiJob<AiJobInput<Input>, Output>({\n queueName: resolvedQueueName,\n jobRunId: this.runConfig.runnerId,\n input: jobInput,\n });\n return job;\n }\n\n /**\n * Gets the default queue name based on the model's provider.\n */\n protected async getDefaultQueueName(input: Input): Promise<string | undefined> {\n const model = input.model as ModelConfig;\n return model?.provider;\n }\n\n // ========================================================================\n // Reactive execution\n // ========================================================================\n\n /**\n * Delegates to a provider-registered reactive run function if one exists,\n * otherwise falls back to the default Task.executeReactive().\n */\n override async executeReactive(\n input: Input,\n output: Output,\n context: IExecuteReactiveContext\n ): Promise<Output | undefined> {\n const model = input.model as ModelConfig | undefined;\n if (model && typeof model === \"object\" && model.provider) {\n const taskType = (this.constructor as any).runtype ?? (this.constructor as any).type;\n const reactiveFn = getAiProviderRegistry().getReactiveRunFn<Input, Output>(\n model.provider,\n taskType\n );\n if (reactiveFn) {\n return reactiveFn(input, output, model);\n }\n }\n return super.executeReactive(input, output, context);\n }\n\n // ========================================================================\n // Validation\n // ========================================================================\n\n /**\n * Validates that model inputs are valid ModelConfig objects.\n */\n public override async validateInput(input: Input): Promise<boolean> {\n const inputSchema = this.inputSchema();\n if (typeof inputSchema === \"boolean\") {\n if (inputSchema === false) {\n throw new TaskConfigurationError(`AiTask: Input schema is 'false' and accepts no inputs`);\n }\n return true;\n }\n\n const modelTaskProperties = Object.entries<JsonSchema>(\n (inputSchema.properties || {}) as Record<string, JsonSchema>\n ).filter(([key, schema]) => schemaFormat(schema)?.startsWith(\"model:\"));\n\n for (const [key] of modelTaskProperties) {\n const model = input[key];\n if (typeof model === \"object\" && model !== null) {\n const tasks = (model as ModelConfig).tasks;\n if (Array.isArray(tasks) && tasks.length > 0 && !tasks.includes(this.type)) {\n const modelId = (model as ModelConfig).model_id ?? \"(inline config)\";\n throw new TaskConfigurationError(\n `AiTask: Model \"${modelId}\" for '${key}' is not compatible with task '${this.type}'. ` +\n `Model supports: [${tasks.join(\", \")}]`\n );\n }\n } else if (model !== undefined && model !== null) {\n throw new TaskConfigurationError(\n `AiTask: Invalid model for '${key}' - expected ModelConfig object but got ${typeof model}. ` +\n `Ensure the model ID was registered in the ModelRepository before running the task.`\n );\n }\n }\n\n const modelPlainProperties = Object.entries<JsonSchema>(\n (inputSchema.properties || {}) as Record<string, JsonSchema>\n ).filter(([key, schema]) => schemaFormat(schema) === \"model\");\n\n for (const [key] of modelPlainProperties) {\n const model = input[key];\n if (model !== undefined && model !== null && typeof model !== \"object\") {\n throw new TaskConfigurationError(\n `AiTask: Invalid model for '${key}' - expected ModelConfig object but got ${typeof model}. ` +\n `Ensure the model ID was registered in the ModelRepository before running the task.`\n );\n }\n }\n\n return super.validateInput(input);\n }\n\n public override async narrowInput(input: Input, registry: ServiceRegistry): Promise<Input> {\n const inputSchema = this.inputSchema();\n if (typeof inputSchema === \"boolean\") {\n if (inputSchema === false) {\n throw new TaskConfigurationError(`AiTask: Input schema is 'false' and accepts no inputs`);\n }\n return input;\n }\n const modelTaskProperties = Object.entries<JsonSchema>(\n (inputSchema.properties || {}) as Record<string, JsonSchema>\n ).filter(([key, schema]) => schemaFormat(schema)?.startsWith(\"model:\"));\n if (modelTaskProperties.length > 0) {\n const modelRepo = registry.get<ModelRepository>(MODEL_REPOSITORY);\n\n // Fetch models for this task type from the repository associated with the given registry.\n // Note: we intentionally avoid using a shared cache here to prevent mixing results\n // from different ServiceRegistry / ModelRepository instances.\n const taskModels: ModelConfig[] = (await modelRepo.findModelsByTask(this.type)) ?? [];\n\n for (const [key] of modelTaskProperties) {\n const requestedModel = input[key];\n\n if (typeof requestedModel === \"string\") {\n const found = taskModels?.find((m) => m.model_id === requestedModel);\n if (!found) {\n (input as any)[key] = undefined;\n }\n } else if (typeof requestedModel === \"object\" && requestedModel !== null) {\n const model = requestedModel as ModelConfig;\n const tasks = model.tasks;\n if (Array.isArray(tasks) && tasks.length > 0 && !tasks.includes(this.type)) {\n (input as any)[key] = undefined;\n }\n }\n }\n }\n return input;\n }\n}\n",
21
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DataPortSchema } from \"@workglow/util/schema\";\n\n// ========================================================================\n// Canonical ContentBlock union\n// ========================================================================\n\nexport type ContentBlockText = {\n readonly type: \"text\";\n readonly text: string;\n};\n\nexport type ContentBlockImage = {\n readonly type: \"image\";\n readonly mimeType: string;\n readonly data: string;\n};\n\nexport type ContentBlockToolUse = {\n readonly type: \"tool_use\";\n readonly id: string;\n readonly name: string;\n readonly input: Record<string, unknown>;\n};\n\nexport type ContentBlockToolResult = {\n readonly type: \"tool_result\";\n readonly tool_use_id: string;\n readonly content: ReadonlyArray<ContentBlock>;\n readonly is_error: boolean | undefined;\n};\n\nexport type ContentBlock =\n | ContentBlockText\n | ContentBlockImage\n | ContentBlockToolUse\n | ContentBlockToolResult;\n\n// ========================================================================\n// Canonical ChatMessage\n// ========================================================================\n\nexport type ChatRole = \"user\" | \"assistant\" | \"tool\" | \"system\";\n\nexport interface ChatMessage {\n readonly role: ChatRole;\n readonly content: ReadonlyArray<ContentBlock>;\n}\n\n// ========================================================================\n// JSON Schemas (runtime validation + DataPort declarations)\n// ========================================================================\n\nconst ContentBlockTextSchema = {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"text\"] },\n text: { type: \"string\" },\n },\n required: [\"type\", \"text\"],\n additionalProperties: false,\n} as const;\n\nconst ContentBlockImageSchema = {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"image\"] },\n mimeType: { type: \"string\" },\n data: { type: \"string\" },\n },\n required: [\"type\", \"mimeType\", \"data\"],\n additionalProperties: false,\n} as const;\n\nconst ContentBlockToolUseSchema = {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"tool_use\"] },\n id: { type: \"string\" },\n name: { type: \"string\" },\n input: { type: \"object\", additionalProperties: true },\n },\n required: [\"type\", \"id\", \"name\", \"input\"],\n additionalProperties: false,\n} as const;\n\n// tool_result is recursive — its `content` is an array of ContentBlock.\n// The $ref resolves against ContentBlockSchema.definitions.ContentBlock below.\nconst ContentBlockToolResultSchema = {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"tool_result\"] },\n tool_use_id: { type: \"string\" },\n content: {\n type: \"array\",\n items: { $ref: \"#/definitions/ContentBlock\" },\n },\n is_error: { type: \"boolean\" },\n },\n required: [\"type\", \"tool_use_id\", \"content\"],\n additionalProperties: false,\n} as const;\n\n// Not a DataPortSchema because the root is `oneOf`, not `type: \"object\"`.\n// Consumers embed it inside an object schema (see ChatMessageSchema).\nexport const ContentBlockSchema = {\n oneOf: [\n ContentBlockTextSchema,\n ContentBlockImageSchema,\n ContentBlockToolUseSchema,\n ContentBlockToolResultSchema,\n ],\n definitions: {\n ContentBlock: {\n oneOf: [\n ContentBlockTextSchema,\n ContentBlockImageSchema,\n ContentBlockToolUseSchema,\n ContentBlockToolResultSchema,\n ],\n },\n },\n title: \"ContentBlock\",\n description: \"A single content block within a chat message\",\n} as const;\n\nexport const ChatMessageSchema = {\n type: \"object\",\n properties: {\n role: { type: \"string\", enum: [\"user\", \"assistant\", \"tool\", \"system\"] },\n content: {\n type: \"array\",\n items: ContentBlockSchema,\n },\n },\n required: [\"role\", \"content\"],\n additionalProperties: false,\n title: \"ChatMessage\",\n description: \"A single chat message with role and structured content blocks\",\n} as const satisfies DataPortSchema;\n\n// ========================================================================\n// Runtime type guards\n// ========================================================================\n\nexport function isContentBlock(value: unknown): value is ContentBlock {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n switch (v.type) {\n case \"text\":\n return typeof v.text === \"string\";\n case \"image\":\n return typeof v.mimeType === \"string\" && typeof v.data === \"string\";\n case \"tool_use\":\n return (\n typeof v.id === \"string\" &&\n typeof v.name === \"string\" &&\n v.input !== null &&\n typeof v.input === \"object\"\n );\n case \"tool_result\":\n return (\n typeof v.tool_use_id === \"string\" &&\n Array.isArray(v.content) &&\n v.content.every(isContentBlock)\n );\n default:\n return false;\n }\n}\n\nexport function isChatMessage(value: unknown): value is ChatMessage {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n const validRole =\n v.role === \"user\" || v.role === \"assistant\" || v.role === \"tool\" || v.role === \"system\";\n return validRole && Array.isArray(v.content) && v.content.every(isContentBlock);\n}\n\n// ========================================================================\n// Convenience constructors\n// ========================================================================\n\nexport function textMessage(role: ChatRole, text: string): ChatMessage {\n return { role, content: [{ type: \"text\", text }] };\n}\n",
22
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:BackgroundRemovalTask\");\n\nconst processedImageSchema = {\n type: \"string\",\n contentEncoding: \"base64\",\n contentMediaType: \"image/png\",\n title: \"Image\",\n description: \"Base64-encoded PNG image with transparent background\",\n} as const;\n\nexport const BackgroundRemovalInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const BackgroundRemovalOutputSchema = {\n type: \"object\",\n properties: {\n image: processedImageSchema,\n },\n required: [\"image\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type BackgroundRemovalTaskInput = FromSchema<typeof BackgroundRemovalInputSchema>;\nexport type BackgroundRemovalTaskOutput = FromSchema<typeof BackgroundRemovalOutputSchema>;\nexport type BackgroundRemovalTaskConfig = TaskConfig<BackgroundRemovalTaskInput>;\n\n/**\n * Removes backgrounds from images using computer vision models\n */\nexport class BackgroundRemovalTask extends AiVisionTask<\n BackgroundRemovalTaskInput,\n BackgroundRemovalTaskOutput,\n BackgroundRemovalTaskConfig\n> {\n public static override type = \"BackgroundRemovalTask\";\n public static override category = \"AI Vision Model\";\n public static override title = \"Background Removal\";\n public static override description =\n \"Removes backgrounds from images, producing images with transparent backgrounds\";\n public static override inputSchema(): DataPortSchema {\n return BackgroundRemovalInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return BackgroundRemovalOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run background removal tasks.\n * Creates and executes a BackgroundRemovalTask with the provided input.\n * @param input The input parameters for background removal (image and model)\n * @returns Promise resolving to the image with transparent background\n */\nexport const backgroundRemoval = (\n input: BackgroundRemovalTaskInput,\n config?: BackgroundRemovalTaskConfig\n) => {\n return new BackgroundRemovalTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n backgroundRemoval: CreateWorkflow<\n BackgroundRemovalTaskInput,\n BackgroundRemovalTaskOutput,\n BackgroundRemovalTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.backgroundRemoval = CreateWorkflow(BackgroundRemovalTask);\n",
23
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TaskConfig, TaskOutput } from \"@workglow/task-graph\";\nimport { convertImageDataToUseableForm, ImageDataSupport } from \"@workglow/util/media\";\n\nimport { AiJobInput } from \"../../job/AiJob\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\nimport { AiTask, AiTaskInput } from \"./AiTask\";\n\n/**\n * A base class for AI vision tasks.\n * Handles image format conversion based on the target provider's capabilities.\n */\nexport class AiVisionTask<\n Input extends AiTaskInput = AiTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig<Input> = TaskConfig<Input>,\n> extends AiTask<Input, Output, Config> {\n public static override type: string = \"AiVisionTask\";\n\n /**\n * Get the input to submit for execution.\n * Converts image data to a format supported by the target provider.\n */\n protected override async getJobInput(input: Input): Promise<AiJobInput<Input>> {\n const jobInput = await super.getJobInput(input);\n const providerName = (input.model as ModelConfig).provider;\n\n // Image format support by model type and platform, that are transferable:\n // ┌─────────────────────────┬──────────────────────────────────────────────────────────────┬────────────────────────────────────────────┐\n // │ Model Type │ Web Support │ Node Support │\n // ├─────────────────────────┼──────────────────────────────────────────────────────────────┼────────────────────────────────────────────┤\n // │ TENSORFLOW_MEDIAPIPE │ Blob, ImageBitmap, VideoFrame, │ (none) │\n // │ │ OffscreenCanvas (no rendering ctx) │ │\n // ├─────────────────────────┼──────────────────────────────────────────────────────────────┼────────────────────────────────────────────┤\n // │ HF_TRANSFORMERS_ONNX │ Blob, OffscreenCanvas (no rendering ctx), │ Blob, Tensor, ImageBinary, │\n // │ │ ImageBinary, Tensor, DataUri │ DataUri, Sharp │\n // └─────────────────────────┴──────────────────────────────────────────────────────────────┴────────────────────────────────────────────┘\n const supports: ImageDataSupport[] = [\"Blob\"];\n if (input.image) {\n if (\n typeof providerName === \"string\" &&\n providerName.startsWith(\"TENSORFLOW_MEDIAPIPE\") &&\n \"ImageBitmap\" in globalThis\n ) {\n supports.push(\"ImageBitmap\");\n } else if (\n typeof providerName === \"string\" &&\n providerName.startsWith(\"TENSORFLOW_MEDIAPIPE\") &&\n \"VideoFrame\" in globalThis\n ) {\n supports.push(\"VideoFrame\");\n }\n const image = Array.isArray(input.image)\n ? await Promise.all(input.image.map((img) => convertImageDataToUseableForm(img, supports)))\n : await convertImageDataToUseableForm(input.image, supports);\n // @ts-ignore\n jobInput.taskInput.image = image;\n }\n return jobInput;\n }\n}\n",
21
24
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { KnowledgeBase, TypeKnowledgeBase } from \"@workglow/knowledge-base\";\nimport type { ChunkRecord } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n isTypedArray,\n TypedArray,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\nimport { TypeModel, TypeSingleOrArray } from \"./base/AiTaskSchemas\";\nimport { TextEmbeddingTask } from \"./TextEmbeddingTask\";\nimport type { ChunkSearchResult } from \"@workglow/knowledge-base\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n knowledgeBase: TypeKnowledgeBase({\n title: \"Knowledge Base\",\n description: \"The knowledge base instance to search in\",\n }),\n query: TypeSingleOrArray({\n oneOf: [\n { type: \"string\" },\n TypedArraySchema({\n title: \"Query Vector\",\n description: \"Pre-computed query vector\",\n }),\n ],\n title: \"Query\",\n description: \"Query string or pre-computed query vector\",\n }),\n model: TypeModel(\"model:TextEmbeddingTask\", {\n title: \"Model\",\n description:\n \"Text embedding model to use for query embedding (required when query is a string)\",\n }),\n topK: {\n type: \"number\",\n title: \"Top K\",\n description: \"Number of top results to return\",\n minimum: 1,\n default: 5,\n },\n filter: {\n type: \"object\",\n title: \"Metadata Filter\",\n description: \"Filter results by metadata fields\",\n },\n scoreThreshold: {\n type: \"number\",\n title: \"Score Threshold\",\n description: \"Minimum similarity score threshold (0-1)\",\n minimum: 0,\n maximum: 1,\n default: 0,\n },\n returnVectors: {\n type: \"boolean\",\n title: \"Return Vectors\",\n description: \"Whether to return vector embeddings in results\",\n default: false,\n },\n },\n required: [\"knowledgeBase\", \"query\"],\n if: {\n properties: {\n query: { type: \"string\" },\n },\n },\n then: {\n required: [\"knowledgeBase\", \"query\", \"model\"],\n },\n else: {},\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Text Chunks\",\n description: \"Retrieved text chunks\",\n },\n chunk_ids: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"IDs\",\n description: \"IDs of retrieved chunks\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata of retrieved chunk\",\n },\n title: \"Metadata\",\n description: \"Metadata of retrieved chunks\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Scores\",\n description: \"Similarity scores for each result\",\n },\n vectors: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Vector embedding\",\n }),\n title: \"Vectors\",\n description: \"Vector embeddings (if returnVectors is true)\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of results returned\",\n },\n query: TypeSingleOrArray({\n oneOf: [\n { type: \"string\" },\n TypedArraySchema({\n title: \"Query Vector\",\n description: \"Pre-computed query vector\",\n }),\n ],\n title: \"Query\",\n description: \"The query used for retrieval (pass-through)\",\n }),\n },\n required: [\"chunks\", \"chunk_ids\", \"metadata\", \"scores\", \"count\", \"query\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ChunkRetrievalTaskInput = FromSchema<typeof inputSchema, TypedArraySchemaOptions>;\nexport type ChunkRetrievalTaskOutput = FromSchema<typeof outputSchema, TypedArraySchemaOptions>;\nexport type ChunkRetrievalTaskConfig = TaskConfig<ChunkRetrievalTaskInput>;\n\n/**\n * End-to-end retrieval task that combines embedding generation (if needed) and vector search.\n * Simplifies the RAG pipeline by handling the full retrieval process.\n */\nexport class ChunkRetrievalTask extends Task<\n ChunkRetrievalTaskInput,\n ChunkRetrievalTaskOutput,\n ChunkRetrievalTaskConfig\n> {\n public static override type = \"ChunkRetrievalTask\";\n public static override category = \"RAG\";\n public static override title = \"Chunk Retrieval\";\n public static override description =\n \"End-to-end retrieval: embed query and search for similar chunks\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: ChunkRetrievalTaskInput,\n context: IExecuteContext\n ): Promise<ChunkRetrievalTaskOutput> {\n const {\n knowledgeBase,\n query,\n topK = 5,\n filter,\n model,\n scoreThreshold = 0,\n returnVectors = false,\n } = input;\n\n const kb = knowledgeBase as KnowledgeBase;\n\n // Determine query vector\n let queryVectors: TypedArray[];\n\n if (\n typeof query === \"string\" ||\n (Array.isArray(query) && query.every((q) => typeof q === \"string\"))\n ) {\n if (!model) {\n throw new Error(\n \"Model is required when query is a string. Please provide a model with format 'model:TextEmbeddingTask'.\"\n );\n }\n const embeddingTask = context.own(new TextEmbeddingTask());\n const embeddingResult = await embeddingTask.run({ text: query, model });\n queryVectors = Array.isArray(embeddingResult.vector)\n ? embeddingResult.vector\n : [embeddingResult.vector];\n } else if (isTypedArray(query) || (Array.isArray(query) && query.every(isTypedArray))) {\n queryVectors = Array.isArray(query) ? query : [query];\n } else {\n throw new Error(\"Query must be a string, array of strings, or TypedArray\");\n }\n\n const searchVectors = queryVectors.map((v) =>\n v instanceof Float32Array ? v : new Float32Array(v)\n );\n\n const results: ChunkSearchResult[] = [];\n for (const searchVector of searchVectors) {\n const res = await kb.similaritySearch(searchVector, {\n topK,\n filter,\n scoreThreshold,\n });\n results.push(...res);\n }\n\n // Extract text chunks from typed metadata\n const chunks = results.map((r) => {\n const meta = r.metadata as ChunkRecord;\n return meta.text || JSON.stringify(meta);\n });\n\n const output: ChunkRetrievalTaskOutput = {\n chunks,\n chunk_ids: results.map((r) => r.chunk_id),\n metadata: results.map((r) => r.metadata),\n scores: results.map((r) => r.score),\n count: results.length,\n query,\n };\n\n if (returnVectors) {\n output.vectors = results.map((r) => r.vector);\n }\n\n return output;\n }\n}\n\nexport const chunkRetrieval = (\n input: ChunkRetrievalTaskInput,\n config?: ChunkRetrievalTaskConfig\n) => {\n return new ChunkRetrievalTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n chunkRetrieval: CreateWorkflow<\n ChunkRetrievalTaskInput,\n ChunkRetrievalTaskOutput,\n ChunkRetrievalTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.chunkRetrieval = CreateWorkflow(ChunkRetrievalTask);\n",
22
25
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel, TypeSingleOrArray } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model:TextEmbeddingTask\");\n\nexport const TextEmbeddingInputSchema = {\n type: \"object\",\n properties: {\n text: TypeSingleOrArray({\n type: \"string\",\n title: \"Text\",\n description: \"The text to embed\",\n }),\n model: modelSchema,\n },\n required: [\"text\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextEmbeddingOutputSchema = {\n type: \"object\",\n properties: {\n vector: TypeSingleOrArray(\n TypedArraySchema({\n title: \"Vector\",\n description: \"The vector embedding of the text\",\n })\n ),\n },\n required: [\"vector\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextEmbeddingTaskInput = FromSchema<\n typeof TextEmbeddingInputSchema,\n TypedArraySchemaOptions\n>;\nexport type TextEmbeddingTaskOutput = FromSchema<\n typeof TextEmbeddingOutputSchema,\n TypedArraySchemaOptions\n>;\nexport type TextEmbeddingTaskConfig = TaskConfig<TextEmbeddingTaskInput>;\n\n/**\n * A task that generates vector embeddings for text using a specified embedding model.\n * Embeddings are numerical representations of text that capture semantic meaning,\n * useful for similarity comparisons and semantic search.\n *\n * @extends AiTask\n */\nexport class TextEmbeddingTask extends AiTask<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextEmbeddingTaskConfig\n> {\n public static override type = \"TextEmbeddingTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Embedding\";\n public static override description =\n \"Generates vector embeddings for text to capture semantic meaning\";\n public static override inputSchema(): DataPortSchema {\n return TextEmbeddingInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextEmbeddingOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to create and run a text embedding task.\n * @param input - Input containing text(s) and model(s) for embedding\n * @returns Promise resolving to the generated embeddings\n */\nexport const textEmbedding = async (\n input: TextEmbeddingTaskInput,\n config?: TextEmbeddingTaskConfig\n) => {\n return new TextEmbeddingTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textEmbedding: CreateWorkflow<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextEmbeddingTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textEmbedding = CreateWorkflow(TextEmbeddingTask);\n",
23
26
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ChunkRecordSchema } from \"@workglow/knowledge-base\";\nimport type { ChunkRecord } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID\",\n },\n doc_title: {\n type: \"string\",\n title: \"Document Title\",\n description: \"Human-readable title for the source document\",\n },\n chunks: {\n type: \"array\",\n items: ChunkRecordSchema(),\n title: \"Chunks\",\n description: \"Array of chunk records\",\n },\n vector: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Vector embedding\",\n }),\n title: \"Vectors\",\n description: \"Embeddings from TextEmbeddingTask\",\n },\n },\n required: [\"chunks\", \"vector\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n ids: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"IDs\",\n description: \"Chunk IDs for vector store\",\n },\n vectors: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Vector embedding\",\n }),\n title: \"Vectors\",\n description: \"Vector embeddings\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata for vector store\",\n },\n title: \"Metadata\",\n description: \"Metadata for each vector\",\n },\n texts: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Texts\",\n description: \"Chunk texts (for reference)\",\n },\n },\n required: [\"ids\", \"vectors\", \"metadata\", \"texts\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ChunkToVectorTaskInput = FromSchema<typeof inputSchema, TypedArraySchemaOptions>;\nexport type ChunkToVectorTaskOutput = FromSchema<typeof outputSchema, TypedArraySchemaOptions>;\nexport type ChunkToVectorTaskConfig = TaskConfig<ChunkToVectorTaskInput>;\n\n/**\n * Task to transform chunk records and embeddings into vector store format\n * Bridges HierarchicalChunker + TextEmbedding -> VectorStoreUpsert\n */\nexport class ChunkToVectorTask extends Task<\n ChunkToVectorTaskInput,\n ChunkToVectorTaskOutput,\n ChunkToVectorTaskConfig\n> {\n public static override type = \"ChunkToVectorTask\";\n public static override category = \"Document\";\n public static override title = \"Chunk to Vector\";\n public static override description = \"Transform chunks and embeddings to vector store format\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: ChunkToVectorTaskInput,\n context: IExecuteContext\n ): Promise<ChunkToVectorTaskOutput> {\n const { chunks, vector, doc_title } = input;\n\n const chunkArray = chunks as ChunkRecord[];\n\n if (!chunkArray || !vector) {\n throw new Error(\"Both chunks and vector are required\");\n }\n\n if (chunkArray.length !== vector.length) {\n throw new Error(`Mismatch: ${chunkArray.length} chunks but ${vector.length} vectors`);\n }\n\n const ids: string[] = [];\n const metadata: ChunkRecord[] = [];\n const texts: string[] = [];\n\n for (let i = 0; i < chunkArray.length; i++) {\n const chunk = chunkArray[i];\n\n ids.push(chunk.chunkId);\n texts.push(chunk.text);\n\n metadata.push({\n doc_id: chunk.doc_id,\n chunkId: chunk.chunkId,\n leafNodeId: chunk.nodePath[chunk.nodePath.length - 1],\n depth: chunk.depth,\n text: chunk.text,\n nodePath: chunk.nodePath,\n ...(doc_title ? { doc_title } : {}),\n ...(chunk.summary ? { summary: chunk.summary } : {}),\n ...(chunk.entities ? { entities: chunk.entities } : {}),\n });\n }\n\n return {\n ids,\n vectors: vector,\n metadata,\n texts,\n };\n }\n}\n\nexport const chunkToVector = (input: ChunkToVectorTaskInput, config?: ChunkToVectorTaskConfig) => {\n return new ChunkToVectorTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n chunkToVector: CreateWorkflow<\n ChunkToVectorTaskInput,\n ChunkToVectorTaskOutput,\n ChunkToVectorTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.chunkToVector = CreateWorkflow(ChunkToVectorTask);\n",
24
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { KnowledgeBase, TypeKnowledgeBase } from \"@workglow/knowledge-base\";\nimport type { ChunkRecord } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n knowledgeBase: TypeKnowledgeBase({\n title: \"Knowledge Base\",\n description: \"The knowledge base instance to search in (must support hybridSearch)\",\n }),\n queryVector: TypedArraySchema({\n title: \"Query Vector\",\n description: \"The query vector for semantic search\",\n }),\n queryText: {\n type: \"string\",\n title: \"Query Text\",\n description: \"The query text for full-text search\",\n },\n topK: {\n type: \"number\",\n title: \"Top K\",\n description: \"Number of top results to return\",\n minimum: 1,\n default: 10,\n },\n filter: {\n type: \"object\",\n title: \"Metadata Filter\",\n description: \"Filter results by metadata fields\",\n },\n scoreThreshold: {\n type: \"number\",\n title: \"Score Threshold\",\n description: \"Minimum combined score threshold (0-1)\",\n minimum: 0,\n maximum: 1,\n default: 0,\n },\n vectorWeight: {\n type: \"number\",\n title: \"Vector Weight\",\n description: \"Weight for vector similarity (0-1), remainder goes to text relevance\",\n minimum: 0,\n maximum: 1,\n default: 0.7,\n },\n returnVectors: {\n type: \"boolean\",\n title: \"Return Vectors\",\n description: \"Whether to return vector embeddings in results\",\n default: false,\n },\n },\n required: [\"knowledgeBase\", \"queryVector\", \"queryText\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Text Chunks\",\n description: \"Retrieved text chunks\",\n },\n chunk_ids: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Chunk IDs\",\n description: \"IDs of retrieved chunks\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata of retrieved chunk\",\n },\n title: \"Metadata\",\n description: \"Metadata of retrieved chunks\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Scores\",\n description: \"Combined relevance scores for each result\",\n },\n vectors: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Vector embedding\",\n }),\n title: \"Vectors\",\n description: \"Vector embeddings (if returnVectors is true)\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of results returned\",\n },\n query: {\n type: \"string\",\n title: \"Query\",\n description: \"The text query used for search (pass-through)\",\n },\n },\n required: [\"chunks\", \"chunk_ids\", \"metadata\", \"scores\", \"count\", \"query\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type HybridSearchTaskInput = FromSchema<typeof inputSchema, TypedArraySchemaOptions>;\nexport type HybridSearchTaskOutput = FromSchema<typeof outputSchema, TypedArraySchemaOptions>;\nexport type ChunkVectorHybridSearchTaskConfig = TaskConfig<HybridSearchTaskInput>;\n\n/**\n * Task for hybrid search combining vector similarity and full-text search.\n * Requires a knowledge base that supports hybridSearch (e.g., Postgres with pgvector).\n *\n * Hybrid search improves retrieval by combining:\n * - Semantic similarity (vector search) - understands meaning\n * - Keyword matching (full-text search) - finds exact terms\n */\nexport class ChunkVectorHybridSearchTask extends Task<\n HybridSearchTaskInput,\n HybridSearchTaskOutput,\n ChunkVectorHybridSearchTaskConfig\n> {\n public static override type = \"ChunkVectorHybridSearchTask\";\n public static override category = \"RAG\";\n public static override title = \"Hybrid Search\";\n public static override description = \"Combined vector + full-text search for improved retrieval\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: HybridSearchTaskInput,\n context: IExecuteContext\n ): Promise<HybridSearchTaskOutput> {\n const {\n knowledgeBase,\n queryVector,\n queryText,\n topK = 10,\n filter,\n scoreThreshold = 0,\n vectorWeight = 0.7,\n returnVectors = false,\n } = input;\n\n const kb = knowledgeBase as KnowledgeBase;\n\n // Convert to Float32Array for search\n const searchVector =\n queryVector instanceof Float32Array ? queryVector : new Float32Array(queryVector);\n\n // Perform hybrid search\n const results = await kb.hybridSearch(searchVector, {\n textQuery: queryText,\n topK,\n filter,\n scoreThreshold,\n vectorWeight,\n });\n\n // Extract text chunks from typed metadata\n const chunks = results.map((r) => {\n const meta = r.metadata as ChunkRecord;\n return meta.text || JSON.stringify(meta);\n });\n\n const output: HybridSearchTaskOutput = {\n chunks,\n chunk_ids: results.map((r) => r.chunk_id),\n metadata: results.map((r) => r.metadata),\n scores: results.map((r) => r.score),\n count: results.length,\n query: queryText,\n };\n\n if (returnVectors) {\n output.vectors = results.map((r) => r.vector);\n }\n\n return output;\n }\n}\n\nexport const hybridSearch = async (\n input: HybridSearchTaskInput,\n config?: ChunkVectorHybridSearchTaskConfig\n): Promise<HybridSearchTaskOutput> => {\n return new ChunkVectorHybridSearchTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n hybridSearch: CreateWorkflow<\n HybridSearchTaskInput,\n HybridSearchTaskOutput,\n ChunkVectorHybridSearchTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.hybridSearch = CreateWorkflow(ChunkVectorHybridSearchTask);\n",
27
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { KnowledgeBase, TypeKnowledgeBase } from \"@workglow/knowledge-base\";\nimport type { ChunkRecord } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n knowledgeBase: TypeKnowledgeBase({\n title: \"Knowledge Base\",\n description: \"The knowledge base instance to search in (must support hybridSearch)\",\n }),\n queryVector: TypedArraySchema({\n title: \"Query Vector\",\n description: \"The query vector for semantic search\",\n }),\n queryText: {\n type: \"string\",\n title: \"Query Text\",\n description: \"The query text for full-text search\",\n },\n topK: {\n type: \"number\",\n title: \"Top K\",\n description: \"Number of top results to return\",\n minimum: 1,\n default: 10,\n },\n filter: {\n type: \"object\",\n title: \"Metadata Filter\",\n description: \"Filter results by metadata fields\",\n },\n scoreThreshold: {\n type: \"number\",\n title: \"Score Threshold\",\n description: \"Minimum combined score threshold (0-1)\",\n minimum: 0,\n maximum: 1,\n default: 0,\n },\n vectorWeight: {\n type: \"number\",\n title: \"Vector Weight\",\n description: \"Weight for vector similarity (0-1), remainder goes to text relevance\",\n minimum: 0,\n maximum: 1,\n default: 0.7,\n },\n returnVectors: {\n type: \"boolean\",\n title: \"Return Vectors\",\n description: \"Whether to return vector embeddings in results\",\n default: false,\n },\n },\n required: [\"knowledgeBase\", \"queryVector\", \"queryText\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Text Chunks\",\n description: \"Retrieved text chunks\",\n },\n chunk_ids: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Chunk IDs\",\n description: \"IDs of retrieved chunks\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata of retrieved chunk\",\n },\n title: \"Metadata\",\n description: \"Metadata of retrieved chunks\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Scores\",\n description: \"Combined relevance scores for each result\",\n },\n vectors: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Vector embedding\",\n }),\n title: \"Vectors\",\n description: \"Vector embeddings (if returnVectors is true)\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of results returned\",\n },\n query: {\n type: \"string\",\n title: \"Query\",\n description: \"The text query used for search (pass-through)\",\n },\n },\n required: [\"chunks\", \"chunk_ids\", \"metadata\", \"scores\", \"count\", \"query\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type HybridSearchTaskInput = FromSchema<typeof inputSchema, TypedArraySchemaOptions>;\nexport type HybridSearchTaskOutput = FromSchema<typeof outputSchema, TypedArraySchemaOptions>;\nexport type ChunkVectorHybridSearchTaskConfig = TaskConfig<HybridSearchTaskInput>;\n\n/**\n * Task for hybrid search combining vector similarity and full-text search.\n * Requires a knowledge base that supports hybridSearch (e.g., Postgres with pgvector).\n *\n * Hybrid search improves retrieval by combining:\n * - Semantic similarity (vector search) - understands meaning\n * - Keyword matching (full-text search) - finds exact terms\n */\nexport class ChunkVectorHybridSearchTask extends Task<\n HybridSearchTaskInput,\n HybridSearchTaskOutput,\n ChunkVectorHybridSearchTaskConfig\n> {\n public static override type = \"ChunkVectorHybridSearchTask\";\n public static override category = \"RAG\";\n public static override title = \"Hybrid Search\";\n public static override description = \"Combined vector + full-text search for improved retrieval\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: HybridSearchTaskInput,\n context: IExecuteContext\n ): Promise<HybridSearchTaskOutput> {\n const {\n knowledgeBase,\n queryVector,\n queryText,\n topK = 10,\n filter,\n scoreThreshold = 0,\n vectorWeight = 0.7,\n returnVectors = false,\n } = input;\n\n const kb = knowledgeBase as KnowledgeBase;\n\n // Convert to Float32Array for search\n const searchVector =\n queryVector instanceof Float32Array ? queryVector : new Float32Array(queryVector);\n\n // kb.hybridSearch throws if the storage backend doesn't support it.\n const results = await kb.hybridSearch(searchVector, {\n textQuery: queryText,\n topK,\n filter,\n scoreThreshold,\n vectorWeight,\n });\n\n // Extract text chunks from typed metadata\n const chunks = results.map((r) => {\n const meta = r.metadata as ChunkRecord;\n return meta.text || JSON.stringify(meta);\n });\n\n const output: HybridSearchTaskOutput = {\n chunks,\n chunk_ids: results.map((r) => r.chunk_id),\n metadata: results.map((r) => r.metadata),\n scores: results.map((r) => r.score),\n count: results.length,\n query: queryText,\n };\n\n if (returnVectors) {\n output.vectors = results.map((r) => r.vector);\n }\n\n return output;\n }\n}\n\nexport const hybridSearch = async (\n input: HybridSearchTaskInput,\n config?: ChunkVectorHybridSearchTaskConfig\n): Promise<HybridSearchTaskOutput> => {\n return new ChunkVectorHybridSearchTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n hybridSearch: CreateWorkflow<\n HybridSearchTaskInput,\n HybridSearchTaskOutput,\n ChunkVectorHybridSearchTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.hybridSearch = CreateWorkflow(ChunkVectorHybridSearchTask);\n",
25
28
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { KnowledgeBase, TypeKnowledgeBase } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n knowledgeBase: TypeKnowledgeBase({\n title: \"Knowledge Base\",\n description: \"The knowledge base instance to search in\",\n }),\n query: TypedArraySchema({\n title: \"Query Vector\",\n description: \"The query vector to search for similar vectors\",\n }),\n topK: {\n type: \"number\",\n title: \"Top K\",\n description: \"Number of top results to return\",\n minimum: 1,\n default: 10,\n },\n filter: {\n type: \"object\",\n title: \"Metadata Filter\",\n description: \"Filter results by metadata fields\",\n },\n scoreThreshold: {\n type: \"number\",\n title: \"Score Threshold\",\n description: \"Minimum similarity score threshold (0-1)\",\n minimum: 0,\n maximum: 1,\n default: 0,\n },\n },\n required: [\"knowledgeBase\", \"query\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n ids: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"IDs\",\n description: \"IDs of matching vectors\",\n },\n vectors: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Matching vector embedding\",\n }),\n title: \"Vectors\",\n description: \"Matching vector embeddings\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata of matching vector\",\n },\n title: \"Metadata\",\n description: \"Metadata of matching vectors\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Scores\",\n description: \"Similarity scores for each result\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of results returned\",\n },\n },\n required: [\"ids\", \"vectors\", \"metadata\", \"scores\", \"count\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type VectorStoreSearchTaskInput = FromSchema<typeof inputSchema, TypedArraySchemaOptions>;\nexport type VectorStoreSearchTaskOutput = FromSchema<typeof outputSchema, TypedArraySchemaOptions>;\nexport type ChunkVectorSearchTaskConfig = TaskConfig<VectorStoreSearchTaskInput>;\n\n/**\n * Task for searching similar vectors in a knowledge base.\n * Returns top-K most similar vectors with their metadata and scores.\n */\nexport class ChunkVectorSearchTask extends Task<\n VectorStoreSearchTaskInput,\n VectorStoreSearchTaskOutput,\n ChunkVectorSearchTaskConfig\n> {\n public static override type = \"ChunkVectorSearchTask\";\n public static override category = \"Vector Store\";\n public static override title = \"Vector Store Search\";\n public static override description = \"Search for similar vectors in a knowledge base\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: VectorStoreSearchTaskInput,\n _context: IExecuteContext\n ): Promise<VectorStoreSearchTaskOutput> {\n const { knowledgeBase, query, topK = 10, filter, scoreThreshold = 0 } = input;\n\n const kb = knowledgeBase as KnowledgeBase;\n\n const results = await kb.similaritySearch(query, {\n topK,\n filter,\n scoreThreshold,\n });\n\n return {\n ids: results.map((r) => r.chunk_id),\n vectors: results.map((r) => r.vector),\n metadata: results.map((r) => r.metadata),\n scores: results.map((r) => r.score),\n count: results.length,\n };\n }\n}\n\nexport const vectorStoreSearch = (\n input: VectorStoreSearchTaskInput,\n config?: ChunkVectorSearchTaskConfig\n) => {\n return new ChunkVectorSearchTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n vectorStoreSearch: CreateWorkflow<\n VectorStoreSearchTaskInput,\n VectorStoreSearchTaskOutput,\n ChunkVectorSearchTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.vectorStoreSearch = CreateWorkflow(ChunkVectorSearchTask);\n",
26
29
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { KnowledgeBase, TypeKnowledgeBase } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\nimport { TypeSingleOrArray } from \"./base/AiTaskSchemas\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n knowledgeBase: TypeKnowledgeBase({\n title: \"Knowledge Base\",\n description: \"The knowledge base instance to store vectors in\",\n }),\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID\",\n },\n vectors: TypeSingleOrArray(\n TypedArraySchema({\n title: \"Vectors\",\n description: \"The vector embeddings\",\n })\n ),\n metadata: TypeSingleOrArray({\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata associated with the vector\",\n additionalProperties: true,\n }),\n },\n required: [\"knowledgeBase\", \"doc_id\", \"vectors\", \"metadata\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of vectors upserted\",\n },\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID\",\n },\n chunk_ids: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Chunk IDs\",\n description: \"Chunk IDs of upserted vectors\",\n },\n },\n required: [\"count\", \"doc_id\", \"chunk_ids\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type VectorStoreUpsertTaskInput = FromSchema<\n typeof inputSchema,\n TypedArraySchemaOptions // & TypeVectorRepositoryOptions\n>;\nexport type VectorStoreUpsertTaskOutput = FromSchema<typeof outputSchema>;\nexport type ChunkVectorUpsertTaskConfig = TaskConfig<VectorStoreUpsertTaskInput>;\n\n/**\n * Task for upserting (insert or update) vectors into a knowledge base.\n * Supports both single and bulk operations.\n */\nexport class ChunkVectorUpsertTask extends Task<\n VectorStoreUpsertTaskInput,\n VectorStoreUpsertTaskOutput,\n ChunkVectorUpsertTaskConfig\n> {\n public static override type = \"ChunkVectorUpsertTask\";\n public static override category = \"Vector Store\";\n public static override title = \"Add to Vector Store\";\n public static override description = \"Store vector embeddings with metadata in a knowledge base\";\n public static override cacheable = false; // Has side effects\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: VectorStoreUpsertTaskInput,\n context: IExecuteContext\n ): Promise<VectorStoreUpsertTaskOutput> {\n const { knowledgeBase, doc_id, vectors, metadata } = input;\n\n // Normalize inputs to arrays\n const vectorArray = Array.isArray(vectors) ? vectors : [vectors];\n const metadataArray = Array.isArray(metadata)\n ? metadata\n : Array(vectorArray.length).fill(metadata);\n\n const kb = knowledgeBase as KnowledgeBase;\n\n await context.updateProgress(1, \"Upserting vectors\");\n\n // Bulk upsert if multiple items\n if (vectorArray.length > 1) {\n if (vectorArray.length !== metadataArray.length) {\n throw new Error(\"Mismatch: vectors and metadata arrays must have the same length\");\n }\n const entities = vectorArray.map((vector, i) => {\n const metadataItem = metadataArray[i];\n return {\n doc_id,\n vector,\n metadata: metadataItem,\n };\n });\n const results = await kb.upsertChunksBulk(entities);\n const chunk_ids = results.map((r) => r.chunk_id);\n return {\n doc_id,\n chunk_ids,\n count: chunk_ids.length,\n };\n } else if (vectorArray.length === 1) {\n // Single upsert\n const metadataItem = metadataArray[0];\n const result = await kb.upsertChunk({\n doc_id,\n vector: vectorArray[0],\n metadata: metadataItem,\n });\n return {\n doc_id,\n chunk_ids: [result.chunk_id],\n count: 1,\n };\n }\n\n return {\n doc_id,\n chunk_ids: [],\n count: 0,\n };\n }\n}\n\nexport const chunkVectorUpsert = (\n input: VectorStoreUpsertTaskInput,\n config?: ChunkVectorUpsertTaskConfig\n) => {\n return new ChunkVectorUpsertTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n chunkVectorUpsert: CreateWorkflow<\n VectorStoreUpsertTaskInput,\n VectorStoreUpsertTaskOutput,\n ChunkVectorUpsertTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.chunkVectorUpsert = CreateWorkflow(ChunkVectorUpsertTask);\n",
27
30
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { estimateTokens } from \"@workglow/knowledge-base\";\nimport { CreateWorkflow, IExecuteReactiveContext, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { CountTokensTask } from \"./CountTokensTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nexport const ContextFormat = {\n SIMPLE: \"simple\",\n NUMBERED: \"numbered\",\n XML: \"xml\",\n MARKDOWN: \"markdown\",\n JSON: \"json\",\n} as const;\n\nexport type ContextFormat = (typeof ContextFormat)[keyof typeof ContextFormat];\n\nconst modelSchema = TypeModel(\"model\", {\n title: \"Model\",\n description: \"Model to use for token counting (optional, falls back to estimation)\",\n});\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Text Chunks\",\n description: \"Retrieved text chunks to format\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata for each chunk\",\n },\n title: \"Metadata\",\n description: \"Metadata for each chunk (optional)\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Scores\",\n description: \"Relevance scores for each chunk (optional)\",\n },\n format: {\n type: \"string\",\n enum: Object.values(ContextFormat),\n title: \"Format\",\n description: \"Format for the context output\",\n default: ContextFormat.SIMPLE,\n },\n maxLength: {\n type: \"number\",\n title: \"Max Length\",\n description: \"Maximum length of context in characters (0 = unlimited)\",\n minimum: 0,\n default: 0,\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description:\n \"Maximum number of tokens in context (0 = unlimited). Takes precedence over maxLength when set.\",\n minimum: 0,\n default: 0,\n },\n includeMetadata: {\n type: \"boolean\",\n title: \"Include Metadata\",\n description: \"Whether to include metadata in the context\",\n default: false,\n },\n separator: {\n type: \"string\",\n title: \"Separator\",\n description: \"Separator between chunks\",\n default: \"\\n\\n\",\n },\n model: modelSchema,\n },\n required: [\"chunks\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n context: {\n type: \"string\",\n title: \"Context\",\n description: \"Formatted context string for LLM\",\n },\n chunksUsed: {\n type: \"number\",\n title: \"Chunks Used\",\n description: \"Number of chunks included in context\",\n },\n totalLength: {\n type: \"number\",\n title: \"Total Length\",\n description: \"Total length of context in characters\",\n },\n totalTokens: {\n type: \"number\",\n title: \"Total Tokens\",\n description: \"Estimated token count of the context\",\n },\n },\n required: [\"context\", \"chunksUsed\", \"totalLength\", \"totalTokens\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ContextBuilderTaskInput = FromSchema<typeof inputSchema>;\nexport type ContextBuilderTaskOutput = FromSchema<typeof outputSchema>;\nexport type ContextBuilderTaskConfig = TaskConfig<ContextBuilderTaskInput>;\n\n/**\n * Task for formatting retrieved chunks into context for LLM prompts.\n * Supports various formatting styles and length/token constraints.\n *\n * Token budgeting (for `maxTokens`) uses {@link estimateTokens} to approximate\n * the token count of the generated context. This is a character-based estimate\n * rather than an exact tokenizer tied to a specific model.\n */\nexport class ContextBuilderTask extends Task<\n ContextBuilderTaskInput,\n ContextBuilderTaskOutput,\n ContextBuilderTaskConfig\n> {\n public static override type = \"ContextBuilderTask\";\n public static override category = \"RAG\";\n public static override title = \"Context Builder\";\n public static override description = \"Format retrieved chunks into context for LLM prompts\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async executeReactive(\n input: ContextBuilderTaskInput,\n _output: ContextBuilderTaskOutput,\n context: IExecuteReactiveContext\n ): Promise<ContextBuilderTaskOutput> {\n const {\n chunks,\n metadata = [],\n scores = [],\n format = ContextFormat.SIMPLE,\n maxLength = 0,\n maxTokens = 0,\n includeMetadata = false,\n separator = \"\\n\\n\",\n } = input;\n\n let countFn: (text: string) => Promise<number> = async (text: string) => estimateTokens(text);\n if (input.model) {\n const countTask = context.own(new CountTokensTask({ defaults: { model: input.model } }));\n countFn = async (text: string): Promise<number> => {\n try {\n const result = await countTask.run({ text });\n return result.count as number;\n } catch (_err) {\n // Fall back to local token estimation if CountTokensTask is unavailable or fails.\n return estimateTokens(text);\n }\n };\n }\n\n const useTokenBudget = maxTokens > 0;\n\n let ctx = \"\";\n let chunksUsed = 0;\n\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n const meta = metadata[i];\n const score = scores[i];\n\n let formattedChunk = this.formatChunk(chunk, meta, score, i, format, includeMetadata);\n const prefix = chunksUsed > 0 ? separator : \"\";\n const candidate = ctx + prefix + formattedChunk;\n\n if (useTokenBudget) {\n if ((await countFn(candidate)) > maxTokens) {\n if (chunksUsed === 0) {\n let truncated = formattedChunk;\n while (truncated.length > 10 && (await countFn(truncated)) > maxTokens) {\n truncated = truncated.substring(0, Math.floor(truncated.length * 0.9));\n }\n if (truncated.length > 10) {\n ctx = truncated.substring(0, truncated.length - 3) + \"...\";\n chunksUsed++;\n }\n }\n break;\n }\n } else if (maxLength > 0) {\n if (candidate.length > maxLength) {\n if (chunksUsed === 0) {\n const available = maxLength - ctx.length;\n if (available > 10) {\n formattedChunk = formattedChunk.substring(0, available - 3) + \"...\";\n ctx += formattedChunk;\n chunksUsed++;\n }\n }\n break;\n }\n }\n\n ctx = candidate;\n chunksUsed++;\n }\n\n const totalTokens = await countFn(ctx);\n\n return {\n context: ctx,\n chunksUsed,\n totalLength: ctx.length,\n totalTokens,\n };\n }\n\n private formatChunk(\n chunk: string,\n metadata: any,\n score: number | undefined,\n index: number,\n format: ContextFormat,\n includeMetadata: boolean\n ): string {\n switch (format) {\n case ContextFormat.NUMBERED:\n return this.formatNumbered(chunk, metadata, score, index, includeMetadata);\n case ContextFormat.XML:\n return this.formatXML(chunk, metadata, score, index, includeMetadata);\n case ContextFormat.MARKDOWN:\n return this.formatMarkdown(chunk, metadata, score, index, includeMetadata);\n case ContextFormat.JSON:\n return this.formatJSON(chunk, metadata, score, index, includeMetadata);\n case ContextFormat.SIMPLE:\n default:\n return chunk;\n }\n }\n\n private formatNumbered(\n chunk: string,\n metadata: any,\n score: number | undefined,\n index: number,\n includeMetadata: boolean\n ): string {\n let result = `[${index + 1}] ${chunk}`;\n if (includeMetadata && metadata) {\n const metaStr = this.formatMetadataInline(metadata, score);\n if (metaStr) {\n result += ` ${metaStr}`;\n }\n }\n return result;\n }\n\n private formatXML(\n chunk: string,\n metadata: any,\n score: number | undefined,\n index: number,\n includeMetadata: boolean\n ): string {\n let result = `<chunk id=\"${index + 1}\">`;\n if (includeMetadata && (metadata || score !== undefined)) {\n result += \"\\n <metadata>\";\n if (score !== undefined) {\n result += `\\n <score>${score.toFixed(4)}</score>`;\n }\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n result += `\\n <${key}>${this.escapeXML(String(value))}</${key}>`;\n }\n }\n result += \"\\n </metadata>\";\n result += `\\n <content>${this.escapeXML(chunk)}</content>`;\n result += \"\\n</chunk>\";\n } else {\n result += `${this.escapeXML(chunk)}</chunk>`;\n }\n return result;\n }\n\n private formatMarkdown(\n chunk: string,\n metadata: any,\n score: number | undefined,\n index: number,\n includeMetadata: boolean\n ): string {\n let result = `### Chunk ${index + 1}\\n\\n`;\n if (includeMetadata && (metadata || score !== undefined)) {\n result += \"**Metadata:**\\n\";\n if (score !== undefined) {\n result += `- Score: ${score.toFixed(4)}\\n`;\n }\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n result += `- ${key}: ${value}\\n`;\n }\n }\n result += \"\\n\";\n }\n result += chunk;\n return result;\n }\n\n private formatJSON(\n chunk: string,\n metadata: any,\n score: number | undefined,\n index: number,\n includeMetadata: boolean\n ): string {\n const obj: any = {\n index: index + 1,\n content: chunk,\n };\n if (includeMetadata) {\n if (score !== undefined) {\n obj.score = score;\n }\n if (metadata) {\n obj.metadata = metadata;\n }\n }\n return JSON.stringify(obj);\n }\n\n private formatMetadataInline(metadata: any, score: number | undefined): string {\n const parts: string[] = [];\n if (score !== undefined) {\n parts.push(`score=${score.toFixed(4)}`);\n }\n if (metadata) {\n for (const [key, value] of Object.entries(metadata)) {\n parts.push(`${key}=${value}`);\n }\n }\n return parts.length > 0 ? `(${parts.join(\", \")})` : \"\";\n }\n\n private escapeXML(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&apos;\");\n }\n}\n\nexport const contextBuilder = (\n input: ContextBuilderTaskInput,\n config?: ContextBuilderTaskConfig\n) => {\n return new ContextBuilderTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n contextBuilder: CreateWorkflow<\n ContextBuilderTaskInput,\n ContextBuilderTaskOutput,\n ContextBuilderTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.contextBuilder = CreateWorkflow(ContextBuilderTask);\n",
@@ -29,7 +32,6 @@
29
32
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DocumentRootNode, getChildren, hasChildren } from \"@workglow/knowledge-base\";\n\nimport type { DocumentNode, Entity, NodeEnrichment } from \"@workglow/knowledge-base\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { ModelConfig } from \"../model/ModelSchema\";\nimport { TextNamedEntityRecognitionTask } from \"./TextNamedEntityRecognitionTask\";\nimport { TextSummaryTask } from \"./TextSummaryTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID\",\n },\n documentTree: {\n type: \"object\",\n additionalProperties: true,\n title: \"Document Tree\",\n description: \"The hierarchical document tree to enrich\",\n },\n generateSummaries: {\n type: \"boolean\",\n title: \"Generate Summaries\",\n description: \"Whether to generate summaries for sections\",\n default: true,\n },\n extractEntities: {\n type: \"boolean\",\n title: \"Extract Entities\",\n description: \"Whether to extract named entities\",\n default: true,\n },\n summaryModel: TypeModel(\"model:TextSummaryTask\", {\n title: \"Summary Model\",\n description: \"Model to use for summary generation (optional)\",\n }),\n summaryThreshold: {\n type: \"number\",\n title: \"Summary Threshold\",\n description: \"Minimum combined text length (node + children) to warrant generating a summary\",\n default: 500,\n },\n nerModel: TypeModel(\"model:TextNamedEntityRecognitionTask\", {\n title: \"NER Model\",\n description: \"Model to use for named entity recognition (optional)\",\n }),\n },\n required: [],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID (passed through)\",\n },\n documentTree: {\n title: \"Document Tree\",\n description: \"The enriched document tree\",\n },\n summaryCount: {\n type: \"number\",\n title: \"Summary Count\",\n description: \"Number of summaries generated\",\n },\n entityCount: {\n type: \"number\",\n title: \"Entity Count\",\n description: \"Number of entities extracted\",\n },\n },\n required: [\"doc_id\", \"documentTree\", \"summaryCount\", \"entityCount\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type DocumentEnricherTaskInput = Omit<FromSchema<typeof inputSchema>, \"documentTree\"> & {\n documentTree: DocumentRootNode;\n};\nexport type DocumentEnricherTaskOutput = FromSchema<typeof outputSchema>;\nexport type DocumentEnricherTaskConfig = TaskConfig<DocumentEnricherTaskInput>;\n\n/**\n * Task for enriching document nodes with summaries and entities\n * Uses bottom-up propagation to roll up child information to parents\n */\nexport class DocumentEnricherTask extends Task<\n DocumentEnricherTaskInput,\n DocumentEnricherTaskOutput,\n DocumentEnricherTaskConfig\n> {\n public static override type = \"DocumentEnricherTask\";\n public static override category = \"Document\";\n public static override title = \"Document Enricher\";\n public static override description = \"Enrich document nodes with summaries and entities\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: DocumentEnricherTaskInput,\n context: IExecuteContext\n ): Promise<DocumentEnricherTaskOutput> {\n const {\n doc_id,\n documentTree,\n generateSummaries = true,\n extractEntities = true,\n summaryModel: summaryModelConfig,\n summaryThreshold = 500,\n nerModel: nerModelConfig,\n } = input;\n\n const root = documentTree as DocumentNode;\n const summaryModel = summaryModelConfig ? (summaryModelConfig as ModelConfig) : undefined;\n const nerModel = nerModelConfig ? (nerModelConfig as ModelConfig) : undefined;\n let summaryCount = 0;\n let entityCount = 0;\n\n const extract =\n extractEntities && nerModel\n ? async (text: string) => {\n const result = await context\n .own(new TextNamedEntityRecognitionTask())\n .run({ text, model: nerModel });\n return (result.entities as Array<{ entity: string; word: string; score: number }>).map(\n (e) => ({\n type: e.entity,\n text: e.word,\n score: e.score,\n })\n );\n }\n : undefined;\n\n // Bottom-up enrichment\n const enrichedRoot = await this.enrichNode(\n root,\n context,\n generateSummaries && summaryModel ? summaryModel : undefined,\n summaryThreshold,\n extract,\n (count) => (summaryCount += count),\n (count) => (entityCount += count)\n );\n\n return {\n doc_id: doc_id as string,\n documentTree: enrichedRoot,\n summaryCount,\n entityCount,\n };\n }\n\n /**\n * Enrich a node recursively (bottom-up)\n */\n private async enrichNode(\n node: DocumentNode,\n context: IExecuteContext,\n summaryModel: ModelConfig | undefined,\n summaryThreshold: number,\n extract: ((text: string) => Promise<Entity[]>) | undefined,\n onSummary: (count: number) => void,\n onEntity: (count: number) => void\n ): Promise<DocumentNode> {\n // If node has children, enrich them first\n let enrichedChildren: DocumentNode[] | undefined;\n if (hasChildren(node)) {\n const children = getChildren(node);\n enrichedChildren = await Promise.all(\n children.map((child) =>\n this.enrichNode(\n child,\n context,\n summaryModel,\n summaryThreshold,\n extract,\n onSummary,\n onEntity\n )\n )\n );\n }\n\n // Generate enrichment for this node\n const enrichment: NodeEnrichment = {};\n\n // Generate summary (for sections and documents)\n if (summaryModel && (node.kind === \"section\" || node.kind === \"document\")) {\n if (enrichedChildren && enrichedChildren.length > 0) {\n // Summary of children\n enrichment.summary = await this.generateSummary(\n node,\n enrichedChildren,\n context,\n summaryModel,\n summaryThreshold\n );\n } else {\n // Leaf section summary\n enrichment.summary = await this.generateLeafSummary(\n node.text,\n context,\n summaryModel,\n summaryThreshold\n );\n }\n if (enrichment.summary) {\n onSummary(1);\n }\n }\n\n // Extract entities\n if (extract) {\n enrichment.entities = await this.extractEntities(node, enrichedChildren, extract);\n if (enrichment.entities) {\n onEntity(enrichment.entities.length);\n }\n }\n\n // Create enriched node\n const enrichedNode: DocumentNode = {\n ...node,\n enrichment: Object.keys(enrichment).length > 0 ? enrichment : undefined,\n };\n\n if (enrichedChildren) {\n // @ts-expect-error - children are otherwise readonly\n enrichedNode.children = enrichedChildren;\n }\n\n return enrichedNode;\n }\n\n /**\n * Private method to summarize text using the TextSummaryTask\n */\n private async summarize(\n text: string,\n context: IExecuteContext,\n model: ModelConfig\n ): Promise<string> {\n // TODO: Handle truncation of text if needed, based on model configuration\n return (await context.own(new TextSummaryTask()).run({ text, model })).text as string;\n }\n\n /**\n * Generate summary for a node with children\n */\n private async generateSummary(\n node: DocumentNode,\n children: DocumentNode[],\n context: IExecuteContext,\n model: ModelConfig,\n threshold: number\n ): Promise<string | undefined> {\n const textParts: string[] = [];\n\n // Include the node's own text\n const nodeText = node.text?.trim();\n if (nodeText) {\n textParts.push(nodeText);\n }\n\n // Include children summaries/texts\n const childTexts = children\n .map((child) => {\n if (child.enrichment?.summary) {\n return child.enrichment.summary;\n }\n return child.text;\n })\n .join(\" \")\n .trim();\n\n if (childTexts) {\n textParts.push(childTexts);\n }\n\n const combinedText = textParts.join(\" \").trim();\n if (!combinedText) {\n return undefined;\n }\n\n // Check if summary is warranted based on threshold\n if (combinedText.length < threshold) {\n return undefined;\n }\n\n const summaryParts: string[] = [];\n\n // Summarize the node's own text first\n if (nodeText) {\n const nodeSummary = await this.summarize(nodeText, context, model);\n if (nodeSummary) {\n summaryParts.push(nodeSummary);\n }\n }\n\n // Include children summaries/texts\n if (childTexts) {\n summaryParts.push(childTexts);\n }\n\n const combinedSummaries = summaryParts.join(\" \").trim();\n if (!combinedSummaries) {\n return undefined;\n }\n\n const result = await this.summarize(combinedSummaries, context, model);\n return result;\n }\n\n /**\n * Generate summary for a leaf node\n */\n private async generateLeafSummary(\n text: string,\n context: IExecuteContext,\n model: ModelConfig,\n threshold: number\n ): Promise<string | undefined> {\n const trimmedText = text.trim();\n if (!trimmedText) {\n return undefined;\n }\n\n // Check if summary is warranted based on threshold\n if (trimmedText.length < threshold) {\n return undefined;\n }\n\n const result = await this.summarize(trimmedText, context, model);\n return result;\n }\n\n /**\n * Extract and roll up entities from node and children\n */\n private async extractEntities(\n node: DocumentNode,\n children: DocumentNode[] | undefined,\n extract: ((text: string) => Promise<Entity[]>) | undefined\n ): Promise<Entity[] | undefined> {\n const entities: Entity[] = [];\n\n // Collect from children first\n if (children) {\n for (const child of children) {\n if (child.enrichment?.entities) {\n entities.push(...child.enrichment.entities);\n }\n }\n }\n\n const text = node.text?.trim();\n if (text && extract) {\n const nodeEntities = await extract(text);\n if (nodeEntities?.length) {\n entities.push(...nodeEntities);\n }\n }\n\n // Deduplicate by text\n const unique = new Map<string, Entity>();\n for (const entity of entities) {\n const key = `${entity.text}::${entity.type}`;\n const existing = unique.get(key);\n if (!existing || entity.score > existing.score) {\n unique.set(key, entity);\n }\n }\n\n const result = Array.from(unique.values());\n return result.length > 0 ? result : undefined;\n }\n}\n\nexport const documentEnricher = (\n input: DocumentEnricherTaskInput,\n config?: DocumentEnricherTaskConfig\n) => {\n return new DocumentEnricherTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n documentEnricher: CreateWorkflow<\n DocumentEnricherTaskInput,\n DocumentEnricherTaskOutput,\n DocumentEnricherTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.documentEnricher = CreateWorkflow(DocumentEnricherTask);\n",
30
33
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model:TextNamedEntityRecognitionTask\");\n\nexport const TextNamedEntityRecognitionInputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to extract named entities from\",\n },\n blockList: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n title: \"Block List\",\n description: \"The entity types to exclude from results\",\n \"x-ui-group\": \"Configuration\",\n \"x-ui-group-open\": false,\n },\n model: modelSchema,\n },\n required: [\"text\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextNamedEntityRecognitionOutputSchema = {\n type: \"object\",\n properties: {\n entities: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n entity: {\n type: \"string\",\n title: \"Entity\",\n description: \"The type of the named entity\",\n },\n score: {\n type: \"number\",\n title: \"Score\",\n description: \"The confidence score for this entity\",\n },\n word: {\n type: \"string\",\n title: \"Word\",\n description: \"The extracted text of the named entity\",\n },\n },\n required: [\"entity\", \"score\", \"word\"],\n additionalProperties: false,\n },\n title: \"Entities\",\n description: \"The extracted named entities with their types, scores, and text\",\n },\n },\n required: [\"entities\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextNamedEntityRecognitionTaskInput = FromSchema<\n typeof TextNamedEntityRecognitionInputSchema\n>;\nexport type TextNamedEntityRecognitionTaskOutput = FromSchema<\n typeof TextNamedEntityRecognitionOutputSchema\n>;\nexport type TextNamedEntityRecognitionTaskConfig = TaskConfig<TextNamedEntityRecognitionTaskInput>;\n\n/**\n * Extracts named entities from text using language models\n */\nexport class TextNamedEntityRecognitionTask extends AiTask<\n TextNamedEntityRecognitionTaskInput,\n TextNamedEntityRecognitionTaskOutput,\n TextNamedEntityRecognitionTaskConfig\n> {\n public static override type = \"TextNamedEntityRecognitionTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Named Entity Recognition\";\n public static override description = \"Extracts named entities from text\";\n public static override inputSchema(): DataPortSchema {\n return TextNamedEntityRecognitionInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextNamedEntityRecognitionOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run named entity recognition tasks.\n * Creates and executes a TextNamedEntityRecognitionTask with the provided input.\n * @param input The input parameters for named entity recognition (text and model)\n * @returns Promise resolving to the extracted named entities with types, scores, and text\n */\nexport const textNamedEntityRecognition = (\n input: TextNamedEntityRecognitionTaskInput,\n config?: TextNamedEntityRecognitionTaskConfig\n) => {\n return new TextNamedEntityRecognitionTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textNamedEntityRecognition: CreateWorkflow<\n TextNamedEntityRecognitionTaskInput,\n TextNamedEntityRecognitionTaskOutput,\n TextNamedEntityRecognitionTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textNamedEntityRecognition = CreateWorkflow(TextNamedEntityRecognitionTask);\n",
31
34
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst modelSchema = TypeModel(\"model:TextSummaryTask\");\n\nexport const TextSummaryInputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to summarize\",\n },\n model: modelSchema,\n },\n required: [\"text\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextSummaryOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The summarized text\",\n \"x-stream\": \"append\",\n },\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextSummaryTaskInput = FromSchema<typeof TextSummaryInputSchema>;\nexport type TextSummaryTaskOutput = FromSchema<typeof TextSummaryOutputSchema>;\nexport type TextSummaryTaskConfig = TaskConfig<TextSummaryTaskInput>;\n\n/**\n * This summarizes a piece of text\n */\n\nexport class TextSummaryTask extends StreamingAiTask<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n TextSummaryTaskConfig\n> {\n public static override type = \"TextSummaryTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Summary\";\n public static override description =\n \"Summarizes text into a shorter form while preserving key information\";\n public static override inputSchema(): DataPortSchema {\n return TextSummaryInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextSummaryOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run text summary tasks.\n * Creates and executes a text summary task with the provided input.\n * @param input The input parameters for text summary (text and model)\n * @returns Promise resolving to the summarized text output(s)\n */\nexport const textSummary = async (input: TextSummaryTaskInput, config?: TextSummaryTaskConfig) => {\n return new TextSummaryTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textSummary: CreateWorkflow<TextSummaryTaskInput, TextSummaryTaskOutput, TextSummaryTaskConfig>;\n }\n}\n\nWorkflow.prototype.textSummary = CreateWorkflow(TextSummaryTask);\n",
32
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @description Base class for AI tasks that support streaming output.\n * Extends AiTask with executeStream() that yields StreamEvents from the provider.\n */\n\nimport { getStreamingPorts, TaskConfigurationError } from \"@workglow/task-graph\";\nimport type { TaskConfig, IExecuteContext, StreamEvent, TaskOutput } from \"@workglow/task-graph\";\n\nimport { AiTask } from \"./AiTask\";\nimport type { AiTaskInput } from \"./AiTask\";\nimport { getAiProviderRegistry } from \"../../provider/AiProviderRegistry\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\n\n/**\n * A base class for streaming AI tasks.\n * Extends AiTask to provide streaming output via executeStream().\n *\n * Subclasses set `streamMode` to control streaming behavior:\n * - 'append': each chunk is a delta (e.g., a new token). Default for text generation.\n * - 'object': each chunk is a progressively more complete partial object.\n * - 'replace': each chunk is a revised full snapshot of the output.\n *\n * The standard execute() method is preserved as a fallback that internally\n * consumes the stream to completion (so non-streaming callers get the same result).\n *\n * Port annotation: providers yield raw events without a `port` field.\n * This class wraps text-delta events with the correct port from the task's\n * output schema before they reach the TaskRunner.\n */\nexport class StreamingAiTask<\n Input extends AiTaskInput = AiTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends TaskConfig<Input> = TaskConfig<Input>,\n> extends AiTask<Input, Output, Config> {\n public static override type: string = \"StreamingAiTask\";\n\n /**\n * Streaming execution: resolves the provider strategy and yields StreamEvents from it.\n * Routes through the same strategy as execute() (queued vs direct) so GPU\n * serialization is respected even for streaming tasks.\n *\n * Wraps port-less text-delta and object-delta events from providers with\n * the port determined by the task's output schema `x-stream` annotations.\n */\n async *executeStream(input: Input, context: IExecuteContext): AsyncIterable<StreamEvent<Output>> {\n const model = input.model as ModelConfig;\n if (!model || typeof model !== \"object\") {\n throw new TaskConfigurationError(\n \"StreamingAiTask: Model was not resolved to ModelConfig - this indicates a bug in the resolution system\"\n );\n }\n const jobInput = await this.getJobInput(input);\n const strategy = getAiProviderRegistry().getStrategy(model);\n\n // Resolve the streaming port(s) from the output schema for wrapping.\n // Falls back to the first property in the output schema rather than\n // hardcoding \"text\", so non-text streaming tasks work correctly.\n const outSchema = this.outputSchema();\n const ports = getStreamingPorts(outSchema);\n let defaultPort = \"text\";\n if (ports.length > 0) {\n defaultPort = ports[0].port;\n } else {\n if (typeof outSchema === \"object\" && outSchema.properties) {\n const firstProp = Object.keys(outSchema.properties)[0];\n if (firstProp) defaultPort = firstProp;\n }\n }\n\n for await (const event of strategy.executeStream(jobInput, context, this.runConfig.runnerId)) {\n if (event.type === \"text-delta\") {\n yield { ...event, port: event.port ?? defaultPort } as StreamEvent<Output>;\n } else if (event.type === \"object-delta\") {\n yield { ...event, port: event.port ?? defaultPort } as StreamEvent<Output>;\n } else {\n yield event as StreamEvent<Output>;\n }\n }\n }\n}\n",
33
35
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Document, KnowledgeBase, TypeKnowledgeBase } from \"@workglow/knowledge-base\";\nimport { DocumentMetadataSchema } from \"@workglow/knowledge-base\";\nimport type { DocumentMetadata, DocumentNode } from \"@workglow/knowledge-base\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n knowledgeBase: TypeKnowledgeBase({\n title: \"Knowledge Base\",\n description: \"The knowledge base instance to store the document in\",\n }),\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID (from the parser)\",\n },\n documentTree: {\n title: \"Document Tree\",\n description: \"The hierarchical document tree to persist\",\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description:\n \"Optional human-readable title. If provided, overrides metadata.title. \" +\n \"Either this or metadata.title must be supplied.\",\n },\n metadata: {\n ...DocumentMetadataSchema,\n // Override the title requirement inherited from DocumentMetadataSchema.\n // The task framework materializes absent optional object inputs as `{}`,\n // which would otherwise fail `required: [\"title\"]` validation here.\n // Title presence is enforced at runtime in execute() instead, so the\n // `title` and `metadata.title` paths can each independently satisfy it.\n required: [],\n title: \"Metadata\",\n description:\n \"Optional document metadata. May contain `title` (unless the top-level \" +\n \"`title` input is also provided), `sourceUri`, `createdAt`, and any \" +\n \"additional caller-defined fields (the schema is open).\",\n },\n },\n required: [\"knowledgeBase\", \"doc_id\", \"documentTree\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"The document ID (passed through after persistence)\",\n },\n },\n required: [\"doc_id\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type DocumentUpsertTaskInput = FromSchema<typeof inputSchema>;\nexport type DocumentUpsertTaskOutput = FromSchema<typeof outputSchema>;\nexport type DocumentUpsertTaskConfig = TaskConfig<DocumentUpsertTaskInput>;\n\n/**\n * Persists a parsed document tree to a knowledge base. Sits between\n * `StructuralParserTask` and `HierarchicalChunkerTask` in a typical RAG\n * ingest pipeline so that the document row exists in tabular storage\n * before any chunk-vector row references its `doc_id`.\n *\n * Pure side-effect task: input `doc_id` is preserved on the output so\n * downstream tasks can chain on the upsert completing successfully.\n */\nexport class DocumentUpsertTask extends Task<\n DocumentUpsertTaskInput,\n DocumentUpsertTaskOutput,\n DocumentUpsertTaskConfig\n> {\n public static override type = \"DocumentUpsertTask\";\n public static override category = \"Vector Store\";\n public static override title = \"Add Document\";\n public static override description = \"Persist a parsed document tree to a knowledge base\";\n public static override cacheable = false; // Has side effects\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: DocumentUpsertTaskInput,\n context: IExecuteContext\n ): Promise<DocumentUpsertTaskOutput> {\n const { knowledgeBase, doc_id, documentTree, title, metadata } = input;\n const kb = knowledgeBase as KnowledgeBase;\n\n // Merge: explicit `title` wins over `metadata.title`. Open `metadata` shape\n // (additionalProperties: true) means any extra frontmatter fields the caller\n // passed are persisted on the Document record unchanged.\n const merged: DocumentMetadata = {\n ...((metadata ?? {}) as DocumentMetadata),\n ...(title !== undefined ? { title } : {}),\n };\n if (!merged.title) {\n throw new Error(\n \"DocumentUpsertTask: title is required — provide it via the 'title' input or 'metadata.title'\"\n );\n }\n\n await context.updateProgress(1, \"Upserting document\");\n\n const document = new Document(documentTree as DocumentNode, merged, [], doc_id);\n const stored = await kb.upsertDocument(document);\n\n return {\n doc_id: stored.doc_id ?? doc_id,\n };\n }\n}\n\nexport const documentUpsert = (\n input: DocumentUpsertTaskInput,\n config?: DocumentUpsertTaskConfig\n) => {\n return new DocumentUpsertTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n documentUpsert: CreateWorkflow<\n DocumentUpsertTaskInput,\n DocumentUpsertTaskOutput,\n DocumentUpsertTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.documentUpsert = CreateWorkflow(DocumentUpsertTask);\n",
34
36
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model\");\n\nconst DownloadModelInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n },\n required: [\"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst DownloadModelOutputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n },\n required: [\"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type DownloadModelTaskRunInput = FromSchema<typeof DownloadModelInputSchema>;\nexport type DownloadModelTaskRunOutput = FromSchema<typeof DownloadModelOutputSchema>;\nexport type DownloadModelTaskConfig = TaskConfig<DownloadModelTaskRunInput>;\n\n/**\n * Download a model from a remote source and cache it locally.\n *\n * @remarks\n * This task has a side effect of downloading the model and caching it locally outside of the task system\n */\nexport class DownloadModelTask extends AiTask<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n DownloadModelTaskConfig\n> {\n public static override type = \"DownloadModelTask\";\n public static override category = \"AI Model\";\n public static override title = \"Download Model\";\n public static override description =\n \"Downloads and caches AI models locally with progress tracking\";\n public static override inputSchema(): DataPortSchema {\n return DownloadModelInputSchema satisfies DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return DownloadModelOutputSchema satisfies DataPortSchema;\n }\n public static override cacheable = false;\n\n public files: { file: string; progress: number }[] = [];\n\n constructor(config: Partial<DownloadModelTaskConfig> = {}) {\n super(config);\n this.on(\"progress\", this.processProgress.bind(this));\n this.on(\"start\", () => {\n this.files = [];\n });\n }\n\n /**\n * Handles progress updates for the download task\n * @param progress - The progress value (0-100)\n * @param message - The message to display\n * @param details - Additional details about the progress\n */\n processProgress(\n progress: number,\n message: string = \"\",\n details?: {\n file?: string;\n progress?: number;\n /** Full snapshot (e.g. Hugging Face transformers pipeline); per-file % derived from loaded/total */\n files?: Record<string, { loaded: number; total: number }>;\n text?: number;\n }\n ): void {\n if (details?.files && typeof details.files === \"object\") {\n const entries = Object.entries(details.files);\n if (entries.length > 0) {\n this.files = entries\n .map(([file, info]) => ({\n file,\n progress: info.total > 0 ? (info.loaded / info.total) * 100 : 0,\n }))\n .sort((a, b) => a.file.localeCompare(b.file));\n this.progress = progress;\n return;\n }\n }\n if (details?.file !== undefined && details.progress !== undefined) {\n const file = this.files.find((f) => f.file === details.file);\n if (file) {\n file.progress = details.progress;\n } else {\n this.files.push({ file: details.file, progress: details.progress });\n }\n this.progress = this.files.reduce((acc, f) => acc + f.progress, 0) / this.files.length;\n } else {\n this.progress = progress;\n }\n }\n}\n\n/**\n * Download a model from a remote source and cache it locally.\n *\n * @param input - Input containing model(s) to download\n * @returns Promise resolving to the downloaded model(s)\n */\nexport const downloadModel = (\n input: DownloadModelTaskRunInput,\n config?: DownloadModelTaskConfig\n) => {\n return new DownloadModelTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n downloadModel: CreateWorkflow<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n DownloadModelTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.downloadModel = CreateWorkflow(DownloadModelTask);\n",
35
37
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:FaceDetectorTask\");\n\n/**\n * A bounding box for face detection.\n */\nconst TypeBoundingBox = {\n type: \"object\",\n properties: {\n x: {\n type: \"number\",\n title: \"X Coordinate\",\n description: \"X coordinate of the top-left corner\",\n },\n y: {\n type: \"number\",\n title: \"Y Coordinate\",\n description: \"Y coordinate of the top-left corner\",\n },\n width: {\n type: \"number\",\n title: \"Width\",\n description: \"Width of the bounding box\",\n },\n height: {\n type: \"number\",\n title: \"Height\",\n description: \"Height of the bounding box\",\n },\n },\n required: [\"x\", \"y\", \"width\", \"height\"],\n additionalProperties: false,\n} as const;\n\n/**\n * A keypoint on the face.\n */\nconst TypeKeypoint = {\n type: \"object\",\n properties: {\n x: {\n type: \"number\",\n title: \"X Coordinate\",\n description: \"X coordinate normalized to [0.0, 1.0]\",\n },\n y: {\n type: \"number\",\n title: \"Y Coordinate\",\n description: \"Y coordinate normalized to [0.0, 1.0]\",\n },\n label: {\n type: \"string\",\n title: \"Keypoint Label\",\n description: \"Label for the keypoint (e.g., 'leftEye', 'rightEye', 'noseTip', etc.)\",\n },\n },\n required: [\"x\", \"y\"],\n additionalProperties: false,\n} as const;\n\n/**\n * A detected face with bounding box and keypoints.\n */\nconst TypeFaceDetection = {\n type: \"object\",\n properties: {\n box: TypeBoundingBox,\n keypoints: {\n type: \"array\",\n items: TypeKeypoint,\n title: \"Keypoints\",\n description: \"Facial keypoints (left eye, right eye, nose tip, mouth, left/right tragion)\",\n },\n score: {\n type: \"number\",\n title: \"Confidence Score\",\n description: \"Confidence score for the face detection\",\n },\n },\n required: [\"box\", \"keypoints\", \"score\"],\n additionalProperties: false,\n} as const;\n\nexport const FaceDetectorInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n minDetectionConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Detection Confidence\",\n description: \"Minimum confidence score for face detection\",\n \"x-ui-group\": \"Configuration\",\n },\n minSuppressionThreshold: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.3,\n title: \"Min Suppression Threshold\",\n description: \"Minimum non-maximum-suppression threshold for overlapping detections\",\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const FaceDetectorOutputSchema = {\n type: \"object\",\n properties: {\n faces: {\n oneOf: [\n { type: \"array\", items: TypeFaceDetection },\n { type: \"array\", items: { type: \"array\", items: TypeFaceDetection } },\n ],\n title: \"Face Detections\",\n description: \"Detected faces with bounding boxes, keypoints, and confidence scores\",\n },\n },\n required: [\"faces\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type FaceDetectorTaskInput = FromSchema<typeof FaceDetectorInputSchema>;\nexport type FaceDetectorTaskOutput = FromSchema<typeof FaceDetectorOutputSchema>;\nexport type FaceDetectorTaskConfig = TaskConfig<FaceDetectorTaskInput>;\n\n/**\n * Detects faces in images using MediaPipe Face Detector.\n * Locates faces and identifies facial keypoints like eyes, nose, and mouth.\n */\nexport class FaceDetectorTask extends AiVisionTask<\n FaceDetectorTaskInput,\n FaceDetectorTaskOutput,\n FaceDetectorTaskConfig\n> {\n public static override type = \"FaceDetectorTask\";\n public static override category = \"AI Vision Model\";\n public static override title = \"Face Detector\";\n public static override description =\n \"Detects faces in images. Locates faces and identifies facial keypoints like eyes, nose, and mouth.\";\n public static override inputSchema(): DataPortSchema {\n return FaceDetectorInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return FaceDetectorOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run face detection tasks.\n * Creates and executes a FaceDetectorTask with the provided input.\n * @param input The input parameters for face detection (image, model, and optional configuration)\n * @returns Promise resolving to the detected faces with bounding boxes and keypoints\n */\nexport const faceDetector = (input: FaceDetectorTaskInput, config?: FaceDetectorTaskConfig) => {\n return new FaceDetectorTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n faceDetector: CreateWorkflow<\n FaceDetectorTaskInput,\n FaceDetectorTaskOutput,\n FaceDetectorTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.faceDetector = CreateWorkflow(FaceDetectorTask);\n",
@@ -51,7 +53,7 @@
51
53
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\n\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\n\nimport { ModelConfig } from \"../model/ModelSchema\";\nimport { TextClassificationTask } from \"./TextClassificationTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n title: \"Query\",\n description: \"The query to rerank results against\",\n },\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Text Chunks\",\n description: \"Retrieved text chunks to rerank\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Initial Scores\",\n description: \"Initial retrieval scores (optional)\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata for each chunk\",\n },\n title: \"Metadata\",\n description: \"Metadata for each chunk (optional)\",\n },\n topK: {\n type: \"number\",\n title: \"Top K\",\n description: \"Number of top results to return after reranking\",\n minimum: 1,\n },\n method: {\n type: \"string\",\n enum: [\"cross-encoder\", \"reciprocal-rank-fusion\", \"simple\"],\n title: \"Reranking Method\",\n description: \"Method to use for reranking\",\n default: \"simple\",\n },\n model: TypeModel(\"model:RerankerTask\", {\n title: \"Reranker Model\",\n description: \"Cross-encoder model to use for reranking\",\n }),\n },\n required: [\"query\", \"chunks\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Reranked Chunks\",\n description: \"Chunks reordered by relevance\",\n },\n scores: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Reranked Scores\",\n description: \"New relevance scores\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n title: \"Metadata\",\n description: \"Metadata for each chunk\",\n },\n title: \"Metadata\",\n description: \"Metadata for reranked chunks\",\n },\n originalIndices: {\n type: \"array\",\n items: { type: \"number\" },\n title: \"Original Indices\",\n description: \"Original indices of reranked chunks\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of results returned\",\n },\n },\n required: [\"chunks\", \"scores\", \"originalIndices\", \"count\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type RerankerTaskInput = FromSchema<typeof inputSchema>;\nexport type RerankerTaskOutput = FromSchema<typeof outputSchema>;\nexport type RerankerTaskConfig = TaskConfig<RerankerTaskInput>;\n\ninterface RankedItem {\n chunk: string;\n score: number;\n metadata?: any;\n originalIndex: number;\n}\n\n/**\n * Task for reranking retrieved chunks to improve relevance.\n * Supports multiple reranking methods including cross-encoder models.\n *\n * Note: Cross-encoder reranking requires a model to be loaded.\n * For now, this implements simple heuristic-based reranking.\n */\nexport class RerankerTask extends Task<RerankerTaskInput, RerankerTaskOutput, RerankerTaskConfig> {\n public static override type = \"RerankerTask\";\n public static override category = \"RAG\";\n public static override title = \"Reranker\";\n public static override description = \"Rerank retrieved chunks to improve relevance\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: RerankerTaskInput,\n context: IExecuteContext\n ): Promise<RerankerTaskOutput> {\n const { query, chunks, scores = [], metadata = [], topK, method = \"simple\", model } = input;\n\n let rankedItems: RankedItem[];\n\n switch (method) {\n case \"cross-encoder\":\n if (!model) {\n throw new Error(\n \"No cross-encoder model found. Please provide a model with format 'model:RerankerTask'.\"\n );\n }\n rankedItems = await this.crossEncoderRerank(\n query,\n chunks,\n scores,\n metadata,\n model,\n context\n );\n break;\n case \"reciprocal-rank-fusion\":\n rankedItems = this.reciprocalRankFusion(chunks, scores, metadata);\n break;\n case \"simple\":\n default:\n rankedItems = this.simpleRerank(query, chunks, scores, metadata);\n break;\n }\n\n // Apply topK if specified\n if (topK && topK < rankedItems.length) {\n rankedItems = rankedItems.slice(0, topK);\n }\n\n return {\n chunks: rankedItems.map((item) => item.chunk),\n scores: rankedItems.map((item) => item.score),\n metadata: rankedItems.map((item) => item.metadata),\n originalIndices: rankedItems.map((item) => item.originalIndex),\n count: rankedItems.length,\n };\n }\n\n private async crossEncoderRerank(\n query: string,\n chunks: string[],\n scores: number[],\n metadata: any[],\n model: string | ModelConfig,\n context: IExecuteContext\n ): Promise<RankedItem[]> {\n if (chunks.length === 0) {\n return [];\n }\n\n if (!model) {\n throw new Error(\n \"No cross-encoder model found. Please provide a model or register a TextClassificationTask model.\"\n );\n }\n\n const items = await Promise.all(\n chunks.map(async (chunk, index) => {\n const pairText = `${query} [SEP] ${chunk}`;\n const task = context.own(new TextClassificationTask({ defaults: { model } }));\n const result = await task.run({ text: pairText, maxCategories: 2 });\n const crossScore = this.extractCrossEncoderScore(result.categories);\n return {\n chunk,\n score: Number.isFinite(crossScore) ? crossScore : scores[index] || 0,\n metadata: metadata[index],\n originalIndex: index,\n };\n })\n );\n\n items.sort((a, b) => b.score - a.score);\n return items;\n }\n\n private extractCrossEncoderScore(\n categories: Array<{ label: string; score: number }> | undefined\n ): number {\n if (!categories || categories.length === 0) {\n return 0;\n }\n const preferred = categories.find((category) =>\n /^(label_1|positive|relevant|yes|true)$/i.test(category.label)\n );\n if (preferred) {\n return preferred.score;\n }\n let best = categories[0].score;\n for (let i = 1; i < categories.length; i++) {\n if (categories[i].score > best) {\n best = categories[i].score;\n }\n }\n return best;\n }\n\n /**\n * Simple heuristic-based reranking using keyword matching and position\n */\n private simpleRerank(\n query: string,\n chunks: string[],\n scores: number[],\n metadata: any[]\n ): RankedItem[] {\n const queryLower = query.toLowerCase();\n const queryWords = queryLower.split(/\\s+/).filter((w) => w.length > 0);\n\n const items: RankedItem[] = chunks.map((chunk, index) => {\n const chunkLower = chunk.toLowerCase();\n const initialScore = scores[index] || 0;\n\n // Calculate keyword match score\n let keywordScore = 0;\n let exactMatchBonus = 0;\n\n for (const word of queryWords) {\n // Count occurrences\n const regex = new RegExp(word, \"gi\");\n const matches = chunkLower.match(regex);\n if (matches) {\n keywordScore += matches.length;\n }\n }\n\n // Bonus for exact query match\n if (chunkLower.includes(queryLower)) {\n exactMatchBonus = 0.5;\n }\n\n // Normalize keyword score\n const normalizedKeywordScore = Math.min(keywordScore / (queryWords.length * 3), 1);\n\n // Position penalty (prefer earlier results, but not too heavily)\n const positionPenalty = Math.log(index + 1) / 10;\n\n // Combined score\n const combinedScore =\n initialScore * 0.4 + normalizedKeywordScore * 0.4 + exactMatchBonus * 0.2 - positionPenalty;\n\n return {\n chunk,\n score: combinedScore,\n metadata: metadata[index],\n originalIndex: index,\n };\n });\n\n // Sort by score descending\n items.sort((a, b) => b.score - a.score);\n\n return items;\n }\n\n /**\n * Reciprocal Rank Fusion for combining multiple rankings\n * Useful when you have multiple retrieval methods\n */\n private reciprocalRankFusion(chunks: string[], scores: number[], metadata: any[]): RankedItem[] {\n const k = 60; // RRF constant\n\n const items: RankedItem[] = chunks.map((chunk, index) => {\n // RRF score = 1 / (k + rank)\n // Here we use the initial ranking (index) as the rank\n const rrfScore = 1 / (k + index + 1);\n\n return {\n chunk,\n score: rrfScore,\n metadata: metadata[index],\n originalIndex: index,\n };\n });\n\n // Sort by RRF score descending\n items.sort((a, b) => b.score - a.score);\n\n return items;\n }\n}\n\nexport const reranker = (input: RerankerTaskInput, config?: RerankerTaskConfig) => {\n return new RerankerTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n reranker: CreateWorkflow<RerankerTaskInput, RerankerTaskOutput, RerankerTaskConfig>;\n }\n}\n\nWorkflow.prototype.reranker = CreateWorkflow(RerankerTask);\n",
52
54
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model:TextClassificationTask\");\n\nexport const TextClassificationInputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to classify\",\n },\n candidateLabels: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n title: \"Candidate Labels\",\n description: \"List of candidate labels (optional, if provided uses zero-shot classification)\",\n \"x-ui-group\": \"Configuration\",\n },\n maxCategories: {\n type: \"number\",\n minimum: 1,\n maximum: 1000,\n default: 5,\n title: \"Max Categories\",\n description: \"The maximum number of categories to return\",\n \"x-ui-group\": \"Configuration\",\n },\n model: modelSchema,\n },\n required: [\"text\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextClassificationOutputSchema = {\n type: \"object\",\n properties: {\n categories: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n title: \"Label\",\n description: \"The name of the category\",\n },\n score: {\n type: \"number\",\n title: \"Score\",\n description: \"The confidence score for this category\",\n },\n },\n required: [\"label\", \"score\"],\n additionalProperties: false,\n },\n title: \"Categories\",\n description: \"The classification categories with their scores\",\n },\n },\n required: [\"categories\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextClassificationTaskInput = FromSchema<typeof TextClassificationInputSchema>;\nexport type TextClassificationTaskOutput = FromSchema<typeof TextClassificationOutputSchema>;\nexport type TextClassificationTaskConfig = TaskConfig<TextClassificationTaskInput>;\n\n/**\n * Classifies text into categories using language models.\n * Automatically selects between regular and zero-shot classification based on whether candidate labels are provided.\n */\nexport class TextClassificationTask extends AiTask<\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n TextClassificationTaskConfig\n> {\n public static override type = \"TextClassificationTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Classifier\";\n public static override description =\n \"Classifies text into categories using language models. Supports zero-shot classification when candidate labels are provided.\";\n public static override inputSchema(): DataPortSchema {\n return TextClassificationInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextClassificationOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run text classifier tasks.\n * Creates and executes a TextClassificationTask with the provided input.\n * @param input The input parameters for text classification (text and model)\n * @returns Promise resolving to the classification categories with scores\n */\nexport const textClassification = (\n input: TextClassificationTaskInput,\n config?: TextClassificationTaskConfig\n) => {\n return new TextClassificationTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textClassification: CreateWorkflow<\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n TextClassificationTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textClassification = CreateWorkflow(TextClassificationTask);\n",
53
55
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DocumentRootNode, StructuralParser } from \"@workglow/knowledge-base\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\nimport { uuid4 } from \"@workglow/util\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text content to parse\",\n },\n title: {\n type: \"string\",\n title: \"Title\",\n description: \"Document title\",\n },\n format: {\n type: \"string\",\n enum: [\"markdown\", \"text\", \"auto\"],\n title: \"Format\",\n description: \"Document format (auto-detects if not specified)\",\n default: \"auto\",\n },\n sourceUri: {\n type: \"string\",\n title: \"Source URI\",\n description: \"Source identifier for document ID generation\",\n },\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"Pre-generated document ID (optional)\",\n },\n },\n required: [\"text\", \"title\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n doc_id: {\n type: \"string\",\n title: \"Document ID\",\n description: \"Generated or provided document ID\",\n },\n documentTree: {\n type: \"object\",\n title: \"Document Tree\",\n description: \"Parsed hierarchical document tree\",\n additionalProperties: true,\n },\n nodeCount: {\n type: \"number\",\n title: \"Node Count\",\n description: \"Total number of nodes in the tree\",\n },\n },\n required: [\"doc_id\", \"documentTree\", \"nodeCount\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type StructuralParserTaskInput = FromSchema<typeof inputSchema>;\nexport type StructuralParserTaskOutput = Omit<FromSchema<typeof outputSchema>, \"documentTree\"> & {\n documentTree: DocumentRootNode;\n};\nexport type StructuralParserTaskConfig = TaskConfig<StructuralParserTaskInput>;\n\n/**\n * Task for parsing documents into hierarchical tree structure\n * Supports markdown and plain text with automatic format detection\n */\nexport class StructuralParserTask extends Task<\n StructuralParserTaskInput,\n StructuralParserTaskOutput,\n StructuralParserTaskConfig\n> {\n public static override type = \"StructuralParserTask\";\n public static override category = \"Document\";\n public static override title = \"Structural Parser\";\n public static override description = \"Parse documents into hierarchical tree structure\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: StructuralParserTaskInput,\n context: IExecuteContext\n ): Promise<StructuralParserTaskOutput> {\n const { text, title, format = \"auto\", sourceUri, doc_id: providedDocId } = input;\n\n // Use explicit doc_id when provided, otherwise derive a stable ID from sourceUri,\n // falling back to a generated UUID only when neither input is available.\n const doc_id = providedDocId || sourceUri || uuid4();\n\n // Parse based on format\n let documentTree: DocumentRootNode;\n if (format === \"markdown\") {\n documentTree = await StructuralParser.parseMarkdown(doc_id, text, title);\n } else if (format === \"text\") {\n documentTree = await StructuralParser.parsePlainText(doc_id, text, title);\n } else {\n // Auto-detect\n documentTree = await StructuralParser.parse(doc_id, text, title);\n }\n\n // Count nodes\n const nodeCount = this.countNodes(documentTree);\n\n return {\n doc_id,\n documentTree,\n nodeCount,\n };\n }\n\n private countNodes(node: any): number {\n let count = 1;\n if (node.children && Array.isArray(node.children)) {\n for (const child of node.children) {\n count += this.countNodes(child);\n }\n }\n return count;\n }\n}\n\nexport const structuralParser = (\n input: StructuralParserTaskInput,\n config?: StructuralParserTaskConfig\n) => {\n return new StructuralParserTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n structuralParser: CreateWorkflow<\n StructuralParserTaskInput,\n StructuralParserTaskOutput,\n StructuralParserTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.structuralParser = CreateWorkflow(StructuralParserTask);\n",
54
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst modelSchema = TypeModel(\"model:StructuredGenerationTask\");\n\nexport const StructuredGenerationInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n type: \"string\",\n title: \"Prompt\",\n description: \"The prompt to generate structured output from\",\n },\n outputSchema: {\n type: \"object\",\n title: \"Output Schema\",\n description: \"JSON Schema describing the desired output structure\",\n additionalProperties: true,\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"The maximum number of tokens to generate\",\n minimum: 1,\n maximum: 4096,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"The temperature to use for sampling\",\n minimum: 0,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"model\", \"prompt\", \"outputSchema\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const StructuredGenerationOutputSchema = {\n type: \"object\",\n properties: {\n object: {\n type: \"object\",\n title: \"Structured Output\",\n description: \"The generated structured object conforming to the provided schema\",\n \"x-stream\": \"object\",\n \"x-structured-output\": true,\n additionalProperties: true,\n },\n },\n required: [\"object\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type StructuredGenerationTaskInput = FromSchema<typeof StructuredGenerationInputSchema>;\nexport type StructuredGenerationTaskOutput = FromSchema<typeof StructuredGenerationOutputSchema>;\nexport type StructuredGenerationTaskConfig = TaskConfig<StructuredGenerationTaskInput>;\n\nexport class StructuredGenerationTask extends StreamingAiTask<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n StructuredGenerationTaskConfig\n> {\n public static override type = \"StructuredGenerationTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Structured Generation\";\n public static override description =\n \"Generates structured JSON output conforming to a provided schema using language models\";\n public static override inputSchema(): DataPortSchema {\n return StructuredGenerationInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return StructuredGenerationOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Task for generating structured JSON output using a language model\n */\nexport const structuredGeneration = (\n input: StructuredGenerationTaskInput,\n config?: StructuredGenerationTaskConfig\n) => {\n return new StructuredGenerationTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n structuredGeneration: CreateWorkflow<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n StructuredGenerationTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.structuredGeneration = CreateWorkflow(StructuredGenerationTask);\n",
56
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, TaskConfigurationError, TaskError, Workflow } from \"@workglow/task-graph\";\nimport type { IExecuteContext, StreamEvent, TaskConfig } from \"@workglow/task-graph\";\nimport { compileSchema } from \"@workglow/util/schema\";\nimport type { DataPortSchema, FromSchema, SchemaNode } from \"@workglow/util/schema\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst modelSchema = TypeModel(\"model:StructuredGenerationTask\");\n\nexport const StructuredGenerationInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n type: \"string\",\n title: \"Prompt\",\n description: \"The prompt to generate structured output from\",\n },\n outputSchema: {\n type: \"object\",\n title: \"Output Schema\",\n description: \"JSON Schema describing the desired output structure\",\n additionalProperties: true,\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"The maximum number of tokens to generate\",\n minimum: 1,\n maximum: 4096,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"The temperature to use for sampling\",\n minimum: 0,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n maxRetries: {\n type: \"integer\",\n title: \"Max Retries\",\n description:\n \"Number of times to re-prompt the model with validation errors when its output doesn't match the schema. 0 disables retries (fail on first mismatch).\",\n minimum: 0,\n maximum: 10,\n default: 2,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"model\", \"prompt\", \"outputSchema\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const StructuredGenerationOutputSchema = {\n type: \"object\",\n properties: {\n object: {\n type: \"object\",\n title: \"Structured Output\",\n description: \"The generated structured object conforming to the provided schema\",\n \"x-stream\": \"object\",\n \"x-structured-output\": true,\n additionalProperties: true,\n },\n },\n required: [\"object\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type StructuredGenerationTaskInput = FromSchema<typeof StructuredGenerationInputSchema>;\nexport type StructuredGenerationTaskOutput = FromSchema<typeof StructuredGenerationOutputSchema>;\nexport type StructuredGenerationTaskConfig = TaskConfig<StructuredGenerationTaskInput>;\n\n/**\n * One round of validation errors from a failed attempt.\n */\nexport interface StructuredOutputValidationAttempt {\n readonly attempt: number;\n readonly errors: ReadonlyArray<{ readonly path: string; readonly message: string }>;\n /** The invalid object the model produced on this attempt. */\n readonly object: Record<string, unknown> | undefined;\n}\n\n/**\n * Thrown when the model's output fails schema validation on every attempt\n * (including retries).\n */\nexport class StructuredOutputValidationError extends TaskError {\n public static override readonly type: string = \"StructuredOutputValidationError\";\n public readonly attempts: ReadonlyArray<StructuredOutputValidationAttempt>;\n constructor(attempts: ReadonlyArray<StructuredOutputValidationAttempt>) {\n const last = attempts[attempts.length - 1];\n const summary = last?.errors.map((e) => `${e.path || \"/\"}: ${e.message}`).join(\"; \") ?? \"\";\n super(\n `StructuredGenerationTask: model output failed validation after ${attempts.length} attempt(s). ` +\n `Last errors: ${summary}`\n );\n this.attempts = attempts;\n }\n}\n\nfunction validationErrorsFromSchemaNode(\n result: ReturnType<SchemaNode[\"validate\"]>\n): ReadonlyArray<{ path: string; message: string }> {\n return result.errors.map((e) => ({ path: e.data.pointer || \"\", message: e.message }));\n}\n\nfunction buildRetryPrompt(\n originalPrompt: string,\n errors: ReadonlyArray<{ path: string; message: string }>\n): string {\n const errorList = errors.map((e) => ` - ${e.path || \"/\"}: ${e.message}`).join(\"\\n\");\n return (\n `${originalPrompt}\\n\\n` +\n `Your previous response did not conform to the required JSON schema. ` +\n `Validation errors:\\n${errorList}\\n\\n` +\n `Please respond again with a JSON object that satisfies the schema. ` +\n `Output ONLY the JSON object, no other text.`\n );\n}\n\nexport class StructuredGenerationTask extends StreamingAiTask<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n StructuredGenerationTaskConfig\n> {\n public static override type = \"StructuredGenerationTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Structured Generation\";\n public static override description =\n \"Generates structured JSON output conforming to a provided schema using language models, with automatic validation and retry on mismatch\";\n public static override inputSchema(): DataPortSchema {\n return StructuredGenerationInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return StructuredGenerationOutputSchema as DataPortSchema;\n }\n\n /**\n * Runs the provider, validates the resulting object against `input.outputSchema`,\n * and retries with validation-error feedback up to `input.maxRetries` times if\n * the model's output doesn't match. Between attempts, emits an empty\n * object-delta so downstream accumulators reset.\n *\n * Throws:\n * - `TaskConfigurationError` if `input.outputSchema` isn't a compilable JSON Schema.\n * - `StructuredOutputValidationError` if every attempt fails validation.\n */\n override async *executeStream(\n input: StructuredGenerationTaskInput,\n context: IExecuteContext\n ): AsyncIterable<StreamEvent<StructuredGenerationTaskOutput>> {\n // Compile the target schema once; fail fast if it's malformed so we don't\n // waste a provider round-trip.\n let validator: SchemaNode;\n try {\n validator = compileSchema(input.outputSchema);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n const configErr = new TaskConfigurationError(\n `StructuredGenerationTask: invalid outputSchema — ${msg}`\n );\n configErr.taskType = this.type;\n configErr.taskId = this.id;\n throw configErr;\n }\n\n const maxRetries = Math.max(0, input.maxRetries ?? 2);\n const maxAttempts = maxRetries + 1;\n const attempts: StructuredOutputValidationAttempt[] = [];\n let currentInput = input;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n let lastObject: Record<string, unknown> | undefined;\n\n for await (const event of super.executeStream(currentInput, context)) {\n if (event.type === \"object-delta\" && event.port === \"object\") {\n // Track the latest structured-output state for validation but also\n // pass the delta through so UIs can render progressive JSON.\n const delta = event.objectDelta;\n if (delta && !Array.isArray(delta)) {\n lastObject = delta as Record<string, unknown>;\n }\n yield event;\n } else if (event.type === \"finish\") {\n // Prefer the finish payload's object (some providers populate it);\n // fall back to the last object-delta.\n const data = event.data as StructuredGenerationTaskOutput | undefined;\n const finalObject = data?.object ?? lastObject ?? {};\n const result = validator.validate(finalObject);\n if (result.valid) {\n yield {\n type: \"finish\",\n data: { object: finalObject } as StructuredGenerationTaskOutput,\n } as StreamEvent<StructuredGenerationTaskOutput>;\n return;\n }\n // Record this attempt's errors for diagnostics.\n const errors = validationErrorsFromSchemaNode(result);\n attempts.push({ attempt, errors, object: finalObject });\n lastObject = finalObject;\n break; // stop consuming this attempt's stream — we already have finish\n } else {\n yield event;\n }\n }\n\n if (attempt < maxAttempts) {\n // Reset the downstream accumulator so the next attempt's partial\n // deltas don't merge with this one's garbage.\n yield {\n type: \"object-delta\",\n port: \"object\",\n objectDelta: {},\n } as StreamEvent<StructuredGenerationTaskOutput>;\n const lastErrors = attempts[attempts.length - 1]!.errors;\n currentInput = {\n ...input,\n prompt: buildRetryPrompt(input.prompt, lastErrors),\n };\n }\n }\n\n const err = new StructuredOutputValidationError(attempts);\n err.taskType = this.type;\n err.taskId = this.id;\n throw err;\n }\n\n /**\n * Drains executeStream so non-streaming callers get the validated output.\n * Without this override, `execute()` would route through the base class's\n * non-streaming path and bypass validation + retry entirely.\n */\n override async execute(\n input: StructuredGenerationTaskInput,\n context: IExecuteContext\n ): Promise<StructuredGenerationTaskOutput | undefined> {\n let result: StructuredGenerationTaskOutput | undefined;\n for await (const event of this.executeStream(input, context)) {\n if (event.type === \"finish\") {\n result = (event as { type: \"finish\"; data: StructuredGenerationTaskOutput }).data;\n }\n }\n return result;\n }\n}\n\n/**\n * Task for generating structured JSON output using a language model\n */\nexport const structuredGeneration = (\n input: StructuredGenerationTaskInput,\n config?: StructuredGenerationTaskConfig\n) => {\n return new StructuredGenerationTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n structuredGeneration: CreateWorkflow<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n StructuredGenerationTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.structuredGeneration = CreateWorkflow(StructuredGenerationTask);\n",
55
57
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\n\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\n\nexport const ChunkingStrategy = {\n FIXED: \"fixed\",\n SENTENCE: \"sentence\",\n PARAGRAPH: \"paragraph\",\n SEMANTIC: \"semantic\",\n} as const;\n\nexport type ChunkingStrategy = (typeof ChunkingStrategy)[keyof typeof ChunkingStrategy];\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to chunk\",\n },\n chunkSize: {\n type: \"number\",\n title: \"Chunk Size\",\n description: \"Maximum size of each chunk in characters\",\n minimum: 1,\n default: 512,\n },\n chunkOverlap: {\n type: \"number\",\n title: \"Chunk Overlap\",\n description: \"Number of characters to overlap between chunks\",\n minimum: 0,\n default: 50,\n },\n strategy: {\n type: \"string\",\n enum: Object.values(ChunkingStrategy),\n title: \"Chunking Strategy\",\n description: \"Strategy to use for chunking text\",\n default: ChunkingStrategy.FIXED,\n },\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n chunks: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Text Chunks\",\n description: \"The chunked text segments\",\n },\n metadata: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n index: { type: \"number\" },\n startChar: { type: \"number\" },\n endChar: { type: \"number\" },\n length: { type: \"number\" },\n },\n additionalProperties: false,\n },\n title: \"Chunk Metadata\",\n description: \"Metadata for each chunk\",\n },\n },\n required: [\"chunks\", \"metadata\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextChunkerTaskInput = FromSchema<typeof inputSchema>;\nexport type TextChunkerTaskOutput = FromSchema<typeof outputSchema>;\nexport type TextChunkerTaskConfig = TaskConfig<TextChunkerTaskInput>;\n\ninterface ChunkMetadata {\n index: number;\n startChar: number;\n endChar: number;\n length: number;\n}\n\n/**\n * Task for chunking text into smaller segments with configurable strategies.\n * Supports fixed-size, sentence-based, paragraph-based, and semantic chunking.\n */\nexport class TextChunkerTask extends Task<\n TextChunkerTaskInput,\n TextChunkerTaskOutput,\n TextChunkerTaskConfig\n> {\n public static override type = \"TextChunkerTask\";\n public static override category = \"Document\";\n public static override title = \"Text Chunker\";\n public static override description =\n \"Splits text into chunks using various strategies (fixed, sentence, paragraph)\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: TextChunkerTaskInput,\n context: IExecuteContext\n ): Promise<TextChunkerTaskOutput> {\n const { text, chunkSize = 512, chunkOverlap = 50, strategy = ChunkingStrategy.FIXED } = input;\n\n let chunks: string[];\n let metadata: ChunkMetadata[];\n\n switch (strategy) {\n case ChunkingStrategy.SENTENCE:\n ({ chunks, metadata } = this.chunkBySentence(text, chunkSize, chunkOverlap));\n break;\n case ChunkingStrategy.PARAGRAPH:\n ({ chunks, metadata } = this.chunkByParagraph(text, chunkSize, chunkOverlap));\n break;\n case ChunkingStrategy.SEMANTIC:\n // For now, semantic is the same as sentence-based\n // TODO: Implement true semantic chunking with embeddings\n ({ chunks, metadata } = this.chunkBySentence(text, chunkSize, chunkOverlap));\n break;\n case ChunkingStrategy.FIXED:\n default:\n ({ chunks, metadata } = this.chunkFixed(text, chunkSize, chunkOverlap));\n break;\n }\n\n return { chunks, metadata };\n }\n\n /**\n * Fixed-size chunking with overlap\n */\n private chunkFixed(\n text: string,\n chunkSize: number,\n chunkOverlap: number\n ): { chunks: string[]; metadata: ChunkMetadata[] } {\n const chunks: string[] = [];\n const metadata: ChunkMetadata[] = [];\n let startChar = 0;\n let index = 0;\n\n while (startChar < text.length) {\n const endChar = Math.min(startChar + chunkSize, text.length);\n const chunk = text.substring(startChar, endChar);\n chunks.push(chunk);\n metadata.push({\n index,\n startChar,\n endChar,\n length: chunk.length,\n });\n\n // Move forward by chunkSize - chunkOverlap, but at least 1 character to prevent infinite loop\n const step = Math.max(1, chunkSize - chunkOverlap);\n startChar += step;\n index++;\n }\n\n return { chunks, metadata };\n }\n\n /**\n * Sentence-based chunking that respects sentence boundaries\n */\n private chunkBySentence(\n text: string,\n chunkSize: number,\n chunkOverlap: number\n ): { chunks: string[]; metadata: ChunkMetadata[] } {\n // Split by sentence boundaries (., !, ?, followed by space or newline)\n const sentenceRegex = /[.!?]+[\\s\\n]+/g;\n const sentences: string[] = [];\n const sentenceStarts: number[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = sentenceRegex.exec(text)) !== null) {\n const sentence = text.substring(lastIndex, match.index + match[0].length);\n sentences.push(sentence);\n sentenceStarts.push(lastIndex);\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text as last sentence\n if (lastIndex < text.length) {\n sentences.push(text.substring(lastIndex));\n sentenceStarts.push(lastIndex);\n }\n\n // Group sentences into chunks\n const chunks: string[] = [];\n const metadata: ChunkMetadata[] = [];\n let currentChunk = \"\";\n let currentStartChar = 0;\n let index = 0;\n\n for (let i = 0; i < sentences.length; i++) {\n const sentence = sentences[i];\n const sentenceStart = sentenceStarts[i];\n\n // If adding this sentence would exceed chunkSize, save current chunk\n if (currentChunk.length > 0 && currentChunk.length + sentence.length > chunkSize) {\n chunks.push(currentChunk.trim());\n metadata.push({\n index,\n startChar: currentStartChar,\n endChar: currentStartChar + currentChunk.length,\n length: currentChunk.trim().length,\n });\n index++;\n\n // Start new chunk with overlap\n if (chunkOverlap > 0) {\n // Find sentences to include in overlap\n let overlapText = \"\";\n let j = i - 1;\n while (j >= 0 && overlapText.length < chunkOverlap) {\n overlapText = sentences[j] + overlapText;\n j--;\n }\n currentChunk = overlapText + sentence;\n currentStartChar = sentenceStarts[Math.max(0, j + 1)];\n } else {\n currentChunk = sentence;\n currentStartChar = sentenceStart;\n }\n } else {\n if (currentChunk.length === 0) {\n currentStartChar = sentenceStart;\n }\n currentChunk += sentence;\n }\n }\n\n // Add final chunk\n if (currentChunk.length > 0) {\n chunks.push(currentChunk.trim());\n metadata.push({\n index,\n startChar: currentStartChar,\n endChar: currentStartChar + currentChunk.length,\n length: currentChunk.trim().length,\n });\n }\n\n return { chunks, metadata };\n }\n\n /**\n * Paragraph-based chunking that respects paragraph boundaries\n */\n private chunkByParagraph(\n text: string,\n chunkSize: number,\n chunkOverlap: number\n ): { chunks: string[]; metadata: ChunkMetadata[] } {\n // Split by paragraph boundaries (double newline or more)\n const paragraphs = text.split(/\\n\\s*\\n/).filter((p) => p.trim().length > 0);\n const chunks: string[] = [];\n const metadata: ChunkMetadata[] = [];\n let currentChunk = \"\";\n let currentStartChar = 0;\n let index = 0;\n let charPosition = 0;\n\n for (let i = 0; i < paragraphs.length; i++) {\n const paragraph = paragraphs[i].trim();\n const paragraphStart = text.indexOf(paragraph, charPosition);\n charPosition = paragraphStart + paragraph.length;\n\n // If adding this paragraph would exceed chunkSize, save current chunk\n if (currentChunk.length > 0 && currentChunk.length + paragraph.length + 2 > chunkSize) {\n chunks.push(currentChunk.trim());\n metadata.push({\n index,\n startChar: currentStartChar,\n endChar: currentStartChar + currentChunk.length,\n length: currentChunk.trim().length,\n });\n index++;\n\n // Start new chunk with overlap\n if (chunkOverlap > 0 && i > 0) {\n // Include previous paragraph(s) for overlap\n let overlapText = \"\";\n let j = i - 1;\n while (j >= 0 && overlapText.length < chunkOverlap) {\n overlapText = paragraphs[j].trim() + \"\\n\\n\" + overlapText;\n j--;\n }\n currentChunk = overlapText + paragraph;\n currentStartChar = paragraphStart - overlapText.length;\n } else {\n currentChunk = paragraph;\n currentStartChar = paragraphStart;\n }\n } else {\n if (currentChunk.length === 0) {\n currentStartChar = paragraphStart;\n currentChunk = paragraph;\n } else {\n currentChunk += \"\\n\\n\" + paragraph;\n }\n }\n }\n\n // Add final chunk\n if (currentChunk.length > 0) {\n chunks.push(currentChunk.trim());\n metadata.push({\n index,\n startChar: currentStartChar,\n endChar: currentStartChar + currentChunk.length,\n length: currentChunk.trim().length,\n });\n }\n\n return { chunks, metadata };\n }\n}\n\nexport const textChunker = (input: TextChunkerTaskInput, config?: TextChunkerTaskConfig) => {\n return new TextChunkerTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textChunker: CreateWorkflow<TextChunkerTaskInput, TextChunkerTaskOutput, TextChunkerTaskConfig>;\n }\n}\n\nWorkflow.prototype.textChunker = CreateWorkflow(TextChunkerTask);\n",
56
58
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model:TextFillMaskTask\");\n\nexport const TextFillMaskInputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text with a mask token to fill\",\n },\n model: modelSchema,\n },\n required: [\"text\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextFillMaskOutputSchema = {\n type: \"object\",\n properties: {\n predictions: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n entity: {\n type: \"string\",\n title: \"Entity\",\n description: \"The token that was predicted to fill the mask\",\n },\n score: {\n type: \"number\",\n title: \"Score\",\n description: \"The confidence score for this prediction\",\n },\n sequence: {\n type: \"string\",\n title: \"Sequence\",\n description: \"The complete text with the mask filled\",\n },\n },\n required: [\"entity\", \"score\", \"sequence\"],\n additionalProperties: false,\n },\n title: \"Predictions\",\n description: \"The predicted tokens to fill the mask with their scores and complete sequences\",\n },\n },\n required: [\"predictions\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextFillMaskTaskInput = FromSchema<typeof TextFillMaskInputSchema>;\nexport type TextFillMaskTaskOutput = FromSchema<typeof TextFillMaskOutputSchema>;\nexport type TextFillMaskTaskConfig = TaskConfig<TextFillMaskTaskInput>;\n\n/**\n * Fills masked tokens in text using language models\n */\nexport class TextFillMaskTask extends AiTask<\n TextFillMaskTaskInput,\n TextFillMaskTaskOutput,\n TextFillMaskTaskConfig\n> {\n public static override type = \"TextFillMaskTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Fill Mask\";\n public static override description = \"Fills masked tokens in text\";\n public static override inputSchema(): DataPortSchema {\n return TextFillMaskInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextFillMaskOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run fill mask tasks.\n * Creates and executes a TextFillMaskTask with the provided input.\n * @param input The input parameters for fill mask (text with mask token and model)\n * @returns Promise resolving to the predicted tokens with scores and complete sequences\n */\nexport const textFillMask = (input: TextFillMaskTaskInput, config?: TextFillMaskTaskConfig) => {\n return new TextFillMaskTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textFillMask: CreateWorkflow<\n TextFillMaskTaskInput,\n TextFillMaskTaskOutput,\n TextFillMaskTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textFillMask = CreateWorkflow(TextFillMaskTask);\n",
57
59
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst generatedTextSchema = {\n type: \"string\",\n title: \"Text\",\n description: \"The generated text\",\n \"x-stream\": \"append\",\n} as const;\n\nconst modelSchema = TypeModel(\"model:TextGenerationTask\");\n\nexport const TextGenerationInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n type: \"string\",\n title: \"Prompt\",\n description: \"The prompt to generate text from\",\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"The maximum number of tokens to generate\",\n minimum: 1,\n maximum: 4096,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"The temperature to use for sampling\",\n minimum: 0,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n topP: {\n type: \"number\",\n title: \"Top-p\",\n description: \"The top-p value to use for sampling\",\n minimum: 0,\n maximum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n frequencyPenalty: {\n type: \"number\",\n title: \"Frequency Penalty\",\n description: \"The frequency penalty to use\",\n minimum: -2,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n presencePenalty: {\n type: \"number\",\n title: \"Presence Penalty\",\n description: \"The presence penalty to use\",\n minimum: -2,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"model\", \"prompt\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextGenerationOutputSchema = {\n type: \"object\",\n properties: {\n text: generatedTextSchema,\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextGenerationTaskInput = FromSchema<typeof TextGenerationInputSchema>;\nexport type TextGenerationTaskOutput = FromSchema<typeof TextGenerationOutputSchema>;\nexport type TextGenerationTaskConfig = TaskConfig<TextGenerationTaskInput>;\n\nexport class TextGenerationTask extends StreamingAiTask<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextGenerationTaskConfig\n> {\n public static override type = \"TextGenerationTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Generation\";\n public static override description =\n \"Generates text from a prompt using language models with configurable parameters\";\n public static override inputSchema(): DataPortSchema {\n return TextGenerationInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextGenerationOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Task for generating text using a language model\n */\nexport const textGeneration = (\n input: TextGenerationTaskInput,\n config?: TextGenerationTaskConfig\n) => {\n return new TextGenerationTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textGeneration: CreateWorkflow<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextGenerationTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textGeneration = CreateWorkflow(TextGenerationTask);\n",
@@ -59,14 +61,14 @@
59
61
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst contextSchema = {\n type: \"string\",\n title: \"Context\",\n description: \"The context of the question\",\n} as const;\n\nconst questionSchema = {\n type: \"string\",\n title: \"Question\",\n description: \"The question to answer\",\n} as const;\n\nconst textSchema = {\n type: \"string\",\n title: \"Text\",\n description: \"The generated text\",\n \"x-stream\": \"append\",\n} as const;\n\nconst modelSchema = TypeModel(\"model:TextQuestionAnswerTask\");\n\nexport const TextQuestionAnswerInputSchema = {\n type: \"object\",\n properties: {\n context: contextSchema,\n question: questionSchema,\n model: modelSchema,\n },\n required: [\"context\", \"question\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextQuestionAnswerOutputSchema = {\n type: \"object\",\n properties: {\n text: textSchema,\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextQuestionAnswerTaskInput = FromSchema<typeof TextQuestionAnswerInputSchema>;\nexport type TextQuestionAnswerTaskOutput = FromSchema<typeof TextQuestionAnswerOutputSchema>;\nexport type TextQuestionAnswerTaskConfig = TaskConfig<TextQuestionAnswerTaskInput>;\n\n/**\n * This is a special case of text generation that takes a context and a question\n */\nexport class TextQuestionAnswerTask extends StreamingAiTask<\n TextQuestionAnswerTaskInput,\n TextQuestionAnswerTaskOutput,\n TextQuestionAnswerTaskConfig\n> {\n public static override type = \"TextQuestionAnswerTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Question Answer\";\n public static override description =\n \"Answers questions based on provided context using language models\";\n public static override inputSchema(): DataPortSchema {\n return TextQuestionAnswerInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextQuestionAnswerOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run text question answer tasks.\n * Creates and executes a TextQuestionAnswerCompoundTask with the provided input.\n * @param input The input parameters for text question answer (context, question, and model)\n * @returns Promise resolving to the generated answer(s)\n */\nexport const textQuestionAnswer = (\n input: TextQuestionAnswerTaskInput,\n config?: TextQuestionAnswerTaskConfig\n) => {\n return new TextQuestionAnswerTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textQuestionAnswer: CreateWorkflow<\n TextQuestionAnswerTaskInput,\n TextQuestionAnswerTaskOutput,\n TextQuestionAnswerTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textQuestionAnswer = CreateWorkflow(TextQuestionAnswerTask);\n",
60
62
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst modelSchema = TypeModel(\"model:TextRewriterTask\");\n\nexport const TextRewriterInputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to rewrite\",\n },\n prompt: {\n type: \"string\",\n title: \"Prompt\",\n description: \"The prompt to direct the rewriting\",\n },\n model: modelSchema,\n },\n required: [\"text\", \"prompt\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextRewriterOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The rewritten text\",\n \"x-stream\": \"append\",\n },\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextRewriterTaskInput = FromSchema<typeof TextRewriterInputSchema>;\nexport type TextRewriterTaskOutput = FromSchema<typeof TextRewriterOutputSchema>;\nexport type TextRewriterTaskConfig = TaskConfig<TextRewriterTaskInput>;\n\n/**\n * This is a special case of text generation that takes a prompt and text to rewrite\n */\nexport class TextRewriterTask extends StreamingAiTask<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextRewriterTaskConfig\n> {\n public static override type = \"TextRewriterTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Rewriter\";\n public static override description =\n \"Rewrites text according to a given prompt using language models\";\n public static override inputSchema(): DataPortSchema {\n return TextRewriterInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextRewriterOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run text rewriter tasks.\n * Creates and executes a TextRewriterCompoundTask with the provided input.\n * @param input The input parameters for text rewriting (text, prompt, and model)\n * @returns Promise resolving to the rewritten text output(s)\n */\nexport const textRewriter = (input: TextRewriterTaskInput, config?: TextRewriterTaskConfig) => {\n return new TextRewriterTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textRewriter: CreateWorkflow<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextRewriterTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textRewriter = CreateWorkflow(TextRewriterTask);\n",
61
63
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { TypeLanguage, TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst modelSchema = TypeModel(\"model:TextTranslationTask\");\n\nconst translationTextSchema = {\n type: \"string\",\n title: \"Text\",\n description: \"The translated text\",\n \"x-stream\": \"replace\",\n} as const;\n\nexport const TextTranslationInputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to translate\",\n },\n source_lang: TypeLanguage({\n title: \"Source Language\",\n description: \"The source language\",\n minLength: 2,\n maxLength: 2,\n }),\n target_lang: TypeLanguage({\n title: \"Target Language\",\n description: \"The target language\",\n minLength: 2,\n maxLength: 2,\n }),\n model: modelSchema,\n },\n required: [\"text\", \"source_lang\", \"target_lang\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const TextTranslationOutputSchema = {\n type: \"object\",\n properties: {\n text: translationTextSchema,\n target_lang: TypeLanguage({\n title: \"Output Language\",\n description: \"The output language\",\n minLength: 2,\n maxLength: 2,\n }),\n },\n required: [\"text\", \"target_lang\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TextTranslationTaskInput = FromSchema<typeof TextTranslationInputSchema>;\nexport type TextTranslationTaskOutput = FromSchema<typeof TextTranslationOutputSchema>;\nexport type TextTranslationTaskConfig = TaskConfig<TextTranslationTaskInput>;\n\n/**\n * This translates text from one language to another\n */\nexport class TextTranslationTask extends StreamingAiTask<\n TextTranslationTaskInput,\n TextTranslationTaskOutput,\n TextTranslationTaskConfig\n> {\n public static override type = \"TextTranslationTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Text Translation\";\n public static override description =\n \"Translates text from one language to another using language models\";\n public static override inputSchema(): DataPortSchema {\n return TextTranslationInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return TextTranslationOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run text translation tasks.\n * Creates and executes a TextTranslationCompoundTask with the provided input.\n * @param input The input parameters for text translation (text, model, source_lang, and target_lang)\n * @returns Promise resolving to the translated text output(s)\n */\nexport const textTranslation = (\n input: TextTranslationTaskInput,\n config?: TextTranslationTaskConfig\n) => {\n return new TextTranslationTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textTranslation: CreateWorkflow<\n TextTranslationTaskInput,\n TextTranslationTaskOutput,\n TextTranslationTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textTranslation = CreateWorkflow(TextTranslationTask);\n",
62
- "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, getTaskConstructors, Workflow } from \"@workglow/task-graph\";\n\nimport type { IExecuteContext, StreamEvent, TaskConfig } from \"@workglow/task-graph\";\nimport { makeFingerprint, ServiceRegistry } from \"@workglow/util\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport type { AiJobInput } from \"../job/AiJob\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\nimport type { ToolDefinition } from \"./ToolCallingUtils\";\n\n// ========================================================================\n// Utility: convert TaskRegistry entries to tool definitions\n// ========================================================================\n\nexport interface ToolDefinitionWithTaskType extends ToolDefinition {\n /** The task type name this definition was generated from. */\n readonly taskType: string;\n}\n\n/**\n * Converts an allow-list of task type names into {@link ToolDefinitionWithTaskType} objects\n * suitable for the ToolCallingTask input. Each entry carries the originating\n * `taskType` so callers don't need to rely on index correspondence.\n *\n * Each task's `type`, `description`, `inputSchema()`, and `outputSchema()`\n * are used to build the tool definition.\n *\n * @param taskNames - Array of task type names registered in the task constructors\n * @param registry - Optional service registry for DI-based lookups\n * @returns Array of ToolDefinitionWithTaskType objects\n * @throws Error if a task name is not found in the registry\n */\nexport function taskTypesToTools(\n taskNames: ReadonlyArray<string>,\n registry?: ServiceRegistry\n): ToolDefinitionWithTaskType[] {\n const constructors = getTaskConstructors(registry);\n return taskNames.map((name) => {\n const ctor = constructors.get(name);\n if (!ctor) {\n throw new Error(\n `taskTypesToTools: Unknown task type \"${name}\" — not found in task constructors registry (ServiceRegistry: ${registry ? \"custom\" : \"default\"})`\n );\n }\n const configSchema =\n \"configSchema\" in ctor && typeof ctor.configSchema === \"function\"\n ? ctor.configSchema()\n : undefined;\n return {\n name: ctor.type,\n description: ctor.description ?? \"\",\n inputSchema: ctor.inputSchema(),\n outputSchema: ctor.outputSchema(),\n ...(configSchema ? { configSchema } : {}),\n taskType: name,\n };\n });\n}\n\n// ========================================================================\n// Schemas\n// ========================================================================\n\nexport const ToolDefinitionSchema = {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n title: \"Name\",\n description: \"The tool name\",\n },\n description: {\n type: \"string\",\n title: \"Description\",\n description: \"A description of what the tool does\",\n },\n inputSchema: {\n type: \"object\",\n title: \"Input Schema\",\n description: \"JSON Schema describing the tool's input parameters\",\n additionalProperties: true,\n },\n outputSchema: {\n type: \"object\",\n title: \"Output Schema\",\n description: \"JSON Schema describing what the tool returns\",\n additionalProperties: true,\n },\n configSchema: {\n type: \"object\",\n title: \"Config Schema\",\n description: \"JSON Schema describing the task's configuration options (not sent to the LLM)\",\n additionalProperties: true,\n },\n config: {\n type: \"object\",\n title: \"Config\",\n description: \"Concrete configuration values for the backing task (not sent to the LLM)\",\n additionalProperties: true,\n },\n },\n required: [\"name\", \"description\", \"inputSchema\"],\n additionalProperties: true,\n} as const;\n\nconst ToolCallSchema = {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n title: \"ID\",\n description: \"Unique identifier for this tool call\",\n },\n name: {\n type: \"string\",\n title: \"Name\",\n description: \"The name of the tool to invoke\",\n },\n input: {\n type: \"object\",\n title: \"Input\",\n description: \"The input arguments for the tool call\",\n additionalProperties: true,\n },\n },\n required: [\"id\", \"name\", \"input\"],\n additionalProperties: false,\n} as const;\n\nconst modelSchema = TypeModel(\"model:ToolCallingTask\");\n\nexport const ToolCallingInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n oneOf: [\n { type: \"string\", title: \"Prompt\", description: \"The prompt to send to the model\" },\n {\n type: \"array\",\n title: \"Prompt\",\n description: \"The prompt as an array of strings or content blocks\",\n items: {\n oneOf: [\n { type: \"string\" },\n {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"text\", \"image\", \"audio\"] },\n },\n required: [\"type\"],\n additionalProperties: true,\n },\n ],\n },\n },\n ],\n title: \"Prompt\",\n description: \"The prompt to send to the model\",\n },\n systemPrompt: {\n type: \"string\",\n title: \"System Prompt\",\n description: \"Optional system instructions for the model\",\n },\n messages: {\n type: \"array\",\n title: \"Messages\",\n description:\n \"Full conversation history for multi-turn interactions. When provided, used instead of prompt to construct the messages array sent to the provider.\",\n items: {\n type: \"object\",\n properties: {\n role: { type: \"string\", enum: [\"user\", \"assistant\", \"tool\"] },\n content: {},\n },\n required: [\"role\", \"content\"],\n additionalProperties: true,\n },\n },\n tools: {\n type: \"array\",\n format: \"tasks\",\n title: \"Tools\",\n description: \"Tool definitions available for the model to call\",\n items: {\n oneOf: [\n { type: \"string\", format: \"tasks\", description: \"Task type name\" },\n ToolDefinitionSchema,\n ],\n },\n },\n toolChoice: {\n type: \"string\",\n title: \"Tool Choice\",\n description:\n 'Controls tool selection: \"auto\" (model decides), \"none\" (no tools), \"required\" (must call a tool), or a specific tool name',\n \"x-ui-group\": \"Configuration\",\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"The maximum number of tokens to generate\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"The temperature to use for sampling\",\n minimum: 0,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"model\", \"prompt\", \"tools\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const ToolCallingOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"Any text content generated by the model\",\n \"x-stream\": \"append\",\n },\n toolCalls: {\n type: \"array\",\n items: ToolCallSchema,\n title: \"Tool Calls\",\n description: \"Tool calls requested by the model\",\n \"x-stream\": \"object\",\n },\n },\n required: [\"text\", \"toolCalls\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\n/**\n * Runtime input type for ToolCallingTask.\n *\n * The schema uses `oneOf: [string, object]` so the UI can accept both task-name\n * references and inline tool definitions, but the input resolver converts all\n * strings to {@link ToolDefinition} objects before execution. The `tools` field\n * is therefore narrowed to `ToolDefinition[]` here.\n *\n * Extends the schema-derived base with the\n * `messages` field typed explicitly (the loose `content: {}` in the\n * schema prevents `FromSchema` from producing a useful type).\n */\nexport type ToolCallingTaskInput = Omit<FromSchema<typeof ToolCallingInputSchema>, \"tools\"> & {\n readonly tools: ToolDefinition[];\n readonly messages?: ReadonlyArray<{\n readonly role: \"user\" | \"assistant\" | \"tool\";\n readonly content: unknown;\n }>;\n readonly sessionId?: string;\n};\n\nexport type ToolCallingTaskOutput = FromSchema<typeof ToolCallingOutputSchema>;\nexport type ToolCallingTaskConfig = TaskConfig<ToolCallingTaskInput>;\n\n// ========================================================================\n// Task class\n// ========================================================================\n\nexport class ToolCallingTask extends StreamingAiTask<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCallingTaskConfig\n> {\n public static override type = \"ToolCallingTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Tool Calling\";\n public static override description =\n \"Sends a prompt with tool definitions to a language model and returns text along with any tool calls the model requests\";\n public static override inputSchema(): DataPortSchema {\n return ToolCallingInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return ToolCallingOutputSchema as DataPortSchema;\n }\n\n /** Session ID computed during getJobInput, used to register cleanup. */\n private _computedSessionId: string | undefined;\n\n /**\n * Override to auto-compute a prefix-rewind session ID from tools + systemPrompt\n * + runnerId when no explicit sessionId is provided. The runnerId scopes the\n * cache to the current graph run so it's cleaned up via ResourceScope.\n */\n protected override async getJobInput(\n input: ToolCallingTaskInput\n ): Promise<AiJobInput<ToolCallingTaskInput>> {\n const jobInput = await super.getJobInput(input);\n\n if (!jobInput.sessionId && input.tools && input.tools.length > 0) {\n jobInput.sessionId = await makeFingerprint({\n tools: input.tools,\n systemPrompt: input.systemPrompt,\n runnerId: this.runConfig.runnerId,\n });\n this._computedSessionId = jobInput.sessionId;\n }\n\n return jobInput;\n }\n\n private registerSessionDispose(input: ToolCallingTaskInput, context: IExecuteContext): void {\n const sessionId = this._computedSessionId;\n if (!sessionId || !context.resourceScope) return;\n\n const model = input.model as ModelConfig;\n if (!model || typeof model !== \"object\") return;\n\n const providerName = model.provider;\n context.resourceScope.register(`ai:session:${sessionId}`, async () => {\n await getAiProviderRegistry().disposeSession(providerName, sessionId);\n });\n }\n\n override async execute(\n input: ToolCallingTaskInput,\n executeContext: IExecuteContext\n ): Promise<ToolCallingTaskOutput | undefined> {\n const result = await super.execute(input, executeContext);\n this.registerSessionDispose(input, executeContext);\n return result;\n }\n\n override async *executeStream(\n input: ToolCallingTaskInput,\n context: IExecuteContext\n ): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n yield* super.executeStream(input, context);\n this.registerSessionDispose(input, context);\n }\n}\n\n/**\n * Convenience function to run a tool calling task.\n */\nexport const toolCalling = (input: ToolCallingTaskInput, config?: ToolCallingTaskConfig) => {\n return new ToolCallingTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n toolCalling: CreateWorkflow<ToolCallingTaskInput, ToolCallingTaskOutput, ToolCallingTaskConfig>;\n }\n}\n\nWorkflow.prototype.toolCalling = CreateWorkflow(ToolCallingTask);\n",
64
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, getTaskConstructors, Workflow } from \"@workglow/task-graph\";\n\nimport type { IExecuteContext, StreamEvent, TaskConfig } from \"@workglow/task-graph\";\nimport { ChatMessageSchema } from \"./ChatMessage\";\nimport type { ChatMessage } from \"./ChatMessage\";\nimport { makeFingerprint, ServiceRegistry } from \"@workglow/util\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport type { AiJobInput } from \"../job/AiJob\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\nimport type { ToolDefinition } from \"./ToolCallingUtils\";\n\n// ========================================================================\n// Utility: convert TaskRegistry entries to tool definitions\n// ========================================================================\n\nexport interface ToolDefinitionWithTaskType extends ToolDefinition {\n /** The task type name this definition was generated from. */\n readonly taskType: string;\n}\n\n/**\n * Converts an allow-list of task type names into {@link ToolDefinitionWithTaskType} objects\n * suitable for the ToolCallingTask input. Each entry carries the originating\n * `taskType` so callers don't need to rely on index correspondence.\n *\n * Each task's `type`, `description`, `inputSchema()`, and `outputSchema()`\n * are used to build the tool definition.\n *\n * @param taskNames - Array of task type names registered in the task constructors\n * @param registry - Optional service registry for DI-based lookups\n * @returns Array of ToolDefinitionWithTaskType objects\n * @throws Error if a task name is not found in the registry\n */\nexport function taskTypesToTools(\n taskNames: ReadonlyArray<string>,\n registry?: ServiceRegistry\n): ToolDefinitionWithTaskType[] {\n const constructors = getTaskConstructors(registry);\n return taskNames.map((name) => {\n const ctor = constructors.get(name);\n if (!ctor) {\n throw new Error(\n `taskTypesToTools: Unknown task type \"${name}\" — not found in task constructors registry (ServiceRegistry: ${registry ? \"custom\" : \"default\"})`\n );\n }\n const configSchema =\n \"configSchema\" in ctor && typeof ctor.configSchema === \"function\"\n ? ctor.configSchema()\n : undefined;\n return {\n name: ctor.type,\n description: ctor.description ?? \"\",\n inputSchema: ctor.inputSchema(),\n outputSchema: ctor.outputSchema(),\n ...(configSchema ? { configSchema } : {}),\n taskType: name,\n };\n });\n}\n\n// ========================================================================\n// Schemas\n// ========================================================================\n\nexport const ToolDefinitionSchema = {\n type: \"object\",\n properties: {\n name: {\n type: \"string\",\n title: \"Name\",\n description: \"The tool name\",\n },\n description: {\n type: \"string\",\n title: \"Description\",\n description: \"A description of what the tool does\",\n },\n inputSchema: {\n type: \"object\",\n title: \"Input Schema\",\n description: \"JSON Schema describing the tool's input parameters\",\n additionalProperties: true,\n },\n outputSchema: {\n type: \"object\",\n title: \"Output Schema\",\n description: \"JSON Schema describing what the tool returns\",\n additionalProperties: true,\n },\n configSchema: {\n type: \"object\",\n title: \"Config Schema\",\n description: \"JSON Schema describing the task's configuration options (not sent to the LLM)\",\n additionalProperties: true,\n },\n config: {\n type: \"object\",\n title: \"Config\",\n description: \"Concrete configuration values for the backing task (not sent to the LLM)\",\n additionalProperties: true,\n },\n },\n required: [\"name\", \"description\", \"inputSchema\"],\n additionalProperties: true,\n} as const;\n\nconst ToolCallSchema = {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n title: \"ID\",\n description: \"Unique identifier for this tool call\",\n },\n name: {\n type: \"string\",\n title: \"Name\",\n description: \"The name of the tool to invoke\",\n },\n input: {\n type: \"object\",\n title: \"Input\",\n description: \"The input arguments for the tool call\",\n additionalProperties: true,\n },\n },\n required: [\"id\", \"name\", \"input\"],\n additionalProperties: false,\n} as const;\n\nconst modelSchema = TypeModel(\"model:ToolCallingTask\");\n\nexport const ToolCallingInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n oneOf: [\n { type: \"string\", title: \"Prompt\", description: \"The prompt to send to the model\" },\n {\n type: \"array\",\n title: \"Prompt\",\n description: \"The prompt as an array of strings or content blocks\",\n items: {\n oneOf: [\n { type: \"string\" },\n {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"text\", \"image\", \"audio\"] },\n },\n required: [\"type\"],\n additionalProperties: true,\n },\n ],\n },\n },\n ],\n title: \"Prompt\",\n description: \"The prompt to send to the model\",\n },\n systemPrompt: {\n type: \"string\",\n title: \"System Prompt\",\n description: \"Optional system instructions for the model\",\n },\n messages: {\n type: \"array\",\n title: \"Messages\",\n description:\n \"Full conversation history for multi-turn interactions. When provided, used instead of prompt to construct the messages array sent to the provider.\",\n items: ChatMessageSchema,\n },\n tools: {\n type: \"array\",\n format: \"tasks\",\n title: \"Tools\",\n description: \"Tool definitions available for the model to call\",\n items: {\n oneOf: [\n { type: \"string\", format: \"tasks\", description: \"Task type name\" },\n ToolDefinitionSchema,\n ],\n },\n },\n toolChoice: {\n type: \"string\",\n title: \"Tool Choice\",\n description:\n 'Controls tool selection: \"auto\" (model decides), \"none\" (no tools), \"required\" (must call a tool), or a specific tool name',\n \"x-ui-group\": \"Configuration\",\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"The maximum number of tokens to generate\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"The temperature to use for sampling\",\n minimum: 0,\n maximum: 2,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"model\", \"prompt\", \"tools\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const ToolCallingOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"Any text content generated by the model\",\n \"x-stream\": \"append\",\n },\n toolCalls: {\n type: \"array\",\n items: ToolCallSchema,\n title: \"Tool Calls\",\n description: \"Tool calls requested by the model\",\n \"x-stream\": \"object\",\n },\n },\n required: [\"text\", \"toolCalls\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\n/**\n * Runtime input type for ToolCallingTask.\n *\n * The schema uses `oneOf: [string, object]` so the UI can accept both task-name\n * references and inline tool definitions, but the input resolver converts all\n * strings to {@link ToolDefinition} objects before execution. The `tools` field\n * is therefore narrowed to `ToolDefinition[]` here.\n *\n * Extends the schema-derived base with the\n * `messages` field typed explicitly (the loose `content: {}` in the\n * schema prevents `FromSchema` from producing a useful type).\n */\nexport type ToolCallingTaskInput = Omit<\n FromSchema<typeof ToolCallingInputSchema>,\n \"tools\" | \"messages\"\n> & {\n readonly tools: ToolDefinition[];\n readonly messages?: ReadonlyArray<ChatMessage>;\n readonly sessionId?: string;\n};\n\nexport type ToolCallingTaskOutput = FromSchema<typeof ToolCallingOutputSchema>;\nexport type ToolCallingTaskConfig = TaskConfig<ToolCallingTaskInput>;\n\n// ========================================================================\n// Task class\n// ========================================================================\n\nexport class ToolCallingTask extends StreamingAiTask<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCallingTaskConfig\n> {\n public static override type = \"ToolCallingTask\";\n public static override category = \"AI Text Model\";\n public static override title = \"Tool Calling\";\n public static override description =\n \"Sends a prompt with tool definitions to a language model and returns text along with any tool calls the model requests\";\n public static override inputSchema(): DataPortSchema {\n return ToolCallingInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return ToolCallingOutputSchema as DataPortSchema;\n }\n\n /** Session ID computed during getJobInput, used to register cleanup. */\n private _computedSessionId: string | undefined;\n\n /**\n * Override to auto-compute a prefix-rewind session ID from tools + systemPrompt\n * + runnerId when no explicit sessionId is provided. The runnerId scopes the\n * cache to the current graph run so it's cleaned up via ResourceScope.\n */\n protected override async getJobInput(\n input: ToolCallingTaskInput\n ): Promise<AiJobInput<ToolCallingTaskInput>> {\n const jobInput = await super.getJobInput(input);\n\n if (!jobInput.sessionId && input.tools && input.tools.length > 0) {\n jobInput.sessionId = await makeFingerprint({\n tools: input.tools,\n systemPrompt: input.systemPrompt,\n runnerId: this.runConfig.runnerId,\n });\n this._computedSessionId = jobInput.sessionId;\n }\n\n return jobInput;\n }\n\n private registerSessionDispose(input: ToolCallingTaskInput, context: IExecuteContext): void {\n const sessionId = this._computedSessionId;\n if (!sessionId || !context.resourceScope) return;\n\n const model = input.model as ModelConfig;\n if (!model || typeof model !== \"object\") return;\n\n const providerName = model.provider;\n context.resourceScope.register(`ai:session:${sessionId}`, async () => {\n await getAiProviderRegistry().disposeSession(providerName, sessionId);\n });\n }\n\n override async execute(\n input: ToolCallingTaskInput,\n executeContext: IExecuteContext\n ): Promise<ToolCallingTaskOutput | undefined> {\n const result = await super.execute(input, executeContext);\n this.registerSessionDispose(input, executeContext);\n return result;\n }\n\n override async *executeStream(\n input: ToolCallingTaskInput,\n context: IExecuteContext\n ): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n yield* super.executeStream(input, context);\n this.registerSessionDispose(input, context);\n }\n}\n\n/**\n * Convenience function to run a tool calling task.\n */\nexport const toolCalling = (input: ToolCallingTaskInput, config?: ToolCallingTaskConfig) => {\n return new ToolCallingTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n toolCalling: CreateWorkflow<ToolCallingTaskInput, ToolCallingTaskOutput, ToolCallingTaskConfig>;\n }\n}\n\nWorkflow.prototype.toolCalling = CreateWorkflow(ToolCallingTask);\n",
63
65
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, IExecuteContext, Task, Workflow } from \"@workglow/task-graph\";\n\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\n\nexport const SegmentationMethod = {\n HEURISTIC: \"heuristic\",\n EMBEDDING_SIMILARITY: \"embedding-similarity\",\n HYBRID: \"hybrid\",\n} as const;\n\nexport type SegmentationMethod = (typeof SegmentationMethod)[keyof typeof SegmentationMethod];\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The text to segment into topics\",\n },\n method: {\n type: \"string\",\n enum: Object.values(SegmentationMethod),\n title: \"Segmentation Method\",\n description: \"Method to use for topic segmentation\",\n default: SegmentationMethod.HEURISTIC,\n },\n minSegmentSize: {\n type: \"number\",\n title: \"Min Segment Size\",\n description: \"Minimum segment size in characters\",\n minimum: 50,\n default: 100,\n },\n maxSegmentSize: {\n type: \"number\",\n title: \"Max Segment Size\",\n description: \"Maximum segment size in characters\",\n minimum: 100,\n default: 2000,\n },\n similarityThreshold: {\n type: \"number\",\n title: \"Similarity Threshold\",\n description: \"Threshold for embedding similarity (0-1, lower = more splits)\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n },\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n segments: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n text: { type: \"string\" },\n startOffset: { type: \"number\" },\n endOffset: { type: \"number\" },\n },\n required: [\"text\", \"startOffset\", \"endOffset\"],\n additionalProperties: false,\n },\n title: \"Segments\",\n description: \"Detected topic segments\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of segments detected\",\n },\n },\n required: [\"segments\", \"count\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type TopicSegmenterTaskInput = FromSchema<typeof inputSchema>;\nexport type TopicSegmenterTaskOutput = FromSchema<typeof outputSchema>;\nexport type TopicSegmenterTaskConfig = TaskConfig<TopicSegmenterTaskInput>;\n\n/**\n * Task for segmenting text into topic-based sections\n * Uses hybrid approach: heuristics + optional embedding similarity\n */\nexport class TopicSegmenterTask extends Task<\n TopicSegmenterTaskInput,\n TopicSegmenterTaskOutput,\n TopicSegmenterTaskConfig\n> {\n public static override type = \"TopicSegmenterTask\";\n public static override category = \"Document\";\n public static override title = \"Topic Segmenter\";\n public static override description =\n \"Segment text into topic-based sections using hybrid approach\";\n public static override cacheable = true;\n private static readonly EMBEDDING_DIMENSIONS = 256;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async execute(\n input: TopicSegmenterTaskInput,\n context: IExecuteContext\n ): Promise<TopicSegmenterTaskOutput> {\n const {\n text,\n method = SegmentationMethod.HEURISTIC,\n minSegmentSize = 100,\n maxSegmentSize = 2000,\n similarityThreshold = 0.5,\n } = input;\n\n let segments: Array<{ text: string; startOffset: number; endOffset: number }>;\n\n switch (method) {\n case SegmentationMethod.EMBEDDING_SIMILARITY:\n segments = this.embeddingSegmentation(\n text,\n minSegmentSize,\n maxSegmentSize,\n similarityThreshold\n );\n break;\n case SegmentationMethod.HYBRID:\n // Start with heuristic, optionally refine with embeddings\n segments = this.heuristicSegmentation(text, minSegmentSize, maxSegmentSize);\n // TODO: Add embedding refinement step\n break;\n case SegmentationMethod.HEURISTIC:\n default:\n segments = this.heuristicSegmentation(text, minSegmentSize, maxSegmentSize);\n break;\n }\n\n return {\n segments,\n count: segments.length,\n };\n }\n\n /**\n * Embedding-based segmentation using hashed token vectors and cosine similarity\n */\n private embeddingSegmentation(\n text: string,\n minSegmentSize: number,\n maxSegmentSize: number,\n similarityThreshold: number\n ): Array<{ text: string; startOffset: number; endOffset: number }> {\n const paragraphs = this.splitIntoParagraphs(text);\n if (paragraphs.length === 0) {\n return [];\n }\n\n const embeddings = paragraphs.map((p) =>\n this.embedParagraph(p.text, TopicSegmenterTask.EMBEDDING_DIMENSIONS)\n );\n\n const segments: Array<{ text: string; startOffset: number; endOffset: number }> = [];\n let currentSegmentParagraphs: Array<{ text: string; offset: number }> = [];\n let currentSegmentSize = 0;\n\n for (let i = 0; i < paragraphs.length; i++) {\n const paragraph = paragraphs[i];\n const paragraphSize = paragraph.text.length;\n const exceedsMax =\n currentSegmentSize + paragraphSize > maxSegmentSize && currentSegmentSize >= minSegmentSize;\n\n let shouldSplit = false;\n if (i > 0 && currentSegmentSize >= minSegmentSize) {\n const prev = embeddings[i - 1];\n const curr = embeddings[i];\n const similarity = this.cosineSimilarityWithNorms(\n prev.vector,\n prev.norm,\n curr.vector,\n curr.norm\n );\n shouldSplit = similarity < similarityThreshold;\n }\n\n if ((exceedsMax || shouldSplit) && currentSegmentParagraphs.length > 0) {\n segments.push(this.createSegment(currentSegmentParagraphs));\n currentSegmentParagraphs = [];\n currentSegmentSize = 0;\n }\n\n currentSegmentParagraphs.push(paragraph);\n currentSegmentSize += paragraphSize;\n }\n\n if (currentSegmentParagraphs.length > 0) {\n segments.push(this.createSegment(currentSegmentParagraphs));\n }\n\n return this.mergeSmallSegments(segments, minSegmentSize);\n }\n\n /**\n * Heuristic segmentation based on paragraph breaks and transition markers\n */\n private heuristicSegmentation(\n text: string,\n minSegmentSize: number,\n maxSegmentSize: number\n ): Array<{ text: string; startOffset: number; endOffset: number }> {\n const segments: Array<{ text: string; startOffset: number; endOffset: number }> = [];\n\n // Split by double newlines (paragraph breaks)\n const paragraphs = this.splitIntoParagraphs(text);\n\n let currentSegmentParagraphs: Array<{ text: string; offset: number }> = [];\n let currentSegmentSize = 0;\n\n for (const paragraph of paragraphs) {\n const paragraphSize = paragraph.text.length;\n\n // Check if adding this paragraph would exceed max size\n if (\n currentSegmentSize + paragraphSize > maxSegmentSize &&\n currentSegmentSize >= minSegmentSize\n ) {\n // Flush current segment\n if (currentSegmentParagraphs.length > 0) {\n const segment = this.createSegment(currentSegmentParagraphs);\n segments.push(segment);\n currentSegmentParagraphs = [];\n currentSegmentSize = 0;\n }\n }\n\n // Check for transition markers\n const hasTransition = this.hasTransitionMarker(paragraph.text);\n if (\n hasTransition &&\n currentSegmentSize >= minSegmentSize &&\n currentSegmentParagraphs.length > 0\n ) {\n // Flush current segment before transition\n const segment = this.createSegment(currentSegmentParagraphs);\n segments.push(segment);\n currentSegmentParagraphs = [];\n currentSegmentSize = 0;\n }\n\n currentSegmentParagraphs.push(paragraph);\n currentSegmentSize += paragraphSize;\n }\n\n // Flush remaining segment\n if (currentSegmentParagraphs.length > 0) {\n const segment = this.createSegment(currentSegmentParagraphs);\n segments.push(segment);\n }\n\n // Merge small segments\n return this.mergeSmallSegments(segments, minSegmentSize);\n }\n\n /**\n * Create a hashed token embedding for fast similarity checks\n */\n private embedParagraph(text: string, dimensions: number): { vector: Float32Array; norm: number } {\n const vector = new Float32Array(dimensions);\n const tokens = text.toLowerCase().match(/[a-z0-9]+/g);\n if (!tokens) {\n return { vector, norm: 0 };\n }\n\n for (const token of tokens) {\n let hash = 2166136261;\n for (let i = 0; i < token.length; i++) {\n hash ^= token.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n const index = (hash >>> 0) % dimensions;\n vector[index] += 1;\n }\n\n let sumSquares = 0;\n for (let i = 0; i < vector.length; i++) {\n const value = vector[i];\n sumSquares += value * value;\n }\n\n return { vector, norm: sumSquares > 0 ? Math.sqrt(sumSquares) : 0 };\n }\n\n private cosineSimilarityWithNorms(\n a: Float32Array,\n aNorm: number,\n b: Float32Array,\n bNorm: number\n ): number {\n if (aNorm === 0 || bNorm === 0) {\n return 0;\n }\n\n let dot = 0;\n for (let i = 0; i < a.length; i++) {\n dot += a[i] * b[i];\n }\n\n return dot / (aNorm * bNorm);\n }\n\n /**\n * Split text into paragraphs with offsets\n */\n private splitIntoParagraphs(text: string): Array<{ text: string; offset: number }> {\n const paragraphs: Array<{ text: string; offset: number }> = [];\n const splits = text.split(/\\n\\s*\\n/);\n\n let currentOffset = 0;\n for (const split of splits) {\n const trimmed = split.trim();\n if (trimmed.length > 0) {\n const offset = text.indexOf(trimmed, currentOffset);\n paragraphs.push({ text: trimmed, offset });\n currentOffset = offset + trimmed.length;\n }\n }\n\n return paragraphs;\n }\n\n /**\n * Check if paragraph contains transition markers\n */\n private hasTransitionMarker(text: string): boolean {\n const transitionMarkers = [\n /^(however|therefore|thus|consequently|in conclusion|in summary|furthermore|moreover|additionally|meanwhile|nevertheless|on the other hand)/i,\n /^(first|second|third|finally|lastly)/i,\n /^\\d+\\./, // Numbered list\n ];\n\n return transitionMarkers.some((pattern) => pattern.test(text));\n }\n\n /**\n * Create a segment from paragraphs\n */\n private createSegment(paragraphs: Array<{ text: string; offset: number }>): {\n text: string;\n startOffset: number;\n endOffset: number;\n } {\n const text = paragraphs.map((p) => p.text).join(\"\\n\\n\");\n const startOffset = paragraphs[0].offset;\n const endOffset =\n paragraphs[paragraphs.length - 1].offset + paragraphs[paragraphs.length - 1].text.length;\n\n return { text, startOffset, endOffset };\n }\n\n /**\n * Merge segments that are too small\n */\n private mergeSmallSegments(\n segments: Array<{ text: string; startOffset: number; endOffset: number }>,\n minSegmentSize: number\n ): Array<{ text: string; startOffset: number; endOffset: number }> {\n if (segments.length <= 1) {\n return segments;\n }\n\n const merged: Array<{ text: string; startOffset: number; endOffset: number }> = [];\n let i = 0;\n\n while (i < segments.length) {\n const current = segments[i];\n\n if (current.text.length < minSegmentSize && i + 1 < segments.length) {\n // Merge with next\n const next = segments[i + 1];\n const mergedSegment = {\n text: current.text + \"\\n\\n\" + next.text,\n startOffset: current.startOffset,\n endOffset: next.endOffset,\n };\n merged.push(mergedSegment);\n i += 2;\n } else if (current.text.length < minSegmentSize && merged.length > 0) {\n // Merge with previous\n const previous = merged[merged.length - 1];\n merged[merged.length - 1] = {\n text: previous.text + \"\\n\\n\" + current.text,\n startOffset: previous.startOffset,\n endOffset: current.endOffset,\n };\n i++;\n } else {\n merged.push(current);\n i++;\n }\n }\n\n return merged;\n }\n}\n\nexport const topicSegmenter = (\n input: TopicSegmenterTaskInput,\n config?: TopicSegmenterTaskConfig\n) => {\n return new TopicSegmenterTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n topicSegmenter: CreateWorkflow<\n TopicSegmenterTaskInput,\n TopicSegmenterTaskOutput,\n TopicSegmenterTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.topicSegmenter = CreateWorkflow(TopicSegmenterTask);\n",
64
66
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util/schema\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model\");\n\nconst UnloadModelInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n },\n required: [\"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst UnloadModelOutputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n },\n required: [\"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type UnloadModelTaskRunInput = FromSchema<typeof UnloadModelInputSchema>;\nexport type UnloadModelTaskRunOutput = FromSchema<typeof UnloadModelOutputSchema>;\nexport type UnloadModelTaskConfig = TaskConfig<UnloadModelTaskRunInput>;\n\n/**\n * Unload a model from memory and clear its cache.\n *\n * @remarks\n * This task has a side effect of removing the model from memory and deleting cached files\n */\nexport class UnloadModelTask extends AiTask<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n UnloadModelTaskConfig\n> {\n public static override type = \"UnloadModelTask\";\n public static override category = \"AI Model\";\n public static override title = \"Unload Model\";\n public static override description =\n \"Unloads and clears cached AI models from memory and storage\";\n public static override inputSchema(): DataPortSchema {\n return UnloadModelInputSchema satisfies DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return UnloadModelOutputSchema satisfies DataPortSchema;\n }\n public static override cacheable = false;\n}\n\n/**\n * Unload a model from memory and clear its cache.\n *\n * @param input - Input containing model(s) to unload\n * @returns Promise resolving to the unloaded model(s)\n */\nexport const unloadModel = (input: UnloadModelTaskRunInput, config?: UnloadModelTaskConfig) => {\n return new UnloadModelTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n unloadModel: CreateWorkflow<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n UnloadModelTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.unloadModel = CreateWorkflow(UnloadModelTask);\n",
65
67
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, Task, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n normalizeNumberArray,\n TensorType,\n TypedArray,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n vector: {\n anyOf: [\n TypedArraySchema({\n title: \"Vector\",\n description: \"The vector to quantize\",\n }),\n {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Vector\",\n description: \"Vector to quantize\",\n }),\n },\n ],\n title: \"Input Vector(s)\",\n description: \"Vector or array of vectors to quantize\",\n },\n targetType: {\n type: \"string\",\n enum: Object.values(TensorType),\n title: \"Target Type\",\n description: \"Target quantization type\",\n default: TensorType.INT8,\n },\n normalize: {\n type: \"boolean\",\n title: \"Normalize\",\n description: \"Normalize vector before quantization\",\n default: true,\n },\n },\n required: [\"vector\", \"targetType\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n vector: {\n anyOf: [\n TypedArraySchema({\n title: \"Quantized Vector\",\n description: \"The quantized vector\",\n }),\n {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Quantized Vector\",\n description: \"Quantized vector\",\n }),\n },\n ],\n title: \"Output Vector(s)\",\n description: \"Quantized vector or array of vectors\",\n },\n originalType: {\n type: \"string\",\n enum: Object.values(TensorType),\n title: \"Original Type\",\n description: \"Original vector type\",\n },\n targetType: {\n type: \"string\",\n enum: Object.values(TensorType),\n title: \"Target Type\",\n description: \"Target quantization type\",\n },\n },\n required: [\"vector\", \"originalType\", \"targetType\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type VectorQuantizeTaskInput = FromSchema<typeof inputSchema, TypedArraySchemaOptions>;\nexport type VectorQuantizeTaskOutput = FromSchema<typeof outputSchema, TypedArraySchemaOptions>;\nexport type VectorQuantizeTaskConfig = TaskConfig<VectorQuantizeTaskInput>;\n\n/**\n * Task for quantizing vectors to reduce storage and improve performance.\n * Supports various quantization types including binary, int8, uint8, int16, uint16.\n */\nexport class VectorQuantizeTask extends Task<\n VectorQuantizeTaskInput,\n VectorQuantizeTaskOutput,\n VectorQuantizeTaskConfig\n> {\n public static override type = \"VectorQuantizeTask\";\n public static override category = \"Vector\";\n public static override title = \"Quantize\";\n public static override description = \"Quantize vectors to reduce storage and improve performance\";\n public static override cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static override outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n override async executeReactive(\n input: VectorQuantizeTaskInput\n ): Promise<VectorQuantizeTaskOutput> {\n const { vector, targetType, normalize = true } = input;\n const isArray = Array.isArray(vector);\n const vectors = isArray ? vector : [vector];\n const originalType = this.getVectorType(vectors[0]);\n\n const quantized = vectors.map((v) => this.vectorQuantize(v, targetType, normalize));\n\n return {\n vector: isArray ? quantized : quantized[0],\n originalType,\n targetType,\n };\n }\n\n private getVectorType(vector: TypedArray): TensorType {\n if (vector instanceof Float16Array) return TensorType.FLOAT16;\n if (vector instanceof Float32Array) return TensorType.FLOAT32;\n if (vector instanceof Float64Array) return TensorType.FLOAT64;\n if (vector instanceof Int8Array) return TensorType.INT8;\n if (vector instanceof Uint8Array) return TensorType.UINT8;\n if (vector instanceof Int16Array) return TensorType.INT16;\n if (vector instanceof Uint16Array) return TensorType.UINT16;\n throw new Error(`Unknown vector type: ${typeof vector}`);\n }\n\n private vectorQuantize(\n vector: TypedArray,\n targetType: TensorType,\n normalize: boolean\n ): TypedArray {\n let values = Array.from(vector) as number[];\n\n // Normalize if requested\n if (normalize) {\n values = normalizeNumberArray(values, false);\n }\n\n switch (targetType) {\n case TensorType.FLOAT16:\n return new Float16Array(values);\n\n case TensorType.FLOAT32:\n return new Float32Array(values);\n\n case TensorType.FLOAT64:\n return new Float64Array(values);\n\n case TensorType.INT8:\n return this.quantizeToInt8(values);\n\n case TensorType.UINT8:\n return this.quantizeToUint8(values);\n\n case TensorType.INT16:\n return this.quantizeToInt16(values);\n\n case TensorType.UINT16:\n return this.quantizeToUint16(values);\n\n default:\n return new Float32Array(values);\n }\n }\n\n /**\n * Find min and max values in a single pass for better performance\n */\n private findMinMax(values: number[]): { min: number; max: number } {\n if (values.length === 0) {\n return { min: 0, max: 1 };\n }\n\n let min = values[0];\n let max = values[0];\n\n for (let i = 1; i < values.length; i++) {\n const val = values[i];\n if (val < min) min = val;\n if (val > max) max = val;\n }\n\n return { min, max };\n }\n\n private quantizeToInt8(values: number[]): Int8Array {\n // Assume values are in [-1, 1] range after normalization\n // Scale to [-127, 127] to avoid overflow at -128\n return new Int8Array(values.map((v) => Math.round(Math.max(-1, Math.min(1, v)) * 127)));\n }\n\n private quantizeToUint8(values: number[]): Uint8Array {\n // Find min/max for scaling in a single pass\n const { min, max } = this.findMinMax(values);\n const range = max - min || 1;\n\n // Scale to [0, 255]\n return new Uint8Array(values.map((v) => Math.round(((v - min) / range) * 255)));\n }\n\n private quantizeToInt16(values: number[]): Int16Array {\n // Assume values are in [-1, 1] range after normalization\n // Scale to [-32767, 32767]\n return new Int16Array(values.map((v) => Math.round(Math.max(-1, Math.min(1, v)) * 32767)));\n }\n\n private quantizeToUint16(values: number[]): Uint16Array {\n // Find min/max for scaling in a single pass\n const { min, max } = this.findMinMax(values);\n const range = max - min || 1;\n\n // Scale to [0, 65535]\n return new Uint16Array(values.map((v) => Math.round(((v - min) / range) * 65535)));\n }\n}\n\nexport const vectorQuantize = (\n input: VectorQuantizeTaskInput,\n config?: VectorQuantizeTaskConfig\n) => {\n return new VectorQuantizeTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n vectorQuantize: CreateWorkflow<\n VectorQuantizeTaskInput,\n VectorQuantizeTaskOutput,\n VectorQuantizeTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.vectorQuantize = CreateWorkflow(VectorQuantizeTask);\n",
66
68
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, GraphAsTask, Workflow } from \"@workglow/task-graph\";\nimport type { TaskConfig } from \"@workglow/task-graph\";\nimport {\n cosineSimilarity,\n DataPortSchema,\n FromSchema,\n hammingSimilarity,\n jaccardSimilarity,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util/schema\";\n\nexport const SimilarityFn = {\n COSINE: \"cosine\",\n JACCARD: \"jaccard\",\n HAMMING: \"hamming\",\n} as const;\n\nconst similarityFunctions = {\n cosine: cosineSimilarity,\n jaccard: jaccardSimilarity,\n hamming: hammingSimilarity,\n} as const;\n\nexport type SimilarityFn = (typeof SimilarityFn)[keyof typeof SimilarityFn];\n\nconst SimilarityInputSchema = {\n type: \"object\",\n properties: {\n query: TypedArraySchema({\n title: \"Query\",\n description: \"Query vector to compare against\",\n }),\n vectors: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Input\",\n description: \"Array of vectors to compare against the query\",\n }),\n },\n topK: {\n type: \"number\",\n title: \"Top K\",\n description: \"Number of top results to return\",\n minimum: 1,\n default: 10,\n },\n method: {\n type: \"string\",\n enum: Object.values(SimilarityFn),\n title: \"Similarity 𝑓\",\n description: \"Similarity function to use for comparisons\",\n default: SimilarityFn.COSINE,\n },\n },\n required: [\"query\", \"vectors\", \"method\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst SimilarityOutputSchema = {\n type: \"object\",\n properties: {\n output: {\n type: \"array\",\n items: TypedArraySchema({\n title: \"Output\",\n description: \"Ranked output vectors\",\n }),\n },\n score: {\n type: \"array\",\n items: {\n type: \"number\",\n title: \"Score\",\n description: \"Similarity scores for each output vector\",\n },\n },\n },\n required: [\"output\", \"score\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type VectorSimilarityTaskInput = FromSchema<\n typeof SimilarityInputSchema,\n TypedArraySchemaOptions\n>;\nexport type VectorSimilarityTaskOutput = FromSchema<\n typeof SimilarityOutputSchema,\n TypedArraySchemaOptions\n>;\nexport type VectorSimilarityTaskConfig = TaskConfig<VectorSimilarityTaskInput>;\n\nexport class VectorSimilarityTask extends GraphAsTask<\n VectorSimilarityTaskInput,\n VectorSimilarityTaskOutput,\n VectorSimilarityTaskConfig\n> {\n static override readonly type = \"VectorSimilarityTask\";\n static override readonly category = \"Vector\";\n static override readonly title = \"Vector Similarity\";\n public static override description =\n \"Compares vectors using similarity functions and returns top-K ranked results\";\n static override readonly cacheable = true;\n\n public static override inputSchema(): DataPortSchema {\n return SimilarityInputSchema as DataPortSchema;\n }\n public static override outputSchema(): DataPortSchema {\n return SimilarityOutputSchema as DataPortSchema;\n }\n\n override async executeReactive({ query, vectors, method, topK }: VectorSimilarityTaskInput) {\n let similarities = [];\n const fnName = method as keyof typeof similarityFunctions;\n const fn = similarityFunctions[fnName];\n\n for (const embedding of vectors) {\n similarities.push({\n similarity: fn(embedding, query),\n embedding,\n });\n }\n similarities = similarities.sort((a, b) => b.similarity - a.similarity).slice(0, topK);\n\n const outputs = similarities.map((s) => s.embedding);\n const scores = similarities.map((s) => s.similarity);\n return {\n output: outputs,\n score: scores,\n };\n }\n}\n\nexport const similarity = (\n input: VectorSimilarityTaskInput,\n config?: VectorSimilarityTaskConfig\n) => {\n return new VectorSimilarityTask(config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n similarity: CreateWorkflow<\n VectorSimilarityTaskInput,\n VectorSimilarityTaskOutput,\n VectorSimilarityTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.similarity = CreateWorkflow(VectorSimilarityTask);\n",
67
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Shared message conversion utilities for converting provider-agnostic\n * ChatMessage arrays to provider-specific formats.\n *\n * These are pure functions safe for both main-thread and worker contexts.\n * Providers with unique requirements (Anthropic, Gemini, LlamaCpp)\n * maintain their own conversion logic.\n */\n\nimport type { ToolCallingTaskInput } from \"./ToolCallingTask\";\n\n// ========================================================================\n// Internal helpers\n// ========================================================================\n\ntype InputMessages = ReadonlyArray<{ readonly role: string; readonly content: unknown }>;\n\n/**\n * Extract the messages array from a ToolCallingTaskInput.\n * Returns undefined if no messages are present.\n */\nfunction getInputMessages(input: ToolCallingTaskInput): InputMessages | undefined {\n const messages = input.messages;\n if (!messages || messages.length === 0) return undefined;\n return messages;\n}\n\n// ========================================================================\n// OpenAI-compatible format (OpenAI, HF Inference)\n// ========================================================================\n\nexport interface OpenAICompatMessage {\n role: string;\n content: string | null | Array<{ type: string; [key: string]: unknown }>;\n tool_calls?: Array<{\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n }>;\n tool_call_id?: string;\n}\n\n/**\n * Converts ToolCallingTaskInput to OpenAI-compatible message format.\n * Used by OpenAI and HuggingFace Inference providers.\n *\n * Multi-turn capable: preserves full tool call metadata across turns.\n */\nexport function toOpenAIMessages(input: ToolCallingTaskInput): OpenAICompatMessage[] {\n const messages: OpenAICompatMessage[] = [];\n\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt });\n }\n\n const inputMessages = getInputMessages(input);\n if (!inputMessages) {\n if (!Array.isArray(input.prompt)) {\n messages.push({ role: \"user\", content: input.prompt });\n } else if (input.prompt.every((item) => typeof item === \"string\")) {\n messages.push({ role: \"user\", content: (input.prompt as string[]).join(\"\\n\") });\n } else {\n const parts: Array<{ type: string; [key: string]: unknown }> = [];\n for (const item of input.prompt) {\n if (typeof item === \"string\") {\n parts.push({ type: \"text\", text: item });\n } else {\n const b = item as Record<string, unknown>;\n if (b.type === \"text\") {\n parts.push({ type: \"text\", text: b.text as string });\n } else if (b.type === \"image\") {\n parts.push({\n type: \"image_url\",\n image_url: { url: `data:${b.mimeType};base64,${b.data}` },\n });\n } else if (b.type === \"audio\") {\n const format = (b.mimeType as string).replace(/^audio\\//, \"\");\n parts.push({\n type: \"input_audio\",\n input_audio: { data: b.data as string, format },\n });\n }\n }\n }\n messages.push({ role: \"user\", content: parts });\n }\n return messages;\n }\n\n for (const msg of inputMessages) {\n if (msg.role === \"user\") {\n if (typeof msg.content === \"string\") {\n messages.push({ role: \"user\", content: msg.content });\n } else if (\n Array.isArray(msg.content) &&\n msg.content.length > 0 &&\n typeof (msg.content[0] as Record<string, unknown>)?.type === \"string\"\n ) {\n const parts: Array<{ type: string; [key: string]: unknown }> = [];\n for (const block of msg.content) {\n const b = block as Record<string, unknown>;\n if (b.type === \"text\") {\n parts.push({ type: \"text\", text: b.text as string });\n } else if (b.type === \"image\") {\n parts.push({\n type: \"image_url\",\n image_url: { url: `data:${b.mimeType};base64,${b.data}` },\n });\n } else if (b.type === \"audio\") {\n const format = (b.mimeType as string).replace(/^audio\\//, \"\");\n parts.push({\n type: \"input_audio\",\n input_audio: { data: b.data as string, format },\n });\n }\n }\n messages.push({ role: \"user\", content: parts });\n } else {\n try {\n messages.push({ role: \"user\", content: JSON.stringify(msg.content) });\n } catch {\n messages.push({ role: \"user\", content: String(msg.content) });\n }\n }\n } else if (msg.role === \"assistant\") {\n if (typeof msg.content === \"string\") {\n messages.push({ role: \"assistant\", content: msg.content.length > 0 ? msg.content : null });\n } else if (Array.isArray(msg.content)) {\n const textParts = msg.content\n .filter((b: Record<string, unknown>) => b.type === \"text\")\n .map((b: Record<string, unknown>) => b.text as string)\n .join(\"\");\n const toolCalls = msg.content\n .filter((b: Record<string, unknown>) => b.type === \"tool_use\")\n .map((b: Record<string, unknown>) => ({\n id: b.id as string,\n type: \"function\" as const,\n function: {\n name: b.name as string,\n arguments: JSON.stringify(b.input),\n },\n }));\n const entry: OpenAICompatMessage = {\n role: \"assistant\",\n content: textParts.length > 0 ? textParts : null,\n };\n if (toolCalls.length > 0) {\n entry.tool_calls = toolCalls;\n }\n messages.push(entry);\n }\n } else if (msg.role === \"tool\" && Array.isArray(msg.content)) {\n for (const block of msg.content) {\n const b = block as Record<string, unknown>;\n let content: string | Array<{ type: string; [key: string]: unknown }>;\n if (typeof b.content === \"string\") {\n content = b.content;\n } else if (Array.isArray(b.content)) {\n const parts: Array<{ type: string; [key: string]: unknown }> = [];\n for (const inner of b.content as Array<Record<string, unknown>>) {\n if (inner.type === \"text\") {\n parts.push({ type: \"text\", text: inner.text as string });\n } else if (inner.type === \"image\") {\n parts.push({\n type: \"image_url\",\n image_url: { url: `data:${inner.mimeType};base64,${inner.data}` },\n });\n }\n }\n content = parts;\n } else {\n content = \"\";\n }\n messages.push({\n role: \"tool\",\n content,\n tool_call_id: b.tool_use_id as string,\n });\n }\n }\n }\n\n return messages;\n}\n\n// ========================================================================\n// Text-flat format (Ollama, HF Transformers)\n// ========================================================================\n\nexport interface TextFlatMessage {\n role: string;\n content: string;\n}\n\n/**\n * Converts ToolCallingTaskInput to a simplified text-only message format.\n * Used by providers that don't natively support structured multi-turn\n * tool calling (Ollama, HuggingFace Transformers).\n *\n * NOTE: This format discards tool_use blocks from assistant messages.\n * The LLM will not see what tools it previously called. Multi-turn tool\n * calling will have degraded quality on these providers.\n */\nexport function toTextFlatMessages(input: ToolCallingTaskInput): TextFlatMessage[] {\n const messages: TextFlatMessage[] = [];\n\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt });\n }\n\n const inputMessages = getInputMessages(input);\n if (!inputMessages) {\n let promptContent: string;\n if (!Array.isArray(input.prompt)) {\n promptContent = input.prompt;\n } else {\n // Extract text content only; media blocks are dropped in text-flat format\n promptContent = input.prompt\n .map((item) => {\n if (typeof item === \"string\") return item;\n const b = item as Record<string, unknown>;\n return b.type === \"text\" ? (b.text as string) : \"\";\n })\n .filter((s) => s !== \"\")\n .join(\"\\n\");\n }\n messages.push({ role: \"user\", content: promptContent });\n return messages;\n }\n\n for (const msg of inputMessages) {\n if (msg.role === \"user\") {\n let content = \"\";\n if (typeof msg.content === \"string\") {\n content = msg.content;\n } else if (\n Array.isArray(msg.content) &&\n msg.content.length > 0 &&\n typeof (msg.content[0] as Record<string, unknown>)?.type === \"string\"\n ) {\n // Extract only text blocks; media blocks are dropped in text-flat format\n content = (msg.content as Array<Record<string, unknown>>)\n .filter((b) => b.type === \"text\")\n .map((b) => b.text as string)\n .join(\"\");\n } else if (msg.content != null) {\n try {\n content = JSON.stringify(msg.content);\n } catch {\n content = String(msg.content);\n }\n }\n messages.push({ role: \"user\", content });\n } else if (msg.role === \"assistant\") {\n if (typeof msg.content === \"string\") {\n if (msg.content) {\n messages.push({ role: \"assistant\", content: msg.content });\n }\n } else if (Array.isArray(msg.content)) {\n const text = msg.content\n .filter((b: Record<string, unknown>) => b.type === \"text\")\n .map((b: Record<string, unknown>) => b.text as string)\n .join(\"\");\n if (text) {\n messages.push({ role: \"assistant\", content: text });\n }\n }\n } else if (msg.role === \"tool\" && Array.isArray(msg.content)) {\n for (const block of msg.content) {\n const b = block as Record<string, unknown>;\n let content: string;\n if (typeof b.content === \"string\") {\n content = b.content;\n } else if (Array.isArray(b.content)) {\n // Extract only text blocks from multi-part tool results\n content = (b.content as Array<Record<string, unknown>>)\n .filter((inner) => inner.type === \"text\")\n .map((inner) => inner.text as string)\n .join(\"\");\n } else {\n content = \"\";\n }\n messages.push({ role: \"tool\", content });\n }\n }\n }\n\n return messages;\n}\n"
69
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Shared message conversion utilities for converting provider-agnostic\n * ChatMessage arrays to provider-specific formats.\n *\n * These are pure functions safe for both main-thread and worker contexts.\n * Providers with unique requirements (Anthropic, Gemini, LlamaCpp)\n * maintain their own conversion logic.\n */\n\nimport type { ChatMessage, ContentBlock } from \"./ChatMessage\";\nimport type { ToolCallingTaskInput } from \"./ToolCallingTask\";\n\n// ========================================================================\n// Internal helpers\n// ========================================================================\n\n/**\n * Extract the messages array from a ToolCallingTaskInput.\n * Returns undefined if no messages are present.\n */\nfunction getInputMessages(input: ToolCallingTaskInput): ReadonlyArray<ChatMessage> | undefined {\n const messages = input.messages;\n if (!messages || messages.length === 0) return undefined;\n return messages;\n}\n\n// ========================================================================\n// OpenAI-compatible format (OpenAI, HF Inference)\n// ========================================================================\n\nexport interface OpenAICompatMessage {\n role: string;\n content: string | null | Array<{ type: string; [key: string]: unknown }>;\n tool_calls?: Array<{\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n }>;\n tool_call_id?: string;\n}\n\n/**\n * Converts ToolCallingTaskInput to OpenAI-compatible message format.\n * Used by OpenAI and HuggingFace Inference providers.\n *\n * Multi-turn capable: preserves full tool call metadata across turns.\n */\nexport function toOpenAIMessages(input: ToolCallingTaskInput): OpenAICompatMessage[] {\n const messages: OpenAICompatMessage[] = [];\n\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt });\n }\n\n const inputMessages = getInputMessages(input);\n if (!inputMessages) {\n if (!Array.isArray(input.prompt)) {\n messages.push({ role: \"user\", content: input.prompt });\n } else if (input.prompt.every((item) => typeof item === \"string\")) {\n messages.push({ role: \"user\", content: (input.prompt as string[]).join(\"\\n\") });\n } else {\n const parts: Array<{ type: string; [key: string]: unknown }> = [];\n for (const item of input.prompt) {\n if (typeof item === \"string\") {\n parts.push({ type: \"text\", text: item });\n } else {\n const b = item as Record<string, unknown>;\n if (b.type === \"text\") {\n parts.push({ type: \"text\", text: b.text as string });\n } else if (b.type === \"image\") {\n parts.push({\n type: \"image_url\",\n image_url: { url: `data:${b.mimeType};base64,${b.data}` },\n });\n } else if (b.type === \"audio\") {\n const format = (b.mimeType as string).replace(/^audio\\//, \"\");\n parts.push({\n type: \"input_audio\",\n input_audio: { data: b.data as string, format },\n });\n }\n }\n }\n messages.push({ role: \"user\", content: parts });\n }\n return messages;\n }\n\n for (const msg of inputMessages) {\n if (msg.role === \"user\") {\n const parts: Array<{ type: string; [key: string]: unknown }> = [];\n for (const block of msg.content) {\n if (block.type === \"text\") {\n parts.push({ type: \"text\", text: block.text });\n } else if (block.type === \"image\") {\n parts.push({\n type: \"image_url\",\n image_url: { url: `data:${block.mimeType};base64,${block.data}` },\n });\n }\n // tool_use / tool_result not valid in a user message — skip\n }\n messages.push({ role: \"user\", content: parts });\n } else if (msg.role === \"assistant\") {\n const textParts = msg.content\n .filter((b): b is Extract<ContentBlock, { type: \"text\" }> => b.type === \"text\")\n .map((b) => b.text)\n .join(\"\");\n const toolCalls = msg.content\n .filter((b): b is Extract<ContentBlock, { type: \"tool_use\" }> => b.type === \"tool_use\")\n .map((b) => ({\n id: b.id,\n type: \"function\" as const,\n function: {\n name: b.name,\n arguments: JSON.stringify(b.input),\n },\n }));\n const entry: OpenAICompatMessage = {\n role: \"assistant\",\n content: textParts.length > 0 ? textParts : null,\n };\n if (toolCalls.length > 0) {\n entry.tool_calls = toolCalls;\n }\n messages.push(entry);\n } else if (msg.role === \"tool\") {\n for (const block of msg.content) {\n if (block.type !== \"tool_result\") continue;\n let content: string | Array<{ type: string; [key: string]: unknown }>;\n if (block.content.length === 1 && block.content[0].type === \"text\") {\n content = block.content[0].text;\n } else {\n const parts: Array<{ type: string; [key: string]: unknown }> = [];\n for (const inner of block.content) {\n if (inner.type === \"text\") {\n parts.push({ type: \"text\", text: inner.text });\n } else if (inner.type === \"image\") {\n parts.push({\n type: \"image_url\",\n image_url: { url: `data:${inner.mimeType};base64,${inner.data}` },\n });\n }\n }\n content = parts;\n }\n messages.push({ role: \"tool\", content, tool_call_id: block.tool_use_id });\n }\n }\n }\n\n return messages;\n}\n\n// ========================================================================\n// Text-flat format (Ollama, HF Transformers)\n// ========================================================================\n\nexport interface TextFlatMessage {\n role: string;\n content: string;\n}\n\n/**\n * Converts ToolCallingTaskInput to a simplified text-only message format.\n * Used by providers that don't natively support structured multi-turn\n * tool calling (Ollama, HuggingFace Transformers).\n *\n * NOTE: This format discards tool_use blocks from assistant messages.\n * The LLM will not see what tools it previously called. Multi-turn tool\n * calling will have degraded quality on these providers.\n */\nexport function toTextFlatMessages(input: ToolCallingTaskInput): TextFlatMessage[] {\n const messages: TextFlatMessage[] = [];\n\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt });\n }\n\n const inputMessages = getInputMessages(input);\n if (!inputMessages) {\n let promptContent: string;\n if (!Array.isArray(input.prompt)) {\n promptContent = input.prompt;\n } else {\n // Extract text content only; media blocks are dropped in text-flat format\n promptContent = input.prompt\n .map((item) => {\n if (typeof item === \"string\") return item;\n const b = item as Record<string, unknown>;\n return b.type === \"text\" ? (b.text as string) : \"\";\n })\n .filter((s) => s !== \"\")\n .join(\"\\n\");\n }\n messages.push({ role: \"user\", content: promptContent });\n return messages;\n }\n\n for (const msg of inputMessages) {\n if (msg.role === \"user\") {\n // Extract only text blocks; media blocks are dropped in text-flat format\n const content = msg.content\n .filter((b): b is Extract<ContentBlock, { type: \"text\" }> => b.type === \"text\")\n .map((b) => b.text)\n .join(\"\");\n messages.push({ role: \"user\", content });\n } else if (msg.role === \"assistant\") {\n const text = msg.content\n .filter((b): b is Extract<ContentBlock, { type: \"text\" }> => b.type === \"text\")\n .map((b) => b.text)\n .join(\"\");\n if (text) {\n messages.push({ role: \"assistant\", content: text });\n }\n } else if (msg.role === \"tool\") {\n for (const block of msg.content) {\n if (block.type !== \"tool_result\") continue;\n // Extract only text blocks from multi-part tool results\n const content = block.content\n .filter(\n (inner): inner is Extract<ContentBlock, { type: \"text\" }> => inner.type === \"text\"\n )\n .map((inner) => inner.text)\n .join(\"\");\n messages.push({ role: \"tool\", content });\n }\n }\n }\n\n return messages;\n}\n"
68
70
  ],
69
- "mappings": "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",
70
- "debugId": "F0E9DA50FF60D85564756E2164756E21",
71
+ "mappings": "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",
72
+ "debugId": "4A4F2C3AAA2FA8C064756E2164756E21",
71
73
  "names": []
72
74
  }