@workglow/ai 0.0.120 → 0.0.122
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -27
- package/dist/browser.js +234 -124
- package/dist/browser.js.map +18 -15
- package/dist/bun.js +234 -124
- package/dist/bun.js.map +18 -15
- package/dist/common.d.ts +2 -0
- package/dist/common.d.ts.map +1 -1
- package/dist/job/AiJob.d.ts.map +1 -1
- package/dist/model/InMemoryModelRepository.d.ts.map +1 -1
- package/dist/model/ModelRepository.d.ts +10 -10
- package/dist/model/ModelRepository.d.ts.map +1 -1
- package/dist/model/ModelSchema.d.ts +1 -1
- package/dist/model/ModelSchema.d.ts.map +1 -1
- package/dist/node.js +234 -124
- package/dist/node.js.map +18 -15
- package/dist/provider/AiProvider.d.ts +33 -30
- package/dist/provider/AiProvider.d.ts.map +1 -1
- package/dist/provider/AiProviderRegistry.d.ts +4 -4
- package/dist/provider/AiProviderRegistry.d.ts.map +1 -1
- package/dist/provider/QueuedAiProvider.d.ts +18 -0
- package/dist/provider/QueuedAiProvider.d.ts.map +1 -0
- package/dist/task/AgentTask.d.ts +2 -2
- package/dist/task/AgentTask.d.ts.map +1 -1
- package/dist/task/AgentTypes.d.ts +1 -1
- package/dist/task/AgentTypes.d.ts.map +1 -1
- package/dist/task/AgentUtils.d.ts +1 -1
- package/dist/task/AgentUtils.d.ts.map +1 -1
- package/dist/task/BackgroundRemovalTask.d.ts +31 -1
- package/dist/task/BackgroundRemovalTask.d.ts.map +1 -1
- package/dist/task/ChunkRetrievalTask.d.ts +6 -6
- package/dist/task/ChunkRetrievalTask.d.ts.map +1 -1
- package/dist/task/ChunkToVectorTask.d.ts +25 -3
- package/dist/task/ChunkToVectorTask.d.ts.map +1 -1
- package/dist/task/ChunkVectorHybridSearchTask.d.ts +22 -1
- package/dist/task/ChunkVectorHybridSearchTask.d.ts.map +1 -1
- package/dist/task/ChunkVectorSearchTask.d.ts +12 -4
- package/dist/task/ChunkVectorSearchTask.d.ts.map +1 -1
- package/dist/task/ChunkVectorUpsertTask.d.ts +11 -2
- package/dist/task/ChunkVectorUpsertTask.d.ts.map +1 -1
- package/dist/task/ContextBuilderTask.d.ts +29 -3
- package/dist/task/ContextBuilderTask.d.ts.map +1 -1
- package/dist/task/CountTokensTask.d.ts +18 -1
- package/dist/task/CountTokensTask.d.ts.map +1 -1
- package/dist/task/DocumentEnricherTask.d.ts +38 -17
- package/dist/task/DocumentEnricherTask.d.ts.map +1 -1
- package/dist/task/DownloadModelTask.d.ts +24 -3
- package/dist/task/DownloadModelTask.d.ts.map +1 -1
- package/dist/task/FaceDetectorTask.d.ts +38 -6
- package/dist/task/FaceDetectorTask.d.ts.map +1 -1
- package/dist/task/FaceLandmarkerTask.d.ts +43 -7
- package/dist/task/FaceLandmarkerTask.d.ts.map +1 -1
- package/dist/task/GestureRecognizerTask.d.ts +48 -14
- package/dist/task/GestureRecognizerTask.d.ts.map +1 -1
- package/dist/task/HandLandmarkerTask.d.ts +45 -11
- package/dist/task/HandLandmarkerTask.d.ts.map +1 -1
- package/dist/task/HierarchicalChunkerTask.d.ts +32 -21
- package/dist/task/HierarchicalChunkerTask.d.ts.map +1 -1
- package/dist/task/HierarchyJoinTask.d.ts +35 -10
- package/dist/task/HierarchyJoinTask.d.ts.map +1 -1
- package/dist/task/ImageClassificationTask.d.ts +36 -4
- package/dist/task/ImageClassificationTask.d.ts.map +1 -1
- package/dist/task/ImageEmbeddingTask.d.ts +31 -1
- package/dist/task/ImageEmbeddingTask.d.ts.map +1 -1
- package/dist/task/ImageSegmentationTask.d.ts +36 -4
- package/dist/task/ImageSegmentationTask.d.ts.map +1 -1
- package/dist/task/ImageToTextTask.d.ts +32 -1
- package/dist/task/ImageToTextTask.d.ts.map +1 -1
- package/dist/task/ModelInfoTask.d.ts +35 -9
- package/dist/task/ModelInfoTask.d.ts.map +1 -1
- package/dist/task/ModelSearchTask.d.ts +66 -0
- package/dist/task/ModelSearchTask.d.ts.map +1 -0
- package/dist/task/ObjectDetectionTask.d.ts +38 -6
- package/dist/task/ObjectDetectionTask.d.ts.map +1 -1
- package/dist/task/PoseLandmarkerTask.d.ts +52 -17
- package/dist/task/PoseLandmarkerTask.d.ts.map +1 -1
- package/dist/task/QueryExpanderTask.d.ts +8 -3
- package/dist/task/QueryExpanderTask.d.ts.map +1 -1
- package/dist/task/RerankerTask.d.ts +26 -2
- package/dist/task/RerankerTask.d.ts.map +1 -1
- package/dist/task/StructuralParserTask.d.ts +7 -1
- package/dist/task/StructuralParserTask.d.ts.map +1 -1
- package/dist/task/StructuredGenerationTask.d.ts +23 -1
- package/dist/task/StructuredGenerationTask.d.ts.map +1 -1
- package/dist/task/TextChunkerTask.d.ts +10 -5
- package/dist/task/TextChunkerTask.d.ts.map +1 -1
- package/dist/task/TextClassificationTask.d.ts +23 -4
- package/dist/task/TextClassificationTask.d.ts.map +1 -1
- package/dist/task/TextEmbeddingTask.d.ts +19 -2
- package/dist/task/TextEmbeddingTask.d.ts.map +1 -1
- package/dist/task/TextFillMaskTask.d.ts +22 -5
- package/dist/task/TextFillMaskTask.d.ts.map +1 -1
- package/dist/task/TextGenerationTask.d.ts +23 -1
- package/dist/task/TextGenerationTask.d.ts.map +1 -1
- package/dist/task/TextLanguageDetectionTask.d.ts +22 -4
- package/dist/task/TextLanguageDetectionTask.d.ts.map +1 -1
- package/dist/task/TextNamedEntityRecognitionTask.d.ts +23 -5
- package/dist/task/TextNamedEntityRecognitionTask.d.ts.map +1 -1
- package/dist/task/TextQuestionAnswerTask.d.ts +19 -1
- package/dist/task/TextQuestionAnswerTask.d.ts.map +1 -1
- package/dist/task/TextRewriterTask.d.ts +19 -1
- package/dist/task/TextRewriterTask.d.ts.map +1 -1
- package/dist/task/TextSummaryTask.d.ts +18 -1
- package/dist/task/TextSummaryTask.d.ts.map +1 -1
- package/dist/task/TextTranslationTask.d.ts +20 -1
- package/dist/task/TextTranslationTask.d.ts.map +1 -1
- package/dist/task/ToolCallingTask.d.ts +9 -66
- package/dist/task/ToolCallingTask.d.ts.map +1 -1
- package/dist/task/ToolCallingUtils.d.ts +65 -0
- package/dist/task/ToolCallingUtils.d.ts.map +1 -0
- package/dist/task/TopicSegmenterTask.d.ts +10 -4
- package/dist/task/TopicSegmenterTask.d.ts.map +1 -1
- package/dist/task/UnloadModelTask.d.ts +18 -2
- package/dist/task/UnloadModelTask.d.ts.map +1 -1
- package/dist/task/VectorQuantizeTask.d.ts +11 -7
- package/dist/task/VectorQuantizeTask.d.ts.map +1 -1
- package/dist/task/VectorSimilarityTask.d.ts +8 -3
- package/dist/task/VectorSimilarityTask.d.ts.map +1 -1
- package/dist/task/base/AiTask.d.ts.map +1 -1
- package/dist/task/base/AiTaskSchemas.d.ts.map +1 -1
- package/dist/task/base/AiVisionTask.d.ts.map +1 -1
- package/dist/task/base/StreamingAiTask.d.ts.map +1 -1
- package/dist/task/index.d.ts +4 -1
- package/dist/task/index.d.ts.map +1 -1
- package/dist/worker.d.ts +21 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +460 -0
- package/dist/worker.js.map +14 -0
- package/package.json +28 -21
package/dist/browser.js.map
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/job/AiJob.ts", "../src/provider/AiProviderRegistry.ts", "../src/model/InMemoryModelRepository.ts", "../src/model/ModelRepository.ts", "../src/model/ModelSchema.ts", "../src/model/ModelRegistry.ts", "../src/provider/AiProvider.ts", "../src/queue/createDefaultQueue.ts", "../src/task/index.ts", "../src/task/AgentTask.ts", "../src/task/AgentTypes.ts", "../src/task/AgentUtils.ts", "../src/task/ToolCallingTask.ts", "../src/task/base/AiTaskSchemas.ts", "../src/task/base/StreamingAiTask.ts", "../src/task/base/AiTask.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/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/ImageClassificationTask.ts", "../src/task/ImageEmbeddingTask.ts", "../src/task/ImageSegmentationTask.ts", "../src/task/ImageToTextTask.ts", "../src/task/ModelInfoTask.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/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/task/ToolCallingUtils.ts", "../src/model/InMemoryModelRepository.ts", "../src/model/ModelRepository.ts", "../src/model/ModelSchema.ts", "../src/model/ModelRegistry.ts", "../src/provider/AiProvider.ts", "../src/queue/createDefaultQueue.ts", "../src/provider/QueuedAiProvider.ts", "../src/task/index.ts", "../src/task/AgentTask.ts", "../src/task/AgentTypes.ts", "../src/task/AgentUtils.ts", "../src/task/ToolCallingTask.ts", "../src/task/base/AiTaskSchemas.ts", "../src/task/base/StreamingAiTask.ts", "../src/task/base/AiTask.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/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/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/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} from \"@workglow/job-queue\";\nimport { TaskInput, TaskOutput, type StreamEvent } from \"@workglow/task-graph\";\nimport type { JsonSchema } from \"@workglow/util\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\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}\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 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 if (!fn) {\n throw new PermanentJobError(\n `No run function found for task type ${input.taskType} and model provider ${input.aiProvider}`\n );\n }\n const model = input.taskInput.model;\n if (context.signal?.aborted) {\n throw new AbortSignalJobError(\"Job aborted\");\n }\n return await fn(\n input.taskInput,\n model,\n context.updateProgress,\n context.signal,\n input.outputSchema\n );\n };\n const runFnPromise = runFn();\n\n return await Promise.race([runFnPromise, abortPromise]);\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 */\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 yield* streamFn(input.taskInput, model, context.signal, input.outputSchema);\n }\n}\n",
|
|
6
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TaskInput, TaskOutput, type StreamEvent } from \"@workglow/task-graph\";\nimport { globalServiceRegistry, WORKER_MANAGER, type JsonSchema } from \"@workglow/util\";\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) => 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) => 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\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 * 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 * 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 ) => {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n const result = await workerManager.callWorkerFunction<Output>(\n modelProvider,\n taskType,\n [input, model, outputSchema],\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 ) {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n yield* workerManager.callWorkerStreamFunction<StreamEvent<Output>>(\n modelProvider,\n taskType,\n [input, model, outputSchema],\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 throw new Error(\n `No run function found for task type ${taskType} and model provider ${modelProvider}`\n );\n }\n return runFn;\n }\n}\n\n// Singleton instance management for the ProviderRegistry\nlet providerRegistry: AiProviderRegistry;\nexport function getAiProviderRegistry() {\n if (!providerRegistry) providerRegistry = new AiProviderRegistry();\n return providerRegistry;\n}\nexport function setAiProviderRegistry(pr: AiProviderRegistry) {\n providerRegistry = pr;\n}\n",
|
|
6
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { TaskInput, TaskOutput, type StreamEvent } from \"@workglow/task-graph\";\nimport { globalServiceRegistry, WORKER_MANAGER, type JsonSchema } from \"@workglow/util/worker\";\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) => 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) => 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\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 * 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 * 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 ) => {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n const result = await workerManager.callWorkerFunction<Output>(\n modelProvider,\n taskType,\n [input, model, outputSchema],\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 ) {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n yield* workerManager.callWorkerStreamFunction<StreamEvent<Output>>(\n modelProvider,\n taskType,\n [input, model, outputSchema],\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 throw new Error(\n `No run function found for task type ${taskType} and model provider ${modelProvider}`\n );\n }\n return runFn;\n }\n}\n\n// Singleton instance management for the ProviderRegistry\nlet providerRegistry: AiProviderRegistry;\nexport function getAiProviderRegistry() {\n if (!providerRegistry) providerRegistry = new AiProviderRegistry();\n return providerRegistry;\n}\nexport function setAiProviderRegistry(pr: AiProviderRegistry) {\n providerRegistry = pr;\n}\n",
|
|
7
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLogger, 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 /** 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",
|
|
7
8
|
"/**\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",
|
|
8
9
|
"/**\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\";\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 /**\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 * @param model - The model instance to add\n */\n async addModel(model: ModelRecord) {\n await this.modelTabularRepository.put(model);\n this.events.emit(\"model_added\", 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",
|
|
9
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DataPortSchemaObject, FromSchema } from \"@workglow/util\";\n\n/**\n * A model configuration suitable for task/job inputs.\n *\n * @remarks\n * This is intentionally less strict than {@link ModelRecord} so jobs can carry only the\n * provider configuration required to execute, without requiring access to a model repository.\n */\nexport const ModelConfigSchema = {\n type: \"object\",\n properties: {\n model_id: { type: \"string\" },\n tasks: { type: \"array\", items: { type: \"string\" }, \"x-ui-editor\": \"multiselect\" },\n title: { type: \"string\" },\n description: { type: \"string\", \"x-ui-editor\": \"textarea\" },\n provider: { type: \"string\" },\n provider_config: {\n type: \"object\",\n properties: {\n credential_key: { type: \"string\", format: \"credential\", \"x-ui-hidden\": true },\n },\n additionalProperties: true,\n default: {},\n },\n metadata: { type: \"object\", default: {}, \"x-ui-hidden\": true },\n },\n required: [\"provider\", \"provider_config\"],\n format: \"model\",\n additionalProperties: true,\n} as const satisfies DataPortSchemaObject;\n\n/**\n * A fully-specified model record suitable for persistence in a repository.\n */\nexport const ModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n },\n required: [\n \"model_id\",\n \"tasks\",\n \"provider\",\n \"title\",\n \"description\",\n \"provider_config\",\n \"metadata\",\n ],\n format: \"model\",\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type ModelConfig = FromSchema<typeof ModelConfigSchema>;\nexport type ModelRecord = FromSchema<typeof ModelRecordSchema>;\nexport const ModelPrimaryKeyNames = [\"model_id\"] as const;\n",
|
|
10
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DataPortSchemaObject, FromSchema } from \"@workglow/util/worker\";\n\n/**\n * A model configuration suitable for task/job inputs.\n *\n * @remarks\n * This is intentionally less strict than {@link ModelRecord} so jobs can carry only the\n * provider configuration required to execute, without requiring access to a model repository.\n */\nexport const ModelConfigSchema = {\n type: \"object\",\n properties: {\n model_id: { type: \"string\" },\n tasks: { type: \"array\", items: { type: \"string\" }, \"x-ui-editor\": \"multiselect\" },\n title: { type: \"string\" },\n description: { type: \"string\", \"x-ui-editor\": \"textarea\" },\n provider: { type: \"string\" },\n provider_config: {\n type: \"object\",\n properties: {\n credential_key: { type: \"string\", format: \"credential\", \"x-ui-hidden\": true },\n },\n additionalProperties: true,\n default: {},\n },\n metadata: { type: \"object\", default: {}, \"x-ui-hidden\": true },\n },\n required: [\"provider\", \"provider_config\"],\n format: \"model\",\n additionalProperties: true,\n} as const satisfies DataPortSchemaObject;\n\n/**\n * A fully-specified model record suitable for persistence in a repository.\n */\nexport const ModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n },\n required: [\n \"model_id\",\n \"tasks\",\n \"provider\",\n \"title\",\n \"description\",\n \"provider_config\",\n \"metadata\",\n ],\n format: \"model\",\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type ModelConfig = FromSchema<typeof ModelConfigSchema>;\nexport type ModelRecord = FromSchema<typeof ModelRecordSchema>;\nexport const ModelPrimaryKeyNames = [\"model_id\"] as const;\n",
|
|
10
11
|
"/**\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 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\nif (!globalServiceRegistry.has(MODEL_REPOSITORY)) {\n globalServiceRegistry.register(\n MODEL_REPOSITORY,\n (): ModelRepository => new InMemoryModelRepository(),\n true\n );\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",
|
|
11
|
-
"/**\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 { globalServiceRegistry, WORKER_MANAGER, type WorkerServer } from \"@workglow/util\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { createDefaultQueue } from \"../queue/createDefaultQueue\";\nimport {\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n getAiProviderRegistry,\n} from \"./AiProviderRegistry\";\n\n/**\n * Execution mode for an AI provider.\n * - \"inline\": run functions execute directly in the current thread\n * - \"worker\": run functions are proxied to a Web Worker via WorkerManager\n */\nexport type AiProviderMode = \"inline\" | \"worker\";\n\n/**\n * Options for registering an AI provider.\n */\nexport interface AiProviderRegisterOptions {\n /** Execution mode: \"inline\" (same thread) or \"worker\" (Web Worker) */\n mode: AiProviderMode;\n /** The Web Worker instance. Required when mode is \"worker\". */\n worker?: Worker;\n /** Job queue configuration */\n queue?: {\n /** Maximum number of concurrent jobs. Defaults to 1. */\n concurrency?: number;\n /** Set to false to skip automatic queue creation. Defaults to true. */\n autoCreate?: boolean;\n };\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 mode)\n * - Creating a default job queue\n * - Registering functions on a WorkerServer (for worker-side code)\n * - Lifecycle management (initialize / dispose)\n *\n * @example\n * ```typescript\n * // Worker mode (main thread) -- lightweight, no heavy imports:\n * await new MyProvider().register({\n * mode: \"worker\",\n * worker: new Worker(new URL(\"./worker.ts\", import.meta.url), { type: \"module\" }),\n * });\n *\n * // Inline mode -- caller provides the tasks (imports heavy library):\n * import { MY_TASKS } from \"./MyJobRunFns\";\n * await new MyProvider(MY_TASKS).register({ mode: \"inline\" });\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 /** 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 * In \"inline\" mode, registers direct run functions with the AiProviderRegistry.\n * Requires `tasks` to have been provided via the constructor.\n *\n * In \"worker\" mode, registers the worker with WorkerManager and creates proxy\n * functions that delegate to the worker. Does NOT require `tasks`.\n *\n * Both modes create a job queue unless `queue.autoCreate` is set to false.\n *\n * @param options - Registration options (mode, worker, queue config)\n */\n async register(options: AiProviderRegisterOptions = { mode: \"inline\" }): Promise<void> {\n await this.onInitialize(options);\n\n // Validate before any registration so we don't leave the registry in a partial state\n if (options.mode === \"worker\") {\n if (!options.worker) {\n throw new Error(\n `AiProvider \"${this.name}\": worker is required when mode is \"worker\". ` +\n `Pass a Web Worker instance, e.g. register({ mode: \"worker\", worker: new Worker(...) }).`\n );\n }\n } else {\n if (!this.tasks) {\n throw new Error(\n `AiProvider \"${this.name}\": tasks must be provided via the constructor for inline mode. ` +\n `Pass the tasks record when constructing the provider, e.g. new MyProvider(MY_TASKS).`\n );\n }\n }\n\n const registry = getAiProviderRegistry();\n\n if (options.mode === \"worker\" && options.worker) {\n const workerManager = globalServiceRegistry.get(WORKER_MANAGER);\n workerManager.registerWorker(this.name, options.worker);\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 if (options.queue?.autoCreate !== false) {\n await this.createQueue(options.queue?.concurrency ?? 1);\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: AiProviderRegisterOptions): 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 and register a default job queue for this provider.\n * Uses InMemoryQueueStorage with a ConcurrencyLimiter.\n */\n protected async createQueue(concurrency: number): Promise<void> {\n await createDefaultQueue(this.name, concurrency);\n }\n}\n",
|
|
12
|
+
"/**\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 {\n globalServiceRegistry,\n WORKER_MANAGER,\n type WorkerServerBase as WorkerServer,\n} from \"@workglow/util/worker\";\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport {\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n getAiProviderRegistry,\n} from \"./AiProviderRegistry\";\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 /** Job queue configuration */\n queue?: {\n /** Maximum number of concurrent jobs. Defaults to 1. */\n concurrency?: number;\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 /** 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 workerManager.registerWorker(this.name, options.worker);\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 await this.afterRegister(options);\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 * 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",
|
|
12
13
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ConcurrencyLimiter, JobQueueClient, JobQueueServer } from \"@workglow/job-queue\";\nimport { InMemoryQueueStorage } from \"@workglow/storage\";\nimport { TaskInput, TaskOutput, getTaskQueueRegistry } from \"@workglow/task-graph\";\n\nimport type { AiJobInput } from \"../job/AiJob\";\nimport { AiJob } from \"../job/AiJob\";\n\n/**\n * Create and register a default job queue for an AI provider.\n * Uses InMemoryQueueStorage with a ConcurrencyLimiter.\n *\n * Extracted to a separate module to avoid circular dependencies between\n * AiProvider, AiJob, and the storage/job-queue/task-graph packages.\n *\n * @param providerName - Unique provider identifier (used as queue name)\n * @param concurrency - Maximum number of concurrent jobs\n */\nexport async function createDefaultQueue(providerName: string, concurrency: number): Promise<void> {\n const storage = new InMemoryQueueStorage<AiJobInput<TaskInput>, TaskOutput>(providerName);\n await storage.setupDatabase();\n\n const server = new JobQueueServer<AiJobInput<TaskInput>, TaskOutput>(AiJob, {\n storage,\n queueName: providerName,\n limiter: new ConcurrencyLimiter(concurrency),\n });\n\n const client = new JobQueueClient<AiJobInput<TaskInput>, TaskOutput>({\n storage,\n queueName: providerName,\n });\n\n client.attach(server);\n\n getTaskQueueRegistry().registerQueue({ server, client, storage });\n await server.start();\n}\n",
|
|
13
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {
|
|
14
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n Task,\n Workflow,\n type IExecuteContext,\n type StreamEvent,\n type TaskConfig,\n} from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util\";\nimport type { DataPortSchema } from \"@workglow/util\";\nimport { assistantMessage, toolMessage, toolSourceDefinitions, userMessage } from \"./AgentTypes\";\nimport type { AgentHooks, ChatMessage, ToolSource, UserContentBlock } from \"./AgentTypes\";\nimport { buildToolSources, executeToolCalls, hasToolCalls } from \"./AgentUtils\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { ToolCallingTask, ToolDefinitionSchema } from \"./ToolCallingTask\";\nimport type { ToolCallingTaskInput, ToolCalls, ToolDefinition } from \"./ToolCallingTask\";\n\n// ========================================================================\n// Config\n// ========================================================================\n\nexport interface AgentTaskConfig extends TaskConfig {\n /** Lifecycle hooks for intercepting the agent loop. */\n readonly hooks?: AgentHooks;\n /** Max concurrent tool executions per iteration (default: 5). */\n readonly maxConcurrency?: number;\n}\n\n// ========================================================================\n// Input / Output types\n// ========================================================================\n\n/**\n * Input for the AgentTask. The JSON Schema ({@link AgentInputSchema}) is\n * used for runtime validation and UI; this interface is the TypeScript\n * source of truth.\n *\n * Tools follow the same resolution pattern as `model`: each entry is\n * either a **string** (task type name resolved from the TaskRegistry) or\n * a full **{@link ToolDefinition}** object. Configurable tasks (e.g.\n * `McpToolCallTask`, `JavaScriptTask`) can be pre-configured via the\n * `config` field on the definition — the LLM never sees this config.\n */\nexport interface AgentTaskInput {\n readonly [key: string]: unknown;\n readonly model: string;\n readonly prompt: string | ReadonlyArray<UserContentBlock>;\n readonly systemPrompt?: string;\n /**\n * Tools available to the agent. Each entry is either:\n * - A **string** — resolved from the TaskRegistry by name (like `model`).\n * - A **{@link ToolDefinition}** — inline definition with optional `config`\n * for configurable tasks and optional `execute` for custom function tools.\n */\n readonly tools?: ReadonlyArray<string | ToolDefinition>;\n readonly maxIterations?: number;\n readonly maxTokens?: number;\n readonly temperature?: number;\n /**\n * Name of a \"stop tool\". When the LLM calls this tool the agent loop\n * ends and the tool's input becomes the {@link AgentTaskOutput.structuredOutput}.\n * If no tool source with this name exists, a synthetic definition is\n * added automatically.\n */\n readonly stopTool?: string;\n /**\n * Maximum number of messages to keep in the conversation window sent\n * to the LLM. When exceeded, the oldest messages (after the initial\n * user message) are dropped. Helps prevent context-window overflow.\n */\n readonly maxContextMessages?: number;\n}\n\nexport interface AgentTaskOutput {\n readonly [key: string]: unknown;\n readonly text: string;\n readonly messages: ReadonlyArray<ChatMessage>;\n readonly iterations: number;\n readonly toolCallCount: number;\n /** Present when the agent terminated via a stop tool. */\n readonly structuredOutput?: Record<string, unknown>;\n}\n\n// ========================================================================\n// Schemas\n// ========================================================================\n\nconst modelSchema = TypeModel(\"model:ToolCallingTask\");\n\nexport const AgentInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n oneOf: [\n { type: \"string\" },\n {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"text\", \"image\", \"audio\"] },\n },\n required: [\"type\"],\n additionalProperties: true,\n },\n },\n ],\n title: \"Prompt\",\n description:\n \"The user prompt to start the agent loop. Can be a string or an array of content blocks (text, image, audio).\",\n },\n systemPrompt: {\n type: \"string\",\n title: \"System Prompt\",\n description: \"Optional system instructions for the agent\",\n },\n tools: {\n type: \"array\",\n format: \"tasks\",\n title: \"Tools\",\n description:\n \"Tools available to the agent. Each entry is a task type name (string, resolved from TaskRegistry) or a full ToolDefinition object with optional config for configurable tasks.\",\n items: {\n oneOf: [\n { type: \"string\", format: \"tasks\", description: \"Task type name\" },\n ToolDefinitionSchema,\n ],\n },\n },\n stopTool: {\n type: \"string\",\n title: \"Stop Tool\",\n description:\n \"Name of a tool that signals agent completion. When called, the loop ends and the tool input becomes structuredOutput.\",\n \"x-ui-group\": \"Configuration\",\n },\n maxIterations: {\n type: \"number\",\n title: \"Max Iterations\",\n description: \"Maximum number of agent loop iterations (default: 10)\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n maxContextMessages: {\n type: \"number\",\n title: \"Max Context Messages\",\n description:\n \"Maximum messages in conversation history. Older messages are trimmed to prevent context overflow.\",\n minimum: 3,\n \"x-ui-group\": \"Configuration\",\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"Maximum tokens per LLM call\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"Sampling temperature for LLM calls\",\n minimum: 0,\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 AgentOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The final text response from the agent\",\n \"x-stream\": \"append\",\n },\n messages: {\n type: \"array\",\n title: \"Messages\",\n description: \"Full conversation history including all tool calls and results\",\n items: {\n type: \"object\",\n additionalProperties: true,\n },\n },\n iterations: {\n type: \"number\",\n title: \"Iterations\",\n description: \"Number of LLM calls made during the agent loop\",\n },\n toolCallCount: {\n type: \"number\",\n title: \"Tool Call Count\",\n description: \"Total number of tool calls executed\",\n },\n structuredOutput: {\n type: \"object\",\n title: \"Structured Output\",\n description: \"Present when the agent terminated via a stop tool\",\n additionalProperties: true,\n },\n },\n required: [\"text\", \"messages\", \"iterations\", \"toolCallCount\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\n// ========================================================================\n// AgentTask — multi-turn agentic loop orchestrator\n// ========================================================================\n\nexport class AgentTask extends Task<AgentTaskInput, AgentTaskOutput, AgentTaskConfig> {\n public static type = \"AgentTask\";\n public static category = \"AI Agent\";\n public static title = \"Agent\";\n public static description =\n \"Multi-turn agentic loop that calls an LLM with tools, executes tool calls, and iterates until done\";\n public static cacheable = false;\n\n public static inputSchema() {\n return AgentInputSchema;\n }\n\n public static outputSchema() {\n return AgentOutputSchema;\n }\n\n // ====================================================================\n // Non-streaming execution — consumes the loop generator silently\n // ====================================================================\n\n async execute(input: AgentTaskInput, context: IExecuteContext): Promise<AgentTaskOutput> {\n let result: AgentTaskOutput | undefined;\n for await (const event of this.agentLoop(input, context)) {\n if (event.type === \"finish\") {\n result = event.data;\n }\n }\n if (!result) {\n throw new Error(\"AgentTask: loop ended without producing output\");\n }\n return result;\n }\n\n // ====================================================================\n // Streaming execution — yields text deltas and the finish event\n // ====================================================================\n\n async *executeStream(\n input: AgentTaskInput,\n context: IExecuteContext\n ): AsyncIterable<StreamEvent<AgentTaskOutput>> {\n yield* this.agentLoop(input, context);\n }\n\n // ====================================================================\n // Core agent loop — single implementation used by both modes\n // ====================================================================\n\n private async *agentLoop(\n input: AgentTaskInput,\n context: IExecuteContext\n ): AsyncGenerator<StreamEvent<AgentTaskOutput>> {\n const maxIterations = input.maxIterations ?? 10;\n const hooks = this.config.hooks;\n const maxConcurrency = this.config.maxConcurrency ?? 5;\n\n const toolSources = this.resolveToolSources(input, context);\n const toolDefs = this.resolveToolDefs(toolSources, input.stopTool);\n\n const messages: ChatMessage[] = [userMessage(input.prompt)];\n let totalToolCalls = 0;\n let finalText = \"\";\n let structuredOutput: Record<string, unknown> | undefined;\n\n for (let iteration = 0; iteration < maxIterations; iteration++) {\n if (context.signal.aborted) break;\n\n // onIteration hook\n if (hooks?.onIteration) {\n const action = await hooks.onIteration(iteration, messages, { totalToolCalls });\n if (action.action === \"stop\") break;\n }\n\n await context.updateProgress(\n Math.round((iteration / maxIterations) * 100),\n `Agent iteration ${iteration + 1}`\n );\n\n // Trim context window if needed\n const contextMessages = this.trimMessages(messages, input.maxContextMessages);\n\n // Call the LLM and stream its output\n const llmTask = context.own(new ToolCallingTask({}, {}));\n let iterationText = \"\";\n let toolCalls: ToolCalls = [];\n\n for await (const event of llmTask.executeStream(\n {\n model: input.model,\n prompt: input.prompt as ToolCallingTaskInput[\"prompt\"],\n systemPrompt: input.systemPrompt,\n tools: toolDefs as ToolCallingTaskInput[\"tools\"],\n messages: contextMessages as ToolCallingTaskInput[\"messages\"],\n maxTokens: input.maxTokens,\n temperature: input.temperature,\n },\n context\n )) {\n if (event.type === \"text-delta\") {\n yield { type: \"text-delta\", port: \"text\", textDelta: event.textDelta };\n iterationText += event.textDelta;\n } else if (event.type === \"finish\") {\n const data = event.data as Record<string, unknown> | undefined;\n iterationText = (data?.text as string) ?? iterationText;\n if (data?.toolCalls) {\n toolCalls = (data.toolCalls as ToolCalls) ?? [];\n }\n }\n }\n\n finalText = iterationText;\n messages.push(assistantMessage(iterationText, toolCalls));\n\n // Check for stop tool — if the LLM called the stop tool alongside\n // other tools, we intentionally skip executing the sibling calls and\n // end the loop immediately. The stop tool signals task completion.\n if (input.stopTool) {\n const stopCall = toolCalls.find((tc) => tc.name === input.stopTool);\n if (stopCall) {\n structuredOutput = stopCall.input;\n break;\n }\n }\n\n // If no tool calls, the agent is done\n if (!hasToolCalls(toolCalls)) {\n break;\n }\n\n // Execute tool calls with concurrency control and hooks\n const results = await executeToolCalls(\n toolCalls,\n toolSources,\n context,\n hooks,\n maxConcurrency\n );\n totalToolCalls += results.length;\n messages.push(toolMessage(results));\n }\n\n const output: AgentTaskOutput = {\n text: finalText,\n messages,\n iterations: messages.filter((m) => m.role === \"assistant\").length,\n toolCallCount: totalToolCalls,\n ...(structuredOutput !== undefined ? { structuredOutput } : {}),\n };\n\n yield { type: \"finish\", data: output };\n }\n\n // ====================================================================\n // Helpers\n // ====================================================================\n\n private resolveToolSources(input: AgentTaskInput, context: IExecuteContext): ToolSource[] {\n return buildToolSources(input.tools, context.registry);\n }\n\n /**\n * Build the tool definitions to send to the LLM.\n * If a stopTool is configured and no matching source exists, adds a\n * synthetic tool definition so the LLM can call it.\n */\n private resolveToolDefs(\n toolSources: ReadonlyArray<ToolSource>,\n stopTool: string | undefined\n ): ToolDefinition[] {\n const defs = toolSourceDefinitions(toolSources);\n\n if (stopTool && !defs.some((d) => d.name === stopTool)) {\n defs.push({\n name: stopTool,\n description:\n \"Call this tool when you have completed the task. Pass your final structured result as the input.\",\n inputSchema: { type: \"object\", additionalProperties: true },\n });\n }\n\n return defs;\n }\n\n /**\n * Trim messages to stay within maxContextMessages.\n * Keeps the first message (initial user prompt) and the most recent\n * messages. Trims at assistant/tool pair boundaries so that a\n * tool_use message is never separated from its tool_result message.\n */\n private trimMessages(\n messages: ReadonlyArray<ChatMessage>,\n maxContextMessages: number | undefined\n ): ReadonlyArray<ChatMessage> {\n if (!maxContextMessages || messages.length <= maxContextMessages) {\n return messages;\n }\n\n getLogger().debug(\n `AgentTask: Trimming context from ${messages.length} to ${maxContextMessages} messages`\n );\n\n // Walk backwards from the end to find the earliest message we can keep\n // while respecting the limit. Never split an assistant+tool pair: if\n // the cut point lands on a \"tool\" message, include the preceding\n // \"assistant\" message as well.\n const tail = messages.slice(1); // everything after the initial user prompt\n let startIdx = tail.length - (maxContextMessages - 1);\n if (startIdx < 0) startIdx = 0;\n\n // If the cut starts on a tool message, back up to include its assistant\n if (startIdx > 0 && startIdx < tail.length && tail[startIdx].role === \"tool\") {\n startIdx -= 1;\n }\n\n return [messages[0], ...tail.slice(startIdx)];\n }\n}\n\n// ========================================================================\n// Convenience function\n// ========================================================================\n\nexport const agent = (input: AgentTaskInput, config?: AgentTaskConfig) => {\n return new AgentTask({} as AgentTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n agent: CreateWorkflow<AgentTaskInput, AgentTaskOutput, AgentTaskConfig>;\n }\n}\n\nWorkflow.prototype.agent = CreateWorkflow(AgentTask);\n",
|
|
15
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DataPorts } from \"@workglow/task-graph\";\nimport { parseDataUri } from \"@workglow/util\";\nimport type { ToolCall, ToolCalls, ToolDefinition } from \"./ToolCallingTask\";\n\n// ========================================================================\n// Chat message types — provider-agnostic conversation history\n// ========================================================================\n\n/**\n * A text content block within a chat message.\n */\nexport interface TextContentBlock {\n readonly type: \"text\";\n readonly text: string;\n}\n\n/**\n * An image content block within a chat message.\n */\nexport interface ImageContentBlock {\n readonly type: \"image\";\n readonly mimeType: string; // e.g. \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"\n readonly data: string; // raw base64 (no data-uri prefix)\n}\n\n/**\n * An audio content block within a chat message.\n */\nexport interface AudioContentBlock {\n readonly type: \"audio\";\n readonly mimeType: string; // e.g. \"audio/wav\", \"audio/mp3\", \"audio/ogg\"\n readonly data: string; // raw base64\n}\n\n/**\n * A tool-use content block within an assistant message.\n * Represents the LLM requesting a tool invocation.\n */\nexport interface ToolUseContentBlock {\n readonly type: \"tool_use\";\n readonly id: string;\n readonly name: string;\n readonly input: Record<string, unknown>;\n}\n\n/**\n * A tool-result content block within a tool message.\n * Represents the result of executing a tool call.\n */\nexport interface ToolResultContentBlock {\n readonly type: \"tool_result\";\n readonly tool_use_id: string;\n readonly content: string | ReadonlyArray<ToolResultInnerBlock>;\n readonly is_error?: boolean;\n}\n\n/** Content blocks allowed in user messages */\nexport type UserContentBlock = TextContentBlock | ImageContentBlock | AudioContentBlock;\n\n/** Content blocks allowed inside tool result content */\nexport type ToolResultInnerBlock = TextContentBlock | ImageContentBlock | AudioContentBlock;\n\nexport type ContentBlock =\n | TextContentBlock\n | ImageContentBlock\n | AudioContentBlock\n | ToolUseContentBlock\n | ToolResultContentBlock;\n\n/**\n * Provider-agnostic chat message for multi-turn conversations.\n * Uses a discriminated union on `role` to enforce correct content types.\n */\nexport type ChatMessage =\n | { readonly role: \"user\"; readonly content: string | ReadonlyArray<UserContentBlock> }\n | {\n readonly role: \"assistant\";\n readonly content: ReadonlyArray<TextContentBlock | ToolUseContentBlock>;\n }\n | { readonly role: \"tool\"; readonly content: ReadonlyArray<ToolResultContentBlock> };\n\n// ========================================================================\n// Tool source types — how tools are discovered and dispatched\n// ========================================================================\n\n/**\n * A tool backed by a Task in the TaskRegistry. Instantiated and run via\n * `TaskRegistry.all.get(taskType)`. Optional `config` is passed to the\n * task constructor for configurable tasks (e.g. `McpToolCallTask`,\n * `JavaScriptTask`).\n */\nexport interface RegistryToolSource {\n readonly type: \"registry\";\n readonly definition: ToolDefinition;\n readonly taskType: string;\n /** Configuration values passed to the task constructor. */\n readonly config?: DataPorts;\n}\n\n/**\n * A user-provided tool with a custom executor function.\n */\nexport interface FunctionToolSource {\n readonly type: \"function\";\n readonly definition: ToolDefinition;\n readonly run: (input: DataPorts) => Promise<DataPorts>;\n}\n\nexport type ToolSource = RegistryToolSource | FunctionToolSource;\n\n// ========================================================================\n// Tool execution result\n// ========================================================================\n\nexport interface ToolResult {\n readonly toolCallId: string;\n readonly toolName: string;\n readonly output: DataPorts;\n readonly isError: boolean;\n /** Optional media content blocks to include alongside the JSON output. */\n readonly mediaContent?: ReadonlyArray<ToolResultInnerBlock>;\n}\n\n// ========================================================================\n// Agent hooks — lifecycle callbacks for the agent loop\n// ========================================================================\n\n/**\n * Decision returned by the beforeToolCall hook.\n * - `\"allow\"`: proceed with the tool call as-is\n * - `\"deny\"`: skip the tool call and return an error to the LLM\n * - `\"modify\"`: proceed with modified input\n */\nexport type ToolCallDecision =\n | { readonly action: \"allow\" }\n | { readonly action: \"deny\"; readonly reason?: string }\n | { readonly action: \"modify\"; readonly input: Record<string, unknown> };\n\n/**\n * Action returned by the onToolError hook.\n * - `\"throw\"`: report the error to the LLM (default when no hook)\n * - `\"result\"`: use a fallback result instead of reporting the error\n */\nexport type ToolErrorAction =\n | { readonly action: \"throw\" }\n | { readonly action: \"result\"; readonly output: Record<string, unknown> };\n\n/**\n * Action returned by the onIteration hook.\n * - `\"continue\"`: proceed with the next LLM call\n * - `\"stop\"`: end the agent loop and return current results\n */\nexport type IterationAction = { readonly action: \"continue\" } | { readonly action: \"stop\" };\n\n/**\n * Lifecycle hooks for the AgentTask loop.\n * All hooks are optional; the agent runs without intervention by default.\n */\nexport interface AgentHooks {\n /** Called before each tool call. Can approve, deny, or modify the call. */\n readonly beforeToolCall?: (call: ToolCall, source: ToolSource) => Promise<ToolCallDecision>;\n\n /** Called after each successful tool call. Can transform the result. */\n readonly afterToolCall?: (call: ToolCall, result: ToolResult) => Promise<ToolResult>;\n\n /** Called when a tool call throws. Can provide a fallback result or re-throw. */\n readonly onToolError?: (call: ToolCall, error: Error) => Promise<ToolErrorAction>;\n\n /**\n * Called at the start of each iteration, before calling the LLM.\n * Can stop the loop or inspect state (e.g. for context trimming).\n */\n readonly onIteration?: (\n iteration: number,\n messages: ReadonlyArray<ChatMessage>,\n stats: { readonly totalToolCalls: number }\n ) => Promise<IterationAction>;\n}\n\n// ========================================================================\n// Factory functions for content blocks\n// ========================================================================\n\nexport function imageBlock(mimeType: string, data: string): ImageContentBlock {\n return { type: \"image\", mimeType, data };\n}\n\nexport function audioBlock(mimeType: string, data: string): AudioContentBlock {\n return { type: \"audio\", mimeType, data };\n}\n\nexport function imageBlockFromDataUri(dataUri: string): ImageContentBlock {\n const { mimeType, base64 } = parseDataUri(dataUri);\n return { type: \"image\", mimeType, data: base64 };\n}\n\nexport function audioBlockFromDataUri(dataUri: string): AudioContentBlock {\n const { mimeType, base64 } = parseDataUri(dataUri);\n return { type: \"audio\", mimeType, data: base64 };\n}\n\n// ========================================================================\n// Helpers for building ChatMessage arrays\n// ========================================================================\n\n/**\n * Creates a user message from a prompt string or array of content blocks.\n */\nexport function userMessage(prompt: string | ReadonlyArray<UserContentBlock>): ChatMessage {\n return { role: \"user\", content: prompt };\n}\n\n/**\n * Creates an assistant message from text and optional tool calls.\n */\nexport function assistantMessage(text: string, toolCalls?: ToolCalls): ChatMessage {\n const content: Array<TextContentBlock | ToolUseContentBlock> = [];\n if (text) {\n content.push({ type: \"text\", text });\n }\n if (toolCalls) {\n for (const tc of toolCalls) {\n content.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: tc.input,\n });\n }\n }\n return { role: \"assistant\", content };\n}\n\n/**\n * Creates a tool message from an array of tool results.\n * When a result has `mediaContent`, emits content as an array of blocks\n * instead of a plain JSON string.\n */\nexport function toolMessage(results: ReadonlyArray<ToolResult>): ChatMessage {\n return {\n role: \"tool\",\n content: results.map((r) => {\n const jsonText = JSON.stringify(r.output);\n const content: string | ReadonlyArray<ToolResultInnerBlock> =\n r.mediaContent && r.mediaContent.length > 0\n ? [{ type: \"text\" as const, text: jsonText }, ...r.mediaContent]\n : jsonText;\n return {\n type: \"tool_result\" as const,\n tool_use_id: r.toolCallId,\n content,\n is_error: r.isError || undefined,\n };\n }),\n };\n}\n\n/**\n * Extracts all ToolDefinitions from an array of ToolSources.\n */\nexport function toolSourceDefinitions(sources: ReadonlyArray<ToolSource>): ToolDefinition[] {\n return sources.map((s) => s.definition);\n}\n\n/**\n * Finds the ToolSource matching a tool call name.\n */\nexport function findToolSource(\n sources: ReadonlyArray<ToolSource>,\n name: string\n): ToolSource | undefined {\n return sources.find((s) => s.definition.name === name);\n}\n",
|
|
16
|
-
"/**\n * @license\n * Copyright
|
|
17
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n getTaskConstructors,\n JobQueueTaskConfig,\n Workflow,\n} from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema, getLogger, JsonSchema, ServiceRegistry } from \"@workglow/util\";\nimport { TypeModel, TypeSingleOrArray } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\n// ========================================================================\n// Tool definition types\n// ========================================================================\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 {@link taskTypesToTools}.\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 /** 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// Shared provider utilities\n// ========================================================================\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\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 as any).configSchema === \"function\"\n ? (ctor as any).configSchema()\n : undefined;\n return {\n name: ctor.type,\n description: (ctor as any).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: TypeSingleOrArray({\n type: \"string\",\n title: \"Text\",\n description: \"Any text content generated by the model\",\n \"x-stream\": \"append\",\n }),\n toolCalls: TypeSingleOrArray({\n ...ToolCallSchema,\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};\n\nexport type ToolCallingTaskOutput = FromSchema<typeof ToolCallingOutputSchema>;\n\n// ========================================================================\n// Task class\n// ========================================================================\n\nexport class ToolCallingTask extends StreamingAiTask<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ToolCallingTask\";\n public static category = \"AI Text Model\";\n public static title = \"Tool Calling\";\n public static 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 inputSchema(): DataPortSchema {\n return ToolCallingInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ToolCallingOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run a tool calling task.\n */\nexport const toolCalling = (input: ToolCallingTaskInput, config?: JobQueueTaskConfig) => {\n return new ToolCallingTask({} as ToolCallingTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n toolCalling: CreateWorkflow<ToolCallingTaskInput, ToolCallingTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.toolCalling = CreateWorkflow(ToolCallingTask);\n",
|
|
14
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ModelConfig } from \"../model/ModelSchema\";\nimport { createDefaultQueue } from \"../queue/createDefaultQueue\";\nimport { AiProvider, type AiProviderRegisterOptions } from \"./AiProvider\";\n\n/**\n * AI provider base that creates the default in-memory job queue when\n * {@link AiProvider.register} runs on the main thread (inline or worker-backed).\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 override async afterRegister(options: AiProviderRegisterOptions): Promise<void> {\n if (options.queue?.autoCreate !== false) {\n await createDefaultQueue(this.name, options.queue?.concurrency ?? 1);\n }\n }\n}\n",
|
|
15
|
+
"/**\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 { AgentTask } from \"./AgentTask\";\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 { 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 { 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 AgentTask,\n BackgroundRemovalTask,\n ChunkToVectorTask,\n CountTokensTask,\n ContextBuilderTask,\n DocumentEnricherTask,\n ChunkRetrievalTask,\n ChunkVectorHybridSearchTask,\n ChunkVectorSearchTask,\n ChunkVectorUpsertTask,\n DownloadModelTask,\n FaceDetectorTask,\n FaceLandmarkerTask,\n GestureRecognizerTask,\n HandLandmarkerTask,\n HierarchicalChunkerTask,\n HierarchyJoinTask,\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 \"./AgentTask\";\nexport * from \"./AgentTypes\";\nexport * from \"./AgentUtils\";\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 \"./DownloadModelTask\";\nexport * from \"./FaceDetectorTask\";\nexport * from \"./FaceLandmarkerTask\";\nexport * from \"./GestureRecognizerTask\";\nexport * from \"./HandLandmarkerTask\";\nexport * from \"./HierarchicalChunkerTask\";\nexport * from \"./HierarchyJoinTask\";\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",
|
|
16
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n Task,\n Workflow,\n type IExecuteContext,\n type StreamEvent,\n type TaskConfig,\n} from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util\";\nimport type { DataPortSchema } from \"@workglow/util\";\nimport { assistantMessage, toolMessage, toolSourceDefinitions, userMessage } from \"./AgentTypes\";\nimport type { AgentHooks, ChatMessage, ToolSource, UserContentBlock } from \"./AgentTypes\";\nimport { buildToolSources, executeToolCalls, hasToolCalls } from \"./AgentUtils\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\nimport { ToolCallingTask, ToolDefinitionSchema } from \"./ToolCallingTask\";\nimport type { ToolCallingTaskInput } from \"./ToolCallingTask\";\nimport type { ToolCalls, ToolDefinition } from \"./ToolCallingUtils\";\n\n// ========================================================================\n// Config\n// ========================================================================\n\nexport interface AgentTaskConfig extends TaskConfig {\n /** Lifecycle hooks for intercepting the agent loop. */\n readonly hooks?: AgentHooks;\n /** Max concurrent tool executions per iteration (default: 5). */\n readonly maxConcurrency?: number;\n}\n\n// ========================================================================\n// Input / Output types\n// ========================================================================\n\n/**\n * Input for the AgentTask. The JSON Schema ({@link AgentInputSchema}) is\n * used for runtime validation and UI; this interface is the TypeScript\n * source of truth.\n *\n * Tools follow the same resolution pattern as `model`: each entry is\n * either a **string** (task type name resolved from the TaskRegistry) or\n * a full **{@link ToolDefinition}** object. Configurable tasks (e.g.\n * `McpToolCallTask`, `JavaScriptTask`) can be pre-configured via the\n * `config` field on the definition — the LLM never sees this config.\n */\nexport interface AgentTaskInput {\n readonly [key: string]: unknown;\n readonly model: string;\n readonly prompt: string | ReadonlyArray<UserContentBlock>;\n readonly systemPrompt?: string;\n /**\n * Tools available to the agent. Each entry is either:\n * - A **string** — resolved from the TaskRegistry by name (like `model`).\n * - A **{@link ToolDefinition}** — inline definition with optional `config`\n * for configurable tasks and optional `execute` for custom function tools.\n */\n readonly tools?: ReadonlyArray<string | ToolDefinition>;\n readonly maxIterations?: number;\n readonly maxTokens?: number;\n readonly temperature?: number;\n /**\n * Name of a \"stop tool\". When the LLM calls this tool the agent loop\n * ends and the tool's input becomes the {@link AgentTaskOutput.structuredOutput}.\n * If no tool source with this name exists, a synthetic definition is\n * added automatically.\n */\n readonly stopTool?: string;\n /**\n * Maximum number of messages to keep in the conversation window sent\n * to the LLM. When exceeded, the oldest messages (after the initial\n * user message) are dropped. Helps prevent context-window overflow.\n */\n readonly maxContextMessages?: number;\n}\n\nexport interface AgentTaskOutput {\n readonly [key: string]: unknown;\n readonly text: string;\n readonly messages: ReadonlyArray<ChatMessage>;\n readonly iterations: number;\n readonly toolCallCount: number;\n /** Present when the agent terminated via a stop tool. */\n readonly structuredOutput?: Record<string, unknown>;\n}\n\n// ========================================================================\n// Schemas\n// ========================================================================\n\nconst modelSchema = TypeModel(\"model:ToolCallingTask\");\n\nexport const AgentInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n prompt: {\n oneOf: [\n { type: \"string\" },\n {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n type: { type: \"string\", enum: [\"text\", \"image\", \"audio\"] },\n },\n required: [\"type\"],\n additionalProperties: true,\n },\n },\n ],\n title: \"Prompt\",\n description:\n \"The user prompt to start the agent loop. Can be a string or an array of content blocks (text, image, audio).\",\n },\n systemPrompt: {\n type: \"string\",\n title: \"System Prompt\",\n description: \"Optional system instructions for the agent\",\n },\n tools: {\n type: \"array\",\n format: \"tasks\",\n title: \"Tools\",\n description:\n \"Tools available to the agent. Each entry is a task type name (string, resolved from TaskRegistry) or a full ToolDefinition object with optional config for configurable tasks.\",\n items: {\n oneOf: [\n { type: \"string\", format: \"tasks\", description: \"Task type name\" },\n ToolDefinitionSchema,\n ],\n },\n },\n stopTool: {\n type: \"string\",\n title: \"Stop Tool\",\n description:\n \"Name of a tool that signals agent completion. When called, the loop ends and the tool input becomes structuredOutput.\",\n \"x-ui-group\": \"Configuration\",\n },\n maxIterations: {\n type: \"number\",\n title: \"Max Iterations\",\n description: \"Maximum number of agent loop iterations (default: 10)\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n maxContextMessages: {\n type: \"number\",\n title: \"Max Context Messages\",\n description:\n \"Maximum messages in conversation history. Older messages are trimmed to prevent context overflow.\",\n minimum: 3,\n \"x-ui-group\": \"Configuration\",\n },\n maxTokens: {\n type: \"number\",\n title: \"Max Tokens\",\n description: \"Maximum tokens per LLM call\",\n minimum: 1,\n \"x-ui-group\": \"Configuration\",\n },\n temperature: {\n type: \"number\",\n title: \"Temperature\",\n description: \"Sampling temperature for LLM calls\",\n minimum: 0,\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 AgentOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n type: \"string\",\n title: \"Text\",\n description: \"The final text response from the agent\",\n \"x-stream\": \"append\",\n },\n messages: {\n type: \"array\",\n title: \"Messages\",\n description: \"Full conversation history including all tool calls and results\",\n items: {\n type: \"object\",\n additionalProperties: true,\n },\n },\n iterations: {\n type: \"number\",\n title: \"Iterations\",\n description: \"Number of LLM calls made during the agent loop\",\n },\n toolCallCount: {\n type: \"number\",\n title: \"Tool Call Count\",\n description: \"Total number of tool calls executed\",\n },\n structuredOutput: {\n type: \"object\",\n title: \"Structured Output\",\n description: \"Present when the agent terminated via a stop tool\",\n additionalProperties: true,\n },\n },\n required: [\"text\", \"messages\", \"iterations\", \"toolCallCount\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\n// ========================================================================\n// AgentTask — multi-turn agentic loop orchestrator\n// ========================================================================\n\nexport class AgentTask extends Task<AgentTaskInput, AgentTaskOutput, AgentTaskConfig> {\n public static type = \"AgentTask\";\n public static category = \"AI Agent\";\n public static title = \"Agent\";\n public static description =\n \"Multi-turn agentic loop that calls an LLM with tools, executes tool calls, and iterates until done\";\n public static cacheable = false;\n\n public static inputSchema() {\n return AgentInputSchema;\n }\n\n public static outputSchema() {\n return AgentOutputSchema;\n }\n\n // ====================================================================\n // Non-streaming execution — consumes the loop generator silently\n // ====================================================================\n\n async execute(input: AgentTaskInput, context: IExecuteContext): Promise<AgentTaskOutput> {\n let result: AgentTaskOutput | undefined;\n for await (const event of this.agentLoop(input, context)) {\n if (event.type === \"finish\") {\n result = event.data;\n }\n }\n if (!result) {\n throw new Error(\"AgentTask: loop ended without producing output\");\n }\n return result;\n }\n\n // ====================================================================\n // Streaming execution — yields text deltas and the finish event\n // ====================================================================\n\n async *executeStream(\n input: AgentTaskInput,\n context: IExecuteContext\n ): AsyncIterable<StreamEvent<AgentTaskOutput>> {\n yield* this.agentLoop(input, context);\n }\n\n // ====================================================================\n // Core agent loop — single implementation used by both modes\n // ====================================================================\n\n private async *agentLoop(\n input: AgentTaskInput,\n context: IExecuteContext\n ): AsyncGenerator<StreamEvent<AgentTaskOutput>> {\n const maxIterations = input.maxIterations ?? 10;\n const hooks = this.config.hooks;\n const maxConcurrency = this.config.maxConcurrency ?? 5;\n\n const toolSources = this.resolveToolSources(input, context);\n const toolDefs = this.resolveToolDefs(toolSources, input.stopTool);\n\n const messages: ChatMessage[] = [userMessage(input.prompt)];\n let totalToolCalls = 0;\n let finalText = \"\";\n let structuredOutput: Record<string, unknown> | undefined;\n\n for (let iteration = 0; iteration < maxIterations; iteration++) {\n if (context.signal.aborted) break;\n\n // onIteration hook\n if (hooks?.onIteration) {\n const action = await hooks.onIteration(iteration, messages, { totalToolCalls });\n if (action.action === \"stop\") break;\n }\n\n await context.updateProgress(\n Math.round((iteration / maxIterations) * 100),\n `Agent iteration ${iteration + 1}`\n );\n\n // Trim context window if needed\n const contextMessages = this.trimMessages(messages, input.maxContextMessages);\n\n // Call the LLM and stream its output\n const llmTask = context.own(new ToolCallingTask({}, {}));\n let iterationText = \"\";\n let toolCalls: ToolCalls = [];\n\n for await (const event of llmTask.executeStream(\n {\n model: input.model,\n prompt: input.prompt as ToolCallingTaskInput[\"prompt\"],\n systemPrompt: input.systemPrompt,\n tools: toolDefs as ToolCallingTaskInput[\"tools\"],\n messages: contextMessages as ToolCallingTaskInput[\"messages\"],\n maxTokens: input.maxTokens,\n temperature: input.temperature,\n },\n context\n )) {\n if (event.type === \"text-delta\") {\n yield { type: \"text-delta\", port: \"text\", textDelta: event.textDelta };\n iterationText += event.textDelta;\n } else if (event.type === \"finish\") {\n const data = event.data as Record<string, unknown> | undefined;\n iterationText = (data?.text as string) ?? iterationText;\n if (data?.toolCalls) {\n toolCalls = (data.toolCalls as ToolCalls) ?? [];\n }\n }\n }\n\n finalText = iterationText;\n messages.push(assistantMessage(iterationText, toolCalls));\n\n // Check for stop tool — if the LLM called the stop tool alongside\n // other tools, we intentionally skip executing the sibling calls and\n // end the loop immediately. The stop tool signals task completion.\n if (input.stopTool) {\n const stopCall = toolCalls.find((tc) => tc.name === input.stopTool);\n if (stopCall) {\n structuredOutput = stopCall.input;\n break;\n }\n }\n\n // If no tool calls, the agent is done\n if (!hasToolCalls(toolCalls)) {\n break;\n }\n\n // Execute tool calls with concurrency control and hooks\n const results = await executeToolCalls(\n toolCalls,\n toolSources,\n context,\n hooks,\n maxConcurrency\n );\n totalToolCalls += results.length;\n messages.push(toolMessage(results));\n }\n\n const output: AgentTaskOutput = {\n text: finalText,\n messages,\n iterations: messages.filter((m) => m.role === \"assistant\").length,\n toolCallCount: totalToolCalls,\n ...(structuredOutput !== undefined ? { structuredOutput } : {}),\n };\n\n yield { type: \"finish\", data: output };\n }\n\n // ====================================================================\n // Helpers\n // ====================================================================\n\n private resolveToolSources(input: AgentTaskInput, context: IExecuteContext): ToolSource[] {\n return buildToolSources(input.tools, context.registry);\n }\n\n /**\n * Build the tool definitions to send to the LLM.\n * If a stopTool is configured and no matching source exists, adds a\n * synthetic tool definition so the LLM can call it.\n */\n private resolveToolDefs(\n toolSources: ReadonlyArray<ToolSource>,\n stopTool: string | undefined\n ): ToolDefinition[] {\n const defs = toolSourceDefinitions(toolSources);\n\n if (stopTool && !defs.some((d) => d.name === stopTool)) {\n defs.push({\n name: stopTool,\n description:\n \"Call this tool when you have completed the task. Pass your final structured result as the input.\",\n inputSchema: { type: \"object\", additionalProperties: true },\n });\n }\n\n return defs;\n }\n\n /**\n * Trim messages to stay within maxContextMessages.\n * Keeps the first message (initial user prompt) and the most recent\n * messages. Trims at assistant/tool pair boundaries so that a\n * tool_use message is never separated from its tool_result message.\n */\n private trimMessages(\n messages: ReadonlyArray<ChatMessage>,\n maxContextMessages: number | undefined\n ): ReadonlyArray<ChatMessage> {\n if (!maxContextMessages || messages.length <= maxContextMessages) {\n return messages;\n }\n\n getLogger().debug(\n `AgentTask: Trimming context from ${messages.length} to ${maxContextMessages} messages`\n );\n\n // Walk backwards from the end to find the earliest message we can keep\n // while respecting the limit. Never split an assistant+tool pair: if\n // the cut point lands on a \"tool\" message, include the preceding\n // \"assistant\" message as well.\n const tail = messages.slice(1); // everything after the initial user prompt\n let startIdx = tail.length - (maxContextMessages - 1);\n if (startIdx < 0) startIdx = 0;\n\n // If the cut starts on a tool message, back up to include its assistant\n if (startIdx > 0 && startIdx < tail.length && tail[startIdx].role === \"tool\") {\n startIdx -= 1;\n }\n\n return [messages[0], ...tail.slice(startIdx)];\n }\n}\n\n// ========================================================================\n// Convenience function\n// ========================================================================\n\nexport const agent = (input: AgentTaskInput, config?: AgentTaskConfig) => {\n return new AgentTask({} as AgentTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n agent: CreateWorkflow<AgentTaskInput, AgentTaskOutput, AgentTaskConfig>;\n }\n}\n\nWorkflow.prototype.agent = CreateWorkflow(AgentTask);\n",
|
|
17
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DataPorts } from \"@workglow/task-graph\";\nimport { parseDataUri } from \"@workglow/util\";\nimport type { ToolCall, ToolCalls, ToolDefinition } from \"./ToolCallingUtils\";\n\n// ========================================================================\n// Chat message types — provider-agnostic conversation history\n// ========================================================================\n\n/**\n * A text content block within a chat message.\n */\nexport interface TextContentBlock {\n readonly type: \"text\";\n readonly text: string;\n}\n\n/**\n * An image content block within a chat message.\n */\nexport interface ImageContentBlock {\n readonly type: \"image\";\n readonly mimeType: string; // e.g. \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\"\n readonly data: string; // raw base64 (no data-uri prefix)\n}\n\n/**\n * An audio content block within a chat message.\n */\nexport interface AudioContentBlock {\n readonly type: \"audio\";\n readonly mimeType: string; // e.g. \"audio/wav\", \"audio/mp3\", \"audio/ogg\"\n readonly data: string; // raw base64\n}\n\n/**\n * A tool-use content block within an assistant message.\n * Represents the LLM requesting a tool invocation.\n */\nexport interface ToolUseContentBlock {\n readonly type: \"tool_use\";\n readonly id: string;\n readonly name: string;\n readonly input: Record<string, unknown>;\n}\n\n/**\n * A tool-result content block within a tool message.\n * Represents the result of executing a tool call.\n */\nexport interface ToolResultContentBlock {\n readonly type: \"tool_result\";\n readonly tool_use_id: string;\n readonly content: string | ReadonlyArray<ToolResultInnerBlock>;\n readonly is_error?: boolean;\n}\n\n/** Content blocks allowed in user messages */\nexport type UserContentBlock = TextContentBlock | ImageContentBlock | AudioContentBlock;\n\n/** Content blocks allowed inside tool result content */\nexport type ToolResultInnerBlock = TextContentBlock | ImageContentBlock | AudioContentBlock;\n\nexport type ContentBlock =\n | TextContentBlock\n | ImageContentBlock\n | AudioContentBlock\n | ToolUseContentBlock\n | ToolResultContentBlock;\n\n/**\n * Provider-agnostic chat message for multi-turn conversations.\n * Uses a discriminated union on `role` to enforce correct content types.\n */\nexport type ChatMessage =\n | { readonly role: \"user\"; readonly content: string | ReadonlyArray<UserContentBlock> }\n | {\n readonly role: \"assistant\";\n readonly content: ReadonlyArray<TextContentBlock | ToolUseContentBlock>;\n }\n | { readonly role: \"tool\"; readonly content: ReadonlyArray<ToolResultContentBlock> };\n\n// ========================================================================\n// Tool source types — how tools are discovered and dispatched\n// ========================================================================\n\n/**\n * A tool backed by a Task in the TaskRegistry. Instantiated and run via\n * `TaskRegistry.all.get(taskType)`. Optional `config` is passed to the\n * task constructor for configurable tasks (e.g. `McpToolCallTask`,\n * `JavaScriptTask`).\n */\nexport interface RegistryToolSource {\n readonly type: \"registry\";\n readonly definition: ToolDefinition;\n readonly taskType: string;\n /** Configuration values passed to the task constructor. */\n readonly config?: DataPorts;\n}\n\n/**\n * A user-provided tool with a custom executor function.\n */\nexport interface FunctionToolSource {\n readonly type: \"function\";\n readonly definition: ToolDefinition;\n readonly run: (input: DataPorts) => Promise<DataPorts>;\n}\n\nexport type ToolSource = RegistryToolSource | FunctionToolSource;\n\n// ========================================================================\n// Tool execution result\n// ========================================================================\n\nexport interface ToolResult {\n readonly toolCallId: string;\n readonly toolName: string;\n readonly output: DataPorts;\n readonly isError: boolean;\n /** Optional media content blocks to include alongside the JSON output. */\n readonly mediaContent?: ReadonlyArray<ToolResultInnerBlock>;\n}\n\n// ========================================================================\n// Agent hooks — lifecycle callbacks for the agent loop\n// ========================================================================\n\n/**\n * Decision returned by the beforeToolCall hook.\n * - `\"allow\"`: proceed with the tool call as-is\n * - `\"deny\"`: skip the tool call and return an error to the LLM\n * - `\"modify\"`: proceed with modified input\n */\nexport type ToolCallDecision =\n | { readonly action: \"allow\" }\n | { readonly action: \"deny\"; readonly reason?: string }\n | { readonly action: \"modify\"; readonly input: Record<string, unknown> };\n\n/**\n * Action returned by the onToolError hook.\n * - `\"throw\"`: report the error to the LLM (default when no hook)\n * - `\"result\"`: use a fallback result instead of reporting the error\n */\nexport type ToolErrorAction =\n | { readonly action: \"throw\" }\n | { readonly action: \"result\"; readonly output: Record<string, unknown> };\n\n/**\n * Action returned by the onIteration hook.\n * - `\"continue\"`: proceed with the next LLM call\n * - `\"stop\"`: end the agent loop and return current results\n */\nexport type IterationAction = { readonly action: \"continue\" } | { readonly action: \"stop\" };\n\n/**\n * Lifecycle hooks for the AgentTask loop.\n * All hooks are optional; the agent runs without intervention by default.\n */\nexport interface AgentHooks {\n /** Called before each tool call. Can approve, deny, or modify the call. */\n readonly beforeToolCall?: (call: ToolCall, source: ToolSource) => Promise<ToolCallDecision>;\n\n /** Called after each successful tool call. Can transform the result. */\n readonly afterToolCall?: (call: ToolCall, result: ToolResult) => Promise<ToolResult>;\n\n /** Called when a tool call throws. Can provide a fallback result or re-throw. */\n readonly onToolError?: (call: ToolCall, error: Error) => Promise<ToolErrorAction>;\n\n /**\n * Called at the start of each iteration, before calling the LLM.\n * Can stop the loop or inspect state (e.g. for context trimming).\n */\n readonly onIteration?: (\n iteration: number,\n messages: ReadonlyArray<ChatMessage>,\n stats: { readonly totalToolCalls: number }\n ) => Promise<IterationAction>;\n}\n\n// ========================================================================\n// Factory functions for content blocks\n// ========================================================================\n\nexport function imageBlock(mimeType: string, data: string): ImageContentBlock {\n return { type: \"image\", mimeType, data };\n}\n\nexport function audioBlock(mimeType: string, data: string): AudioContentBlock {\n return { type: \"audio\", mimeType, data };\n}\n\nexport function imageBlockFromDataUri(dataUri: string): ImageContentBlock {\n const { mimeType, base64 } = parseDataUri(dataUri);\n return { type: \"image\", mimeType, data: base64 };\n}\n\nexport function audioBlockFromDataUri(dataUri: string): AudioContentBlock {\n const { mimeType, base64 } = parseDataUri(dataUri);\n return { type: \"audio\", mimeType, data: base64 };\n}\n\n// ========================================================================\n// Helpers for building ChatMessage arrays\n// ========================================================================\n\n/**\n * Creates a user message from a prompt string or array of content blocks.\n */\nexport function userMessage(prompt: string | ReadonlyArray<UserContentBlock>): ChatMessage {\n return { role: \"user\", content: prompt };\n}\n\n/**\n * Creates an assistant message from text and optional tool calls.\n */\nexport function assistantMessage(text: string, toolCalls?: ToolCalls): ChatMessage {\n const content: Array<TextContentBlock | ToolUseContentBlock> = [];\n if (text) {\n content.push({ type: \"text\", text });\n }\n if (toolCalls) {\n for (const tc of toolCalls) {\n content.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: tc.input,\n });\n }\n }\n return { role: \"assistant\", content };\n}\n\n/**\n * Creates a tool message from an array of tool results.\n * When a result has `mediaContent`, emits content as an array of blocks\n * instead of a plain JSON string.\n */\nexport function toolMessage(results: ReadonlyArray<ToolResult>): ChatMessage {\n return {\n role: \"tool\",\n content: results.map((r) => {\n const jsonText = JSON.stringify(r.output);\n const content: string | ReadonlyArray<ToolResultInnerBlock> =\n r.mediaContent && r.mediaContent.length > 0\n ? [{ type: \"text\" as const, text: jsonText }, ...r.mediaContent]\n : jsonText;\n return {\n type: \"tool_result\" as const,\n tool_use_id: r.toolCallId,\n content,\n is_error: r.isError || undefined,\n };\n }),\n };\n}\n\n/**\n * Extracts all ToolDefinitions from an array of ToolSources.\n */\nexport function toolSourceDefinitions(sources: ReadonlyArray<ToolSource>): ToolDefinition[] {\n return sources.map((s) => s.definition);\n}\n\n/**\n * Finds the ToolSource matching a tool call name.\n */\nexport function findToolSource(\n sources: ReadonlyArray<ToolSource>,\n name: string\n): ToolSource | undefined {\n return sources.find((s) => s.definition.name === name);\n}\n",
|
|
18
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DataPorts, getTaskConstructors } from \"@workglow/task-graph\";\nimport type { IExecuteContext } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util\";\nimport type { ServiceRegistry } from \"@workglow/util\";\nimport { findToolSource } from \"./AgentTypes\";\nimport type {\n AgentHooks,\n FunctionToolSource,\n RegistryToolSource,\n ToolResult,\n ToolSource,\n} from \"./AgentTypes\";\nimport { taskTypesToTools } from \"./ToolCallingTask\";\nimport type { ToolDefinitionWithTaskType } from \"./ToolCallingTask\";\nimport type { ToolCall, ToolCalls, ToolDefinition } from \"./ToolCallingUtils\";\n\n// ========================================================================\n// Tool source resolution\n// ========================================================================\n\n/**\n * Builds an array of {@link ToolSource} entries from a unified tools list.\n *\n * Each entry is either:\n * - A **string** — resolved from the TaskRegistry via {@link taskTypesToTools}.\n * - A **{@link ToolDefinition}** object — dispatched based on its shape:\n * - Has `execute` function → {@link FunctionToolSource}\n * - Has a backing task in the task constructors (looked up by `name`) →\n * {@link RegistryToolSource} with optional `config` passed through\n * - Otherwise → {@link FunctionToolSource} that throws on invocation\n *\n * This mirrors the model resolution pattern: strings are convenient\n * shorthand, objects give full control (including `config` for\n * configurable tasks like `McpToolCallTask` or `JavaScriptTask`).\n *\n * The original order of entries in `tools` is preserved in the returned\n * sources array. An optional `registry` can be provided to use a\n * DI-scoped constructor map instead of the global TaskRegistry.\n */\nexport function buildToolSources(\n tools?: ReadonlyArray<string | ToolDefinition>,\n registry?: ServiceRegistry\n): ToolSource[] {\n if (!tools || tools.length === 0) return [];\n\n // Pre-resolve all string names in one batch for efficiency, keyed by task type name.\n // Resolved eagerly so individual emits below remain O(1) lookups.\n const stringNames = tools.filter((t): t is string => typeof t === \"string\");\n const resolvedDefs = new Map<string, ToolDefinitionWithTaskType>(\n taskTypesToTools(stringNames, registry).map((d) => [d.taskType, d])\n );\n\n // Task constructors map for DI-scoped lookups on object entries\n const constructors = getTaskConstructors(registry);\n\n const sources: ToolSource[] = [];\n\n // Emit sources in the original tools array order\n for (const tool of tools) {\n if (typeof tool === \"string\") {\n // String entries are resolved via the batch lookup above\n const def = resolvedDefs.get(tool);\n if (def) {\n const { taskType, ...definition } = def;\n sources.push({\n type: \"registry\",\n definition,\n taskType,\n } satisfies RegistryToolSource);\n }\n } else if (tool.execute) {\n // Tool with a custom executor function\n const { execute, configSchema: _cs, config: _c, ...definition } = tool;\n sources.push({\n type: \"function\",\n definition,\n run: execute,\n } satisfies FunctionToolSource);\n } else {\n // Check if the tool name matches a registered task type via scoped registry\n const ctor = constructors.get(tool.name);\n if (ctor) {\n // Registry-backed tool — config is passed through for task instantiation\n const { execute: _e, configSchema: _cs, config: _c, ...definition } = tool;\n sources.push({\n type: \"registry\",\n definition,\n taskType: tool.name,\n config: tool.config,\n } satisfies RegistryToolSource);\n } else {\n // No executor and not in registry — create a stub that throws\n const { execute: _e, configSchema: _cs, config: _c, ...definition } = tool;\n sources.push({\n type: \"function\",\n definition,\n run: async () => {\n throw new Error(`No executor registered for tool \"${tool.name}\"`);\n },\n } satisfies FunctionToolSource);\n }\n }\n }\n\n return sources;\n}\n\n// ========================================================================\n// Tool execution with hooks\n// ========================================================================\n\n/**\n * Executes a single tool call by dispatching to the appropriate handler\n * based on the tool source type. Applies beforeToolCall, afterToolCall,\n * and onToolError hooks when provided.\n */\nexport async function executeToolCall(\n toolCall: ToolCall,\n sources: ReadonlyArray<ToolSource>,\n context: IExecuteContext,\n hooks?: AgentHooks\n): Promise<ToolResult> {\n const source = findToolSource(sources, toolCall.name);\n if (!source) {\n getLogger().warn(`AgentTask: Unknown tool \"${toolCall.name}\" — not found in tool sources`);\n return {\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n output: { error: `Unknown tool: ${toolCall.name}` },\n isError: true,\n };\n }\n\n // beforeToolCall hook — can deny or modify the call\n let effectiveCall = toolCall;\n if (hooks?.beforeToolCall) {\n const decision = await hooks.beforeToolCall(toolCall, source);\n if (decision.action === \"deny\") {\n return {\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n output: { error: decision.reason ?? \"Tool call denied by hook\" },\n isError: true,\n };\n }\n if (decision.action === \"modify\") {\n effectiveCall = { ...toolCall, input: decision.input };\n }\n }\n\n try {\n let output: DataPorts;\n\n switch (source.type) {\n case \"registry\": {\n const ctor = getTaskConstructors(context.registry).get(source.taskType);\n if (!ctor) {\n throw new Error(`Task type \"${source.taskType}\" not found in TaskRegistry`);\n }\n const taskConfig = source.config ?? {};\n const task = context.own(new ctor({}, taskConfig));\n output = (await task.run(effectiveCall.input)) ?? {};\n break;\n }\n case \"function\": {\n output = await source.run(effectiveCall.input);\n break;\n }\n }\n\n let result: ToolResult = {\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n output,\n isError: false,\n };\n\n // afterToolCall hook — can transform the result\n if (hooks?.afterToolCall) {\n result = await hooks.afterToolCall(toolCall, result);\n }\n\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n\n // onToolError hook — can provide a fallback result\n if (hooks?.onToolError) {\n const action = await hooks.onToolError(toolCall, error);\n if (action.action === \"result\") {\n return {\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n output: action.output,\n isError: false,\n };\n }\n }\n\n getLogger().warn(`AgentTask: Tool \"${toolCall.name}\" failed: ${error.message}`);\n return {\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n output: { error: error.message },\n isError: true,\n };\n }\n}\n\n/**\n * Executes multiple tool calls with concurrency control.\n *\n * Uses the same shared-cursor worker pool pattern as IteratorTaskRunner:\n * spawns N workers that pull from a shared cursor until all items are\n * processed. Results are returned in the original order.\n *\n * @param maxConcurrency - Max parallel tool executions (default: 5)\n */\nexport async function executeToolCalls(\n toolCalls: ToolCalls,\n sources: ReadonlyArray<ToolSource>,\n context: IExecuteContext,\n hooks?: AgentHooks,\n maxConcurrency: number = 5\n): Promise<ToolResult[]> {\n const calls = toolCalls;\n if (calls.length === 0) return [];\n\n const concurrency = Math.max(1, Math.min(maxConcurrency, calls.length));\n const results: ToolResult[] = new Array(calls.length);\n // Shared cursor is safe: JS is single-threaded, so the read + increment\n // between `const position = cursor` and `cursor += 1` cannot interleave\n // with another worker. Each worker only awaits after claiming its position.\n let cursor = 0;\n\n const workers = Array.from({ length: concurrency }, async () => {\n while (true) {\n if (context.signal.aborted) {\n throw context.signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\");\n }\n\n const position = cursor;\n cursor += 1;\n\n if (position >= calls.length) return;\n\n results[position] = await executeToolCall(calls[position], sources, context, hooks);\n }\n });\n\n await Promise.all(workers);\n return results;\n}\n\n/**\n * Checks whether a ToolCallingTask output contains any tool calls.\n */\nexport function hasToolCalls(toolCalls: unknown[] | undefined): boolean {\n return toolCalls !== undefined && toolCalls.length > 0;\n}\n",
|
|
19
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n getTaskConstructors,\n JobQueueTaskConfig,\n Workflow,\n} from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema, ServiceRegistry } from \"@workglow/util\";\nimport { TypeModel, TypeSingleOrArray } 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 as any).configSchema === \"function\"\n ? (ctor as any).configSchema()\n : undefined;\n return {\n name: ctor.type,\n description: (ctor as any).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: TypeSingleOrArray({\n type: \"string\",\n title: \"Text\",\n description: \"Any text content generated by the model\",\n \"x-stream\": \"append\",\n }),\n toolCalls: TypeSingleOrArray({\n ...ToolCallSchema,\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};\n\nexport type ToolCallingTaskOutput = FromSchema<typeof ToolCallingOutputSchema>;\n\n// ========================================================================\n// Task class\n// ========================================================================\n\nexport class ToolCallingTask extends StreamingAiTask<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ToolCallingTask\";\n public static category = \"AI Text Model\";\n public static title = \"Tool Calling\";\n public static 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 inputSchema(): DataPortSchema {\n return ToolCallingInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ToolCallingOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run a tool calling task.\n */\nexport const toolCalling = (input: ToolCallingTaskInput, config?: JobQueueTaskConfig) => {\n return new ToolCallingTask({} as ToolCallingTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n toolCalling: CreateWorkflow<ToolCallingTaskInput, ToolCallingTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.toolCalling = CreateWorkflow(ToolCallingTask);\n",
|
|
18
20
|
"/**\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\";\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
21
|
"/**\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 {\n JobQueueTaskConfig,\n getStreamingPorts,\n type IExecuteContext,\n type StreamEvent,\n type TaskOutput,\n} from \"@workglow/task-graph\";\n\nimport { AiJob, AiJobInput } from \"../../job/AiJob\";\nimport { AiSingleTaskInput, AiTask } from \"./AiTask\";\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 AiSingleTaskInput = AiSingleTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends JobQueueTaskConfig = JobQueueTaskConfig,\n> extends AiTask<Input, Output, Config> {\n public static type: string = \"StreamingAiTask\";\n\n /**\n * Streaming execution: creates an AiJob and yields StreamEvents from it.\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 jobInput = await this.getJobInput(input);\n const queueName = await this.getDefaultQueueName(input);\n\n const job = new AiJob<AiJobInput<Input>, Output>({\n queueName: queueName ?? this.type,\n jobRunId: this.runConfig.runnerId,\n input: jobInput,\n });\n\n // Resolve the streaming port(s) from the output schema for wrapping\n const ports = getStreamingPorts(this.outputSchema());\n const defaultPort = ports.length > 0 ? ports[0].port : \"text\";\n\n for await (const event of job.executeStream(jobInput, {\n signal: context.signal,\n updateProgress: context.updateProgress.bind(this),\n })) {\n if (event.type === \"text-delta\") {\n yield { ...event, port: (event as any).port ?? defaultPort } as StreamEvent<Output>;\n } else if (event.type === \"object-delta\") {\n yield { ...event, port: (event as any).port ?? defaultPort } as StreamEvent<Output>;\n } else {\n yield event;\n }\n }\n }\n}\n",
|
|
20
22
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @description This file contains the implementation of the JobQueueTask class and its derived classes.\n */\n\nimport { Job, JobClass } from \"@workglow/job-queue\";\nimport {\n type IExecuteReactiveContext,\n JobQueueTask,\n JobQueueTaskConfig,\n TaskConfigurationError,\n TaskInput,\n type TaskOutput,\n hasStructuredOutput,\n} from \"@workglow/task-graph\";\nimport { type JsonSchema, type ServiceRegistry } from \"@workglow/util\";\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\nexport interface AiSingleTaskInput extends TaskInput {\n model: string | ModelConfig;\n}\n\n/**\n * A base class for AI related tasks that run in a job queue.\n * Extends the JobQueueTask class to provide LLM-specific functionality.\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 AiSingleTaskInput = AiSingleTaskInput,\n Output extends TaskOutput = TaskOutput,\n Config extends JobQueueTaskConfig = JobQueueTaskConfig,\n> extends JobQueueTask<Input, Output, Config> {\n public static type: string = \"AiTask\";\n\n /**\n * Creates a new AiTask instance\n * @param config - Configuration object for the task\n */\n constructor(input: Partial<Input> = {}, config: Config = {} as Config) {\n super(input, config);\n this.jobClass = AiJob as JobClass<AiJobInput<Input>, Output>;\n }\n\n // ========================================================================\n // Job creation\n // ========================================================================\n\n /**\n * Get the input to submit to the job queue.\n * Transforms the task input to AiJobInput format.\n *\n * Note: By the time this is called, input.model has already been resolved\n * to a ModelConfig by the TaskRunner's input resolution system.\n *\n * @param input - The task input (with resolved model)\n * @returns The AiJobInput to submit to the queue\n */\n protected override async getJobInput(input: Input): Promise<AiJobInput<Input>> {\n // Model is guaranteed to be resolved by TaskRunner before this is called\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 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 // Attach structured output schema if the task declares it.\n // If the input has an explicit `outputSchema`, prefer that (dynamic case);\n // otherwise fall back to the task's static outputSchema() if it has\n // x-structured-output annotations.\n const inputOutputSchema = (input as any).outputSchema;\n if (inputOutputSchema && typeof inputOutputSchema === \"object\") {\n jobInput.outputSchema = inputOutputSchema;\n } else {\n const taskOutputSchema = this.outputSchema();\n if (hasStructuredOutput(taskOutputSchema)) {\n jobInput.outputSchema = taskOutputSchema;\n }\n }\n\n return jobInput;\n }\n\n /**\n * Creates a new Job instance for direct execution (without a queue).\n * @param input - The task input\n * @param queueName - The queue name (if any)\n * @returns Promise<Job> - The created job\n */\n override async createJob(\n input: Input,\n queueName?: string\n ): 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(\"JobQueueTask: Unable to determine queue for AI provider\");\n }\n const job = new AiJob<AiJobInput<Input>, Output>({\n queueName: resolvedQueueName,\n jobRunId: this.runConfig.runnerId, // could be undefined\n input: jobInput,\n });\n return job;\n }\n\n /**\n * Gets the default queue name based on the model's provider.\n * After TaskRunner resolution, input.model is a ModelConfig.\n */\n protected override async getDefaultQueueName(input: Input): Promise<string | undefined> {\n const model = input.model as ModelConfig;\n return model?.provider;\n }\n\n /**\n * Delegates to a provider-registered reactive run function if one exists,\n * otherwise falls back to the default Task.executeReactive() (returns output unchanged).\n *\n * Individual task subclasses that override executeReactive() directly take full\n * precedence -- this base implementation is only reached when no subclass override exists.\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 * Validates that model inputs are valid ModelConfig objects.\n *\n * Note: By the time this is called, string model IDs have already been\n * resolved to ModelConfig objects by the TaskRunner's input resolution system.\n *\n * @param input The input to validate\n * @returns True if the input is valid\n */\n 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 // Find properties with model:TaskName format - need task compatibility check\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 // Check task compatibility if tasks array is specified\n const tasks = (model as ModelConfig).tasks;\n if (Array.isArray(tasks) && tasks.length > 0 && !tasks.includes(this.type)) {\n throw new TaskConfigurationError(\n `AiTask: Model for '${key}' is not compatible with task '${this.type}'`\n );\n }\n } else if (model !== undefined && model !== null) {\n // Should be a ModelConfig object after resolution\n throw new TaskConfigurationError(\n `AiTask: Invalid model for '${key}' - expected ModelConfig object`\n );\n }\n }\n\n // Find properties with plain model format - just ensure they're objects\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`\n );\n }\n }\n\n return super.validateInput(input);\n }\n\n // dataflows can strip some models that are incompatible with the target task\n // if all of them are stripped, then the task will fail in validateInput\n async narrowInput(input: Input, registry: ServiceRegistry): Promise<Input> {\n // TODO(str): this is very inefficient, we should cache the results, including intermediate results\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 const taskModels = await modelRepo.findModelsByTask(this.type);\n for (const [key, propSchema] of modelTaskProperties) {\n const requestedModel = input[key];\n\n if (typeof requestedModel === \"string\") {\n // Verify string model ID is compatible\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 // Verify inline config is compatible\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
23
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\n\n/**\n * Removes backgrounds from images using computer vision models\n */\nexport class BackgroundRemovalTask extends AiVisionTask<\n BackgroundRemovalTaskInput,\n BackgroundRemovalTaskOutput\n> {\n public static type = \"BackgroundRemovalTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Background Removal\";\n public static description =\n \"Removes backgrounds from images, producing images with transparent backgrounds\";\n public static inputSchema(): DataPortSchema {\n return BackgroundRemovalInputSchema as DataPortSchema;\n }\n public static 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?: JobQueueTaskConfig\n) => {\n return new BackgroundRemovalTask({} as BackgroundRemovalTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n backgroundRemoval: CreateWorkflow<\n BackgroundRemovalTaskInput,\n BackgroundRemovalTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.backgroundRemoval = CreateWorkflow(BackgroundRemovalTask);\n",
|
|
22
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @description This file contains the implementation of the JobQueueTask class and its derived classes.\n */\n\nimport { JobQueueTaskConfig, TaskInput, type TaskOutput } from \"@workglow/task-graph\";\nimport { convertImageDataToUseableForm, ImageDataSupport } from \"@workglow/util\";\n\nimport { AiJobInput } from \"../../job/AiJob\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\nimport { AiTask } from \"./AiTask\";\n\nexport interface AiVisionTaskSingleInput extends TaskInput {\n model: string | ModelConfig;\n}\n\n/**\n * A base class for AI related tasks that run in a job queue.\n * Extends the JobQueueTask class to provide LLM-specific functionality.\n */\nexport class AiVisionTask<\n Input extends AiVisionTaskSingleInput = AiVisionTaskSingleInput,\n Output extends TaskOutput = TaskOutput,\n Config extends JobQueueTaskConfig = JobQueueTaskConfig,\n> extends AiTask<Input, Output, Config> {\n public static type: string = \"AiVisionTask\";\n /**\n * Get the input to submit to the job queue.\n * Transforms the task input to AiJobInput format.\n * @param input - The task input\n * @returns The AiJobInput to submit to the queue\n */\n protected override async getJobInput(input: Input): Promise<AiJobInput<Input>> {\n const jobInput = await super.getJobInput(input);\n // TODO: if the queue is not memory based, we need to convert to base64 (or blob?)\n const registeredQueue = await this.resolveQueue(input);\n const queueName = registeredQueue?.server.queueName;\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 (queueName === \"TENSORFLOW_MEDIAPIPE\"
|
|
24
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @description This file contains the implementation of the JobQueueTask class and its derived classes.\n */\n\nimport { JobQueueTaskConfig, TaskInput, type TaskOutput } from \"@workglow/task-graph\";\nimport { convertImageDataToUseableForm, ImageDataSupport } from \"@workglow/util\";\n\nimport { AiJobInput } from \"../../job/AiJob\";\nimport type { ModelConfig } from \"../../model/ModelSchema\";\nimport { AiTask } from \"./AiTask\";\n\nexport interface AiVisionTaskSingleInput extends TaskInput {\n model: string | ModelConfig;\n}\n\n/**\n * A base class for AI related tasks that run in a job queue.\n * Extends the JobQueueTask class to provide LLM-specific functionality.\n */\nexport class AiVisionTask<\n Input extends AiVisionTaskSingleInput = AiVisionTaskSingleInput,\n Output extends TaskOutput = TaskOutput,\n Config extends JobQueueTaskConfig = JobQueueTaskConfig,\n> extends AiTask<Input, Output, Config> {\n public static type: string = \"AiVisionTask\";\n /**\n * Get the input to submit to the job queue.\n * Transforms the task input to AiJobInput format.\n * @param input - The task input\n * @returns The AiJobInput to submit to the queue\n */\n protected override async getJobInput(input: Input): Promise<AiJobInput<Input>> {\n const jobInput = await super.getJobInput(input);\n // TODO: if the queue is not memory based, we need to convert to base64 (or blob?)\n const registeredQueue = await this.resolveQueue(input);\n const queueName = registeredQueue?.server.queueName;\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 queueName === \"string\" &&\n queueName.startsWith(\"TENSORFLOW_MEDIAPIPE\") &&\n \"ImageBitmap\" in globalThis\n ) {\n supports.push(\"ImageBitmap\");\n } else if (\n typeof queueName === \"string\" &&\n queueName.startsWith(\"TENSORFLOW_MEDIAPIPE\") &&\n \"VideoFrame\" in globalThis\n ) {\n supports.push(\"VideoFrame\");\n }\n const image = await convertImageDataToUseableForm(input.image, supports);\n // @ts-ignore\n jobInput.taskInput.image = image;\n }\n return jobInput;\n }\n}\n",
|
|
23
25
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { KnowledgeBase, TypeKnowledgeBase, type ChunkRecord } from \"@workglow/knowledge-base\";\nimport {\n CreateWorkflow,\n IExecuteContext,\n JobQueueTaskConfig,\n Task,\n Workflow,\n} from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n isTypedArray,\n TypedArray,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"ChunkRetrievalTask\";\n public static category = \"RAG\";\n public static title = \"Chunk Retrieval\";\n public static description = \"End-to-end retrieval: embed query and search for similar chunks\";\n public static cacheable = true;\n\n public static inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n 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({ text: query, model }));\n const embeddingResult = await embeddingTask.run();\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 = (input: ChunkRetrievalTaskInput, config?: JobQueueTaskConfig) => {\n return new ChunkRetrievalTask({} as ChunkRetrievalTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n chunkRetrieval: CreateWorkflow<\n ChunkRetrievalTaskInput,\n ChunkRetrievalTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.chunkRetrieval = CreateWorkflow(ChunkRetrievalTask);\n",
|
|
24
26
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util\";\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>;\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<TextEmbeddingTaskInput, TextEmbeddingTaskOutput> {\n public static type = \"TextEmbeddingTask\";\n public static category = \"AI Text Model\";\n public static title = \"Text Embedding\";\n public static description = \"Generates vector embeddings for text to capture semantic meaning\";\n public static inputSchema(): DataPortSchema {\n return TextEmbeddingInputSchema as DataPortSchema;\n }\n public static 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 (input: TextEmbeddingTaskInput, config?: JobQueueTaskConfig) => {\n return new TextEmbeddingTask({} as TextEmbeddingTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textEmbedding: CreateWorkflow<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textEmbedding = CreateWorkflow(TextEmbeddingTask);\n",
|
|
25
27
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ChunkRecordSchema, type ChunkRecord } from \"@workglow/knowledge-base\";\nimport {\n CreateWorkflow,\n IExecuteContext,\n JobQueueTaskConfig,\n Task,\n Workflow,\n} from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"ChunkToVectorTask\";\n public static category = \"Document\";\n public static title = \"Chunk to Vector\";\n public static description = \"Transform chunks and embeddings to vector store format\";\n public static cacheable = true;\n\n public static inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n 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?: JobQueueTaskConfig) => {\n return new ChunkToVectorTask({} as ChunkToVectorTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n chunkToVector: CreateWorkflow<\n ChunkToVectorTaskInput,\n ChunkToVectorTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.chunkToVector = CreateWorkflow(ChunkToVectorTask);\n",
|
|
@@ -31,7 +33,7 @@
|
|
|
31
33
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n getChildren,\n hasChildren,\n type DocumentNode,\n type Entity,\n type NodeEnrichment,\n} from \"@workglow/knowledge-base\";\nimport {\n CreateWorkflow,\n IExecuteContext,\n JobQueueTaskConfig,\n Task,\n Workflow,\n} from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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 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 = FromSchema<typeof inputSchema>;\nexport type DocumentEnricherTaskOutput = FromSchema<typeof outputSchema>;\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 JobQueueTaskConfig\n> {\n public static type = \"DocumentEnricherTask\";\n public static category = \"Document\";\n public static title = \"Document Enricher\";\n public static description = \"Enrich document nodes with summaries and entities\";\n public static cacheable = true;\n\n public static inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n 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({ text, model: nerModel }))\n .run();\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 (enrichedNode as any).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 = (input: DocumentEnricherTaskInput, config?: JobQueueTaskConfig) => {\n return new DocumentEnricherTask({} as DocumentEnricherTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n documentEnricher: CreateWorkflow<\n DocumentEnricherTaskInput,\n DocumentEnricherTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.documentEnricher = CreateWorkflow(DocumentEnricherTask);\n",
|
|
32
34
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel, TypeSingleOrArray } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model:TextNamedEntityRecognitionTask\");\n\nexport const TextNamedEntityRecognitionInputSchema = {\n type: \"object\",\n properties: {\n text: TypeSingleOrArray({\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: TypeSingleOrArray({\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>;\n\n/**\n * Extracts named entities from text using language models\n */\nexport class TextNamedEntityRecognitionTask extends AiTask<\n TextNamedEntityRecognitionTaskInput,\n TextNamedEntityRecognitionTaskOutput\n> {\n public static type = \"TextNamedEntityRecognitionTask\";\n public static category = \"AI Text Model\";\n public static title = \"Named Entity Recognition\";\n public static description = \"Extracts named entities from text\";\n public static inputSchema(): DataPortSchema {\n return TextNamedEntityRecognitionInputSchema as DataPortSchema;\n }\n public static 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?: JobQueueTaskConfig\n) => {\n return new TextNamedEntityRecognitionTask({} as TextNamedEntityRecognitionTaskInput, config).run(\n input\n );\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textNamedEntityRecognition: CreateWorkflow<\n TextNamedEntityRecognitionTaskInput,\n TextNamedEntityRecognitionTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textNamedEntityRecognition = CreateWorkflow(TextNamedEntityRecognitionTask);\n",
|
|
33
35
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeModel, TypeSingleOrArray } 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: TypeSingleOrArray({\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: TypeSingleOrArray({\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>;\n\n/**\n * This summarizes a piece of text\n */\n\nexport class TextSummaryTask extends StreamingAiTask<TextSummaryTaskInput, TextSummaryTaskOutput> {\n public static type = \"TextSummaryTask\";\n public static category = \"AI Text Model\";\n public static title = \"Text Summary\";\n public static description =\n \"Summarizes text into a shorter form while preserving key information\";\n public static inputSchema(): DataPortSchema {\n return TextSummaryInputSchema as DataPortSchema;\n }\n public static 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?: JobQueueTaskConfig) => {\n return new TextSummaryTask({} as TextSummaryTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textSummary: CreateWorkflow<TextSummaryTaskInput, TextSummaryTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.textSummary = CreateWorkflow(TextSummaryTask);\n",
|
|
34
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"DownloadModelTask\";\n public static category = \"AI
|
|
36
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"DownloadModelTask\";\n public static category = \"AI Model\";\n public static title = \"Download Model\";\n public static description = \"Downloads and caches AI models locally with progress tracking\";\n public static inputSchema(): DataPortSchema {\n return DownloadModelInputSchema satisfies DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return DownloadModelOutputSchema satisfies DataPortSchema;\n }\n public static cacheable = false;\n\n public files: { file: string; progress: number }[] = [];\n\n constructor(input: Partial<DownloadModelTaskRunInput>, config: JobQueueTaskConfig = {}) {\n super(input as DownloadModelTaskRunInput, 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 = (input: DownloadModelTaskRunInput, config?: JobQueueTaskConfig) => {\n return new DownloadModelTask({} as DownloadModelTaskRunInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n downloadModel: CreateWorkflow<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n JobQueueTaskConfig\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, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"FaceDetectorTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Face Detector\";\n public static description =\n \"Detects faces in images. Locates faces and identifies facial keypoints like eyes, nose, and mouth.\";\n public static inputSchema(): DataPortSchema {\n return FaceDetectorInputSchema as DataPortSchema;\n }\n public static 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?: JobQueueTaskConfig) => {\n return new FaceDetectorTask({} as FaceDetectorTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n faceDetector: CreateWorkflow<FaceDetectorTaskInput, FaceDetectorTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.faceDetector = CreateWorkflow(FaceDetectorTask);\n",
|
|
36
38
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:FaceLandmarkerTask\");\n\n/**\n * A landmark point with x, y, z coordinates.\n */\nconst TypeLandmark = {\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 z: {\n type: \"number\",\n title: \"Z Coordinate\",\n description: \"Z coordinate (depth)\",\n },\n },\n required: [\"x\", \"y\", \"z\"],\n additionalProperties: false,\n} as const;\n\n/**\n * A blendshape coefficient representing facial expression.\n */\nconst TypeBlendshape = {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n title: \"Blendshape Label\",\n description: \"Name of the blendshape (e.g., 'browDownLeft', 'eyeBlinkRight', etc.)\",\n },\n score: {\n type: \"number\",\n title: \"Coefficient Value\",\n description: \"Coefficient value for this blendshape\",\n },\n },\n required: [\"label\", \"score\"],\n additionalProperties: false,\n} as const;\n\n/**\n * A 4x4 transformation matrix.\n */\nconst TypeTransformationMatrix = {\n type: \"array\",\n items: { type: \"number\" },\n minItems: 16,\n maxItems: 16,\n title: \"Transformation Matrix\",\n description: \"4x4 transformation matrix for face effects rendering\",\n} as const;\n\n/**\n * Detection result for a single face.\n */\nconst TypeFaceLandmarkerDetection = {\n type: \"object\",\n properties: {\n landmarks: {\n type: \"array\",\n items: TypeLandmark,\n title: \"Landmarks\",\n description: \"478 facial landmarks in image coordinates\",\n },\n blendshapes: {\n type: \"array\",\n items: TypeBlendshape,\n title: \"Blendshapes\",\n description: \"52 blendshape coefficients representing facial expressions\",\n },\n transformationMatrix: TypeTransformationMatrix,\n },\n required: [\"landmarks\"],\n additionalProperties: false,\n} as const;\n\nexport const FaceLandmarkerInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n numFaces: {\n type: \"number\",\n minimum: 1,\n maximum: 10,\n default: 1,\n title: \"Number of Faces\",\n description: \"The maximum number of faces to detect\",\n \"x-ui-group\": \"Configuration\",\n },\n minFaceDetectionConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Face Detection Confidence\",\n description: \"Minimum confidence score for face detection\",\n \"x-ui-group\": \"Configuration\",\n },\n minFacePresenceConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Face Presence Confidence\",\n description: \"Minimum confidence score for face presence\",\n \"x-ui-group\": \"Configuration\",\n },\n minTrackingConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Tracking Confidence\",\n description: \"Minimum confidence score for face tracking\",\n \"x-ui-group\": \"Configuration\",\n },\n outputFaceBlendshapes: {\n type: \"boolean\",\n default: false,\n title: \"Output Face Blendshapes\",\n description: \"Whether to output blendshape coefficients for facial expressions\",\n \"x-ui-group\": \"Configuration\",\n },\n outputFacialTransformationMatrixes: {\n type: \"boolean\",\n default: false,\n title: \"Output Facial Transformation Matrix\",\n description: \"Whether to output transformation matrix for effects rendering\",\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const FaceLandmarkerOutputSchema = {\n type: \"object\",\n properties: {\n faces: {\n oneOf: [\n { type: \"array\", items: TypeFaceLandmarkerDetection },\n { type: \"array\", items: { type: \"array\", items: TypeFaceLandmarkerDetection } },\n ],\n title: \"Face Detections\",\n description: \"Detected faces with landmarks, blendshapes, and transformation matrices\",\n },\n },\n required: [\"faces\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type FaceLandmarkerTaskInput = FromSchema<typeof FaceLandmarkerInputSchema>;\nexport type FaceLandmarkerTaskOutput = FromSchema<typeof FaceLandmarkerOutputSchema>;\n\n/**\n * Detects facial landmarks and expressions in images using MediaPipe Face Landmarker.\n * Identifies 478 facial landmarks, 52 blendshape coefficients for expressions,\n * and provides transformation matrices for AR effects.\n */\nexport class FaceLandmarkerTask extends AiVisionTask<\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"FaceLandmarkerTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Face Landmarker\";\n public static description =\n \"Detects facial landmarks and expressions in images. Identifies 478 facial landmarks, blendshapes for expressions, and transformation matrices for AR effects.\";\n public static inputSchema(): DataPortSchema {\n return FaceLandmarkerInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return FaceLandmarkerOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run face landmark detection tasks.\n * Creates and executes a FaceLandmarkerTask with the provided input.\n * @param input The input parameters for face landmark detection (image, model, and optional configuration)\n * @returns Promise resolving to the detected facial landmarks, blendshapes, and transformation matrices\n */\nexport const faceLandmarker = (input: FaceLandmarkerTaskInput, config?: JobQueueTaskConfig) => {\n return new FaceLandmarkerTask({} as FaceLandmarkerTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n faceLandmarker: CreateWorkflow<\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.faceLandmarker = CreateWorkflow(FaceLandmarkerTask);\n",
|
|
37
39
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:GestureRecognizerTask\");\n\n/**\n * A landmark point with x, y, z coordinates.\n */\nconst TypeLandmark = {\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 z: {\n type: \"number\",\n title: \"Z Coordinate\",\n description: \"Z coordinate (depth)\",\n },\n },\n required: [\"x\", \"y\", \"z\"],\n additionalProperties: false,\n} as const;\n\n/**\n * A recognized gesture with label and confidence score.\n */\nconst TypeGesture = {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n title: \"Gesture Label\",\n description: \"The recognized gesture (e.g., 'Thumb_Up', 'Victory', etc.)\",\n },\n score: {\n type: \"number\",\n title: \"Confidence Score\",\n description: \"Confidence score for the gesture\",\n },\n },\n required: [\"label\", \"score\"],\n additionalProperties: false,\n} as const;\n\n/**\n * Handedness classification (left or right hand).\n */\nconst TypeHandedness = {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n title: \"Hand Label\",\n description: \"Whether the hand is 'Left' or 'Right'\",\n },\n score: {\n type: \"number\",\n title: \"Confidence Score\",\n description: \"Confidence score for the handedness classification\",\n },\n },\n required: [\"label\", \"score\"],\n additionalProperties: false,\n} as const;\n\n/**\n * Detection result for a single hand.\n */\nconst TypeHandGestureDetection = {\n type: \"object\",\n properties: {\n gestures: {\n type: \"array\",\n items: TypeGesture,\n title: \"Gestures\",\n description: \"Recognized gestures for this hand\",\n },\n handedness: {\n type: \"array\",\n items: TypeHandedness,\n title: \"Handedness\",\n description: \"Handedness classification (left/right)\",\n },\n landmarks: {\n type: \"array\",\n items: TypeLandmark,\n title: \"Landmarks\",\n description: \"21 hand landmarks in image coordinates\",\n },\n worldLandmarks: {\n type: \"array\",\n items: TypeLandmark,\n title: \"World Landmarks\",\n description: \"21 hand landmarks in 3D world coordinates (meters)\",\n },\n },\n required: [\"gestures\", \"handedness\", \"landmarks\", \"worldLandmarks\"],\n additionalProperties: false,\n} as const;\n\nexport const GestureRecognizerInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n numHands: {\n type: \"number\",\n minimum: 1,\n maximum: 10,\n default: 1,\n title: \"Number of Hands\",\n description: \"The maximum number of hands to detect\",\n \"x-ui-group\": \"Configuration\",\n },\n minHandDetectionConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Hand Detection Confidence\",\n description: \"Minimum confidence score for hand detection\",\n \"x-ui-group\": \"Configuration\",\n },\n minHandPresenceConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Hand Presence Confidence\",\n description: \"Minimum confidence score for hand presence\",\n \"x-ui-group\": \"Configuration\",\n },\n minTrackingConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Tracking Confidence\",\n description: \"Minimum confidence score for hand tracking\",\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const GestureRecognizerOutputSchema = {\n type: \"object\",\n properties: {\n hands: {\n oneOf: [\n { type: \"array\", items: TypeHandGestureDetection },\n { type: \"array\", items: { type: \"array\", items: TypeHandGestureDetection } },\n ],\n title: \"Hand Detections\",\n description: \"Detected hands with gestures, handedness, and landmarks\",\n },\n },\n required: [\"hands\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type GestureRecognizerTaskInput = FromSchema<typeof GestureRecognizerInputSchema>;\nexport type GestureRecognizerTaskOutput = FromSchema<typeof GestureRecognizerOutputSchema>;\n\n/**\n * Recognizes hand gestures in images using MediaPipe Gesture Recognizer.\n * Detects hand landmarks, identifies gestures (like thumbs up, victory sign, etc.),\n * and classifies left vs. right hands.\n */\nexport class GestureRecognizerTask extends AiVisionTask<\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"GestureRecognizerTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Gesture Recognizer\";\n public static description =\n \"Recognizes hand gestures in images. Detects hand landmarks, identifies gestures (thumbs up, victory, etc.), and classifies handedness.\";\n public static inputSchema(): DataPortSchema {\n return GestureRecognizerInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return GestureRecognizerOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run gesture recognition tasks.\n * Creates and executes a GestureRecognizerTask with the provided input.\n * @param input The input parameters for gesture recognition (image, model, and optional configuration)\n * @returns Promise resolving to the detected gestures with landmarks and handedness\n */\nexport const gestureRecognizer = (\n input: GestureRecognizerTaskInput,\n config?: JobQueueTaskConfig\n) => {\n return new GestureRecognizerTask({} as GestureRecognizerTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n gestureRecognizer: CreateWorkflow<\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.gestureRecognizer = CreateWorkflow(GestureRecognizerTask);\n",
|
|
@@ -42,7 +44,8 @@
|
|
|
42
44
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:ImageEmbeddingTask\");\n\nconst embeddingSchema = TypedArraySchema({\n title: \"Embedding\",\n description: \"The image embedding vector\",\n});\n\nexport const ImageEmbeddingInputSchema = {\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 ImageEmbeddingOutputSchema = {\n type: \"object\",\n properties: {\n vector: embeddingSchema,\n },\n required: [\"vector\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ImageEmbeddingTaskInput = FromSchema<\n typeof ImageEmbeddingInputSchema,\n TypedArraySchemaOptions\n>;\nexport type ImageEmbeddingTaskOutput = FromSchema<\n typeof ImageEmbeddingOutputSchema,\n TypedArraySchemaOptions\n>;\n\n/**\n * Generates embeddings from images using vision models\n */\nexport class ImageEmbeddingTask extends AiVisionTask<\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ImageEmbeddingTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Image Embedding\";\n public static description = \"Generates embeddings from images using vision models\";\n public static inputSchema(): DataPortSchema {\n return ImageEmbeddingInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ImageEmbeddingOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run image embedding tasks.\n * Creates and executes an ImageEmbeddingTask with the provided input.\n * @param input The input parameters for image embedding (image and model)\n * @returns Promise resolving to the image embedding vector\n */\nexport const imageEmbedding = (input: ImageEmbeddingTaskInput, config?: JobQueueTaskConfig) => {\n return new ImageEmbeddingTask({} as ImageEmbeddingTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n imageEmbedding: CreateWorkflow<\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.imageEmbedding = CreateWorkflow(ImageEmbeddingTask);\n",
|
|
43
45
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:ImageSegmentationTask\");\n\nexport const ImageSegmentationInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n threshold: {\n type: \"number\",\n title: \"Threshold\",\n description: \"The threshold for filtering masks by score\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n \"x-ui-group\": \"Configuration\",\n },\n maskThreshold: {\n type: \"number\",\n title: \"Mask Threshold\",\n description: \"Threshold to use when turning predicted masks into binary values\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst segmentationMaskSchema = {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n title: \"Label\",\n description: \"The label of the segmented region\",\n },\n score: {\n type: \"number\",\n title: \"Score\",\n description: \"The confidence score for this segmentation\",\n minimum: 0,\n maximum: 1,\n },\n mask: {\n type: \"object\",\n format: \"image\",\n title: \"Mask\",\n description: \"Mask image\",\n },\n },\n required: [\"label\", \"score\", \"mask\"],\n additionalProperties: false,\n} as const;\n\nexport const ImageSegmentationOutputSchema = {\n type: \"object\",\n properties: {\n masks: {\n oneOf: [\n { type: \"array\", items: segmentationMaskSchema },\n { type: \"array\", items: { type: \"array\", items: segmentationMaskSchema } },\n ],\n title: \"Segmentation Masks\",\n description: \"The segmented regions with their labels, scores, and masks\",\n },\n },\n required: [\"masks\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ImageSegmentationTaskInput = FromSchema<typeof ImageSegmentationInputSchema>;\nexport type ImageSegmentationTaskOutput = FromSchema<typeof ImageSegmentationOutputSchema>;\n\n/**\n * Segments images into regions using computer vision models\n */\nexport class ImageSegmentationTask extends AiVisionTask<\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ImageSegmentationTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Image Segmentation\";\n public static description =\n \"Segments images into regions with labels using computer vision models\";\n public static inputSchema(): DataPortSchema {\n return ImageSegmentationInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ImageSegmentationOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run image segmentation tasks.\n * Creates and executes an ImageSegmentationTask with the provided input.\n * @param input The input parameters for image segmentation (image and model)\n * @returns Promise resolving to the segmentation masks with labels and scores\n */\nexport const imageSegmentation = (\n input: ImageSegmentationTaskInput,\n config?: JobQueueTaskConfig\n) => {\n return new ImageSegmentationTask({} as ImageSegmentationTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n imageSegmentation: CreateWorkflow<\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.imageSegmentation = CreateWorkflow(ImageSegmentationTask);\n",
|
|
44
46
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:ImageToTextTask\");\n\nconst generatedTextSchema = {\n type: \"string\",\n title: \"Text\",\n description: \"The generated text description\",\n} as const;\n\nexport const ImageToTextInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\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 },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const ImageToTextOutputSchema = {\n type: \"object\",\n properties: {\n text: {\n oneOf: [generatedTextSchema, { type: \"array\", items: generatedTextSchema }],\n title: generatedTextSchema.title,\n description: generatedTextSchema.description,\n },\n },\n required: [\"text\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ImageToTextTaskInput = FromSchema<typeof ImageToTextInputSchema>;\nexport type ImageToTextTaskOutput = FromSchema<typeof ImageToTextOutputSchema>;\n\n/**\n * Generates text descriptions from images using vision-language models\n */\nexport class ImageToTextTask extends AiVisionTask<\n ImageToTextTaskInput,\n ImageToTextTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ImageToTextTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Image to Text\";\n public static description =\n \"Generates text descriptions from images using vision-language models\";\n public static inputSchema(): DataPortSchema {\n return ImageToTextInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ImageToTextOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run image to text tasks.\n * Creates and executes an ImageToTextTask with the provided input.\n * @param input The input parameters for image to text (image and model)\n * @returns Promise resolving to the generated text description\n */\nexport const imageToText = (input: ImageToTextTaskInput, config?: JobQueueTaskConfig) => {\n return new ImageToTextTask({} as ImageToTextTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n imageToText: CreateWorkflow<ImageToTextTaskInput, ImageToTextTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.imageToText = CreateWorkflow(ImageToTextTask);\n",
|
|
45
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {
|
|
47
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n type IExecuteContext,\n JobQueueTaskConfig,\n Workflow,\n} from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { ModelConfig } from \"../model/ModelSchema\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\nimport { AiTask } from \"./base/AiTask\";\nimport { TypeModel } from \"./base/AiTaskSchemas\";\n\nconst modelSchema = TypeModel(\"model\");\n\nconst ModelInfoInputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n detail: {\n type: \"string\",\n enum: [\"cached_status\", \"files\", \"files_with_metadata\"],\n default: \"files_with_metadata\",\n },\n },\n required: [\"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst ModelInfoOutputSchema = {\n type: \"object\",\n properties: {\n model: modelSchema,\n is_local: { type: \"boolean\" },\n is_remote: { type: \"boolean\" },\n supports_browser: { type: \"boolean\" },\n supports_node: { type: \"boolean\" },\n is_cached: { type: \"boolean\" },\n is_loaded: { type: \"boolean\" },\n file_sizes: {},\n quantizations: {\n type: \"array\",\n items: { type: \"string\" },\n description:\n \"Available quantization variants (e.g. fp32, fp16, q8). Only present for models with quantization options.\",\n },\n },\n required: [\n \"model\",\n \"is_local\",\n \"is_remote\",\n \"supports_browser\",\n \"supports_node\",\n \"is_cached\",\n \"is_loaded\",\n \"file_sizes\",\n ],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ModelInfoTaskInput = FromSchema<typeof ModelInfoInputSchema>;\nexport type ModelInfoTaskOutput = FromSchema<typeof ModelInfoOutputSchema>;\n\n/**\n * Retrieve runtime metadata about a model: locality, browser support, cache status, and file sizes.\n */\nexport class ModelInfoTask extends AiTask<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ModelInfoTask\";\n public static category = \"AI Model\";\n public static cacheable = false;\n public static title = \"Model Info\";\n public static description =\n \"Returns runtime information about a model including locality, cache status, and file sizes\";\n public static inputSchema(): DataPortSchema {\n return ModelInfoInputSchema satisfies DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ModelInfoOutputSchema satisfies DataPortSchema;\n }\n\n async execute(input: ModelInfoTaskInput, context: IExecuteContext): Promise<ModelInfoTaskOutput> {\n const model = input.model as ModelConfig;\n const registry = getAiProviderRegistry();\n const noop = () => {};\n const runFn = registry.getDirectRunFn<ModelInfoTaskInput, ModelInfoTaskOutput>(\n model.provider,\n \"ModelInfoTask\"\n );\n return runFn(input, model, noop, context.signal);\n }\n}\n\n/**\n * Retrieve runtime metadata about a model.\n *\n * @param input - Input containing the model to query\n * @returns Promise resolving to model info including locality and cache status\n */\nexport const modelInfo = (input: ModelInfoTaskInput, config?: JobQueueTaskConfig) => {\n return new ModelInfoTask({} as ModelInfoTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n modelInfo: CreateWorkflow<ModelInfoTaskInput, ModelInfoTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.modelInfo = CreateWorkflow(ModelInfoTask);\n",
|
|
48
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, IExecuteContext, Task, TaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { getAiProviderRegistry } from \"../provider/AiProviderRegistry\";\nimport type { ModelRecord } from \"../model/ModelSchema\";\n\n/**\n * A single result item from a model search.\n */\nexport interface ModelSearchResultItem {\n readonly id: string;\n readonly label: string;\n readonly description: string;\n readonly record: Partial<ModelRecord>;\n readonly raw: unknown;\n}\n\nconst ModelSearchInputSchema = {\n type: \"object\",\n properties: {\n provider: {\n type: \"string\",\n title: \"Provider\",\n description: \"The model provider to search (e.g. ANTHROPIC, OPENAI, HF_TRANSFORMERS_ONNX)\",\n },\n query: {\n type: \"string\",\n title: \"Query\",\n description: \"Search query string\",\n },\n },\n required: [\"provider\", \"query\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst ModelSearchOutputSchema = {\n type: \"object\",\n properties: {\n results: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n label: { type: \"string\" },\n description: { type: \"string\" },\n record: { type: \"object\", additionalProperties: true },\n raw: {},\n },\n required: [\"id\", \"label\", \"description\", \"record\"],\n additionalProperties: false,\n },\n },\n },\n required: [\"results\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ModelSearchTaskInput = FromSchema<typeof ModelSearchInputSchema>;\nexport type ModelSearchTaskOutput = { results: ModelSearchResultItem[] };\n\n/**\n * Search for models using a provider-specific run function from the AiProviderRegistry.\n */\nexport class ModelSearchTask extends Task<\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n TaskConfig\n> {\n public static type = \"ModelSearchTask\";\n public static category = \"AI Model\";\n public static title = \"Model Search\";\n public static description = \"Search for models using provider-specific search functions\";\n public static cacheable = false;\n\n public static inputSchema(): DataPortSchema {\n return ModelSearchInputSchema satisfies DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ModelSearchOutputSchema satisfies DataPortSchema;\n }\n\n async execute(\n input: ModelSearchTaskInput,\n context: IExecuteContext\n ): Promise<ModelSearchTaskOutput> {\n const registry = getAiProviderRegistry();\n const noop = () => {};\n const runFn = registry.getDirectRunFn<ModelSearchTaskInput, ModelSearchTaskOutput>(\n input.provider,\n \"ModelSearchTask\"\n );\n return runFn(input, undefined, noop, context.signal);\n }\n}\n\n/**\n * Search for models using a provider-specific search function.\n */\nexport const modelSearch = (input: ModelSearchTaskInput, config?: TaskConfig) => {\n return new ModelSearchTask({} as ModelSearchTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n modelSearch: CreateWorkflow<ModelSearchTaskInput, ModelSearchTaskOutput, TaskConfig>;\n }\n}\n\nWorkflow.prototype.modelSearch = CreateWorkflow(ModelSearchTask);\n",
|
|
46
49
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeBoundingBox, TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:ObjectDetectionTask\");\n\nconst detectionSchema = {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n title: \"Label\",\n description: \"The label of the detected object\",\n },\n score: {\n type: \"number\",\n title: \"Confidence Score\",\n description: \"The confidence score for this detection\",\n minimum: 0,\n maximum: 1,\n },\n box: TypeBoundingBox,\n },\n required: [\"label\", \"score\", \"box\"],\n additionalProperties: false,\n} as const;\n\nexport const ObjectDetectionInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n labels: {\n type: \"array\",\n items: {\n type: \"string\",\n },\n title: \"Labels\",\n description:\n \"List of object labels to detect (optional, if provided uses zero-shot detection)\",\n \"x-ui-group\": \"Configuration\",\n },\n threshold: {\n type: \"number\",\n title: \"Threshold\",\n description: \"The threshold for filtering detections by score\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const ObjectDetectionOutputSchema = {\n type: \"object\",\n properties: {\n detections: {\n oneOf: [\n { type: \"array\", items: detectionSchema },\n { type: \"array\", items: { type: \"array\", items: detectionSchema } },\n ],\n title: \"Detections\",\n description: \"The detected objects with their labels, scores, and bounding boxes\",\n },\n },\n required: [\"detections\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type ObjectDetectionTaskInput = FromSchema<typeof ObjectDetectionInputSchema>;\nexport type ObjectDetectionTaskOutput = FromSchema<typeof ObjectDetectionOutputSchema>;\n\n/**\n * Detects objects in images using vision models.\n * Automatically selects between regular and zero-shot detection based on whether labels are provided.\n */\nexport class ObjectDetectionTask extends AiVisionTask<\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"ObjectDetectionTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Object Detection\";\n public static description =\n \"Detects objects in images using vision models. Supports zero-shot detection when labels are provided.\";\n public static inputSchema(): DataPortSchema {\n return ObjectDetectionInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return ObjectDetectionOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run object detection tasks.\n * Creates and executes an ObjectDetectionTask with the provided input.\n * @param input The input parameters for object detection (image, model, and optional labels)\n * @returns Promise resolving to the detected objects with labels, scores, and bounding boxes\n */\nexport const objectDetection = (input: ObjectDetectionTaskInput, config?: JobQueueTaskConfig) => {\n return new ObjectDetectionTask({} as ObjectDetectionTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n objectDetection: CreateWorkflow<\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.objectDetection = CreateWorkflow(ObjectDetectionTask);\n",
|
|
47
50
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeImageInput, TypeModel } from \"./base/AiTaskSchemas\";\nimport { AiVisionTask } from \"./base/AiVisionTask\";\n\nconst modelSchema = TypeModel(\"model:PoseLandmarkerTask\");\n\n/**\n * A landmark point with x, y, z coordinates and visibility/presence scores.\n */\nconst TypePoseLandmark = {\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 z: {\n type: \"number\",\n title: \"Z Coordinate\",\n description: \"Z coordinate (depth)\",\n },\n visibility: {\n type: \"number\",\n title: \"Visibility\",\n description: \"Likelihood of the landmark being visible within the image\",\n },\n presence: {\n type: \"number\",\n title: \"Presence\",\n description: \"Likelihood of the landmark being present in the image\",\n },\n },\n required: [\"x\", \"y\", \"z\"],\n additionalProperties: false,\n} as const;\n\n/**\n * A segmentation mask for the detected person.\n */\nconst TypeSegmentationMask = {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n title: \"Mask Data\",\n description: \"Canvas or image data containing the segmentation mask\",\n },\n width: {\n type: \"number\",\n title: \"Width\",\n description: \"Width of the segmentation mask\",\n },\n height: {\n type: \"number\",\n title: \"Height\",\n description: \"Height of the segmentation mask\",\n },\n },\n required: [\"data\", \"width\", \"height\"],\n additionalProperties: false,\n} as const;\n\n/**\n * Detection result for a single pose.\n */\nconst TypePoseDetection = {\n type: \"object\",\n properties: {\n landmarks: {\n type: \"array\",\n items: TypePoseLandmark,\n title: \"Landmarks\",\n description: \"33 pose landmarks in image coordinates\",\n },\n worldLandmarks: {\n type: \"array\",\n items: TypePoseLandmark,\n title: \"World Landmarks\",\n description: \"33 pose landmarks in 3D world coordinates (meters)\",\n },\n segmentationMask: TypeSegmentationMask,\n },\n required: [\"landmarks\", \"worldLandmarks\"],\n additionalProperties: false,\n} as const;\n\nexport const PoseLandmarkerInputSchema = {\n type: \"object\",\n properties: {\n image: TypeImageInput,\n model: modelSchema,\n numPoses: {\n type: \"number\",\n minimum: 1,\n maximum: 10,\n default: 1,\n title: \"Number of Poses\",\n description: \"The maximum number of poses to detect\",\n \"x-ui-group\": \"Configuration\",\n },\n minPoseDetectionConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Pose Detection Confidence\",\n description: \"Minimum confidence score for pose detection\",\n \"x-ui-group\": \"Configuration\",\n },\n minPosePresenceConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Pose Presence Confidence\",\n description: \"Minimum confidence score for pose presence\",\n \"x-ui-group\": \"Configuration\",\n },\n minTrackingConfidence: {\n type: \"number\",\n minimum: 0,\n maximum: 1,\n default: 0.5,\n title: \"Min Tracking Confidence\",\n description: \"Minimum confidence score for pose tracking\",\n \"x-ui-group\": \"Configuration\",\n },\n outputSegmentationMasks: {\n type: \"boolean\",\n default: false,\n title: \"Output Segmentation Masks\",\n description: \"Whether to output segmentation masks for detected poses\",\n \"x-ui-group\": \"Configuration\",\n },\n },\n required: [\"image\", \"model\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport const PoseLandmarkerOutputSchema = {\n type: \"object\",\n properties: {\n poses: {\n oneOf: [\n { type: \"array\", items: TypePoseDetection },\n { type: \"array\", items: { type: \"array\", items: TypePoseDetection } },\n ],\n title: \"Pose Detections\",\n description: \"Detected poses with landmarks and optional segmentation masks\",\n },\n },\n required: [\"poses\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type PoseLandmarkerTaskInput = FromSchema<typeof PoseLandmarkerInputSchema>;\nexport type PoseLandmarkerTaskOutput = FromSchema<typeof PoseLandmarkerOutputSchema>;\n\n/**\n * Detects pose landmarks in images using MediaPipe Pose Landmarker.\n * Identifies 33 body landmarks for pose estimation and optional segmentation.\n */\nexport class PoseLandmarkerTask extends AiVisionTask<\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"PoseLandmarkerTask\";\n public static category = \"AI Vision Model\";\n public static title = \"Pose Landmarker\";\n public static description =\n \"Detects pose landmarks in images. Identifies 33 body landmarks for pose estimation and optional segmentation.\";\n public static inputSchema(): DataPortSchema {\n return PoseLandmarkerInputSchema as DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return PoseLandmarkerOutputSchema as DataPortSchema;\n }\n}\n\n/**\n * Convenience function to run pose landmark detection tasks.\n * Creates and executes a PoseLandmarkerTask with the provided input.\n * @param input The input parameters for pose landmark detection (image, model, and optional configuration)\n * @returns Promise resolving to the detected pose landmarks and optional segmentation masks\n */\nexport const poseLandmarker = (input: PoseLandmarkerTaskInput, config?: JobQueueTaskConfig) => {\n return new PoseLandmarkerTask({} as PoseLandmarkerTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n poseLandmarker: CreateWorkflow<\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.poseLandmarker = CreateWorkflow(PoseLandmarkerTask);\n",
|
|
48
51
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n IExecuteContext,\n JobQueueTaskConfig,\n Task,\n Workflow,\n} from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\n\nexport const QueryExpansionMethod = {\n MULTI_QUERY: \"multi-query\",\n HYDE: \"hyde\",\n SYNONYMS: \"synonyms\",\n PARAPHRASE: \"paraphrase\",\n} as const;\n\nexport type QueryExpansionMethod = (typeof QueryExpansionMethod)[keyof typeof QueryExpansionMethod];\n\nconst inputSchema = {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n title: \"Query\",\n description: \"The original query to expand\",\n },\n method: {\n type: \"string\",\n enum: Object.values(QueryExpansionMethod),\n title: \"Expansion Method\",\n description: \"Method to use for query expansion\",\n default: QueryExpansionMethod.MULTI_QUERY,\n },\n numVariations: {\n type: \"number\",\n title: \"Number of Variations\",\n description: \"Number of query variations to generate\",\n minimum: 1,\n maximum: 10,\n default: 3,\n },\n model: {\n type: \"string\",\n title: \"Model\",\n description: \"LLM model to use for expansion (for HyDE and paraphrase methods)\",\n },\n },\n required: [\"query\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nconst outputSchema = {\n type: \"object\",\n properties: {\n query: {\n type: \"array\",\n items: { type: \"string\" },\n title: \"Expanded Queries\",\n description: \"Generated query variations\",\n },\n originalQuery: {\n type: \"string\",\n title: \"Original Query\",\n description: \"The original input query\",\n },\n method: {\n type: \"string\",\n title: \"Method Used\",\n description: \"The expansion method that was used\",\n },\n count: {\n type: \"number\",\n title: \"Count\",\n description: \"Number of queries generated\",\n },\n },\n required: [\"query\", \"originalQuery\", \"method\", \"count\"],\n additionalProperties: false,\n} as const satisfies DataPortSchema;\n\nexport type QueryExpanderTaskInput = FromSchema<typeof inputSchema>;\nexport type QueryExpanderTaskOutput = FromSchema<typeof outputSchema>;\n\n/**\n * Task for expanding queries to improve retrieval coverage.\n * Supports multiple expansion methods including multi-query, HyDE, and paraphrasing.\n *\n * Note: HyDE and paraphrase methods require an LLM model.\n * For now, this implements simple rule-based expansion.\n */\nexport class QueryExpanderTask extends Task<\n QueryExpanderTaskInput,\n QueryExpanderTaskOutput,\n JobQueueTaskConfig\n> {\n public static type = \"QueryExpanderTask\";\n public static category = \"RAG\";\n public static title = \"Query Expander\";\n public static description = \"Expand queries to improve retrieval coverage\";\n public static cacheable = true;\n\n public static inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n async execute(\n input: QueryExpanderTaskInput,\n context: IExecuteContext\n ): Promise<QueryExpanderTaskOutput> {\n const { query, method = QueryExpansionMethod.MULTI_QUERY, numVariations = 3 } = input;\n\n let queries: string[];\n\n switch (method) {\n case QueryExpansionMethod.HYDE:\n queries = this.hydeExpansion(query, numVariations);\n break;\n case QueryExpansionMethod.SYNONYMS:\n queries = this.synonymExpansion(query, numVariations);\n break;\n case QueryExpansionMethod.PARAPHRASE:\n queries = this.paraphraseExpansion(query, numVariations);\n break;\n case QueryExpansionMethod.MULTI_QUERY:\n default:\n queries = this.multiQueryExpansion(query, numVariations);\n break;\n }\n\n // Always include original query\n if (!queries.includes(query)) {\n queries.unshift(query);\n }\n\n return {\n query: queries,\n originalQuery: query,\n method,\n count: queries.length,\n };\n }\n\n /**\n * Multi-query expansion: Generate variations by rephrasing the question\n */\n private multiQueryExpansion(query: string, numVariations: number): string[] {\n const queries: string[] = [query];\n\n // Simple rule-based variations\n const variations: string[] = [];\n\n // Question word variations\n if (query.toLowerCase().startsWith(\"what\")) {\n variations.push(query.replace(/^what/i, \"Which\"));\n variations.push(query.replace(/^what/i, \"Can you explain\"));\n } else if (query.toLowerCase().startsWith(\"how\")) {\n variations.push(query.replace(/^how/i, \"What is the method to\"));\n variations.push(query.replace(/^how/i, \"In what way\"));\n } else if (query.toLowerCase().startsWith(\"why\")) {\n variations.push(query.replace(/^why/i, \"What is the reason\"));\n variations.push(query.replace(/^why/i, \"For what purpose\"));\n } else if (query.toLowerCase().startsWith(\"where\")) {\n variations.push(query.replace(/^where/i, \"In which location\"));\n variations.push(query.replace(/^where/i, \"At what place\"));\n }\n\n // Add \"Tell me about\" variation\n if (!query.toLowerCase().startsWith(\"tell me\")) {\n variations.push(`Tell me about ${query.toLowerCase()}`);\n }\n\n // Add \"Explain\" variation\n if (!query.toLowerCase().startsWith(\"explain\")) {\n variations.push(`Explain ${query.toLowerCase()}`);\n }\n\n // Take up to numVariations\n for (let i = 0; i < Math.min(numVariations - 1, variations.length); i++) {\n if (variations[i] && !queries.includes(variations[i])) {\n queries.push(variations[i]);\n }\n }\n\n return queries;\n }\n\n /**\n * HyDE (Hypothetical Document Embeddings): Generate hypothetical answers\n */\n private hydeExpansion(query: string, numVariations: number): string[] {\n // TODO: in a real implementation, this would call a model to generate hypothetical answer templates\n const queries: string[] = [query];\n\n const templates = [\n `The answer to \"${query}\" is that`,\n `Regarding ${query}, it is important to note that`,\n `${query} can be explained by the fact that`,\n `In response to ${query}, one should consider that`,\n ];\n\n for (let i = 0; i < Math.min(numVariations - 1, templates.length); i++) {\n queries.push(templates[i]);\n }\n\n return queries;\n }\n\n /**\n * Synonym expansion: Replace keywords with synonyms\n */\n private synonymExpansion(query: string, numVariations: number): string[] {\n const queries: string[] = [query];\n\n // Simple synonym dictionary (in production, use a proper thesaurus)\n const synonyms: Record<string, string[]> = {\n find: [\"locate\", \"discover\", \"search for\"],\n create: [\"make\", \"build\", \"generate\"],\n delete: [\"remove\", \"erase\", \"eliminate\"],\n update: [\"modify\", \"change\", \"edit\"],\n show: [\"display\", \"present\", \"reveal\"],\n explain: [\"describe\", \"clarify\", \"elaborate\"],\n help: [\"assist\", \"aid\", \"support\"],\n problem: [\"issue\", \"challenge\", \"difficulty\"],\n solution: [\"answer\", \"resolution\", \"fix\"],\n method: [\"approach\", \"technique\", \"way\"],\n };\n\n const words = query.toLowerCase().split(/\\s+/);\n let variationsGenerated = 0;\n\n for (const [word, syns] of Object.entries(synonyms)) {\n if (variationsGenerated >= numVariations - 1) break;\n\n const wordIndex = words.indexOf(word);\n if (wordIndex !== -1) {\n for (const syn of syns) {\n if (variationsGenerated >= numVariations - 1) break;\n\n const newWords = [...words];\n newWords[wordIndex] = syn;\n const newQuery = newWords.join(\" \");\n\n // Preserve original capitalization pattern\n const capitalizedQuery = this.preserveCapitalization(query, newQuery);\n if (!queries.includes(capitalizedQuery)) {\n queries.push(capitalizedQuery);\n variationsGenerated++;\n }\n }\n }\n }\n\n return queries;\n }\n\n /**\n * Paraphrase expansion: Rephrase the query\n * TODO: This should use an LLM for better paraphrasing\n */\n private paraphraseExpansion(query: string, numVariations: number): string[] {\n const queries: string[] = [query];\n\n // Simple paraphrase templates\n const paraphrases: string[] = [];\n\n // Add context\n paraphrases.push(`I need information about ${query.toLowerCase()}`);\n paraphrases.push(`Can you help me understand ${query.toLowerCase()}`);\n paraphrases.push(`I'm looking for details on ${query.toLowerCase()}`);\n\n for (let i = 0; i < Math.min(numVariations - 1, paraphrases.length); i++) {\n if (!queries.includes(paraphrases[i])) {\n queries.push(paraphrases[i]);\n }\n }\n\n return queries;\n }\n\n /**\n * Preserve capitalization pattern from original to new query\n */\n private preserveCapitalization(original: string, modified: string): string {\n if (original[0] === original[0].toUpperCase()) {\n return modified.charAt(0).toUpperCase() + modified.slice(1);\n }\n return modified;\n }\n}\n\nexport const queryExpander = (input: QueryExpanderTaskInput, config?: JobQueueTaskConfig) => {\n return new QueryExpanderTask({} as QueryExpanderTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n queryExpander: CreateWorkflow<\n QueryExpanderTaskInput,\n QueryExpanderTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.queryExpander = CreateWorkflow(QueryExpanderTask);\n",
|
|
@@ -58,12 +61,12 @@
|
|
|
58
61
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeModel, TypeSingleOrArray } 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: TypeSingleOrArray({\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: TypeSingleOrArray({\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>;\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> {\n public static type = \"TextRewriterTask\";\n public static category = \"AI Text Model\";\n public static title = \"Text Rewriter\";\n public static description = \"Rewrites text according to a given prompt using language models\";\n public static inputSchema(): DataPortSchema {\n return TextRewriterInputSchema as DataPortSchema;\n }\n public static 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?: JobQueueTaskConfig) => {\n return new TextRewriterTask({} as TextRewriterTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textRewriter: CreateWorkflow<TextRewriterTaskInput, TextRewriterTaskOutput, JobQueueTaskConfig>;\n }\n}\n\nWorkflow.prototype.textRewriter = CreateWorkflow(TextRewriterTask);\n",
|
|
59
62
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\nimport { TypeLanguage, TypeModel, TypeSingleOrArray } from \"./base/AiTaskSchemas\";\nimport { StreamingAiTask } from \"./base/StreamingAiTask\";\n\nconst modelSchema = TypeModel(\"model:TextTranslationTask\");\n\nconst translationTextSchema = TypeSingleOrArray({\n type: \"string\",\n title: \"Text\",\n description: \"The translated text\",\n \"x-stream\": \"replace\",\n});\n\nexport const TextTranslationInputSchema = {\n type: \"object\",\n properties: {\n text: TypeSingleOrArray({\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>;\n\n/**\n * This translates text from one language to another\n */\nexport class TextTranslationTask extends StreamingAiTask<\n TextTranslationTaskInput,\n TextTranslationTaskOutput\n> {\n public static type = \"TextTranslationTask\";\n public static category = \"AI Text Model\";\n public static title = \"Text Translation\";\n public static description = \"Translates text from one language to another using language models\";\n public static inputSchema(): DataPortSchema {\n return TextTranslationInputSchema as DataPortSchema;\n }\n public static 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 = (input: TextTranslationTaskInput, config?: JobQueueTaskConfig) => {\n return new TextTranslationTask({} as TextTranslationTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n textTranslation: CreateWorkflow<\n TextTranslationTaskInput,\n TextTranslationTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.textTranslation = CreateWorkflow(TextTranslationTask);\n",
|
|
60
63
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n CreateWorkflow,\n IExecuteContext,\n JobQueueTaskConfig,\n Task,\n Workflow,\n} from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"TopicSegmenterTask\";\n public static category = \"Document\";\n public static title = \"Topic Segmenter\";\n public static description = \"Segment text into topic-based sections using hybrid approach\";\n public static cacheable = true;\n private static readonly EMBEDDING_DIMENSIONS = 256;\n\n public static inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n 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 = (input: TopicSegmenterTaskInput, config?: JobQueueTaskConfig) => {\n return new TopicSegmenterTask({} as TopicSegmenterTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n topicSegmenter: CreateWorkflow<\n TopicSegmenterTaskInput,\n TopicSegmenterTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.topicSegmenter = CreateWorkflow(TopicSegmenterTask);\n",
|
|
61
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"UnloadModelTask\";\n public static category = \"
|
|
64
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport { DataPortSchema, FromSchema } from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"UnloadModelTask\";\n public static category = \"AI Model\";\n public static title = \"Unload Model\";\n public static description = \"Unloads and clears cached AI models from memory and storage\";\n public static inputSchema(): DataPortSchema {\n return UnloadModelInputSchema satisfies DataPortSchema;\n }\n public static outputSchema(): DataPortSchema {\n return UnloadModelOutputSchema satisfies DataPortSchema;\n }\n public static 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?: JobQueueTaskConfig) => {\n return new UnloadModelTask({} as UnloadModelTaskRunInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n unloadModel: CreateWorkflow<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.unloadModel = CreateWorkflow(UnloadModelTask);\n",
|
|
62
65
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, JobQueueTaskConfig, Task, Workflow } from \"@workglow/task-graph\";\nimport {\n DataPortSchema,\n FromSchema,\n normalizeNumberArray,\n TensorType,\n TypedArray,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util\";\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>;\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 JobQueueTaskConfig\n> {\n public static type = \"VectorQuantizeTask\";\n public static category = \"Vector\";\n public static title = \"Quantize\";\n public static description = \"Quantize vectors to reduce storage and improve performance\";\n public static cacheable = true;\n\n public static inputSchema(): DataPortSchema {\n return inputSchema as DataPortSchema;\n }\n\n public static outputSchema(): DataPortSchema {\n return outputSchema as DataPortSchema;\n }\n\n async executeReactive(input: VectorQuantizeTaskInput): 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 = (input: VectorQuantizeTaskInput, config?: JobQueueTaskConfig) => {\n return new VectorQuantizeTask({} as VectorQuantizeTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n vectorQuantize: CreateWorkflow<\n VectorQuantizeTaskInput,\n VectorQuantizeTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.vectorQuantize = CreateWorkflow(VectorQuantizeTask);\n",
|
|
63
66
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CreateWorkflow, GraphAsTask, JobQueueTaskConfig, Workflow } from \"@workglow/task-graph\";\nimport {\n cosineSimilarity,\n DataPortSchema,\n FromSchema,\n hammingSimilarity,\n jaccardSimilarity,\n TypedArraySchema,\n TypedArraySchemaOptions,\n} from \"@workglow/util\";\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>;\n\nexport class VectorSimilarityTask extends GraphAsTask<\n VectorSimilarityTaskInput,\n VectorSimilarityTaskOutput,\n JobQueueTaskConfig\n> {\n static readonly type = \"VectorSimilarityTask\";\n static readonly category = \"Vector\";\n static readonly title = \"Vector Similarity\";\n public static description =\n \"Compares vectors using similarity functions and returns top-K ranked results\";\n static 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 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 = (input: VectorSimilarityTaskInput, config?: JobQueueTaskConfig) => {\n return new VectorSimilarityTask({} as VectorSimilarityTaskInput, config).run(input);\n};\n\ndeclare module \"@workglow/task-graph\" {\n interface Workflow {\n similarity: CreateWorkflow<\n VectorSimilarityTaskInput,\n VectorSimilarityTaskOutput,\n JobQueueTaskConfig\n >;\n }\n}\n\nWorkflow.prototype.similarity = CreateWorkflow(VectorSimilarityTask);\n",
|
|
64
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"
|
|
65
68
|
],
|
|
66
|
-
"mappings": "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",
|
|
67
|
-
"debugId": "
|
|
69
|
+
"mappings": "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",
|
|
70
|
+
"debugId": "A00982DDB1044BF764756E2164756E21",
|
|
68
71
|
"names": []
|
|
69
72
|
}
|