@workglow/ai-provider 0.0.99 → 0.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HFT_JobRunFns-ajak33q5.js → HFT_JobRunFns-aap9x58c.js} +8 -2
- package/dist/{HFT_JobRunFns-ajak33q5.js.map → HFT_JobRunFns-aap9x58c.js.map} +1 -1
- package/dist/anthropic/AnthropicProvider.d.ts +4 -4
- package/dist/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/anthropic/Anthropic_Worker.d.ts.map +1 -1
- package/dist/anthropic/common/Anthropic_JobRunFns.d.ts +4 -1
- package/dist/anthropic/common/Anthropic_JobRunFns.d.ts.map +1 -1
- package/dist/anthropic/index.js +21 -3
- package/dist/anthropic/index.js.map +4 -4
- package/dist/google-gemini/Gemini_Worker.d.ts.map +1 -1
- package/dist/google-gemini/GoogleGeminiProvider.d.ts +3 -3
- package/dist/google-gemini/GoogleGeminiProvider.d.ts.map +1 -1
- package/dist/google-gemini/common/Gemini_JobRunFns.d.ts +4 -1
- package/dist/google-gemini/common/Gemini_JobRunFns.d.ts.map +1 -1
- package/dist/google-gemini/index.js +21 -4
- package/dist/google-gemini/index.js.map +4 -4
- package/dist/hf-transformers/HFT_Worker.d.ts.map +1 -1
- package/dist/hf-transformers/HuggingFaceTransformersProvider.d.ts +3 -3
- package/dist/hf-transformers/HuggingFaceTransformersProvider.d.ts.map +1 -1
- package/dist/hf-transformers/common/HFT_JobRunFns.d.ts +61 -1
- package/dist/hf-transformers/common/HFT_JobRunFns.d.ts.map +1 -1
- package/dist/hf-transformers/index.js +10 -4
- package/dist/hf-transformers/index.js.map +3 -3
- package/dist/{index-kctzvn3c.js → index-236gqvq1.js} +12 -5
- package/dist/{index-kctzvn3c.js.map → index-236gqvq1.js.map} +3 -3
- package/dist/{index-9w5hs4zc.js → index-3tvpdt0s.js} +6 -4
- package/dist/{index-9w5hs4zc.js.map → index-3tvpdt0s.js.map} +3 -3
- package/dist/{index-2pvfsjyx.js → index-8jqhbz1h.js} +101 -141
- package/dist/index-8jqhbz1h.js.map +10 -0
- package/dist/{index-rmbnv0rw.js → index-b9310x5k.js} +5 -4
- package/dist/{index-rmbnv0rw.js.map → index-b9310x5k.js.map} +3 -3
- package/dist/{index-xyavfrb8.js → index-cfd8ne0j.js} +7 -4
- package/dist/{index-xyavfrb8.js.map → index-cfd8ne0j.js.map} +3 -3
- package/dist/{index-34rcjm0y.js → index-fgp2zg78.js} +8 -5
- package/dist/{index-34rcjm0y.js.map → index-fgp2zg78.js.map} +3 -3
- package/dist/{index-wnmajxg6.js → index-h5kwbbzq.js} +7 -4
- package/dist/{index-wnmajxg6.js.map → index-h5kwbbzq.js.map} +3 -3
- package/dist/{index-tn88s0ke.js → index-w496eeda.js} +6 -4
- package/dist/{index-tn88s0ke.js.map → index-w496eeda.js.map} +3 -3
- package/dist/index.js +10 -10
- package/dist/index.js.map +3 -3
- package/dist/provider-hf-inference/HfInferenceProvider.d.ts +2 -2
- package/dist/provider-hf-inference/HfInferenceProvider.d.ts.map +1 -1
- package/dist/provider-hf-inference/index.js +1 -1
- package/dist/provider-llamacpp/LlamaCppProvider.d.ts +3 -3
- package/dist/provider-llamacpp/LlamaCppProvider.d.ts.map +1 -1
- package/dist/provider-llamacpp/LlamaCpp_Worker.d.ts.map +1 -1
- package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts +4 -1
- package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts.map +1 -1
- package/dist/provider-llamacpp/index.js +18 -3
- package/dist/provider-llamacpp/index.js.map +4 -4
- package/dist/provider-ollama/OllamaProvider.d.ts +2 -2
- package/dist/provider-ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/provider-ollama/index.browser.js +6 -4
- package/dist/provider-ollama/index.browser.js.map +3 -3
- package/dist/provider-ollama/index.js +1 -1
- package/dist/provider-openai/OpenAI_Worker.d.ts.map +1 -1
- package/dist/provider-openai/OpenAiProvider.d.ts +3 -3
- package/dist/provider-openai/OpenAiProvider.d.ts.map +1 -1
- package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts +10 -1
- package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts.map +1 -1
- package/dist/provider-openai/index.js +51 -4
- package/dist/provider-openai/index.js.map +4 -4
- package/dist/tf-mediapipe/TensorFlowMediaPipeProvider.d.ts +2 -2
- package/dist/tf-mediapipe/TensorFlowMediaPipeProvider.d.ts.map +1 -1
- package/dist/tf-mediapipe/index.js +3 -3
- package/dist/tf-mediapipe/index.js.map +3 -3
- package/package.json +19 -14
- package/dist/index-2pvfsjyx.js.map +0 -10
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
OpenAiModelRecordSchema,
|
|
5
5
|
OpenAiModelSchema,
|
|
6
6
|
OpenAiProvider
|
|
7
|
-
} from "../index-
|
|
7
|
+
} from "../index-fgp2zg78.js";
|
|
8
8
|
import {
|
|
9
9
|
__require
|
|
10
10
|
} from "../index-jd3bbc2x.js";
|
|
@@ -159,26 +159,70 @@ var OpenAI_TextSummary_Stream = async function* (input, model, signal) {
|
|
|
159
159
|
}
|
|
160
160
|
yield { type: "finish", data: {} };
|
|
161
161
|
};
|
|
162
|
+
var _tiktoken;
|
|
163
|
+
async function loadTiktoken() {
|
|
164
|
+
if (!_tiktoken) {
|
|
165
|
+
try {
|
|
166
|
+
_tiktoken = await import("tiktoken");
|
|
167
|
+
} catch {
|
|
168
|
+
throw new Error("tiktoken is required for OpenAI token counting. Install it with: bun add tiktoken");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return _tiktoken;
|
|
172
|
+
}
|
|
173
|
+
var _encoderCache = new Map;
|
|
174
|
+
function _setTiktokenForTesting(mod) {
|
|
175
|
+
_tiktoken = mod;
|
|
176
|
+
_encoderCache.clear();
|
|
177
|
+
}
|
|
178
|
+
async function getEncoder(modelName) {
|
|
179
|
+
const tiktoken = await loadTiktoken();
|
|
180
|
+
if (!_encoderCache.has(modelName)) {
|
|
181
|
+
try {
|
|
182
|
+
_encoderCache.set(modelName, tiktoken.encoding_for_model(modelName));
|
|
183
|
+
} catch {
|
|
184
|
+
const fallback = "cl100k_base";
|
|
185
|
+
if (!_encoderCache.has(fallback)) {
|
|
186
|
+
_encoderCache.set(fallback, tiktoken.get_encoding(fallback));
|
|
187
|
+
}
|
|
188
|
+
_encoderCache.set(modelName, _encoderCache.get(fallback));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return _encoderCache.get(modelName);
|
|
192
|
+
}
|
|
193
|
+
var OpenAI_CountTokens = async (input, model) => {
|
|
194
|
+
const enc = await getEncoder(getModelName(model));
|
|
195
|
+
const tokens = enc.encode(input.text);
|
|
196
|
+
return { count: tokens.length };
|
|
197
|
+
};
|
|
198
|
+
var OpenAI_CountTokens_Reactive = async (input, _output, model) => {
|
|
199
|
+
return OpenAI_CountTokens(input, model, () => {}, new AbortController().signal);
|
|
200
|
+
};
|
|
162
201
|
var OPENAI_TASKS = {
|
|
163
202
|
TextGenerationTask: OpenAI_TextGeneration,
|
|
164
203
|
TextEmbeddingTask: OpenAI_TextEmbedding,
|
|
165
204
|
TextRewriterTask: OpenAI_TextRewriter,
|
|
166
|
-
TextSummaryTask: OpenAI_TextSummary
|
|
205
|
+
TextSummaryTask: OpenAI_TextSummary,
|
|
206
|
+
CountTokensTask: OpenAI_CountTokens
|
|
167
207
|
};
|
|
168
208
|
var OPENAI_STREAM_TASKS = {
|
|
169
209
|
TextGenerationTask: OpenAI_TextGeneration_Stream,
|
|
170
210
|
TextRewriterTask: OpenAI_TextRewriter_Stream,
|
|
171
211
|
TextSummaryTask: OpenAI_TextSummary_Stream
|
|
172
212
|
};
|
|
213
|
+
var OPENAI_REACTIVE_TASKS = {
|
|
214
|
+
CountTokensTask: OpenAI_CountTokens_Reactive
|
|
215
|
+
};
|
|
173
216
|
// src/provider-openai/OpenAI_Worker.ts
|
|
174
217
|
import { globalServiceRegistry, parentPort, WORKER_SERVER } from "@workglow/util";
|
|
175
218
|
function OPENAI_WORKER_JOBRUN_REGISTER() {
|
|
176
219
|
const workerServer = globalServiceRegistry.get(WORKER_SERVER);
|
|
177
|
-
new OpenAiProvider(OPENAI_TASKS, OPENAI_STREAM_TASKS).registerOnWorkerServer(workerServer);
|
|
220
|
+
new OpenAiProvider(OPENAI_TASKS, OPENAI_STREAM_TASKS, OPENAI_REACTIVE_TASKS).registerOnWorkerServer(workerServer);
|
|
178
221
|
parentPort.postMessage({ type: "ready" });
|
|
179
222
|
console.log("OPENAI_WORKER_JOBRUN registered");
|
|
180
223
|
}
|
|
181
224
|
export {
|
|
225
|
+
_setTiktokenForTesting,
|
|
182
226
|
OpenAiProvider,
|
|
183
227
|
OpenAiModelSchema,
|
|
184
228
|
OpenAiModelRecordSchema,
|
|
@@ -190,10 +234,13 @@ export {
|
|
|
190
234
|
OpenAI_TextGeneration_Stream,
|
|
191
235
|
OpenAI_TextGeneration,
|
|
192
236
|
OpenAI_TextEmbedding,
|
|
237
|
+
OpenAI_CountTokens_Reactive,
|
|
238
|
+
OpenAI_CountTokens,
|
|
193
239
|
OPENAI_WORKER_JOBRUN_REGISTER,
|
|
194
240
|
OPENAI_TASKS,
|
|
195
241
|
OPENAI_STREAM_TASKS,
|
|
242
|
+
OPENAI_REACTIVE_TASKS,
|
|
196
243
|
OPENAI
|
|
197
244
|
};
|
|
198
245
|
|
|
199
|
-
//# debugId=
|
|
246
|
+
//# debugId=8093B1950594C8BD64756E2164756E21
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/provider-openai/common/OpenAI_JobRunFns.ts", "../src/provider-openai/OpenAI_Worker.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\nlet _sdk: typeof import(\"openai\") | undefined;\nasync function loadOpenAISDK() {\n if (!_sdk) {\n try {\n _sdk = await import(\"openai\");\n } catch {\n throw new Error(\"openai is required for OpenAI tasks. Install it with: bun add openai\");\n }\n }\n return _sdk.default;\n}\n\nasync function getClient(model: OpenAiModelConfig | undefined) {\n const OpenAI = await loadOpenAISDK();\n const apiKey =\n model?.provider_config?.api_key ||\n (typeof process !== \"undefined\" ? process.env?.OPENAI_API_KEY : undefined);\n if (!apiKey) {\n throw new Error(\n \"Missing OpenAI API key: set provider_config.api_key or the OPENAI_API_KEY environment variable.\"\n );\n }\n return new OpenAI({\n apiKey,\n baseURL: model?.provider_config?.base_url || undefined,\n organization: model?.provider_config?.organization || undefined,\n dangerouslyAllowBrowser: true,\n });\n}\n\nfunction getModelName(model: OpenAiModelConfig | undefined): string {\n const name = model?.provider_config?.model_name;\n if (!name) {\n throw new Error(\"Missing model name in provider_config.model_name.\");\n }\n return name;\n}\n\nexport const OpenAI_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text generation\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text embedding\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.embeddings.create(\n {\n model: modelName,\n input: input.text,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text embedding\");\n\n if (Array.isArray(input.text)) {\n return {\n vector: response.data.map(\n (item: { embedding: number[] }) => new Float32Array(item.embedding)\n ),\n };\n }\n return { vector: new Float32Array(response.data[0].embedding) };\n};\n\nexport const OpenAI_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text rewriting\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt },\n { role: \"user\", content: input.text },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text rewriting\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text summarization\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text summarization\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\n// ========================================================================\n// Streaming implementations (append mode)\n// ========================================================================\n\nexport const OpenAI_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n};\n\nexport const OpenAI_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt },\n { role: \"user\", content: input.text },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n};\n\nexport const OpenAI_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\n};\n\n// ========================================================================\n// Task registries\n// ========================================================================\n\nexport const OPENAI_TASKS: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>> = {\n TextGenerationTask: OpenAI_TextGeneration,\n TextEmbeddingTask: OpenAI_TextEmbedding,\n TextRewriterTask: OpenAI_TextRewriter,\n TextSummaryTask: OpenAI_TextSummary,\n};\n\nexport const OPENAI_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, OpenAiModelConfig>\n> = {\n TextGenerationTask: OpenAI_TextGeneration_Stream,\n TextRewriterTask: OpenAI_TextRewriter_Stream,\n TextSummaryTask: OpenAI_TextSummary_Stream,\n};\n",
|
|
6
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalServiceRegistry, parentPort, WORKER_SERVER } from \"@workglow/util\";\nimport {
|
|
5
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderReactiveRunFn,\n AiProviderRunFn,\n AiProviderStreamFn,\n CountTokensTaskInput,\n CountTokensTaskOutput,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\nlet _sdk: typeof import(\"openai\") | undefined;\nasync function loadOpenAISDK() {\n if (!_sdk) {\n try {\n _sdk = await import(\"openai\");\n } catch {\n throw new Error(\"openai is required for OpenAI tasks. Install it with: bun add openai\");\n }\n }\n return _sdk.default;\n}\n\nasync function getClient(model: OpenAiModelConfig | undefined) {\n const OpenAI = await loadOpenAISDK();\n const apiKey =\n model?.provider_config?.api_key ||\n (typeof process !== \"undefined\" ? process.env?.OPENAI_API_KEY : undefined);\n if (!apiKey) {\n throw new Error(\n \"Missing OpenAI API key: set provider_config.api_key or the OPENAI_API_KEY environment variable.\"\n );\n }\n return new OpenAI({\n apiKey,\n baseURL: model?.provider_config?.base_url || undefined,\n organization: model?.provider_config?.organization || undefined,\n dangerouslyAllowBrowser: true,\n });\n}\n\nfunction getModelName(model: OpenAiModelConfig | undefined): string {\n const name = model?.provider_config?.model_name;\n if (!name) {\n throw new Error(\"Missing model name in provider_config.model_name.\");\n }\n return name;\n}\n\nexport const OpenAI_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text generation\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text embedding\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.embeddings.create(\n {\n model: modelName,\n input: input.text,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text embedding\");\n\n if (Array.isArray(input.text)) {\n return {\n vector: response.data.map(\n (item: { embedding: number[] }) => new Float32Array(item.embedding)\n ),\n };\n }\n return { vector: new Float32Array(response.data[0].embedding) };\n};\n\nexport const OpenAI_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text rewriting\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt },\n { role: \"user\", content: input.text },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text rewriting\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text summarization\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text summarization\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\n// ========================================================================\n// Streaming implementations (append mode)\n// ========================================================================\n\nexport const OpenAI_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n};\n\nexport const OpenAI_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt },\n { role: \"user\", content: input.text },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n};\n\nexport const OpenAI_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\n};\n\n// ========================================================================\n// Token counting via tiktoken (local, no API call)\n// ========================================================================\n\nlet _tiktoken: typeof import(\"tiktoken\") | undefined;\nasync function loadTiktoken() {\n if (!_tiktoken) {\n try {\n _tiktoken = await import(\"tiktoken\");\n } catch {\n throw new Error(\n \"tiktoken is required for OpenAI token counting. Install it with: bun add tiktoken\"\n );\n }\n }\n return _tiktoken;\n}\n\n// Cache encoders by model name to avoid repeated allocation overhead.\nconst _encoderCache = new Map<string, ReturnType<typeof import(\"tiktoken\").get_encoding>>();\n\n/**\n * @internal Test-only hook: inject a mock tiktoken module and clear the encoder cache.\n * Needed because `vi.mock(\"tiktoken\")` cannot intercept the dynamic `import(\"tiktoken\")`\n * that lives inside `loadTiktoken()` when running under vitest.\n */\nexport function _setTiktokenForTesting(\n mod: typeof import(\"tiktoken\") | undefined\n): void {\n _tiktoken = mod;\n _encoderCache.clear();\n}\n\nasync function getEncoder(modelName: string) {\n const tiktoken = await loadTiktoken();\n if (!_encoderCache.has(modelName)) {\n try {\n _encoderCache.set(\n modelName,\n tiktoken.encoding_for_model(\n modelName as Parameters<typeof tiktoken.encoding_for_model>[0]\n )\n );\n } catch {\n // Fall back to cl100k_base for unknown/newer models.\n const fallback = \"cl100k_base\";\n if (!_encoderCache.has(fallback)) {\n _encoderCache.set(fallback, tiktoken.get_encoding(fallback));\n }\n _encoderCache.set(modelName, _encoderCache.get(fallback)!);\n }\n }\n return _encoderCache.get(modelName)!;\n}\n\nexport const OpenAI_CountTokens: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, model) => {\n const enc = await getEncoder(getModelName(model));\n const tokens = enc.encode(input.text);\n return { count: tokens.length };\n};\n\nexport const OpenAI_CountTokens_Reactive: AiProviderReactiveRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, _output, model) => {\n return OpenAI_CountTokens(input, model, () => {}, new AbortController().signal);\n};\n\n// ========================================================================\n// Task registries\n// ========================================================================\n\nexport const OPENAI_TASKS: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>> = {\n TextGenerationTask: OpenAI_TextGeneration,\n TextEmbeddingTask: OpenAI_TextEmbedding,\n TextRewriterTask: OpenAI_TextRewriter,\n TextSummaryTask: OpenAI_TextSummary,\n CountTokensTask: OpenAI_CountTokens,\n};\n\nexport const OPENAI_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, OpenAiModelConfig>\n> = {\n TextGenerationTask: OpenAI_TextGeneration_Stream,\n TextRewriterTask: OpenAI_TextRewriter_Stream,\n TextSummaryTask: OpenAI_TextSummary_Stream,\n};\n\nexport const OPENAI_REACTIVE_TASKS: Record<\n string,\n AiProviderReactiveRunFn<any, any, OpenAiModelConfig>\n> = {\n CountTokensTask: OpenAI_CountTokens_Reactive,\n};\n",
|
|
6
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalServiceRegistry, parentPort, WORKER_SERVER } from \"@workglow/util\";\nimport {\n OPENAI_REACTIVE_TASKS,\n OPENAI_STREAM_TASKS,\n OPENAI_TASKS,\n} from \"./common/OpenAI_JobRunFns\";\nimport { OpenAiProvider } from \"./OpenAiProvider\";\n\nexport function OPENAI_WORKER_JOBRUN_REGISTER() {\n const workerServer = globalServiceRegistry.get(WORKER_SERVER);\n new OpenAiProvider(\n OPENAI_TASKS,\n OPENAI_STREAM_TASKS,\n OPENAI_REACTIVE_TASKS\n ).registerOnWorkerServer(workerServer);\n parentPort.postMessage({ type: \"ready\" });\n console.log(\"OPENAI_WORKER_JOBRUN registered\");\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;;;;;;
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "8093B1950594C8BD64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Steven Roussey <sroussey@gmail.com>
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { AiProvider, type AiProviderRunFn } from "@workglow/ai";
|
|
6
|
+
import { AiProvider, type AiProviderReactiveRunFn, type AiProviderRunFn } from "@workglow/ai";
|
|
7
7
|
import type { TFMPModelConfig } from "./common/TFMP_ModelSchema";
|
|
8
8
|
/**
|
|
9
9
|
* AI provider for TensorFlow MediaPipe models.
|
|
@@ -34,6 +34,6 @@ import type { TFMPModelConfig } from "./common/TFMP_ModelSchema";
|
|
|
34
34
|
export declare class TensorFlowMediaPipeProvider extends AiProvider<TFMPModelConfig> {
|
|
35
35
|
readonly name = "TENSORFLOW_MEDIAPIPE";
|
|
36
36
|
readonly taskTypes: readonly ["DownloadModelTask", "UnloadModelTask", "TextEmbeddingTask", "TextLanguageDetectionTask", "TextClassificationTask", "ImageSegmentationTask", "ImageEmbeddingTask", "ImageClassificationTask", "ObjectDetectionTask", "GestureRecognizerTask", "HandLandmarkerTask", "FaceDetectorTask", "FaceLandmarkerTask", "PoseLandmarkerTask"];
|
|
37
|
-
constructor(tasks?: Record<string, AiProviderRunFn<any, any, TFMPModelConfig>>);
|
|
37
|
+
constructor(tasks?: Record<string, AiProviderRunFn<any, any, TFMPModelConfig>>, reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, TFMPModelConfig>>);
|
|
38
38
|
}
|
|
39
39
|
//# sourceMappingURL=TensorFlowMediaPipeProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TensorFlowMediaPipeProvider.d.ts","sourceRoot":"","sources":["../../src/tf-mediapipe/TensorFlowMediaPipeProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"TensorFlowMediaPipeProvider.d.ts","sourceRoot":"","sources":["../../src/tf-mediapipe/TensorFlowMediaPipeProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,uBAAuB,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAE9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,2BAA4B,SAAQ,UAAU,CAAC,eAAe,CAAC;IAC1E,QAAQ,CAAC,IAAI,0BAAwB;IAErC,QAAQ,CAAC,SAAS,gVAeP;gBAGT,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,EAClE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;CAIrF"}
|
|
@@ -619,8 +619,8 @@ class TensorFlowMediaPipeProvider extends AiProvider {
|
|
|
619
619
|
"FaceLandmarkerTask",
|
|
620
620
|
"PoseLandmarkerTask"
|
|
621
621
|
];
|
|
622
|
-
constructor(tasks) {
|
|
623
|
-
super(tasks);
|
|
622
|
+
constructor(tasks, reactiveTasks) {
|
|
623
|
+
super(tasks, undefined, reactiveTasks);
|
|
624
624
|
}
|
|
625
625
|
}
|
|
626
626
|
// src/tf-mediapipe/TFMP_Worker.ts
|
|
@@ -656,4 +656,4 @@ export {
|
|
|
656
656
|
TENSORFLOW_MEDIAPIPE
|
|
657
657
|
};
|
|
658
658
|
|
|
659
|
-
//# debugId=
|
|
659
|
+
//# debugId=A7AA0CB8A148FA1C64756E2164756E21
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const TENSORFLOW_MEDIAPIPE = \"TENSORFLOW_MEDIAPIPE\";\n\nexport type TextPipelineTask =\n | \"text-embedder\"\n | \"text-classifier\"\n | \"text-language-detector\"\n | \"genai-text\"\n | \"audio-classifier\"\n | \"audio-embedder\"\n | \"vision-face-detector\"\n | \"vision-face-landmarker\"\n | \"vision-face-stylizer\"\n | \"vision-gesture-recognizer\"\n | \"vision-hand-landmarker\"\n | \"vision-holistic-landmarker\"\n | \"vision-image-classifier\"\n | \"vision-image-embedder\"\n | \"vision-image-segmenter\"\n | \"vision-image-interactive-segmenter\"\n | \"vision-object-detector\"\n | \"vision-pose-landmarker\";\n\nexport const TextPipelineTask = {\n \"text-embedder\": \"text-embedder\",\n \"text-classifier\": \"text-classifier\",\n \"text-language-detector\": \"text-language-detector\",\n \"genai-text\": \"genai-text\",\n \"audio-classifier\": \"audio-classifier\",\n \"audio-embedder\": \"audio-embedder\",\n \"vision-face-detector\": \"vision-face-detector\",\n \"vision-face-landmarker\": \"vision-face-landmarker\",\n \"vision-face-stylizer\": \"vision-face-stylizer\",\n \"vision-gesture-recognizer\": \"vision-gesture-recognizer\",\n \"vision-hand-landmarker\": \"vision-hand-landmarker\",\n \"vision-holistic-landmarker\": \"vision-holistic-landmarker\",\n \"vision-image-classifier\": \"vision-image-classifier\",\n \"vision-image-embedder\": \"vision-image-embedder\",\n \"vision-image-segmenter\": \"vision-image-segmenter\",\n \"vision-image-interactive-segmenter\": \"vision-image-interactive-segmenter\",\n \"vision-object-detector\": \"vision-object-detector\",\n \"vision-pose-landmarker\": \"vision-pose-landmarker\",\n} as const satisfies Record<TextPipelineTask, TextPipelineTask>;\n",
|
|
6
6
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n FaceDetectorTaskInput,\n FaceDetectorTaskOutput,\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n HandLandmarkerTaskInput,\n HandLandmarkerTaskOutput,\n ImageClassificationTaskInput,\n ImageClassificationTaskOutput,\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextLanguageDetectionTaskInput,\n TextLanguageDetectionTaskOutput,\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\n\nlet _textSdk: typeof import(\"@mediapipe/tasks-text\") | undefined;\nasync function loadMediaPipeTextSDK() {\n if (!_textSdk) {\n try {\n _textSdk = await import(\"@mediapipe/tasks-text\");\n } catch {\n throw new Error(\n \"@mediapipe/tasks-text is required for MediaPipe text tasks. Install it with: bun add @mediapipe/tasks-text\"\n );\n }\n }\n return _textSdk;\n}\n\nlet _visionSdk: typeof import(\"@mediapipe/tasks-vision\") | undefined;\nasync function loadMediaPipeVisionSDK() {\n if (!_visionSdk) {\n try {\n _visionSdk = await import(\"@mediapipe/tasks-vision\");\n } catch {\n throw new Error(\n \"@mediapipe/tasks-vision is required for MediaPipe vision tasks. Install it with: bun add @mediapipe/tasks-vision\"\n );\n }\n }\n return _visionSdk;\n}\n\ninterface TFMPWasmFileset {\n /** The path to the Wasm loader script. */\n wasmLoaderPath: string;\n /** The path to the Wasm binary. */\n wasmBinaryPath: string;\n /** The optional path to the asset loader script. */\n assetLoaderPath?: string;\n /** The optional path to the assets binary. */\n assetBinaryPath?: string;\n}\n\n/**\n * Cache for WASM filesets by task engine (text, audio, vision, genai).\n * Multiple models may share the same WASM fileset.\n */\nconst wasm_tasks = new Map<string, TFMPWasmFileset>();\n\n/**\n * Reference counts tracking how many models are using each WASM fileset.\n * When count reaches 0, the WASM fileset can be safely unloaded.\n */\nconst wasm_reference_counts = new Map<string, number>();\n\n/**\n * Helper function to get a WASM task for a model\n */\nconst getWasmTask = async (\n model: TFMPModelConfig,\n onProgress: (progress: number, message?: string, details?: any) => void,\n signal: AbortSignal\n): Promise<TFMPWasmFileset> => {\n const task_engine = model.provider_config.task_engine;\n\n if (wasm_tasks.has(task_engine)) {\n return wasm_tasks.get(task_engine)!;\n }\n\n if (signal.aborted) {\n throw new PermanentJobError(\"Aborted job\");\n }\n\n onProgress(0.1, \"Loading WASM task\");\n\n const { FilesetResolver } = await loadMediaPipeTextSDK();\n let wasmFileset: TFMPWasmFileset;\n\n switch (task_engine) {\n case \"text\":\n wasmFileset = await FilesetResolver.forTextTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/wasm\"\n );\n break;\n case \"audio\":\n wasmFileset = await FilesetResolver.forAudioTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-audio@latest/wasm\"\n );\n break;\n case \"vision\":\n wasmFileset = await FilesetResolver.forVisionTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\"\n );\n break;\n case \"genai\":\n wasmFileset = await FilesetResolver.forGenAiTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm\"\n );\n break;\n default:\n throw new PermanentJobError(\"Invalid task engine\");\n }\n\n wasm_tasks.set(task_engine, wasmFileset);\n return wasmFileset;\n};\n\ntype TaskConstructor = {\n createFromOptions(wasmFileset: TFMPWasmFileset, options: Record<string, unknown>): Promise<any>;\n};\n\ntype TaskInstance = {\n close(): void;\n [key: string]: any;\n};\n\ninterface CachedModelTask {\n readonly task: TaskInstance;\n readonly options: Record<string, unknown>;\n readonly task_engine: string;\n}\n\nconst modelTaskCache = new Map<string, CachedModelTask[]>();\n\n/**\n * Checks if two option objects are deeply equal.\n */\nconst optionsMatch = (opts1: Record<string, unknown>, opts2: Record<string, unknown>): boolean => {\n const keys1 = Object.keys(opts1).sort();\n const keys2 = Object.keys(opts2).sort();\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => {\n const val1 = opts1[key];\n const val2 = opts2[key];\n\n if (Array.isArray(val1) && Array.isArray(val2)) {\n return JSON.stringify(val1) === JSON.stringify(val2);\n }\n\n return val1 === val2;\n });\n};\n\nconst getModelTask = async (\n model: TFMPModelConfig,\n options: Record<string, unknown>,\n onProgress: (progress: number, message?: string, details?: any) => void,\n signal: AbortSignal,\n TaskType: TaskConstructor\n): Promise<any> => {\n const model_path = model.provider_config.model_path;\n const task_engine = model.provider_config.task_engine;\n\n // Check if we have a cached instance with matching options\n const cachedTasks = modelTaskCache.get(model_path);\n if (cachedTasks) {\n const matchedTask = cachedTasks.find((cached) => optionsMatch(cached.options, options));\n if (matchedTask) {\n return matchedTask.task;\n }\n }\n\n // Load WASM if needed\n const wasmFileset = await getWasmTask(model, onProgress, signal);\n\n onProgress(0.2, \"Creating model task\");\n\n // Create new model instance\n const task = await (TaskType as any).createFromOptions(wasmFileset, {\n baseOptions: {\n modelAssetPath: model_path,\n },\n ...options,\n });\n\n // Cache the task with its options and task engine\n const cachedTask: CachedModelTask = { task, options, task_engine };\n if (!modelTaskCache.has(model_path)) {\n modelTaskCache.set(model_path, []);\n }\n modelTaskCache.get(model_path)!.push(cachedTask);\n\n // Increment WASM reference count for this cached task\n wasm_reference_counts.set(task_engine, (wasm_reference_counts.get(task_engine) || 0) + 1);\n\n return task;\n};\n\n/**\n * Core implementation for downloading and caching a MediaPipe TFJS model.\n * This is shared between inline and worker implementations.\n */\nexport const TFMP_Download: AiProviderRunFn<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n let task: TaskInstance;\n switch (model?.provider_config.pipeline) {\n // Text pipelines\n case \"text-embedder\": {\n const { TextEmbedder } = await loadMediaPipeTextSDK();\n task = await getModelTask(model, {}, onProgress, signal, TextEmbedder);\n break;\n }\n case \"text-classifier\": {\n const { TextClassifier } = await loadMediaPipeTextSDK();\n task = await getModelTask(model, {}, onProgress, signal, TextClassifier);\n break;\n }\n case \"text-language-detector\": {\n const { LanguageDetector } = await loadMediaPipeTextSDK();\n task = await getModelTask(model, {}, onProgress, signal, LanguageDetector);\n break;\n }\n // Vision pipelines\n case \"vision-image-classifier\": {\n const { ImageClassifier } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ImageClassifier);\n break;\n }\n case \"vision-image-embedder\": {\n const { ImageEmbedder } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ImageEmbedder);\n break;\n }\n case \"vision-image-segmenter\": {\n const { ImageSegmenter } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ImageSegmenter);\n break;\n }\n case \"vision-object-detector\": {\n const { ObjectDetector } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ObjectDetector);\n break;\n }\n case \"vision-face-detector\": {\n const { FaceDetector } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, FaceDetector);\n break;\n }\n case \"vision-face-landmarker\": {\n const { FaceLandmarker } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, FaceLandmarker);\n break;\n }\n case \"vision-gesture-recognizer\": {\n const { GestureRecognizer } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, GestureRecognizer);\n break;\n }\n case \"vision-hand-landmarker\": {\n const { HandLandmarker } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, HandLandmarker);\n break;\n }\n case \"vision-pose-landmarker\": {\n const { PoseLandmarker } = await loadMediaPipeVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, PoseLandmarker);\n break;\n }\n default:\n throw new PermanentJobError(\n `Invalid pipeline: ${model?.provider_config.pipeline}. Supported pipelines: text-embedder, text-classifier, text-language-detector, vision-image-classifier, vision-image-embedder, vision-image-segmenter, vision-object-detector, vision-face-detector, vision-face-landmarker, vision-gesture-recognizer, vision-hand-landmarker, vision-pose-landmarker`\n );\n }\n onProgress(0.9, \"Pipeline loaded\");\n task.close(); // Close the task to release the resources, but it is still in the browser cache\n // Decrease reference count for WASM fileset for this cached task since this is a fake model cache entry\n const task_engine = model?.provider_config.task_engine;\n wasm_reference_counts.set(task_engine, wasm_reference_counts.get(task_engine)! - 1);\n\n return {\n model: input.model,\n };\n};\n\n/**\n * Core implementation for text embedding using MediaPipe TFJS.\n * This is shared between inline and worker implementations.\n */\nexport const TFMP_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { TextEmbedder } = await loadMediaPipeTextSDK();\n const textEmbedder = await getModelTask(model!, {}, onProgress, signal, TextEmbedder);\n\n // Handle array of texts\n if (Array.isArray(input.text)) {\n const embeddings = input.text.map((text) => {\n const result = textEmbedder.embed(text);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n return Float32Array.from(result.embeddings[0].floatEmbedding);\n });\n\n return {\n vector: embeddings,\n };\n }\n\n // Handle single text\n const result = textEmbedder.embed(input.text);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n const embedding = Float32Array.from(result.embeddings[0].floatEmbedding);\n\n return {\n vector: embedding,\n };\n};\n\n/**\n * Core implementation for text classification using MediaPipe TFJS.\n * This is shared between inline and worker implementations.\n */\nexport const TFMP_TextClassification: AiProviderRunFn<\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { TextClassifier } = await loadMediaPipeTextSDK();\n const TextClassification = await getModelTask(\n model!,\n {\n maxCategories: input.maxCategories,\n // scoreThreshold: input.scoreThreshold,\n // allowList: input.allowList,\n // blockList: input.blockList,\n },\n onProgress,\n signal,\n TextClassifier\n );\n const result = TextClassification.classify(input.text);\n\n if (!result.classifications?.[0]?.categories) {\n throw new PermanentJobError(\"Failed to classify text: Empty result\");\n }\n\n const categories = result.classifications[0].categories.map((category: any) => ({\n label: category.categoryName,\n score: category.score,\n }));\n\n return {\n categories,\n };\n};\n\n/**\n * Core implementation for language detection using MediaPipe TFJS.\n * This is shared between inline and worker implementations.\n */\nexport const TFMP_TextLanguageDetection: AiProviderRunFn<\n TextLanguageDetectionTaskInput,\n TextLanguageDetectionTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const maxLanguages = input.maxLanguages === 0 ? -1 : input.maxLanguages;\n\n const { LanguageDetector } = await loadMediaPipeTextSDK();\n const textLanguageDetector = await getModelTask(\n model!,\n {\n maxLanguages,\n // scoreThreshold: input.scoreThreshold,\n // allowList: input.allowList,\n // blockList: input.blockList,\n },\n onProgress,\n signal,\n LanguageDetector\n );\n const result = textLanguageDetector.detect(input.text);\n\n if (!result.languages?.[0]?.languageCode) {\n throw new PermanentJobError(\"Failed to detect language: Empty result\");\n }\n\n const languages = result.languages.map((language: any) => ({\n language: language.languageCode,\n score: language.probability,\n }));\n\n return {\n languages,\n };\n};\n\n/**\n * Core implementation for unloading a MediaPipe TFJS model.\n * This is shared between inline and worker implementations.\n *\n * When a model is unloaded, this function:\n * 1. Disposes of all cached model instances for the given model path\n * 2. Decrements the reference count for the associated WASM fileset for each instance\n * 3. If no other models are using the WASM fileset (count reaches 0), unloads the WASM\n */\nexport const TFMP_Unload: AiProviderRunFn<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const model_path = model!.provider_config.model_path;\n onProgress(10, \"Unloading model\");\n // Dispose of all cached model tasks if they exist\n if (modelTaskCache.has(model_path)) {\n const cachedTasks = modelTaskCache.get(model_path)!;\n\n for (const cachedTask of cachedTasks) {\n const task = cachedTask.task;\n if (\"close\" in task && typeof task.close === \"function\") task.close();\n\n // Decrease reference count for WASM fileset for this cached task\n const task_engine = cachedTask.task_engine;\n const currentCount = wasm_reference_counts.get(task_engine) || 0;\n const newCount = currentCount - 1;\n\n if (newCount <= 0) {\n // No more models using this WASM fileset, unload it\n wasm_tasks.delete(task_engine);\n wasm_reference_counts.delete(task_engine);\n } else {\n wasm_reference_counts.set(task_engine, newCount);\n }\n }\n\n modelTaskCache.delete(model_path);\n }\n\n return {\n model: input.model,\n };\n};\n\n/**\n * Core implementation for image segmentation using MediaPipe.\n */\nexport const TFMP_ImageSegmentation: AiProviderRunFn<\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ImageSegmenter } = await loadMediaPipeVisionSDK();\n const imageSegmenter = await getModelTask(model!, {}, onProgress, signal, ImageSegmenter);\n const result = imageSegmenter.segment(input.image as any);\n\n if (!result.categoryMask) {\n throw new PermanentJobError(\"Failed to segment image: Empty result\");\n }\n\n // MediaPipe returns a single mask, create a placeholder result\n const masks = [\n {\n label: \"segment\",\n score: 1.0,\n mask: {\n data: result.categoryMask.canvas,\n width: result.categoryMask.width,\n height: result.categoryMask.height,\n },\n },\n ];\n\n return {\n masks,\n };\n};\n\n/**\n * Core implementation for image embedding using MediaPipe.\n */\nexport const TFMP_ImageEmbedding: AiProviderRunFn<\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ImageEmbedder } = await loadMediaPipeVisionSDK();\n const imageEmbedder = await getModelTask(model!, {}, onProgress, signal, ImageEmbedder);\n const result = imageEmbedder.embed(input.image as any);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n const embedding = Float32Array.from(result.embeddings[0].floatEmbedding);\n\n return {\n vector: embedding,\n } as ImageEmbeddingTaskOutput;\n};\n\n/**\n * Core implementation for image classification using MediaPipe.\n */\nexport const TFMP_ImageClassification: AiProviderRunFn<\n ImageClassificationTaskInput,\n ImageClassificationTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ImageClassifier } = await loadMediaPipeVisionSDK();\n const imageClassifier = await getModelTask(\n model!,\n {\n maxResults: (input as any).maxCategories,\n },\n onProgress,\n signal,\n ImageClassifier\n );\n const result = imageClassifier.classify(input.image as any);\n\n if (!result.classifications?.[0]?.categories) {\n throw new PermanentJobError(\"Failed to classify image: Empty result\");\n }\n\n const categories = result.classifications[0].categories.map((category: any) => ({\n label: category.categoryName,\n score: category.score,\n }));\n\n return {\n categories,\n };\n};\n\n/**\n * Core implementation for object detection using MediaPipe.\n */\nexport const TFMP_ObjectDetection: AiProviderRunFn<\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ObjectDetector } = await loadMediaPipeVisionSDK();\n const objectDetector = await getModelTask(\n model!,\n {\n scoreThreshold: (input as any).threshold,\n },\n onProgress,\n signal,\n ObjectDetector\n );\n const result = objectDetector.detect(input.image as any);\n\n if (!result.detections) {\n throw new PermanentJobError(\"Failed to detect objects: Empty result\");\n }\n\n const detections = result.detections.map((detection: any) => ({\n label: detection.categories?.[0]?.categoryName || \"unknown\",\n score: detection.categories?.[0]?.score || 0,\n box: {\n x: detection.boundingBox?.originX || 0,\n y: detection.boundingBox?.originY || 0,\n width: detection.boundingBox?.width || 0,\n height: detection.boundingBox?.height || 0,\n },\n }));\n\n return {\n detections,\n };\n};\n\n/**\n * Core implementation for gesture recognition using MediaPipe.\n */\nexport const TFMP_GestureRecognizer: AiProviderRunFn<\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { GestureRecognizer } = await loadMediaPipeVisionSDK();\n const gestureRecognizer = await getModelTask(\n model!,\n {\n numHands: (input as any).numHands,\n minHandDetectionConfidence: (input as any).minHandDetectionConfidence,\n minHandPresenceConfidence: (input as any).minHandPresenceConfidence,\n minTrackingConfidence: (input as any).minTrackingConfidence,\n },\n onProgress,\n signal,\n GestureRecognizer\n );\n const result = gestureRecognizer.recognize(input.image as any);\n\n if (!result.gestures || !result.landmarks) {\n throw new PermanentJobError(\"Failed to recognize gestures: Empty result\");\n }\n\n const hands = result.gestures.map((gestures: any, index: number) => ({\n gestures: gestures.map((g: any) => ({\n label: g.categoryName,\n score: g.score,\n })),\n handedness: result.handedness[index].map((h: any) => ({\n label: h.categoryName,\n score: h.score,\n })),\n landmarks: result.landmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n }));\n\n return {\n hands,\n };\n};\n\n/**\n * Core implementation for hand landmark detection using MediaPipe.\n */\nexport const TFMP_HandLandmarker: AiProviderRunFn<\n HandLandmarkerTaskInput,\n HandLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { HandLandmarker } = await loadMediaPipeVisionSDK();\n const handLandmarker = await getModelTask(\n model!,\n {\n numHands: (input as any).numHands,\n minHandDetectionConfidence: (input as any).minHandDetectionConfidence,\n minHandPresenceConfidence: (input as any).minHandPresenceConfidence,\n minTrackingConfidence: (input as any).minTrackingConfidence,\n },\n onProgress,\n signal,\n HandLandmarker\n );\n const result = handLandmarker.detect(input.image as any);\n\n if (!result.landmarks) {\n throw new PermanentJobError(\"Failed to detect hand landmarks: Empty result\");\n }\n\n const hands = result.landmarks.map((landmarks: any, index: number) => ({\n handedness: result.handedness[index].map((h: any) => ({\n label: h.categoryName,\n score: h.score,\n })),\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n }));\n\n return {\n hands,\n };\n};\n\n/**\n * Core implementation for face detection using MediaPipe.\n */\nexport const TFMP_FaceDetector: AiProviderRunFn<\n FaceDetectorTaskInput,\n FaceDetectorTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { FaceDetector } = await loadMediaPipeVisionSDK();\n const faceDetector = await getModelTask(\n model!,\n {\n minDetectionConfidence: (input as any).minDetectionConfidence,\n minSuppressionThreshold: (input as any).minSuppressionThreshold,\n },\n onProgress,\n signal,\n FaceDetector\n );\n const result = faceDetector.detect(input.image as any);\n\n if (!result.detections) {\n throw new PermanentJobError(\"Failed to detect faces: Empty result\");\n }\n\n const faces = result.detections.map((detection: any) => ({\n box: {\n x: detection.boundingBox?.originX || 0,\n y: detection.boundingBox?.originY || 0,\n width: detection.boundingBox?.width || 0,\n height: detection.boundingBox?.height || 0,\n },\n keypoints:\n detection.keypoints?.map((kp: any) => ({\n x: kp.x,\n y: kp.y,\n label: kp.label,\n })) || [],\n score: detection.categories?.[0]?.score || 0,\n }));\n\n return {\n faces,\n };\n};\n\n/**\n * Core implementation for face landmark detection using MediaPipe.\n */\nexport const TFMP_FaceLandmarker: AiProviderRunFn<\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { FaceLandmarker } = await loadMediaPipeVisionSDK();\n const faceLandmarker = await getModelTask(\n model!,\n {\n numFaces: (input as any).numFaces,\n minFaceDetectionConfidence: (input as any).minFaceDetectionConfidence,\n minFacePresenceConfidence: (input as any).minFacePresenceConfidence,\n minTrackingConfidence: (input as any).minTrackingConfidence,\n outputFaceBlendshapes: (input as any).outputFaceBlendshapes,\n outputFacialTransformationMatrixes: (input as any).outputFacialTransformationMatrixes,\n },\n onProgress,\n signal,\n FaceLandmarker\n );\n const result = faceLandmarker.detect(input.image as any);\n\n if (!result.faceLandmarks) {\n throw new PermanentJobError(\"Failed to detect face landmarks: Empty result\");\n }\n\n const faces = result.faceLandmarks.map((landmarks: any, index: number) => {\n const face: any = {\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n };\n\n if (result.faceBlendshapes && result.faceBlendshapes[index]) {\n face.blendshapes = result.faceBlendshapes[index].categories.map((b: any) => ({\n label: b.categoryName,\n score: b.score,\n }));\n }\n\n if (result.facialTransformationMatrixes && result.facialTransformationMatrixes[index]) {\n face.transformationMatrix = Array.from(result.facialTransformationMatrixes[index].data);\n }\n\n return face;\n });\n\n return {\n faces,\n };\n};\n\n/**\n * Core implementation for pose landmark detection using MediaPipe.\n */\nexport const TFMP_PoseLandmarker: AiProviderRunFn<\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { PoseLandmarker } = await loadMediaPipeVisionSDK();\n const poseLandmarker = await getModelTask(\n model!,\n {\n numPoses: (input as any).numPoses,\n minPoseDetectionConfidence: (input as any).minPoseDetectionConfidence,\n minPosePresenceConfidence: (input as any).minPosePresenceConfidence,\n minTrackingConfidence: (input as any).minTrackingConfidence,\n outputSegmentationMasks: (input as any).outputSegmentationMasks,\n },\n onProgress,\n signal,\n PoseLandmarker\n );\n const result = poseLandmarker.detect(input.image as any);\n\n if (!result.landmarks) {\n throw new PermanentJobError(\"Failed to detect pose landmarks: Empty result\");\n }\n\n const poses = result.landmarks.map((landmarks: any, index: number) => {\n const pose: any = {\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n visibility: l.visibility,\n presence: l.presence,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n visibility: l.visibility,\n presence: l.presence,\n })),\n };\n\n if (result.segmentationMasks && result.segmentationMasks[index]) {\n const mask = result.segmentationMasks[index];\n pose.segmentationMask = {\n data: mask.canvas || mask,\n width: mask.width,\n height: mask.height,\n };\n }\n\n return pose;\n });\n\n return {\n poses,\n };\n};\n\n/**\n * All TensorFlow MediaPipe task run functions, keyed by task type name.\n * Pass this to `new TensorFlowMediaPipeProvider(TFMP_TASKS)` when the\n * actual run function implementations are needed (inline mode, worker server).\n */\nexport const TFMP_TASKS = {\n DownloadModelTask: TFMP_Download,\n UnloadModelTask: TFMP_Unload,\n TextEmbeddingTask: TFMP_TextEmbedding,\n TextLanguageDetectionTask: TFMP_TextLanguageDetection,\n TextClassificationTask: TFMP_TextClassification,\n ImageSegmentationTask: TFMP_ImageSegmentation,\n ImageEmbeddingTask: TFMP_ImageEmbedding,\n ImageClassificationTask: TFMP_ImageClassification,\n ObjectDetectionTask: TFMP_ObjectDetection,\n GestureRecognizerTask: TFMP_GestureRecognizer,\n HandLandmarkerTask: TFMP_HandLandmarker,\n FaceDetectorTask: TFMP_FaceDetector,\n FaceLandmarkerTask: TFMP_FaceLandmarker,\n PoseLandmarkerTask: TFMP_PoseLandmarker,\n} as const;\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ModelConfigSchema, ModelRecordSchema } from \"@workglow/ai\";\nimport { DataPortSchemaObject, FromSchema } from \"@workglow/util\";\nimport { TENSORFLOW_MEDIAPIPE, TextPipelineTask } from \"../common/TFMP_Constants\";\n\nexport const TFMPModelSchema = {\n type: \"object\",\n properties: {\n provider: {\n const: TENSORFLOW_MEDIAPIPE,\n description: \"Discriminator: TensorFlow MediaPipe backend.\",\n },\n provider_config: {\n type: \"object\",\n description: \"TensorFlow MediaPipe-specific options.\",\n properties: {\n model_path: {\n type: \"string\",\n description: \"Filesystem path or URI for the ONNX model.\",\n },\n task_engine: {\n type: \"string\",\n enum: [\"text\", \"audio\", \"vision\", \"genai\"],\n description: \"Task engine for the MediaPipe model.\",\n },\n pipeline: {\n type: \"string\",\n enum: Object.values(TextPipelineTask),\n description: \"Pipeline task type for the MediaPipe model.\",\n },\n },\n required: [\"model_path\", \"task_engine\", \"pipeline\"],\n additionalProperties: false,\n },\n },\n required: [\"provider\", \"provider_config\"],\n additionalProperties: true,\n} as const satisfies DataPortSchemaObject;\n\nexport const TFMPModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelRecordSchema.properties,\n ...TFMPModelSchema.properties,\n },\n required: [...ModelRecordSchema.required, ...TFMPModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type TFMPModelRecord = FromSchema<typeof TFMPModelRecordSchema>;\n\nexport const TFMPModelConfigSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n ...TFMPModelSchema.properties,\n },\n required: [...ModelConfigSchema.required, ...TFMPModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type TFMPModelConfig = FromSchema<typeof TFMPModelConfigSchema>;\n",
|
|
8
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider, type AiProviderRunFn } from \"@workglow/ai\";\nimport { TENSORFLOW_MEDIAPIPE } from \"./common/TFMP_Constants\";\nimport type { TFMPModelConfig } from \"./common/TFMP_ModelSchema\";\n\n/**\n * AI provider for TensorFlow MediaPipe models.\n *\n * Supports text, vision, and gesture recognition tasks via @mediapipe packages.\n *\n * Task run functions are injected via the constructor so that the heavy\n * `@mediapipe/*` libraries are only imported where actually needed\n * (inline mode, worker server), not on the main thread in worker mode.\n *\n * @example\n * ```typescript\n * // Worker mode (main thread) -- lightweight, no heavy imports:\n * await new TensorFlowMediaPipeProvider().register({\n * mode: \"worker\",\n * worker: new Worker(new URL(\"./worker_tfmp.ts\", import.meta.url), { type: \"module\" }),\n * });\n *\n * // Inline mode -- caller provides the tasks:\n * import { TFMP_TASKS } from \"@workglow/ai-provider/tf-mediapipe\";\n * await new TensorFlowMediaPipeProvider(TFMP_TASKS).register({ mode: \"inline\" });\n *\n * // Worker side -- caller provides the tasks:\n * import { TFMP_TASKS } from \"@workglow/ai-provider/tf-mediapipe\";\n * new TensorFlowMediaPipeProvider(TFMP_TASKS).registerOnWorkerServer(workerServer);\n * ```\n */\nexport class TensorFlowMediaPipeProvider extends AiProvider<TFMPModelConfig> {\n readonly name = TENSORFLOW_MEDIAPIPE;\n\n readonly taskTypes = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"TextEmbeddingTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"ImageSegmentationTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"GestureRecognizerTask\",\n \"HandLandmarkerTask\",\n \"FaceDetectorTask\",\n \"FaceLandmarkerTask\",\n \"PoseLandmarkerTask\",\n ] as const;\n\n constructor(tasks?: Record<string, AiProviderRunFn<any, any, TFMPModelConfig
|
|
8
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider, type AiProviderReactiveRunFn, type AiProviderRunFn } from \"@workglow/ai\";\nimport { TENSORFLOW_MEDIAPIPE } from \"./common/TFMP_Constants\";\nimport type { TFMPModelConfig } from \"./common/TFMP_ModelSchema\";\n\n/**\n * AI provider for TensorFlow MediaPipe models.\n *\n * Supports text, vision, and gesture recognition tasks via @mediapipe packages.\n *\n * Task run functions are injected via the constructor so that the heavy\n * `@mediapipe/*` libraries are only imported where actually needed\n * (inline mode, worker server), not on the main thread in worker mode.\n *\n * @example\n * ```typescript\n * // Worker mode (main thread) -- lightweight, no heavy imports:\n * await new TensorFlowMediaPipeProvider().register({\n * mode: \"worker\",\n * worker: new Worker(new URL(\"./worker_tfmp.ts\", import.meta.url), { type: \"module\" }),\n * });\n *\n * // Inline mode -- caller provides the tasks:\n * import { TFMP_TASKS } from \"@workglow/ai-provider/tf-mediapipe\";\n * await new TensorFlowMediaPipeProvider(TFMP_TASKS).register({ mode: \"inline\" });\n *\n * // Worker side -- caller provides the tasks:\n * import { TFMP_TASKS } from \"@workglow/ai-provider/tf-mediapipe\";\n * new TensorFlowMediaPipeProvider(TFMP_TASKS).registerOnWorkerServer(workerServer);\n * ```\n */\nexport class TensorFlowMediaPipeProvider extends AiProvider<TFMPModelConfig> {\n readonly name = TENSORFLOW_MEDIAPIPE;\n\n readonly taskTypes = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"TextEmbeddingTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"ImageSegmentationTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"GestureRecognizerTask\",\n \"HandLandmarkerTask\",\n \"FaceDetectorTask\",\n \"FaceLandmarkerTask\",\n \"PoseLandmarkerTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, TFMPModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, TFMPModelConfig>>\n ) {\n super(tasks, undefined, reactiveTasks);\n }\n}\n",
|
|
9
9
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { globalServiceRegistry, parentPort, WORKER_SERVER } from \"@workglow/util\";\nimport { TFMP_TASKS } from \"./common/TFMP_JobRunFns\";\nimport { TensorFlowMediaPipeProvider } from \"./TensorFlowMediaPipeProvider\";\n\nexport function TFMP_WORKER_JOBRUN_REGISTER() {\n const workerServer = globalServiceRegistry.get(WORKER_SERVER);\n new TensorFlowMediaPipeProvider(TFMP_TASKS).registerOnWorkerServer(workerServer);\n parentPort.postMessage({ type: \"ready\" });\n console.log(\"TFMP_WORKER_JOBRUN registered\");\n}\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "A7AA0CB8A148FA1C64756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@workglow/ai-provider",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.100",
|
|
6
6
|
"description": "AI provider integrations for Workglow, supporting OpenAI, Hugging Face Transformers, MediaPipe, and GGML models.",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"watch": "concurrently -c 'auto' 'bun:watch-*'",
|
|
@@ -73,17 +73,18 @@
|
|
|
73
73
|
"access": "public"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@workglow/ai": "0.0.
|
|
77
|
-
"@workglow/job-queue": "0.0.
|
|
78
|
-
"@workglow/storage": "0.0.
|
|
79
|
-
"@workglow/task-graph": "0.0.
|
|
80
|
-
"@workglow/util": "0.0.
|
|
81
|
-
"@sroussey/transformers": "
|
|
76
|
+
"@workglow/ai": "0.0.100",
|
|
77
|
+
"@workglow/job-queue": "0.0.100",
|
|
78
|
+
"@workglow/storage": "0.0.100",
|
|
79
|
+
"@workglow/task-graph": "0.0.100",
|
|
80
|
+
"@workglow/util": "0.0.100",
|
|
81
|
+
"@sroussey/transformers": "4.0.0-next.7",
|
|
82
82
|
"@mediapipe/tasks-text": "^0.10.32",
|
|
83
83
|
"@mediapipe/tasks-vision": "^0.10.32",
|
|
84
84
|
"@mediapipe/tasks-audio": "^0.10.32",
|
|
85
85
|
"@mediapipe/tasks-genai": "^0.10.26",
|
|
86
86
|
"openai": "^6.22.0",
|
|
87
|
+
"tiktoken": "^1.0.22",
|
|
87
88
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
88
89
|
"@google/generative-ai": "^0.24.1",
|
|
89
90
|
"node-llama-cpp": "^3.16.0",
|
|
@@ -109,6 +110,9 @@
|
|
|
109
110
|
"openai": {
|
|
110
111
|
"optional": true
|
|
111
112
|
},
|
|
113
|
+
"tiktoken": {
|
|
114
|
+
"optional": true
|
|
115
|
+
},
|
|
112
116
|
"@anthropic-ai/sdk": {
|
|
113
117
|
"optional": true
|
|
114
118
|
},
|
|
@@ -148,14 +152,15 @@
|
|
|
148
152
|
"@mediapipe/tasks-genai": "^0.10.26",
|
|
149
153
|
"@mediapipe/tasks-text": "^0.10.32",
|
|
150
154
|
"@mediapipe/tasks-vision": "^0.10.32",
|
|
151
|
-
"@sroussey/transformers": "
|
|
152
|
-
"@workglow/ai": "0.0.
|
|
153
|
-
"@workglow/job-queue": "0.0.
|
|
154
|
-
"@workglow/storage": "0.0.
|
|
155
|
-
"@workglow/task-graph": "0.0.
|
|
156
|
-
"@workglow/util": "0.0.
|
|
155
|
+
"@sroussey/transformers": "4.0.0-next.7",
|
|
156
|
+
"@workglow/ai": "0.0.100",
|
|
157
|
+
"@workglow/job-queue": "0.0.100",
|
|
158
|
+
"@workglow/storage": "0.0.100",
|
|
159
|
+
"@workglow/task-graph": "0.0.100",
|
|
160
|
+
"@workglow/util": "0.0.100",
|
|
157
161
|
"node-llama-cpp": "^3.16.0",
|
|
158
162
|
"ollama": "^0.6.3",
|
|
159
|
-
"openai": "^6.22.0"
|
|
163
|
+
"openai": "^6.22.0",
|
|
164
|
+
"tiktoken": "^1.0.22"
|
|
160
165
|
}
|
|
161
166
|
}
|