@workglow/cactus 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/CactusProvider.browser.d.ts +23 -0
- package/dist/ai/CactusProvider.browser.d.ts.map +1 -0
- package/dist/ai/CactusQueuedProvider.browser.d.ts +23 -0
- package/dist/ai/CactusQueuedProvider.browser.d.ts.map +1 -0
- package/dist/ai/common/Cactus_Download.browser.d.ts +9 -0
- package/dist/ai/common/Cactus_Download.browser.d.ts.map +1 -0
- package/dist/ai/common/Cactus_DownloadRemove.browser.d.ts +9 -0
- package/dist/ai/common/Cactus_DownloadRemove.browser.d.ts.map +1 -0
- package/dist/ai/common/Cactus_JobRunFns.browser.d.ts +12 -0
- package/dist/ai/common/Cactus_JobRunFns.browser.d.ts.map +1 -0
- package/dist/ai/common/Cactus_ModelInfo.browser.d.ts +9 -0
- package/dist/ai/common/Cactus_ModelInfo.browser.d.ts.map +1 -0
- package/dist/ai/common/Cactus_ToolCalling.browser.d.ts +9 -0
- package/dist/ai/common/Cactus_ToolCalling.browser.d.ts.map +1 -0
- package/dist/ai/registerCactus.browser.d.ts +10 -0
- package/dist/ai/registerCactus.browser.d.ts.map +1 -0
- package/dist/ai/registerCactusInline.browser.d.ts +8 -0
- package/dist/ai/registerCactusInline.browser.d.ts.map +1 -0
- package/dist/ai/registerCactusWorker.browser.d.ts +7 -0
- package/dist/ai/registerCactusWorker.browser.d.ts.map +1 -0
- package/dist/ai-runtime.browser.d.ts +2 -2
- package/dist/ai-runtime.browser.d.ts.map +1 -1
- package/dist/ai-runtime.browser.js +21 -181
- package/dist/ai-runtime.browser.js.map +12 -13
- package/dist/ai.browser.d.ts +5 -5
- package/dist/ai.browser.d.ts.map +1 -1
- package/dist/ai.browser.js +28 -188
- package/dist/ai.browser.js.map +13 -14
- package/package.json +11 -11
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/ai/common/Cactus_Constants.ts", "../src/ai/common/Cactus_ModelCatalog.ts", "../src/ai/common/Cactus_Runtime.browser.ts", "../src/ai/registerCactusInline.ts", "../src/ai/CactusQueuedProvider.ts", "../src/ai/common/Cactus_CapabilitySets.ts", "../src/ai/common/Cactus_Capabilities.ts", "../src/ai/common/
|
|
3
|
+
"sources": ["../src/ai/common/Cactus_Constants.ts", "../src/ai/common/Cactus_ModelCatalog.ts", "../src/ai/common/Cactus_Runtime.browser.ts", "../src/ai/registerCactusInline.browser.ts", "../src/ai/CactusQueuedProvider.browser.ts", "../src/ai/common/Cactus_CapabilitySets.ts", "../src/ai/common/Cactus_Capabilities.ts", "../src/ai/common/Cactus_Download.browser.ts", "../src/ai/common/Cactus_DownloadRemove.browser.ts", "../src/ai/common/Cactus_ModelInfo.browser.ts", "../src/ai/common/Cactus_ModelSearch.ts", "../src/ai/common/Cactus_ToolCalling.browser.ts", "../src/ai/common/Cactus_JobRunFns.browser.ts", "../src/ai/registerCactusWorker.browser.ts", "../src/ai/CactusProvider.browser.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const LOCAL_CACTUS = \"LOCAL_CACTUS\";\nexport const CACTUS_NEEDLE_26M = \"needle-26m\";\nexport const CACTUS_DEFAULT_HF_REPO = \"Abdalrahman/needle-rs-safetensors\";\nexport const CACTUS_DEFAULT_REVISION = \"main\";\n\n/** Browser Cache Storage name used by `fetchAssetBytes` and `removeCachedAssets`. */\nexport const CACTUS_CACHE_NAME = \"cactus-models-v1\";\n\n/** Node/Bun on-disk cache root. */\nexport const CACTUS_DEFAULT_MODELS_DIR = \"~/.cache/cactus-models\";\n",
|
|
6
6
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability } from \"@workglow/ai/worker\";\nimport {\n CACTUS_DEFAULT_HF_REPO,\n CACTUS_DEFAULT_REVISION,\n CACTUS_NEEDLE_26M,\n} from \"./Cactus_Constants\";\n\nexport interface CactusCatalogEntry {\n readonly model_id: string;\n readonly title: string;\n readonly description: string;\n readonly hf_repo: string;\n readonly revision: string;\n readonly assets: {\n readonly weights: string;\n readonly vocab: string;\n readonly config: string;\n };\n readonly capabilities: readonly Capability[];\n}\n\nexport const CACTUS_CATALOG: readonly CactusCatalogEntry[] = [\n {\n model_id: CACTUS_NEEDLE_26M,\n title: \"Needle 26M\",\n description:\n \"Specialized 26M-parameter tool-routing transformer. INT4 SafeTensors, 22 MB. Runs via WASM in browser and Node/Bun.\",\n hf_repo: CACTUS_DEFAULT_HF_REPO,\n revision: CACTUS_DEFAULT_REVISION,\n assets: {\n weights: \"needle.safetensors\",\n vocab: \"vocab.txt\",\n config: \"config.json\",\n },\n capabilities: [\"tool-use\"],\n },\n] as const;\n\nexport function getCactusCatalogEntry(model_id: string): CactusCatalogEntry | undefined {\n return CACTUS_CATALOG.find((e) => e.model_id === model_id);\n}\n\nexport function cactusAssetUrl(entry: CactusCatalogEntry, filename: string): string {\n return `https://huggingface.co/${entry.hf_repo}/resolve/${entry.revision}/${filename}`;\n}\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Browser-safe variant of Cactus_Runtime — Node built-ins (`node:fs/promises`, `node:path`)\n * are excluded so browser bundlers do not need to resolve them.\n * Asset persistence uses the browser Cache Storage API exclusively.\n */\n\nimport { CACTUS_CACHE_NAME } from \"./Cactus_Constants\";\nimport {\n cactusAssetUrl,\n getCactusCatalogEntry,\n type CactusCatalogEntry,\n} from \"./Cactus_ModelCatalog\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\n\ntype NeedleSdkModule = typeof import(\"needle-rs\");\n// `NeedleWasm` has a private constructor so `InstanceType<...>` cannot be used.\n// Recover the instance type from the static `load` method's non-undefined return.\ntype NeedleEngine = NonNullable<ReturnType<NeedleSdkModule[\"NeedleWasm\"][\"load\"]>>;\n\nlet _sdk: NeedleSdkModule | undefined;\nlet _sdkInitPromise: Promise<NeedleSdkModule> | undefined;\n\n/** Lazily load needle-rs and run its WASM `init()` exactly once. */\nexport async function loadSdk(): Promise<NeedleSdkModule> {\n _sdkInitPromise ??= import(\"needle-rs\")\n .then(async (mod) => {\n const init = (mod as unknown as { default?: () => Promise<unknown> }).default;\n if (typeof init === \"function\") {\n await init();\n }\n _sdk = mod;\n return mod;\n })\n .catch((err: unknown) => {\n _sdkInitPromise = undefined;\n _sdk = undefined;\n throw new Error(\n `needle-rs is required for LOCAL_CACTUS tasks. Install it with: bun add needle-rs (cause: ${String(err)})`\n );\n });\n return _sdkInitPromise;\n}\n\nexport function getCactusSdk(): NeedleSdkModule {\n if (!_sdk) throw new Error(\"Cactus SDK not loaded; call loadSdk() first\");\n return _sdk;\n}\n\n// ============================================================================\n// Asset fetch + cache (browser-only: Cache Storage API)\n// ============================================================================\n\nasync function fetchAssetBytesBrowser(url: string): Promise<Uint8Array> {\n const cachesApi = (globalThis as unknown as { caches: CacheStorage }).caches;\n const cache = await cachesApi.open(CACTUS_CACHE_NAME);\n const hit = await cache.match(url);\n if (hit) {\n return new Uint8Array(await hit.arrayBuffer());\n }\n const resp = await fetch(url);\n if (!resp.ok) throw new Error(`Cactus asset fetch failed (${resp.status}) for ${url}`);\n // Clone first — Response bodies can only be consumed once.\n await cache.put(url, resp.clone());\n return new Uint8Array(await resp.arrayBuffer());\n}\n\nexport async function fetchAssetBytes(\n model: CactusModelConfig,\n filename: string\n): Promise<Uint8Array> {\n const model_id = model.provider_config.model_id;\n const entry = getCactusCatalogEntry(model_id);\n if (!entry) throw new Error(`Unknown Cactus model_id: ${model_id}`);\n const url = cactusAssetUrl(entry, filename);\n return fetchAssetBytesBrowser(url);\n}\n\n// ============================================================================\n// Engine cache (in-memory, per worker/process)\n// ============================================================================\n\n/** @internal Exported for tests. */\nexport const cactusEngines: Map<string, NeedleEngine> = new Map();\n/** @internal Exported for tests. */\nexport const cactusConfigJson: Map<string, unknown> = new Map();\n/** Tracks models whose assets have been persisted (downloaded) but not necessarily loaded. */\nconst cactusCachedModelIds: Set<string> = new Set();\n\nconst cactusEngineLoadsInFlight = new Map<string, Promise<NeedleEngine>>();\n\nexport async function getOrLoadEngine(model: CactusModelConfig): Promise<NeedleEngine> {\n const model_id = model.provider_config.model_id;\n const cached = cactusEngines.get(model_id);\n if (cached) return cached;\n\n const inFlight = cactusEngineLoadsInFlight.get(model_id);\n if (inFlight) return inFlight;\n\n const loadPromise = (async (): Promise<NeedleEngine> => {\n const sdk = await loadSdk();\n const entry = getCactusCatalogEntry(model_id);\n if (!entry) throw new Error(`Unknown Cactus model_id: ${model_id}`);\n\n const [weightsBytes, vocabBytes, configBytes] = await Promise.all([\n fetchAssetBytes(model, entry.assets.weights),\n fetchAssetBytes(model, entry.assets.vocab),\n fetchAssetBytes(model, entry.assets.config),\n ]);\n\n try {\n const text = new TextDecoder().decode(configBytes);\n cactusConfigJson.set(model_id, JSON.parse(text));\n } catch {\n cactusConfigJson.set(model_id, null);\n }\n\n // needle-rs `NeedleWasm.load(weights_bytes: Uint8Array, vocab_text: string)` — vocab is a string.\n const vocabText = new TextDecoder().decode(vocabBytes);\n const engine = sdk.NeedleWasm.load(weightsBytes, vocabText);\n if (!engine) {\n throw new Error(`needle-rs NeedleWasm.load returned undefined for model ${model_id}`);\n }\n cactusEngines.set(model_id, engine);\n return engine;\n })().finally(() => {\n cactusEngineLoadsInFlight.delete(model_id);\n });\n\n cactusEngineLoadsInFlight.set(model_id, loadPromise);\n return loadPromise;\n}\n\nexport function isModelLoaded(model_id: string): boolean {\n return cactusEngines.has(model_id);\n}\n\n/** Mark a model_id as having its assets persisted in Cache Storage. */\nexport function markModelCached(model_id: string): void {\n cactusCachedModelIds.add(model_id);\n}\n\n/** Returns true if the model's assets have been downloaded or the engine is currently loaded. */\nexport function isModelCached(model_id: string): boolean {\n return cactusEngines.has(model_id) || cactusCachedModelIds.has(model_id);\n}\n\n// ============================================================================\n// Sessions (no-op — needle-rs is stateless across calls)\n// ============================================================================\n\n/** @internal Exported for tests. */\nexport const cactusSessions: Map<string, Record<string, never>> = new Map();\n\nexport async function deleteCactusSession(id: string): Promise<boolean> {\n return cactusSessions.delete(id);\n}\n\n// ============================================================================\n// Eviction\n// ============================================================================\n\nasync function removeBrowserCacheEntries(entry: CactusCatalogEntry): Promise<void> {\n const cachesApi = (globalThis as unknown as { caches: CacheStorage }).caches;\n const cache = await cachesApi.open(CACTUS_CACHE_NAME);\n for (const filename of [entry.assets.weights, entry.assets.vocab, entry.assets.config]) {\n const url = cactusAssetUrl(entry, filename);\n try {\n await cache.delete(url);\n } catch {\n /* ignore */\n }\n }\n}\n\nfunction disposeCactusEngine(model_id: string): void {\n const engine = cactusEngines.get(model_id);\n if (engine) {\n try {\n (engine as unknown as { free?: () => void }).free?.();\n } catch {\n /* best effort */\n }\n }\n cactusEngines.delete(model_id);\n cactusConfigJson.delete(model_id);\n cactusCachedModelIds.delete(model_id);\n}\n\nexport async function removeCachedAssets(model: CactusModelConfig): Promise<void> {\n const model_id = model.provider_config.model_id;\n const entry = getCactusCatalogEntry(model_id);\n if (!entry) return;\n await removeBrowserCacheEntries(entry);\n disposeCactusEngine(model_id);\n}\n\n/** Best-effort cleanup on shutdown. */\nexport async function disposeCactusResources(): Promise<void> {\n for (const id of Array.from(cactusEngines.keys())) {\n disposeCactusEngine(id);\n }\n cactusEngines.clear();\n cactusConfigJson.clear();\n cactusCachedModelIds.clear();\n cactusSessions.clear();\n}\n",
|
|
8
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRegisterOptions } from \"@workglow/ai\";\nimport { registerProviderInline } from \"@workglow/ai/provider-utils\";\nimport { CactusQueuedProvider } from \"./CactusQueuedProvider\";\nimport { CACTUS_PREVIEW_TASKS, CACTUS_RUN_FNS } from \"./common/Cactus_JobRunFns\";\n\nexport async function registerCactusInline(options?: AiProviderRegisterOptions): Promise<void> {\n await registerProviderInline(\n new CactusQueuedProvider(CACTUS_RUN_FNS, CACTUS_PREVIEW_TASKS),\n \"Cactus\",\n options\n );\n}\n",
|
|
9
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFnRegistration,\n Capability,\n ModelConfig,\n ModelRecord,\n} from \"@workglow/ai\";\nimport { QueuedAiProvider } from \"@workglow/ai\";\nimport { cactusWorkerRunFnSpecs, inferCactusCapabilities } from \"./common/Cactus_Capabilities\";\nimport { LOCAL_CACTUS } from \"./common/Cactus_Constants\";\nimport type { CactusModelConfig } from \"./common/Cactus_ModelSchema\";\nimport { deleteCactusSession } from \"./common/Cactus_Runtime\";\n\n/**
|
|
8
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRegisterOptions } from \"@workglow/ai\";\nimport { registerProviderInline } from \"@workglow/ai/provider-utils\";\nimport { CactusQueuedProvider } from \"./CactusQueuedProvider.browser\";\nimport { CACTUS_PREVIEW_TASKS, CACTUS_RUN_FNS } from \"./common/Cactus_JobRunFns.browser\";\n\nexport async function registerCactusInline(options?: AiProviderRegisterOptions): Promise<void> {\n await registerProviderInline(\n new CactusQueuedProvider(CACTUS_RUN_FNS, CACTUS_PREVIEW_TASKS),\n \"Cactus\",\n options\n );\n}\n",
|
|
9
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFnRegistration,\n Capability,\n ModelConfig,\n ModelRecord,\n} from \"@workglow/ai\";\nimport { QueuedAiProvider } from \"@workglow/ai\";\nimport { cactusWorkerRunFnSpecs, inferCactusCapabilities } from \"./common/Cactus_Capabilities\";\nimport { LOCAL_CACTUS } from \"./common/Cactus_Constants\";\nimport type { CactusModelConfig } from \"./common/Cactus_ModelSchema\";\nimport { deleteCactusSession } from \"./common/Cactus_Runtime.browser\";\n\n/** Browser main-thread registration (inline or worker-backed); creates the default job queue. */\nexport class CactusQueuedProvider extends QueuedAiProvider<CactusModelConfig> {\n readonly name = LOCAL_CACTUS;\n readonly displayName = \"Cactus (Needle)\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n constructor(\n promiseRunFns?: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n CactusModelConfig\n >[],\n previewTasks?: Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AiProviderPreviewRunFn<any, any, CactusModelConfig>\n >\n ) {\n super(promiseRunFns, previewTasks);\n }\n\n override inferCapabilities(model: ModelRecord): readonly Capability[] {\n return inferCactusCapabilities(model);\n }\n\n protected override workerRunFnSpecs(): readonly { serves: readonly Capability[] }[] {\n return cactusWorkerRunFnSpecs();\n }\n\n override createSession(_model: ModelConfig): string {\n return crypto.randomUUID();\n }\n\n override async disposeSession(sessionId: string): Promise<void> {\n await deleteCactusSession(sessionId);\n }\n}\n",
|
|
10
10
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability } from \"@workglow/ai/worker\";\n\nexport const CACTUS_TOOL_USE = [\"tool-use\"] as const satisfies Capability[];\nexport const CACTUS_MODEL_DOWNLOAD = [\"model.download\"] as const satisfies Capability[];\nexport const CACTUS_MODEL_DOWNLOAD_REMOVE = [\n \"model.download-remove\",\n] as const satisfies Capability[];\nexport const CACTUS_MODEL_SEARCH = [\"model.search\"] as const satisfies Capability[];\nexport const CACTUS_MODEL_INFO = [\"model.info\"] as const satisfies Capability[];\n\nexport const CACTUS_CAPABILITY_SETS = [\n CACTUS_TOOL_USE,\n CACTUS_MODEL_DOWNLOAD,\n CACTUS_MODEL_DOWNLOAD_REMOVE,\n CACTUS_MODEL_SEARCH,\n CACTUS_MODEL_INFO,\n] as const;\n",
|
|
11
11
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability, ModelRecord } from \"@workglow/ai/worker\";\nimport { CACTUS_CAPABILITY_SETS } from \"./Cactus_CapabilitySets\";\n\nexport const CACTUS_RUN_FN_SPECS = CACTUS_CAPABILITY_SETS.map((serves) => ({ serves }));\n\nexport function cactusWorkerRunFnSpecs(): readonly {\n readonly serves: readonly Capability[];\n}[] {\n return CACTUS_RUN_FN_SPECS;\n}\n\ntype CapabilityHints = Pick<ModelRecord, \"model_id\" | \"provider_config\" | \"capabilities\">;\n\n/**\n * needle-rs ships a single model architecture; capability inference is constant.\n */\nexport function inferCactusCapabilities(_model: CapabilityHints): readonly Capability[] {\n return [\"tool-use\", \"model.download\", \"model.download-remove\", \"model.search\", \"model.info\"];\n}\n",
|
|
12
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport
|
|
13
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n
|
|
14
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {
|
|
15
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ModelInfoTaskInput, ModelInfoTaskOutput } from \"@workglow/ai\";\nimport { getCactusCatalogEntry } from \"./Cactus_ModelCatalog\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { isModelCached, isModelLoaded } from \"./Cactus_Runtime\";\n\nexport const Cactus_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n CactusModelConfig\n> = async (input, model, _signal, emit) => {\n if (!model) throw new Error(\"Model config is required for ModelInfoTask.\");\n const model_id = model.provider_config.model_id;\n const entry = getCactusCatalogEntry(model_id);\n if (!entry) throw new Error(`Unknown Cactus model_id: ${model_id}`);\n\n const is_loaded = isModelLoaded(model_id);\n const is_cached = isModelCached(model_id);\n\n emit({\n type: \"finish\",\n data: {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: true,\n supports_node: true,\n is_cached,\n is_loaded,\n file_sizes: null,\n },\n });\n};\n",
|
|
12
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelDownloadTaskRunInput,\n ModelDownloadTaskRunOutput,\n} from \"@workglow/ai\";\nimport { getCactusCatalogEntry } from \"./Cactus_ModelCatalog\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { fetchAssetBytes, markModelCached } from \"./Cactus_Runtime.browser\";\n\nexport const Cactus_Download: AiProviderRunFn<\n ModelDownloadTaskRunInput,\n ModelDownloadTaskRunOutput,\n CactusModelConfig\n> = async (input, model, _signal, emit) => {\n if (!model) throw new Error(\"Model config is required for ModelDownloadTask.\");\n const model_id = model.provider_config.model_id;\n const entry = getCactusCatalogEntry(model_id);\n if (!entry) throw new Error(`Unknown Cactus model_id: ${model_id}`);\n\n const assets = [entry.assets.weights, entry.assets.vocab, entry.assets.config];\n for (let i = 0; i < assets.length; i++) {\n emit({\n type: \"phase\",\n message: `Downloading ${assets[i]}`,\n progress: Math.round(((i + 0.5) / assets.length) * 99),\n });\n await fetchAssetBytes(model, assets[i]);\n }\n markModelCached(model_id);\n emit({ type: \"finish\", data: { model: input.model! } });\n};\n",
|
|
13
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelDownloadRemoveTaskRunInput,\n ModelDownloadRemoveTaskRunOutput,\n} from \"@workglow/ai\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { removeCachedAssets } from \"./Cactus_Runtime.browser\";\n\nexport const Cactus_DownloadRemove: AiProviderRunFn<\n ModelDownloadRemoveTaskRunInput,\n ModelDownloadRemoveTaskRunOutput,\n CactusModelConfig\n> = async (input, model, _signal, emit) => {\n if (!model) throw new Error(\"Model config is required for ModelDownloadRemoveTask.\");\n await removeCachedAssets(model);\n emit({ type: \"finish\", data: { model: input.model } });\n};\n",
|
|
14
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ModelInfoTaskInput, ModelInfoTaskOutput } from \"@workglow/ai\";\nimport { getCactusCatalogEntry } from \"./Cactus_ModelCatalog\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { isModelCached, isModelLoaded } from \"./Cactus_Runtime.browser\";\n\nexport const Cactus_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n CactusModelConfig\n> = async (input, model, _signal, emit) => {\n if (!model) throw new Error(\"Model config is required for ModelInfoTask.\");\n const model_id = model.provider_config.model_id;\n const entry = getCactusCatalogEntry(model_id);\n if (!entry) throw new Error(`Unknown Cactus model_id: ${model_id}`);\n\n const is_loaded = isModelLoaded(model_id);\n const is_cached = isModelCached(model_id);\n\n emit({\n type: \"finish\",\n data: {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: true,\n supports_node: true,\n is_cached,\n is_loaded,\n file_sizes: null,\n },\n });\n};\n",
|
|
16
15
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelSearchResultItem,\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n} from \"@workglow/ai\";\nimport { LOCAL_CACTUS } from \"./Cactus_Constants\";\nimport { CACTUS_CATALOG } from \"./Cactus_ModelCatalog\";\n\nexport const Cactus_ModelSearch: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input, _model, _signal, emit) => {\n const query = (input.query ?? \"\").trim().toLowerCase();\n const results: ModelSearchResultItem[] = CACTUS_CATALOG.filter(\n (e) =>\n !query || e.model_id.toLowerCase().includes(query) || e.title.toLowerCase().includes(query)\n ).map((e) => ({\n id: e.model_id,\n label: e.title,\n description: e.description,\n record: {\n model_id: e.model_id,\n title: e.title,\n description: e.description,\n provider: LOCAL_CACTUS,\n provider_config: { model_id: e.model_id },\n capabilities: [...e.capabilities],\n metadata: {},\n },\n raw: e,\n }));\n emit({ type: \"finish\", data: { results } });\n};\n",
|
|
17
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n ToolDefinition,\n} from \"@workglow/ai\";\nimport { extractMessageText } from \"@workglow/ai/provider-utils\";\nimport { filterValidToolCalls } from \"@workglow/ai/worker\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { getOrLoadEngine } from \"./Cactus_Runtime\";\n\nfunction buildToolsJson(tools: ReadonlyArray<ToolDefinition>): string {\n return JSON.stringify(\n tools.map((t) => ({\n name: t.name,\n ...(t.description ? { description: t.description } : {}),\n ...(t.inputSchema ? { parameters: t.inputSchema } : {}),\n }))\n );\n}\n\nfunction promptText(input: ToolCallingTaskInput): string {\n if (typeof input.prompt === \"string\") return input.prompt;\n if (input.prompt) return extractMessageText(input.prompt);\n if (input.messages && input.messages.length > 0) {\n const last = input.messages[input.messages.length - 1];\n return extractMessageText(last.content);\n }\n return \"\";\n}\n\nfunction parseToolCalls(raw: string): ToolCalls {\n if (!raw) return [];\n try {\n const obj = JSON.parse(raw);\n if (Array.isArray(obj)) {\n return obj.map((o, i) => ({\n id: `call_${i}`,\n name: String(o.name ?? \"\"),\n input: (o.arguments ?? o.params ?? {}) as Record<string, unknown>,\n }));\n }\n if (obj && typeof obj === \"object\" && typeof obj.name === \"string\") {\n return [\n {\n id: \"call_0\",\n name: obj.name,\n input: (obj.arguments ?? obj.params ?? {}) as Record<string, unknown>,\n },\n ];\n }\n } catch {\n /* fall through */\n }\n return [];\n}\n\nexport const Cactus_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n CactusModelConfig\n> = async (input, model, signal, emit) => {\n if (!model) throw new Error(\"Model config is required for ToolCallingTask.\");\n if (signal.aborted) throw signal.reason ?? new Error(\"The operation was aborted\");\n\n const engine = await getOrLoadEngine(model);\n const query = promptText(input);\n const toolsJson = buildToolsJson(input.tools);\n\n let raw = \"\";\n const engineWithStream = engine as unknown as {\n run_stream?: (q: string, t: string, cb: (chunk: string) => void) => Promise<string>;\n run: (q: string, t: string) => Promise<string> | string;\n };\n\n if (typeof engineWithStream.run_stream === \"function\") {\n raw = await engineWithStream.run_stream(query, toolsJson, (chunk) => {\n emit({ type: \"text-delta\", port: \"text\", textDelta: chunk });\n });\n } else {\n const out = await engineWithStream.run(query, toolsJson);\n raw = typeof out === \"string\" ? out : String(out);\n }\n\n const parsed: ToolCalls = parseToolCalls(raw);\n const validToolCalls = filterValidToolCalls(parsed, input.tools);\n if (validToolCalls.length > 0) {\n emit({ type: \"object-delta\", port: \"toolCalls\", objectDelta: [...validToolCalls] });\n }\n emit({ type: \"finish\", data: { text: raw, toolCalls: validToolCalls } });\n};\n",
|
|
18
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFnRegistration } from \"@workglow/ai\";\nimport {\n CACTUS_MODEL_DOWNLOAD,\n CACTUS_MODEL_DOWNLOAD_REMOVE,\n CACTUS_MODEL_INFO,\n CACTUS_MODEL_SEARCH,\n CACTUS_TOOL_USE,\n} from \"./Cactus_CapabilitySets\";\nimport { Cactus_Download } from \"./Cactus_Download\";\nimport { Cactus_DownloadRemove } from \"./Cactus_DownloadRemove\";\nimport { Cactus_ModelInfo } from \"./Cactus_ModelInfo\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { Cactus_ModelSearch } from \"./Cactus_ModelSearch\";\nimport { Cactus_ToolCalling } from \"./Cactus_ToolCalling\";\n\nexport {\n cactusConfigJson,\n cactusEngines,\n deleteCactusSession,\n disposeCactusResources,\n getOrLoadEngine,\n loadSdk,\n removeCachedAssets,\n} from \"./Cactus_Runtime\";\n\nexport const CACTUS_RUN_FNS: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n CactusModelConfig\n>[] = [\n { serves: CACTUS_TOOL_USE, runFn: Cactus_ToolCalling },\n { serves: CACTUS_MODEL_DOWNLOAD, runFn: Cactus_Download },\n { serves: CACTUS_MODEL_DOWNLOAD_REMOVE, runFn: Cactus_DownloadRemove },\n { serves: CACTUS_MODEL_SEARCH, runFn: Cactus_ModelSearch },\n { serves: CACTUS_MODEL_INFO, runFn: Cactus_ModelInfo },\n];\n\n/** No preview-only tasks for Cactus today. */\nexport const CACTUS_PREVIEW_TASKS = {} as const;\n",
|
|
19
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { registerProviderWorker } from \"@workglow/ai/provider-utils\";\nimport { CactusProvider } from \"./CactusProvider\";\nimport { CACTUS_PREVIEW_TASKS, CACTUS_RUN_FNS } from \"./common/Cactus_JobRunFns\";\n\nexport async function registerCactusWorker(): Promise<void> {\n await registerProviderWorker(\n (ws) => new CactusProvider(CACTUS_RUN_FNS, CACTUS_PREVIEW_TASKS).registerOnWorkerServer(ws),\n \"Cactus\"\n );\n}\n",
|
|
20
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFnRegistration,\n Capability,\n ModelConfig,\n ModelRecord,\n} from \"@workglow/ai/worker\";\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport { cactusWorkerRunFnSpecs, inferCactusCapabilities } from \"./common/Cactus_Capabilities\";\nimport { LOCAL_CACTUS } from \"./common/Cactus_Constants\";\nimport type { CactusModelConfig } from \"./common/Cactus_ModelSchema\";\nimport { deleteCactusSession } from \"./common/Cactus_Runtime\";\n\n/**
|
|
16
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n ToolDefinition,\n} from \"@workglow/ai\";\nimport { extractMessageText } from \"@workglow/ai/provider-utils\";\nimport { filterValidToolCalls } from \"@workglow/ai/worker\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { getOrLoadEngine } from \"./Cactus_Runtime.browser\";\n\nfunction buildToolsJson(tools: ReadonlyArray<ToolDefinition>): string {\n return JSON.stringify(\n tools.map((t) => ({\n name: t.name,\n ...(t.description ? { description: t.description } : {}),\n ...(t.inputSchema ? { parameters: t.inputSchema } : {}),\n }))\n );\n}\n\nfunction promptText(input: ToolCallingTaskInput): string {\n if (typeof input.prompt === \"string\") return input.prompt;\n if (input.prompt) return extractMessageText(input.prompt);\n if (input.messages && input.messages.length > 0) {\n const last = input.messages[input.messages.length - 1];\n return extractMessageText(last.content);\n }\n return \"\";\n}\n\nfunction parseToolCalls(raw: string): ToolCalls {\n if (!raw) return [];\n try {\n const obj = JSON.parse(raw);\n if (Array.isArray(obj)) {\n return obj.map((o, i) => ({\n id: `call_${i}`,\n name: String(o.name ?? \"\"),\n input: (o.arguments ?? o.params ?? {}) as Record<string, unknown>,\n }));\n }\n if (obj && typeof obj === \"object\" && typeof obj.name === \"string\") {\n return [\n {\n id: \"call_0\",\n name: obj.name,\n input: (obj.arguments ?? obj.params ?? {}) as Record<string, unknown>,\n },\n ];\n }\n } catch {\n /* fall through */\n }\n return [];\n}\n\nexport const Cactus_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n CactusModelConfig\n> = async (input, model, signal, emit) => {\n if (!model) throw new Error(\"Model config is required for ToolCallingTask.\");\n if (signal.aborted) throw signal.reason ?? new Error(\"The operation was aborted\");\n\n const engine = await getOrLoadEngine(model);\n const query = promptText(input);\n const toolsJson = buildToolsJson(input.tools);\n\n let raw = \"\";\n const engineWithStream = engine as unknown as {\n run_stream?: (q: string, t: string, cb: (chunk: string) => void) => Promise<string>;\n run: (q: string, t: string) => Promise<string> | string;\n };\n\n if (typeof engineWithStream.run_stream === \"function\") {\n raw = await engineWithStream.run_stream(query, toolsJson, (chunk) => {\n emit({ type: \"text-delta\", port: \"text\", textDelta: chunk });\n });\n } else {\n const out = await engineWithStream.run(query, toolsJson);\n raw = typeof out === \"string\" ? out : String(out);\n }\n\n const parsed: ToolCalls = parseToolCalls(raw);\n const validToolCalls = filterValidToolCalls(parsed, input.tools);\n if (validToolCalls.length > 0) {\n emit({ type: \"object-delta\", port: \"toolCalls\", objectDelta: [...validToolCalls] });\n }\n emit({ type: \"finish\", data: { text: raw, toolCalls: validToolCalls } });\n};\n",
|
|
17
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFnRegistration } from \"@workglow/ai\";\nimport {\n CACTUS_MODEL_DOWNLOAD,\n CACTUS_MODEL_DOWNLOAD_REMOVE,\n CACTUS_MODEL_INFO,\n CACTUS_MODEL_SEARCH,\n CACTUS_TOOL_USE,\n} from \"./Cactus_CapabilitySets\";\nimport { Cactus_Download } from \"./Cactus_Download.browser\";\nimport { Cactus_DownloadRemove } from \"./Cactus_DownloadRemove.browser\";\nimport { Cactus_ModelInfo } from \"./Cactus_ModelInfo.browser\";\nimport type { CactusModelConfig } from \"./Cactus_ModelSchema\";\nimport { Cactus_ModelSearch } from \"./Cactus_ModelSearch\";\nimport { Cactus_ToolCalling } from \"./Cactus_ToolCalling.browser\";\n\nexport {\n cactusConfigJson,\n cactusEngines,\n deleteCactusSession,\n disposeCactusResources,\n getOrLoadEngine,\n loadSdk,\n removeCachedAssets,\n} from \"./Cactus_Runtime.browser\";\n\nexport const CACTUS_RUN_FNS: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n CactusModelConfig\n>[] = [\n { serves: CACTUS_TOOL_USE, runFn: Cactus_ToolCalling },\n { serves: CACTUS_MODEL_DOWNLOAD, runFn: Cactus_Download },\n { serves: CACTUS_MODEL_DOWNLOAD_REMOVE, runFn: Cactus_DownloadRemove },\n { serves: CACTUS_MODEL_SEARCH, runFn: Cactus_ModelSearch },\n { serves: CACTUS_MODEL_INFO, runFn: Cactus_ModelInfo },\n];\n\n/** No preview-only tasks for Cactus today. */\nexport const CACTUS_PREVIEW_TASKS = {} as const;\n",
|
|
18
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { registerProviderWorker } from \"@workglow/ai/provider-utils\";\nimport { CactusProvider } from \"./CactusProvider.browser\";\nimport { CACTUS_PREVIEW_TASKS, CACTUS_RUN_FNS } from \"./common/Cactus_JobRunFns.browser\";\n\nexport async function registerCactusWorker(): Promise<void> {\n await registerProviderWorker(\n (ws) => new CactusProvider(CACTUS_RUN_FNS, CACTUS_PREVIEW_TASKS).registerOnWorkerServer(ws),\n \"Cactus\"\n );\n}\n",
|
|
19
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFnRegistration,\n Capability,\n ModelConfig,\n ModelRecord,\n} from \"@workglow/ai/worker\";\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport { cactusWorkerRunFnSpecs, inferCactusCapabilities } from \"./common/Cactus_Capabilities\";\nimport { LOCAL_CACTUS } from \"./common/Cactus_Constants\";\nimport type { CactusModelConfig } from \"./common/Cactus_ModelSchema\";\nimport { deleteCactusSession } from \"./common/Cactus_Runtime.browser\";\n\n/** Browser worker-server registration for Cactus. */\nexport class CactusProvider extends AiProvider<CactusModelConfig> {\n readonly name = LOCAL_CACTUS;\n readonly displayName = \"Cactus (Needle)\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n constructor(\n promiseRunFns?: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n CactusModelConfig\n >[],\n previewTasks?: Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AiProviderPreviewRunFn<any, any, CactusModelConfig>\n >\n ) {\n super(promiseRunFns, previewTasks);\n }\n\n override inferCapabilities(model: ModelRecord): readonly Capability[] {\n return inferCactusCapabilities(model);\n }\n\n protected override workerRunFnSpecs(): readonly { serves: readonly Capability[] }[] {\n return cactusWorkerRunFnSpecs();\n }\n\n override createSession(_model: ModelConfig): string {\n return crypto.randomUUID();\n }\n\n override async disposeSession(sessionId: string): Promise<void> {\n await deleteCactusSession(sessionId);\n }\n}\n"
|
|
21
20
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
21
|
+
"mappings": "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",
|
|
22
|
+
"debugId": "67D13FB5B6D17CB364756E2164756E21",
|
|
24
23
|
"names": []
|
|
25
24
|
}
|
package/dist/ai.browser.d.ts
CHANGED
|
@@ -6,17 +6,17 @@
|
|
|
6
6
|
export * from "./ai/common/Cactus_Constants";
|
|
7
7
|
export * from "./ai/common/Cactus_ModelCatalog";
|
|
8
8
|
export * from "./ai/common/Cactus_ModelSchema";
|
|
9
|
-
export * from "./ai/CactusProvider";
|
|
10
|
-
export * from "./ai/CactusQueuedProvider";
|
|
11
|
-
export * from "./ai/registerCactus";
|
|
12
|
-
import { CactusQueuedProvider } from "./ai/CactusQueuedProvider";
|
|
9
|
+
export * from "./ai/CactusProvider.browser";
|
|
10
|
+
export * from "./ai/CactusQueuedProvider.browser";
|
|
11
|
+
export * from "./ai/registerCactus.browser";
|
|
12
|
+
import { CactusQueuedProvider } from "./ai/CactusQueuedProvider.browser";
|
|
13
13
|
/**
|
|
14
14
|
* @internal Symbols exported only for use by `@workglow/test`. Not part of the stable public API.
|
|
15
15
|
*
|
|
16
16
|
* `cactusEngines` and `cactusConfigJson` are re-exported here so that tests can
|
|
17
17
|
* seed and inspect the runtime state used by the run-fns bundled into the `./ai`
|
|
18
18
|
* entry point. The `./ai` and `./ai-runtime` entry points are bundled separately
|
|
19
|
-
*
|
|
19
|
+
* and their runtime state copies are distinct module instances. Reading
|
|
20
20
|
* the runtime state via `_testOnly` (rather than `@workglow/cactus/ai-runtime`)
|
|
21
21
|
* guarantees the test observes the same Map that the run-fns mutate.
|
|
22
22
|
*/
|
package/dist/ai.browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.browser.d.ts","sourceRoot":"","sources":["../src/ai.browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAO/C,cAAc,
|
|
1
|
+
{"version":3,"file":"ai.browser.d.ts","sourceRoot":"","sources":["../src/ai.browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAO/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAKzE;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;CAMZ,CAAC"}
|
package/dist/ai.browser.js
CHANGED
|
@@ -84,7 +84,7 @@ var CactusModelConfigSchema = {
|
|
|
84
84
|
required: [...ModelConfigSchema.required, ...CactusModelSchema.required],
|
|
85
85
|
additionalProperties: false
|
|
86
86
|
};
|
|
87
|
-
// src/ai/CactusProvider.ts
|
|
87
|
+
// src/ai/CactusProvider.browser.ts
|
|
88
88
|
import { AiProvider } from "@workglow/ai/worker";
|
|
89
89
|
|
|
90
90
|
// src/ai/common/Cactus_CapabilitySets.ts
|
|
@@ -112,9 +112,7 @@ function inferCactusCapabilities(_model) {
|
|
|
112
112
|
return ["tool-use", "model.download", "model.download-remove", "model.search", "model.info"];
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
// src/ai/common/Cactus_Runtime.ts
|
|
116
|
-
import fs from "node:fs/promises";
|
|
117
|
-
import path from "node:path";
|
|
115
|
+
// src/ai/common/Cactus_Runtime.browser.ts
|
|
118
116
|
var _sdk;
|
|
119
117
|
var _sdkInitPromise;
|
|
120
118
|
async function loadSdk() {
|
|
@@ -132,11 +130,10 @@ async function loadSdk() {
|
|
|
132
130
|
});
|
|
133
131
|
return _sdkInitPromise;
|
|
134
132
|
}
|
|
135
|
-
function
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return model.provider_config.models_dir ?? CACTUS_DEFAULT_MODELS_DIR;
|
|
133
|
+
function getCactusSdk() {
|
|
134
|
+
if (!_sdk)
|
|
135
|
+
throw new Error("Cactus SDK not loaded; call loadSdk() first");
|
|
136
|
+
return _sdk;
|
|
140
137
|
}
|
|
141
138
|
async function fetchAssetBytesBrowser(url) {
|
|
142
139
|
const cachesApi = globalThis.caches;
|
|
@@ -151,33 +148,13 @@ async function fetchAssetBytesBrowser(url) {
|
|
|
151
148
|
await cache.put(url, resp.clone());
|
|
152
149
|
return new Uint8Array(await resp.arrayBuffer());
|
|
153
150
|
}
|
|
154
|
-
async function fetchAssetBytesNode(url, models_dir, model_id, filename) {
|
|
155
|
-
const resolvedDir = models_dir.startsWith("~/") ? path.join(process.env.HOME ?? process.env.USERPROFILE ?? ".", models_dir.slice(2), model_id) : path.resolve(models_dir, model_id);
|
|
156
|
-
const filePath = path.join(resolvedDir, filename);
|
|
157
|
-
try {
|
|
158
|
-
const buf = await fs.readFile(filePath);
|
|
159
|
-
return new Uint8Array(buf);
|
|
160
|
-
} catch {}
|
|
161
|
-
const resp = await fetch(url);
|
|
162
|
-
if (!resp.ok)
|
|
163
|
-
throw new Error(`Cactus asset fetch failed (${resp.status}) for ${url}`);
|
|
164
|
-
const bytes = new Uint8Array(await resp.arrayBuffer());
|
|
165
|
-
await fs.mkdir(resolvedDir, { recursive: true });
|
|
166
|
-
const tmpPath = `${filePath}.tmp`;
|
|
167
|
-
await fs.writeFile(tmpPath, bytes);
|
|
168
|
-
await fs.rename(tmpPath, filePath);
|
|
169
|
-
return bytes;
|
|
170
|
-
}
|
|
171
151
|
async function fetchAssetBytes(model, filename) {
|
|
172
152
|
const model_id = model.provider_config.model_id;
|
|
173
153
|
const entry = getCactusCatalogEntry(model_id);
|
|
174
154
|
if (!entry)
|
|
175
155
|
throw new Error(`Unknown Cactus model_id: ${model_id}`);
|
|
176
156
|
const url = cactusAssetUrl(entry, filename);
|
|
177
|
-
|
|
178
|
-
return fetchAssetBytesBrowser(url);
|
|
179
|
-
}
|
|
180
|
-
return fetchAssetBytesNode(url, modelsDirOf(model), model_id, filename);
|
|
157
|
+
return fetchAssetBytesBrowser(url);
|
|
181
158
|
}
|
|
182
159
|
var cactusEngines = new Map;
|
|
183
160
|
var cactusConfigJson = new Map;
|
|
@@ -234,8 +211,6 @@ async function deleteCactusSession(id) {
|
|
|
234
211
|
return cactusSessions.delete(id);
|
|
235
212
|
}
|
|
236
213
|
async function removeBrowserCacheEntries(entry) {
|
|
237
|
-
if (!hasBrowserCacheStorage())
|
|
238
|
-
return;
|
|
239
214
|
const cachesApi = globalThis.caches;
|
|
240
215
|
const cache = await cachesApi.open(CACTUS_CACHE_NAME);
|
|
241
216
|
for (const filename of [entry.assets.weights, entry.assets.vocab, entry.assets.config]) {
|
|
@@ -245,13 +220,6 @@ async function removeBrowserCacheEntries(entry) {
|
|
|
245
220
|
} catch {}
|
|
246
221
|
}
|
|
247
222
|
}
|
|
248
|
-
async function removeNodeCacheDir(model, model_id) {
|
|
249
|
-
if (hasBrowserCacheStorage())
|
|
250
|
-
return;
|
|
251
|
-
const models_dir = modelsDirOf(model);
|
|
252
|
-
const resolvedDir = models_dir.startsWith("~/") ? path.join(process.env.HOME ?? process.env.USERPROFILE ?? ".", models_dir.slice(2), model_id) : path.resolve(models_dir, model_id);
|
|
253
|
-
await fs.rm(resolvedDir, { recursive: true, force: true });
|
|
254
|
-
}
|
|
255
223
|
function disposeCactusEngine(model_id) {
|
|
256
224
|
const engine = cactusEngines.get(model_id);
|
|
257
225
|
if (engine) {
|
|
@@ -268,11 +236,20 @@ async function removeCachedAssets(model) {
|
|
|
268
236
|
const entry = getCactusCatalogEntry(model_id);
|
|
269
237
|
if (!entry)
|
|
270
238
|
return;
|
|
271
|
-
await
|
|
239
|
+
await removeBrowserCacheEntries(entry);
|
|
272
240
|
disposeCactusEngine(model_id);
|
|
273
241
|
}
|
|
242
|
+
async function disposeCactusResources() {
|
|
243
|
+
for (const id of Array.from(cactusEngines.keys())) {
|
|
244
|
+
disposeCactusEngine(id);
|
|
245
|
+
}
|
|
246
|
+
cactusEngines.clear();
|
|
247
|
+
cactusConfigJson.clear();
|
|
248
|
+
cactusCachedModelIds.clear();
|
|
249
|
+
cactusSessions.clear();
|
|
250
|
+
}
|
|
274
251
|
|
|
275
|
-
// src/ai/CactusProvider.ts
|
|
252
|
+
// src/ai/CactusProvider.browser.ts
|
|
276
253
|
class CactusProvider extends AiProvider {
|
|
277
254
|
name = LOCAL_CACTUS;
|
|
278
255
|
displayName = "Cactus (Needle)";
|
|
@@ -294,7 +271,7 @@ class CactusProvider extends AiProvider {
|
|
|
294
271
|
await deleteCactusSession(sessionId);
|
|
295
272
|
}
|
|
296
273
|
}
|
|
297
|
-
// src/ai/CactusQueuedProvider.ts
|
|
274
|
+
// src/ai/CactusQueuedProvider.browser.ts
|
|
298
275
|
import { QueuedAiProvider } from "@workglow/ai";
|
|
299
276
|
class CactusQueuedProvider extends QueuedAiProvider {
|
|
300
277
|
name = LOCAL_CACTUS;
|
|
@@ -317,12 +294,12 @@ class CactusQueuedProvider extends QueuedAiProvider {
|
|
|
317
294
|
await deleteCactusSession(sessionId);
|
|
318
295
|
}
|
|
319
296
|
}
|
|
320
|
-
// src/ai/registerCactus.ts
|
|
297
|
+
// src/ai/registerCactus.browser.ts
|
|
321
298
|
import { registerProviderWithWorker } from "@workglow/ai/provider-utils";
|
|
322
299
|
async function registerCactus(options) {
|
|
323
300
|
await registerProviderWithWorker(new CactusQueuedProvider, "Cactus", options);
|
|
324
301
|
}
|
|
325
|
-
// src/ai/common/Cactus_Download.ts
|
|
302
|
+
// src/ai/common/Cactus_Download.browser.ts
|
|
326
303
|
var Cactus_Download = async (input, model, _signal, emit) => {
|
|
327
304
|
if (!model)
|
|
328
305
|
throw new Error("Model config is required for ModelDownloadTask.");
|
|
@@ -343,7 +320,7 @@ var Cactus_Download = async (input, model, _signal, emit) => {
|
|
|
343
320
|
emit({ type: "finish", data: { model: input.model } });
|
|
344
321
|
};
|
|
345
322
|
|
|
346
|
-
// src/ai/common/Cactus_DownloadRemove.ts
|
|
323
|
+
// src/ai/common/Cactus_DownloadRemove.browser.ts
|
|
347
324
|
var Cactus_DownloadRemove = async (input, model, _signal, emit) => {
|
|
348
325
|
if (!model)
|
|
349
326
|
throw new Error("Model config is required for ModelDownloadRemoveTask.");
|
|
@@ -351,7 +328,7 @@ var Cactus_DownloadRemove = async (input, model, _signal, emit) => {
|
|
|
351
328
|
emit({ type: "finish", data: { model: input.model } });
|
|
352
329
|
};
|
|
353
330
|
|
|
354
|
-
// src/ai/common/Cactus_ModelInfo.ts
|
|
331
|
+
// src/ai/common/Cactus_ModelInfo.browser.ts
|
|
355
332
|
var Cactus_ModelInfo = async (input, model, _signal, emit) => {
|
|
356
333
|
if (!model)
|
|
357
334
|
throw new Error("Model config is required for ModelInfoTask.");
|
|
@@ -397,7 +374,7 @@ var Cactus_ModelSearch = async (input, _model, _signal, emit) => {
|
|
|
397
374
|
emit({ type: "finish", data: { results } });
|
|
398
375
|
};
|
|
399
376
|
|
|
400
|
-
// src/ai/common/Cactus_ToolCalling.ts
|
|
377
|
+
// src/ai/common/Cactus_ToolCalling.browser.ts
|
|
401
378
|
import { extractMessageText } from "@workglow/ai/provider-utils";
|
|
402
379
|
import { filterValidToolCalls } from "@workglow/ai/worker";
|
|
403
380
|
function buildToolsJson(tools) {
|
|
@@ -468,7 +445,7 @@ var Cactus_ToolCalling = async (input, model, signal, emit) => {
|
|
|
468
445
|
emit({ type: "finish", data: { text: raw, toolCalls: validToolCalls } });
|
|
469
446
|
};
|
|
470
447
|
|
|
471
|
-
// src/ai/common/Cactus_JobRunFns.ts
|
|
448
|
+
// src/ai/common/Cactus_JobRunFns.browser.ts
|
|
472
449
|
var CACTUS_RUN_FNS = [
|
|
473
450
|
{ serves: CACTUS_TOOL_USE, runFn: Cactus_ToolCalling },
|
|
474
451
|
{ serves: CACTUS_MODEL_DOWNLOAD, runFn: Cactus_Download },
|
|
@@ -478,150 +455,13 @@ var CACTUS_RUN_FNS = [
|
|
|
478
455
|
];
|
|
479
456
|
var CACTUS_PREVIEW_TASKS = {};
|
|
480
457
|
|
|
481
|
-
// src/ai/common/Cactus_Runtime.browser.ts
|
|
482
|
-
var _sdk2;
|
|
483
|
-
var _sdkInitPromise2;
|
|
484
|
-
async function loadSdk2() {
|
|
485
|
-
_sdkInitPromise2 ??= import("needle-rs").then(async (mod) => {
|
|
486
|
-
const init = mod.default;
|
|
487
|
-
if (typeof init === "function") {
|
|
488
|
-
await init();
|
|
489
|
-
}
|
|
490
|
-
_sdk2 = mod;
|
|
491
|
-
return mod;
|
|
492
|
-
}).catch((err) => {
|
|
493
|
-
_sdkInitPromise2 = undefined;
|
|
494
|
-
_sdk2 = undefined;
|
|
495
|
-
throw new Error(`needle-rs is required for LOCAL_CACTUS tasks. Install it with: bun add needle-rs (cause: ${String(err)})`);
|
|
496
|
-
});
|
|
497
|
-
return _sdkInitPromise2;
|
|
498
|
-
}
|
|
499
|
-
function getCactusSdk() {
|
|
500
|
-
if (!_sdk2)
|
|
501
|
-
throw new Error("Cactus SDK not loaded; call loadSdk() first");
|
|
502
|
-
return _sdk2;
|
|
503
|
-
}
|
|
504
|
-
async function fetchAssetBytesBrowser2(url) {
|
|
505
|
-
const cachesApi = globalThis.caches;
|
|
506
|
-
const cache = await cachesApi.open(CACTUS_CACHE_NAME);
|
|
507
|
-
const hit = await cache.match(url);
|
|
508
|
-
if (hit) {
|
|
509
|
-
return new Uint8Array(await hit.arrayBuffer());
|
|
510
|
-
}
|
|
511
|
-
const resp = await fetch(url);
|
|
512
|
-
if (!resp.ok)
|
|
513
|
-
throw new Error(`Cactus asset fetch failed (${resp.status}) for ${url}`);
|
|
514
|
-
await cache.put(url, resp.clone());
|
|
515
|
-
return new Uint8Array(await resp.arrayBuffer());
|
|
516
|
-
}
|
|
517
|
-
async function fetchAssetBytes2(model, filename) {
|
|
518
|
-
const model_id = model.provider_config.model_id;
|
|
519
|
-
const entry = getCactusCatalogEntry(model_id);
|
|
520
|
-
if (!entry)
|
|
521
|
-
throw new Error(`Unknown Cactus model_id: ${model_id}`);
|
|
522
|
-
const url = cactusAssetUrl(entry, filename);
|
|
523
|
-
return fetchAssetBytesBrowser2(url);
|
|
524
|
-
}
|
|
525
|
-
var cactusEngines2 = new Map;
|
|
526
|
-
var cactusConfigJson2 = new Map;
|
|
527
|
-
var cactusCachedModelIds2 = new Set;
|
|
528
|
-
var cactusEngineLoadsInFlight2 = new Map;
|
|
529
|
-
async function getOrLoadEngine2(model) {
|
|
530
|
-
const model_id = model.provider_config.model_id;
|
|
531
|
-
const cached = cactusEngines2.get(model_id);
|
|
532
|
-
if (cached)
|
|
533
|
-
return cached;
|
|
534
|
-
const inFlight = cactusEngineLoadsInFlight2.get(model_id);
|
|
535
|
-
if (inFlight)
|
|
536
|
-
return inFlight;
|
|
537
|
-
const loadPromise = (async () => {
|
|
538
|
-
const sdk = await loadSdk2();
|
|
539
|
-
const entry = getCactusCatalogEntry(model_id);
|
|
540
|
-
if (!entry)
|
|
541
|
-
throw new Error(`Unknown Cactus model_id: ${model_id}`);
|
|
542
|
-
const [weightsBytes, vocabBytes, configBytes] = await Promise.all([
|
|
543
|
-
fetchAssetBytes2(model, entry.assets.weights),
|
|
544
|
-
fetchAssetBytes2(model, entry.assets.vocab),
|
|
545
|
-
fetchAssetBytes2(model, entry.assets.config)
|
|
546
|
-
]);
|
|
547
|
-
try {
|
|
548
|
-
const text = new TextDecoder().decode(configBytes);
|
|
549
|
-
cactusConfigJson2.set(model_id, JSON.parse(text));
|
|
550
|
-
} catch {
|
|
551
|
-
cactusConfigJson2.set(model_id, null);
|
|
552
|
-
}
|
|
553
|
-
const vocabText = new TextDecoder().decode(vocabBytes);
|
|
554
|
-
const engine = sdk.NeedleWasm.load(weightsBytes, vocabText);
|
|
555
|
-
if (!engine) {
|
|
556
|
-
throw new Error(`needle-rs NeedleWasm.load returned undefined for model ${model_id}`);
|
|
557
|
-
}
|
|
558
|
-
cactusEngines2.set(model_id, engine);
|
|
559
|
-
return engine;
|
|
560
|
-
})().finally(() => {
|
|
561
|
-
cactusEngineLoadsInFlight2.delete(model_id);
|
|
562
|
-
});
|
|
563
|
-
cactusEngineLoadsInFlight2.set(model_id, loadPromise);
|
|
564
|
-
return loadPromise;
|
|
565
|
-
}
|
|
566
|
-
function isModelLoaded2(model_id) {
|
|
567
|
-
return cactusEngines2.has(model_id);
|
|
568
|
-
}
|
|
569
|
-
function markModelCached2(model_id) {
|
|
570
|
-
cactusCachedModelIds2.add(model_id);
|
|
571
|
-
}
|
|
572
|
-
function isModelCached2(model_id) {
|
|
573
|
-
return cactusEngines2.has(model_id) || cactusCachedModelIds2.has(model_id);
|
|
574
|
-
}
|
|
575
|
-
var cactusSessions2 = new Map;
|
|
576
|
-
async function deleteCactusSession2(id) {
|
|
577
|
-
return cactusSessions2.delete(id);
|
|
578
|
-
}
|
|
579
|
-
async function removeBrowserCacheEntries2(entry) {
|
|
580
|
-
const cachesApi = globalThis.caches;
|
|
581
|
-
const cache = await cachesApi.open(CACTUS_CACHE_NAME);
|
|
582
|
-
for (const filename of [entry.assets.weights, entry.assets.vocab, entry.assets.config]) {
|
|
583
|
-
const url = cactusAssetUrl(entry, filename);
|
|
584
|
-
try {
|
|
585
|
-
await cache.delete(url);
|
|
586
|
-
} catch {}
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
function disposeCactusEngine2(model_id) {
|
|
590
|
-
const engine = cactusEngines2.get(model_id);
|
|
591
|
-
if (engine) {
|
|
592
|
-
try {
|
|
593
|
-
engine.free?.();
|
|
594
|
-
} catch {}
|
|
595
|
-
}
|
|
596
|
-
cactusEngines2.delete(model_id);
|
|
597
|
-
cactusConfigJson2.delete(model_id);
|
|
598
|
-
cactusCachedModelIds2.delete(model_id);
|
|
599
|
-
}
|
|
600
|
-
async function removeCachedAssets2(model) {
|
|
601
|
-
const model_id = model.provider_config.model_id;
|
|
602
|
-
const entry = getCactusCatalogEntry(model_id);
|
|
603
|
-
if (!entry)
|
|
604
|
-
return;
|
|
605
|
-
await removeBrowserCacheEntries2(entry);
|
|
606
|
-
disposeCactusEngine2(model_id);
|
|
607
|
-
}
|
|
608
|
-
async function disposeCactusResources() {
|
|
609
|
-
for (const id of Array.from(cactusEngines2.keys())) {
|
|
610
|
-
disposeCactusEngine2(id);
|
|
611
|
-
}
|
|
612
|
-
cactusEngines2.clear();
|
|
613
|
-
cactusConfigJson2.clear();
|
|
614
|
-
cactusCachedModelIds2.clear();
|
|
615
|
-
cactusSessions2.clear();
|
|
616
|
-
}
|
|
617
|
-
|
|
618
458
|
// src/ai.browser.ts
|
|
619
459
|
var _testOnly = {
|
|
620
460
|
CactusQueuedProvider,
|
|
621
461
|
CACTUS_RUN_FN_SPECS,
|
|
622
462
|
CACTUS_RUN_FNS,
|
|
623
|
-
cactusEngines
|
|
624
|
-
cactusConfigJson
|
|
463
|
+
cactusEngines,
|
|
464
|
+
cactusConfigJson
|
|
625
465
|
};
|
|
626
466
|
export {
|
|
627
467
|
registerCactus,
|
|
@@ -642,4 +482,4 @@ export {
|
|
|
642
482
|
CACTUS_CACHE_NAME
|
|
643
483
|
};
|
|
644
484
|
|
|
645
|
-
//# debugId=
|
|
485
|
+
//# debugId=3D0C2ED44F792DEF64756E2164756E21
|