@workglow/ai-provider 0.0.115 → 0.0.117

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.
Files changed (58) hide show
  1. package/dist/{HFT_JobRunFns-zkv5fx65.js → HFT_JobRunFns-yx418d60.js} +7 -3
  2. package/dist/{HFT_JobRunFns-zkv5fx65.js.map → HFT_JobRunFns-yx418d60.js.map} +1 -1
  3. package/dist/anthropic/common/Anthropic_JobRunFns.d.ts.map +1 -1
  4. package/dist/anthropic/index.js +97 -17
  5. package/dist/anthropic/index.js.map +3 -3
  6. package/dist/google-gemini/common/Gemini_JobRunFns.d.ts.map +1 -1
  7. package/dist/google-gemini/index.js +106 -16
  8. package/dist/google-gemini/index.js.map +3 -3
  9. package/dist/hf-transformers/common/HFT_JobRunFns.d.ts +78 -3
  10. package/dist/hf-transformers/common/HFT_JobRunFns.d.ts.map +1 -1
  11. package/dist/hf-transformers/index.js +11 -7
  12. package/dist/hf-transformers/index.js.map +2 -2
  13. package/dist/index-m0r2hvfz.js +57 -0
  14. package/dist/index-m0r2hvfz.js.map +10 -0
  15. package/dist/{index-zqq3kw0n.js → index-qett8dfp.js} +58 -55
  16. package/dist/index-qett8dfp.js.map +11 -0
  17. package/dist/{index-8at2wpp1.js → index-tvb9nd5b.js} +128 -44
  18. package/dist/index-tvb9nd5b.js.map +10 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +105 -6
  22. package/dist/index.js.map +7 -4
  23. package/dist/provider-hf-inference/common/HFI_JobRunFns.d.ts.map +1 -1
  24. package/dist/provider-hf-inference/index.js +15 -25
  25. package/dist/provider-hf-inference/index.js.map +3 -3
  26. package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts +3 -1
  27. package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts.map +1 -1
  28. package/dist/provider-llamacpp/index.js +158 -14
  29. package/dist/provider-llamacpp/index.js.map +3 -3
  30. package/dist/provider-ollama/common/Ollama_JobRunFns.browser.d.ts.map +1 -1
  31. package/dist/provider-ollama/common/Ollama_JobRunFns.d.ts.map +1 -1
  32. package/dist/provider-ollama/index.browser.js +6 -6
  33. package/dist/provider-ollama/index.browser.js.map +3 -3
  34. package/dist/provider-ollama/index.js +14 -21
  35. package/dist/provider-ollama/index.js.map +3 -3
  36. package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts +0 -6
  37. package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts.map +1 -1
  38. package/dist/provider-openai/index.js +20 -34
  39. package/dist/provider-openai/index.js.map +3 -3
  40. package/dist/web-browser/WebBrowserProvider.d.ts +40 -0
  41. package/dist/web-browser/WebBrowserProvider.d.ts.map +1 -0
  42. package/dist/web-browser/WebBrowser_Worker.d.ts +7 -0
  43. package/dist/web-browser/WebBrowser_Worker.d.ts.map +1 -0
  44. package/dist/web-browser/common/WebBrowser_Constants.d.ts +15 -0
  45. package/dist/web-browser/common/WebBrowser_Constants.d.ts.map +1 -0
  46. package/dist/web-browser/common/WebBrowser_JobRunFns.d.ts +20 -0
  47. package/dist/web-browser/common/WebBrowser_JobRunFns.d.ts.map +1 -0
  48. package/dist/web-browser/common/WebBrowser_ModelSchema.d.ts +185 -0
  49. package/dist/web-browser/common/WebBrowser_ModelSchema.d.ts.map +1 -0
  50. package/dist/web-browser/index.d.ts +11 -0
  51. package/dist/web-browser/index.d.ts.map +1 -0
  52. package/dist/web-browser/index.js +457 -0
  53. package/dist/web-browser/index.js.map +14 -0
  54. package/package.json +23 -19
  55. package/dist/index-8at2wpp1.js.map +0 -10
  56. package/dist/index-dvb390cv.js +0 -58
  57. package/dist/index-dvb390cv.js.map +0 -10
  58. package/dist/index-zqq3kw0n.js.map +0 -11
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/provider-llamacpp/common/LlamaCpp_JobRunFns.ts", "../src/provider-llamacpp/LlamaCpp_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 AiProviderReactiveRunFn,\n AiProviderRunFn,\n AiProviderStreamFn,\n CountTokensTaskInput,\n CountTokensTaskOutput,\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolDefinition,\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n} from \"@workglow/ai\";\nimport { filterValidToolCalls } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util\";\nimport { LLAMACPP_DEFAULT_MODELS_DIR } from \"./LlamaCpp_Constants\";\nimport type { LlamaCppModelConfig } from \"./LlamaCpp_ModelSchema\";\n\n// ========================================================================\n// Lazy SDK loading\n// ========================================================================\n\nlet _sdk: typeof import(\"node-llama-cpp\") | undefined;\n\nasync function loadSdk() {\n if (!_sdk) {\n try {\n _sdk = await import(\"node-llama-cpp\");\n } catch (err) {\n throw new Error(\n \"node-llama-cpp is required for LOCAL_LLAMACPP tasks. Install it with: bun add node-llama-cpp\"\n );\n }\n }\n return _sdk;\n}\n\n// ========================================================================\n// Module-level caches (shared across all task invocations)\n// ========================================================================\n\ntype LlamaInstance = Awaited<ReturnType<(typeof import(\"node-llama-cpp\"))[\"getLlama\"]>>;\ntype LlamaModel = Awaited<ReturnType<LlamaInstance[\"loadModel\"]>>;\ntype LlamaContext = Awaited<ReturnType<LlamaModel[\"createContext\"]>>;\ntype LlamaEmbeddingContext = Awaited<ReturnType<LlamaModel[\"createEmbeddingContext\"]>>;\n\nlet llamaInstance: LlamaInstance | undefined;\nconst models = new Map<string, LlamaModel>();\nconst textContexts = new Map<string, LlamaContext>();\nconst embeddingContexts = new Map<string, LlamaEmbeddingContext>();\n\n/** Maps model_url (or model_path when used as URI) to the actual downloaded filesystem path. */\nconst resolvedPaths = new Map<string, string>();\n\n// ========================================================================\n// Helpers\n// ========================================================================\n\nasync function getLlamaInstance(): Promise<LlamaInstance> {\n if (!llamaInstance) {\n const { getLlama } = await loadSdk();\n llamaInstance = await getLlama();\n }\n return llamaInstance;\n}\n\nfunction getConfigKey(model: LlamaCppModelConfig): string {\n return model.provider_config.model_url ?? model.provider_config.model_path;\n}\n\nfunction getActualModelPath(model: LlamaCppModelConfig): string {\n const key = getConfigKey(model);\n const resolved = resolvedPaths.get(key);\n return resolved ?? model.provider_config.model_path;\n}\n\nasync function getOrLoadModel(model: LlamaCppModelConfig): Promise<LlamaModel> {\n const modelPath = getActualModelPath(model);\n const cached = models.get(modelPath);\n if (cached) return cached;\n\n const llama = await getLlamaInstance();\n const config = model.provider_config;\n\n const loadedModel = await llama.loadModel({\n modelPath,\n ...(config.gpu_layers !== undefined && { gpuLayers: config.gpu_layers }),\n });\n\n models.set(modelPath, loadedModel);\n return loadedModel;\n}\n\nasync function getOrCreateTextContext(model: LlamaCppModelConfig): Promise<LlamaContext> {\n const modelPath = getActualModelPath(model);\n const cached = textContexts.get(modelPath);\n if (cached) return cached;\n\n const loadedModel = await getOrLoadModel(model);\n const config = model.provider_config;\n\n const context = await loadedModel.createContext({\n ...(config.context_size && { contextSize: config.context_size }),\n ...(config.flash_attention !== undefined && { flashAttention: config.flash_attention }),\n });\n\n textContexts.set(modelPath, context);\n return context;\n}\n\nasync function getOrCreateEmbeddingContext(\n model: LlamaCppModelConfig\n): Promise<LlamaEmbeddingContext> {\n const modelPath = getActualModelPath(model);\n const cached = embeddingContexts.get(modelPath);\n if (cached) return cached;\n\n const loadedModel = await getOrLoadModel(model);\n\n const context = await loadedModel.createEmbeddingContext();\n\n embeddingContexts.set(modelPath, context);\n return context;\n}\n\n/**\n * Bridges a node-llama-cpp session.prompt() call (callback-based) to an AsyncGenerator\n * of StreamEvents. Handles abort signals and errors cleanly.\n */\nasync function* streamFromSession<T extends Record<string, unknown>>(\n promptFn: (onTextChunk: (chunk: string) => void) => Promise<string>,\n signal: AbortSignal\n): AsyncGenerator<StreamEvent<T>> {\n const queue: string[] = [];\n let isComplete = false;\n let completionError: unknown;\n let resolveWait: (() => void) | null = null;\n\n const notifyWaiter = () => {\n resolveWait?.();\n resolveWait = null;\n };\n\n const promptPromise = promptFn((chunk: string) => {\n queue.push(chunk);\n notifyWaiter();\n })\n .then(() => {\n isComplete = true;\n notifyWaiter();\n })\n .catch((err: unknown) => {\n completionError = err;\n isComplete = true;\n notifyWaiter();\n });\n\n try {\n while (true) {\n while (queue.length > 0) {\n yield { type: \"text-delta\", port: \"text\", textDelta: queue.shift()! };\n }\n if (isComplete) break;\n await new Promise<void>((r) => {\n resolveWait = r;\n });\n }\n // Drain any remaining chunks after completion signal\n while (queue.length > 0) {\n yield { type: \"text-delta\", port: \"text\", textDelta: queue.shift()! };\n }\n } finally {\n await promptPromise.catch(() => {});\n }\n\n if (completionError) {\n if (signal.aborted) return;\n throw completionError;\n }\n\n yield { type: \"finish\", data: {} as T };\n}\n\n// ========================================================================\n// DownloadModelTask\n// ========================================================================\n\nexport const LlamaCpp_Download: AiProviderRunFn<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (!model) throw new Error(\"Model config is required for DownloadModelTask.\");\n\n const { createModelDownloader } = await loadSdk();\n const config = model.provider_config;\n const modelUri = config.model_url ?? config.model_path;\n const dirPath = config.models_dir ?? LLAMACPP_DEFAULT_MODELS_DIR;\n\n update_progress(0, \"Creating model downloader\");\n\n const downloader = await createModelDownloader({ modelUri, dirPath });\n\n // Poll download progress via interval (ModelDownloader exposes downloadedSize / totalSize)\n const progressInterval = setInterval(() => {\n const total = (downloader as any).totalSize as number | undefined;\n const downloaded = (downloader as any).downloadedSize as number | undefined;\n if (total && total > 0 && downloaded !== undefined) {\n const pct = Math.min(99, Math.round((downloaded / total) * 100));\n update_progress(pct, \"Downloading model\", { file: modelUri, progress: pct / 100 });\n }\n }, 500);\n\n let modelPath: string;\n try {\n modelPath = await downloader.download();\n } finally {\n clearInterval(progressInterval);\n }\n\n // Store the resolved filesystem path for subsequent inference tasks\n resolvedPaths.set(getConfigKey(model), modelPath);\n\n update_progress(100, \"Model downloaded\", { file: modelUri, progress: 1 });\n\n return { model: input.model! };\n};\n\n// ========================================================================\n// UnloadModelTask\n// ========================================================================\n\nexport const LlamaCpp_Unload: AiProviderRunFn<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, _signal) => {\n if (!model) throw new Error(\"Model config is required for UnloadModelTask.\");\n\n const modelPath = getActualModelPath(model);\n\n // Dispose and remove the text context\n const ctx = textContexts.get(modelPath);\n if (ctx) {\n await ctx.dispose();\n textContexts.delete(modelPath);\n update_progress(33, \"Text context disposed\");\n }\n\n // Dispose and remove the embedding context\n const embCtx = embeddingContexts.get(modelPath);\n if (embCtx) {\n await embCtx.dispose();\n embeddingContexts.delete(modelPath);\n update_progress(66, \"Embedding context disposed\");\n }\n\n // Dispose and remove the model\n const cachedModel = models.get(modelPath);\n if (cachedModel) {\n await cachedModel.dispose();\n models.delete(modelPath);\n update_progress(100, \"Model unloaded from memory\");\n } else {\n update_progress(100, \"Model was not loaded\");\n }\n\n return { model: input.model! };\n};\n\n// ========================================================================\n// TextGenerationTask (non-streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"LlamaCpp_TextGeneration: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const results: string[] = [];\n for (const item of prompts) {\n const r = await LlamaCpp_TextGeneration({ ...input, prompt: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n if (!model) throw new Error(\"Model config is required for TextGenerationTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Generating text\");\n const sequence = context.getSequence();\n const session = new LlamaChatSession({ contextSequence: sequence });\n try {\n const text = await session.prompt(input.prompt as string, {\n signal,\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n ...(input.topP !== undefined && { topP: input.topP }),\n });\n update_progress(100, \"Text generation complete\");\n return { text };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextGenerationTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for TextGenerationTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n const sequence = context.getSequence();\n const session = new LlamaChatSession({ contextSequence: sequence });\n try {\n yield* streamFromSession<TextGenerationTaskOutput>((onTextChunk) => {\n return session.prompt(input.prompt as string, {\n signal,\n onTextChunk,\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n ...(input.topP !== undefined && { topP: input.topP }),\n });\n }, signal);\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextEmbeddingTask\n// ========================================================================\n\nexport const LlamaCpp_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, _signal) => {\n if (!model) throw new Error(\"Model config is required for TextEmbeddingTask.\");\n\n update_progress(0, \"Loading embedding model\");\n const context = await getOrCreateEmbeddingContext(model);\n\n const texts = Array.isArray(input.text) ? input.text : [input.text];\n update_progress(10, \"Computing embeddings\");\n\n const embeddings = await Promise.all(\n texts.map((text) => context.getEmbeddingFor(text).then((e) => new Float32Array(e.vector)))\n );\n\n update_progress(100, \"Embeddings complete\");\n\n if (Array.isArray(input.text)) {\n return { vector: embeddings };\n }\n return { vector: embeddings[0] };\n};\n\n// ========================================================================\n// TextRewriterTask (non-streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"LlamaCpp_TextRewriter: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await LlamaCpp_TextRewriter({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n if (!model) throw new Error(\"Model config is required for TextRewriterTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Rewriting text\");\n const sequence = context.getSequence();\n const session = new LlamaChatSession({ contextSequence: sequence, systemPrompt: input.prompt as string });\n try {\n const text = await session.prompt(input.text as string, { signal });\n update_progress(100, \"Text rewriting complete\");\n return { text };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextRewriterTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for TextRewriterTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n const sequence = context.getSequence();\n const session = new LlamaChatSession({ contextSequence: sequence, systemPrompt: input.prompt as string });\n try {\n yield* streamFromSession<TextRewriterTaskOutput>((onTextChunk) => {\n return session.prompt(input.text as string, { signal, onTextChunk });\n }, signal);\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextSummaryTask (non-streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"LlamaCpp_TextSummary: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await LlamaCpp_TextSummary({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n if (!model) throw new Error(\"Model config is required for TextSummaryTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Summarizing text\");\n const sequence = context.getSequence();\n const session = new LlamaChatSession({\n contextSequence: sequence,\n systemPrompt: \"Summarize the following text concisely, preserving the key points.\",\n });\n try {\n const text = await session.prompt(input.text as string, { signal });\n update_progress(100, \"Summarization complete\");\n return { text };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextSummaryTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for TextSummaryTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n const sequence = context.getSequence();\n const session = new LlamaChatSession({\n contextSequence: sequence,\n systemPrompt: \"Summarize the following text concisely, preserving the key points.\",\n });\n try {\n yield* streamFromSession<TextSummaryTaskOutput>((onTextChunk) => {\n return session.prompt(input.text as string, { signal, onTextChunk });\n }, signal);\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// Dispose helper (called from LlamaCppProvider.dispose())\n// ========================================================================\n\nexport async function disposeLlamaCppResources(): Promise<void> {\n const disposeAll = async (map: Map<string, { dispose(): Promise<void> }>) => {\n for (const resource of map.values()) {\n await resource.dispose().catch(() => {});\n }\n map.clear();\n };\n\n await disposeAll(textContexts as Map<string, { dispose(): Promise<void> }>);\n await disposeAll(embeddingContexts as Map<string, { dispose(): Promise<void> }>);\n await disposeAll(models as Map<string, { dispose(): Promise<void> }>);\n\n if (llamaInstance) {\n await (llamaInstance as any).dispose?.().catch(() => {});\n llamaInstance = undefined;\n }\n\n resolvedPaths.clear();\n}\n\nexport const LlamaCpp_CountTokens: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, onProgress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"LlamaCpp_CountTokens: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const counts: number[] = [];\n for (const item of texts) {\n const r = await LlamaCpp_CountTokens({ ...input, text: item }, model, onProgress, signal);\n counts.push(r.count as number);\n }\n return { count: counts };\n }\n\n const loadedModel = await getOrLoadModel(model!);\n // model.tokenizer is itself the tokenize function (Tokenizer = tokenize[\"tokenize\"])\n const tokens = loadedModel.tokenizer(input.text as string);\n return { count: tokens.length };\n};\n\nexport const LlamaCpp_CountTokens_Reactive: AiProviderReactiveRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n LlamaCppModelConfig\n> = async (input, _output, model) => {\n return LlamaCpp_CountTokens(input, model, () => {}, new AbortController().signal);\n};\n\n// ========================================================================\n// ToolCallingTask (non-streaming)\n// ========================================================================\n\n/**\n * Builds function definitions for node-llama-cpp from ToolDefinition inputs.\n * Each function handler captures the call arguments and returns a simple\n * acknowledgment, allowing us to collect tool calls without side-effects.\n */\nfunction buildLlamaCppFunctions(\n tools: ReadonlyArray<ToolDefinition>,\n capturedCalls: Array<{ name: string; input: Record<string, unknown> }>\n) {\n const { defineChatSessionFunction } = _sdk!;\n const functions: Record<string, any> = {};\n for (const tool of tools) {\n const toolName = tool.name;\n functions[toolName] = defineChatSessionFunction({\n description: tool.description,\n params: tool.inputSchema as any,\n handler(params: any) {\n capturedCalls.push({ name: toolName, input: (params ?? {}) as Record<string, unknown> });\n return \"OK\";\n },\n } as any);\n }\n return functions;\n}\n\nexport const LlamaCpp_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"LlamaCpp_ToolCalling: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const texts: string[] = [];\n const toolCallsList: Record<string, unknown>[] = [];\n for (const item of prompts) {\n const r = await LlamaCpp_ToolCalling({ ...input, prompt: item }, model, update_progress, signal);\n texts.push(r.text as string);\n toolCallsList.push(r.toolCalls as Record<string, unknown>);\n }\n return { text: texts, toolCalls: toolCallsList };\n }\n\n if (!model) throw new Error(\"Model config is required for ToolCallingTask.\");\n\n await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n const capturedCalls: Array<{ name: string; input: Record<string, unknown> }> = [];\n const functions =\n input.toolChoice === \"none\" ? undefined : buildLlamaCppFunctions(input.tools, capturedCalls);\n\n update_progress(10, \"Running tool calling\");\n const sequence = context.getSequence();\n const { LlamaChatSession } = _sdk!;\n const session = new LlamaChatSession({\n contextSequence: sequence,\n ...(input.systemPrompt && { systemPrompt: input.systemPrompt }),\n });\n\n try {\n const text = await session.prompt(input.prompt as string, {\n signal,\n ...(functions && { functions }),\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n });\n\n const toolCalls: Record<string, unknown> = {};\n capturedCalls.forEach((call, index) => {\n const id = `call_${index}`;\n toolCalls[id] = { id, name: call.name, input: call.input };\n });\n\n update_progress(100, \"Tool calling complete\");\n return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// ToolCallingTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_ToolCalling_Stream: AiProviderStreamFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for ToolCallingTask.\");\n\n await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n\n const capturedCalls: Array<{ name: string; input: Record<string, unknown> }> = [];\n const functions =\n input.toolChoice === \"none\" ? undefined : buildLlamaCppFunctions(input.tools, capturedCalls);\n\n const sequence = context.getSequence();\n const { LlamaChatSession } = _sdk!;\n const session = new LlamaChatSession({\n contextSequence: sequence,\n ...(input.systemPrompt && { systemPrompt: input.systemPrompt }),\n });\n\n const queue: string[] = [];\n let isComplete = false;\n let completionError: unknown;\n let resolveWait: (() => void) | null = null;\n\n const notifyWaiter = () => {\n resolveWait?.();\n resolveWait = null;\n };\n\n let accumulatedText = \"\";\n const promptPromise = session\n .prompt(input.prompt as string, {\n signal,\n ...(functions && { functions }),\n onTextChunk: (chunk: string) => {\n queue.push(chunk);\n notifyWaiter();\n },\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n })\n .then(() => {\n isComplete = true;\n notifyWaiter();\n })\n .catch((err: unknown) => {\n completionError = err;\n isComplete = true;\n notifyWaiter();\n });\n\n try {\n while (true) {\n while (queue.length > 0) {\n const chunk = queue.shift()!;\n accumulatedText += chunk;\n yield { type: \"text-delta\", port: \"text\", textDelta: chunk };\n }\n if (isComplete) break;\n await new Promise<void>((r) => {\n resolveWait = r;\n });\n }\n // Drain any remaining chunks after completion signal\n while (queue.length > 0) {\n const chunk = queue.shift()!;\n accumulatedText += chunk;\n yield { type: \"text-delta\", port: \"text\", textDelta: chunk };\n }\n } finally {\n await promptPromise.catch(() => {});\n sequence.dispose();\n }\n\n if (completionError) {\n if (!signal.aborted) throw completionError;\n return;\n }\n\n const toolCalls: Record<string, unknown> = {};\n capturedCalls.forEach((call, index) => {\n const id = `call_${index}`;\n toolCalls[id] = { id, name: call.name, input: call.input };\n });\n const validToolCalls = filterValidToolCalls(toolCalls, input.tools);\n\n if (Object.keys(validToolCalls).length > 0) {\n yield { type: \"object-delta\", port: \"toolCalls\", objectDelta: { ...validToolCalls } };\n }\n\n yield {\n type: \"finish\",\n data: { text: accumulatedText, toolCalls: validToolCalls } as ToolCallingTaskOutput,\n };\n};\n\n// ========================================================================\n// Model info\n// ========================================================================\n\nexport const LlamaCpp_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n LlamaCppModelConfig\n> = async (input, model) => {\n if (!model) throw new Error(\"Model config is required for ModelInfoTask.\");\n\n const modelPath = getActualModelPath(model);\n const is_loaded = models.has(modelPath);\n\n let is_cached = is_loaded;\n let file_sizes: Record<string, number> | null = null;\n\n // Check if model file exists on disk\n try {\n const fs = await import(\"node:fs/promises\");\n const stat = await fs.stat(modelPath);\n is_cached = true;\n file_sizes = { model: stat.size };\n } catch {\n // File does not exist or fs not available\n // Fall back to checking if the path is in resolvedPaths\n if (resolvedPaths.has(getConfigKey(model))) {\n is_cached = true;\n }\n }\n\n return {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: false,\n supports_node: true,\n is_cached,\n is_loaded,\n file_sizes,\n };\n};\n\n// ========================================================================\n// Task registries\n// ========================================================================\n\nexport const LLAMACPP_TASKS: Record<string, AiProviderRunFn<any, any, LlamaCppModelConfig>> = {\n DownloadModelTask: LlamaCpp_Download,\n UnloadModelTask: LlamaCpp_Unload,\n ModelInfoTask: LlamaCpp_ModelInfo,\n CountTokensTask: LlamaCpp_CountTokens,\n TextGenerationTask: LlamaCpp_TextGeneration,\n TextEmbeddingTask: LlamaCpp_TextEmbedding,\n TextRewriterTask: LlamaCpp_TextRewriter,\n TextSummaryTask: LlamaCpp_TextSummary,\n ToolCallingTask: LlamaCpp_ToolCalling,\n};\n\nexport const LLAMACPP_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, LlamaCppModelConfig>\n> = {\n TextGenerationTask: LlamaCpp_TextGeneration_Stream,\n TextRewriterTask: LlamaCpp_TextRewriter_Stream,\n TextSummaryTask: LlamaCpp_TextSummary_Stream,\n ToolCallingTask: LlamaCpp_ToolCalling_Stream,\n};\n\nexport const LLAMACPP_REACTIVE_TASKS: Record<\n string,\n AiProviderReactiveRunFn<any, any, LlamaCppModelConfig>\n> = {\n CountTokensTask: LlamaCpp_CountTokens_Reactive,\n};\n",
5
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { filterValidToolCalls } from \"@workglow/ai\";\nimport type {\n AiProviderReactiveRunFn,\n AiProviderRunFn,\n AiProviderStreamFn,\n CountTokensTaskInput,\n CountTokensTaskOutput,\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n ToolDefinition,\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger, parsePartialJson } from \"@workglow/util\";\nimport { LLAMACPP_DEFAULT_MODELS_DIR } from \"./LlamaCpp_Constants\";\nimport type { LlamaCppModelConfig } from \"./LlamaCpp_ModelSchema\";\n\n// ========================================================================\n// Lazy SDK loading\n// ========================================================================\n\nlet _sdk: typeof import(\"node-llama-cpp\") | undefined;\n\nasync function loadSdk() {\n if (!_sdk) {\n try {\n _sdk = await import(\"node-llama-cpp\");\n } catch (err) {\n throw new Error(\n \"node-llama-cpp is required for LOCAL_LLAMACPP tasks. Install it with: bun add node-llama-cpp\"\n );\n }\n }\n return _sdk;\n}\n\n// ========================================================================\n// Module-level caches (shared across all task invocations)\n// ========================================================================\n\ntype LlamaInstance = Awaited<ReturnType<(typeof import(\"node-llama-cpp\"))[\"getLlama\"]>>;\ntype LlamaModel = Awaited<ReturnType<LlamaInstance[\"loadModel\"]>>;\ntype LlamaContext = Awaited<ReturnType<LlamaModel[\"createContext\"]>>;\ntype LlamaEmbeddingContext = Awaited<ReturnType<LlamaModel[\"createEmbeddingContext\"]>>;\n\nlet llamaInstance: LlamaInstance | undefined;\nconst models = new Map<string, LlamaModel>();\nconst textContexts = new Map<string, LlamaContext>();\nconst embeddingContexts = new Map<string, LlamaEmbeddingContext>();\n\n/** Maps model_url (or model_path when used as URI) to the actual downloaded filesystem path. */\nconst resolvedPaths = new Map<string, string>();\n\n// ========================================================================\n// Helpers\n// ========================================================================\n\nasync function getLlamaInstance(): Promise<LlamaInstance> {\n if (!llamaInstance) {\n const { getLlama } = await loadSdk();\n llamaInstance = await getLlama();\n }\n return llamaInstance;\n}\n\nfunction getConfigKey(model: LlamaCppModelConfig): string {\n return model.provider_config.model_url ?? model.provider_config.model_path;\n}\n\nfunction getActualModelPath(model: LlamaCppModelConfig): string {\n const key = getConfigKey(model);\n const resolved = resolvedPaths.get(key);\n return resolved ?? model.provider_config.model_path;\n}\n\nasync function getOrLoadModel(model: LlamaCppModelConfig): Promise<LlamaModel> {\n const modelPath = getActualModelPath(model);\n const cached = models.get(modelPath);\n if (cached) return cached;\n\n const llama = await getLlamaInstance();\n const config = model.provider_config;\n\n const loadedModel = await llama.loadModel({\n modelPath,\n ...(config.gpu_layers !== undefined && { gpuLayers: config.gpu_layers }),\n });\n\n models.set(modelPath, loadedModel);\n return loadedModel;\n}\n\nasync function getOrCreateTextContext(model: LlamaCppModelConfig): Promise<LlamaContext> {\n const modelPath = getActualModelPath(model);\n const cached = textContexts.get(modelPath);\n if (cached) return cached;\n\n const loadedModel = await getOrLoadModel(model);\n const config = model.provider_config;\n\n const context = await loadedModel.createContext({\n ...(config.context_size && { contextSize: config.context_size }),\n ...(config.flash_attention !== undefined && { flashAttention: config.flash_attention }),\n });\n\n textContexts.set(modelPath, context);\n return context;\n}\n\nasync function getOrCreateEmbeddingContext(\n model: LlamaCppModelConfig\n): Promise<LlamaEmbeddingContext> {\n const modelPath = getActualModelPath(model);\n const cached = embeddingContexts.get(modelPath);\n if (cached) return cached;\n\n const loadedModel = await getOrLoadModel(model);\n\n const context = await loadedModel.createEmbeddingContext();\n\n embeddingContexts.set(modelPath, context);\n return context;\n}\n\n/**\n * Bridges a node-llama-cpp session.prompt() call (callback-based) to an AsyncGenerator\n * of StreamEvents. Handles abort signals and errors cleanly.\n */\nasync function* streamFromSession<T extends Record<string, unknown>>(\n promptFn: (onTextChunk: (chunk: string) => void) => Promise<string>,\n signal: AbortSignal\n): AsyncGenerator<StreamEvent<T>> {\n const queue: string[] = [];\n let isComplete = false;\n let completionError: unknown;\n let resolveWait: (() => void) | null = null;\n\n const notifyWaiter = () => {\n resolveWait?.();\n resolveWait = null;\n };\n\n const promptPromise = promptFn((chunk: string) => {\n queue.push(chunk);\n notifyWaiter();\n })\n .then(() => {\n isComplete = true;\n notifyWaiter();\n })\n .catch((err: unknown) => {\n completionError = err;\n isComplete = true;\n notifyWaiter();\n });\n\n try {\n while (true) {\n while (queue.length > 0) {\n yield { type: \"text-delta\", port: \"text\", textDelta: queue.shift()! };\n }\n if (isComplete) break;\n await new Promise<void>((r) => {\n resolveWait = r;\n });\n }\n // Drain any remaining chunks after completion signal\n while (queue.length > 0) {\n yield { type: \"text-delta\", port: \"text\", textDelta: queue.shift()! };\n }\n } finally {\n await promptPromise.catch(() => {});\n }\n\n if (completionError) {\n if (signal.aborted) return;\n throw completionError;\n }\n\n yield { type: \"finish\", data: {} as T };\n}\n\n// ========================================================================\n// DownloadModelTask\n// ========================================================================\n\nexport const LlamaCpp_Download: AiProviderRunFn<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (!model) throw new Error(\"Model config is required for DownloadModelTask.\");\n\n const { createModelDownloader } = await loadSdk();\n const config = model.provider_config;\n const modelUri = config.model_url ?? config.model_path;\n const dirPath = config.models_dir ?? LLAMACPP_DEFAULT_MODELS_DIR;\n\n update_progress(0, \"Creating model downloader\");\n\n const downloader = await createModelDownloader({ modelUri, dirPath });\n\n // Poll download progress via interval (ModelDownloader exposes downloadedSize / totalSize)\n const progressInterval = setInterval(() => {\n const total = (downloader as any).totalSize as number | undefined;\n const downloaded = (downloader as any).downloadedSize as number | undefined;\n if (total && total > 0 && downloaded !== undefined) {\n const pct = Math.min(99, Math.round((downloaded / total) * 100));\n update_progress(pct, \"Downloading model\", { file: modelUri, progress: pct / 100 });\n }\n }, 500);\n\n let modelPath: string;\n try {\n modelPath = await downloader.download();\n } finally {\n clearInterval(progressInterval);\n }\n\n // Store the resolved filesystem path for subsequent inference tasks\n resolvedPaths.set(getConfigKey(model), modelPath);\n\n update_progress(100, \"Model downloaded\", { file: modelUri, progress: 1 });\n\n return { model: input.model! };\n};\n\n// ========================================================================\n// UnloadModelTask\n// ========================================================================\n\nexport const LlamaCpp_Unload: AiProviderRunFn<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, _signal) => {\n if (!model) throw new Error(\"Model config is required for UnloadModelTask.\");\n\n const modelPath = getActualModelPath(model);\n\n // Dispose and remove the text context\n const ctx = textContexts.get(modelPath);\n if (ctx) {\n await ctx.dispose();\n textContexts.delete(modelPath);\n update_progress(33, \"Text context disposed\");\n }\n\n // Dispose and remove the embedding context\n const embCtx = embeddingContexts.get(modelPath);\n if (embCtx) {\n await embCtx.dispose();\n embeddingContexts.delete(modelPath);\n update_progress(66, \"Embedding context disposed\");\n }\n\n // Dispose and remove the model\n const cachedModel = models.get(modelPath);\n if (cachedModel) {\n await cachedModel.dispose();\n models.delete(modelPath);\n update_progress(100, \"Model unloaded from memory\");\n } else {\n update_progress(100, \"Model was not loaded\");\n }\n\n return { model: input.model! };\n};\n\n// ========================================================================\n// TextGenerationTask (non-streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"LlamaCpp_TextGeneration: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const results: string[] = [];\n for (const item of prompts) {\n const r = await LlamaCpp_TextGeneration(\n { ...input, prompt: item },\n model,\n update_progress,\n signal\n );\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n if (!model) throw new Error(\"Model config is required for TextGenerationTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Generating text\");\n const sequence = context.getSequence();\n const session = new LlamaChatSession({ contextSequence: sequence });\n try {\n const text = await session.prompt(input.prompt as string, {\n signal,\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n ...(input.topP !== undefined && { topP: input.topP }),\n });\n update_progress(100, \"Text generation complete\");\n return { text };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextGenerationTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for TextGenerationTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n const sequence = context.getSequence();\n const session = new LlamaChatSession({ contextSequence: sequence });\n try {\n yield* streamFromSession<TextGenerationTaskOutput>((onTextChunk) => {\n return session.prompt(input.prompt as string, {\n signal,\n onTextChunk,\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n ...(input.topP !== undefined && { topP: input.topP }),\n });\n }, signal);\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextEmbeddingTask\n// ========================================================================\n\nexport const LlamaCpp_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, _signal) => {\n if (!model) throw new Error(\"Model config is required for TextEmbeddingTask.\");\n\n update_progress(0, \"Loading embedding model\");\n const context = await getOrCreateEmbeddingContext(model);\n\n const texts = Array.isArray(input.text) ? input.text : [input.text];\n update_progress(10, \"Computing embeddings\");\n\n const embeddings = await Promise.all(\n texts.map((text) => context.getEmbeddingFor(text).then((e) => new Float32Array(e.vector)))\n );\n\n update_progress(100, \"Embeddings complete\");\n\n if (Array.isArray(input.text)) {\n return { vector: embeddings };\n }\n return { vector: embeddings[0] };\n};\n\n// ========================================================================\n// TextRewriterTask (non-streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"LlamaCpp_TextRewriter: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await LlamaCpp_TextRewriter(\n { ...input, text: item },\n model,\n update_progress,\n signal\n );\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n if (!model) throw new Error(\"Model config is required for TextRewriterTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Rewriting text\");\n const sequence = context.getSequence();\n const session = new LlamaChatSession({\n contextSequence: sequence,\n systemPrompt: input.prompt as string,\n });\n try {\n const text = await session.prompt(input.text as string, { signal });\n update_progress(100, \"Text rewriting complete\");\n return { text };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextRewriterTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for TextRewriterTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n const sequence = context.getSequence();\n const session = new LlamaChatSession({\n contextSequence: sequence,\n systemPrompt: input.prompt as string,\n });\n try {\n yield* streamFromSession<TextRewriterTaskOutput>((onTextChunk) => {\n return session.prompt(input.text as string, { signal, onTextChunk });\n }, signal);\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextSummaryTask (non-streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"LlamaCpp_TextSummary: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await LlamaCpp_TextSummary(\n { ...input, text: item },\n model,\n update_progress,\n signal\n );\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n if (!model) throw new Error(\"Model config is required for TextSummaryTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Summarizing text\");\n const sequence = context.getSequence();\n const session = new LlamaChatSession({\n contextSequence: sequence,\n systemPrompt: \"Summarize the following text concisely, preserving the key points.\",\n });\n try {\n const text = await session.prompt(input.text as string, { signal });\n update_progress(100, \"Summarization complete\");\n return { text };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// TextSummaryTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for TextSummaryTask.\");\n\n const { LlamaChatSession } = await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n const sequence = context.getSequence();\n const session = new LlamaChatSession({\n contextSequence: sequence,\n systemPrompt: \"Summarize the following text concisely, preserving the key points.\",\n });\n try {\n yield* streamFromSession<TextSummaryTaskOutput>((onTextChunk) => {\n return session.prompt(input.text as string, { signal, onTextChunk });\n }, signal);\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// Dispose helper (called from LlamaCppProvider.dispose())\n// ========================================================================\n\nexport async function disposeLlamaCppResources(): Promise<void> {\n const disposeAll = async (map: Map<string, { dispose(): Promise<void> }>) => {\n for (const resource of map.values()) {\n await resource.dispose().catch(() => {});\n }\n map.clear();\n };\n\n await disposeAll(textContexts as Map<string, { dispose(): Promise<void> }>);\n await disposeAll(embeddingContexts as Map<string, { dispose(): Promise<void> }>);\n await disposeAll(models as Map<string, { dispose(): Promise<void> }>);\n\n if (llamaInstance) {\n await (llamaInstance as any).dispose?.().catch(() => {});\n llamaInstance = undefined;\n }\n\n resolvedPaths.clear();\n}\n\nexport const LlamaCpp_CountTokens: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, onProgress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"LlamaCpp_CountTokens: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const counts: number[] = [];\n for (const item of texts) {\n const r = await LlamaCpp_CountTokens({ ...input, text: item }, model, onProgress, signal);\n counts.push(r.count as number);\n }\n return { count: counts };\n }\n\n const loadedModel = await getOrLoadModel(model!);\n // model.tokenizer is itself the tokenize function (Tokenizer = tokenize[\"tokenize\"])\n const tokens = loadedModel.tokenizer(input.text as string);\n return { count: tokens.length };\n};\n\nexport const LlamaCpp_CountTokens_Reactive: AiProviderReactiveRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n LlamaCppModelConfig\n> = async (input, _output, model) => {\n return LlamaCpp_CountTokens(input, model, () => {}, new AbortController().signal);\n};\n\n// ========================================================================\n// ToolCallingTask (non-streaming)\n// ========================================================================\n\n/**\n * Build a prompt string from the task input.\n * When `input.messages` is present (multi-turn agent loop), concatenates\n * the conversation history into a single prompt string since LlamaCpp\n * uses a session-based approach that doesn't support external message arrays.\n */\nfunction buildLlamaCppPrompt(input: ToolCallingTaskInput): string {\n const inputMessages = input.messages;\n if (!inputMessages || inputMessages.length === 0) {\n return Array.isArray(input.prompt) ? input.prompt.join(\"\\n\") : input.prompt;\n }\n\n // Concatenate messages into a single prompt for the session\n const parts: string[] = [];\n for (const msg of inputMessages) {\n if (msg.role === \"user\") {\n parts.push(`User: ${msg.content}`);\n } else if (msg.role === \"assistant\" && Array.isArray(msg.content)) {\n const text = msg.content\n .filter((b: any) => b.type === \"text\")\n .map((b: any) => b.text)\n .join(\"\");\n if (text) parts.push(`Assistant: ${text}`);\n } else if (msg.role === \"tool\" && Array.isArray(msg.content)) {\n for (const block of msg.content) {\n parts.push(`Tool Result: ${block.content}`);\n }\n }\n }\n return parts.join(\"\\n\\n\");\n}\n\n/**\n * Builds function definitions for node-llama-cpp from ToolDefinition inputs.\n * Each function handler captures the call arguments and returns a simple\n * acknowledgment, allowing us to collect tool calls without side-effects.\n */\nfunction buildLlamaCppFunctions(\n tools: ReadonlyArray<ToolDefinition>,\n capturedCalls: Array<{ name: string; input: Record<string, unknown> }>\n) {\n const { defineChatSessionFunction } = _sdk!;\n const functions: Record<string, any> = {};\n for (const tool of tools) {\n const toolName = tool.name;\n functions[toolName] = defineChatSessionFunction({\n description: tool.description,\n params: tool.inputSchema as any,\n handler(params: any) {\n capturedCalls.push({ name: toolName, input: (params ?? {}) as Record<string, unknown> });\n return \"OK\";\n },\n } as any);\n }\n return functions;\n}\n\nexport const LlamaCpp_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"LlamaCpp_ToolCalling: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const texts: string[] = [];\n const toolCallsList: ToolCalls[] = [];\n for (const item of prompts) {\n const r = await LlamaCpp_ToolCalling(\n { ...input, prompt: item },\n model,\n update_progress,\n signal\n );\n texts.push(r.text as string);\n toolCallsList.push(r.toolCalls as ToolCalls);\n }\n return { text: texts, toolCalls: toolCallsList } as unknown as ToolCallingTaskOutput;\n }\n\n if (!model) throw new Error(\"Model config is required for ToolCallingTask.\");\n\n await loadSdk();\n\n update_progress(0, \"Loading model\");\n const context = await getOrCreateTextContext(model);\n\n const capturedCalls: Array<{ name: string; input: Record<string, unknown> }> = [];\n const functions =\n input.toolChoice === \"none\" ? undefined : buildLlamaCppFunctions(input.tools, capturedCalls);\n\n update_progress(10, \"Running tool calling\");\n const sequence = context.getSequence();\n const { LlamaChatSession } = _sdk!;\n const promptText = buildLlamaCppPrompt(input);\n const session = new LlamaChatSession({\n contextSequence: sequence,\n ...(input.systemPrompt && { systemPrompt: input.systemPrompt }),\n });\n\n try {\n const text = await session.prompt(promptText, {\n signal,\n ...(functions && { functions }),\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n });\n\n const toolCalls: ToolCalls = [];\n capturedCalls.forEach((call, index) => {\n const id = `call_${index}`;\n toolCalls.push({ id, name: call.name, input: call.input });\n });\n\n update_progress(100, \"Tool calling complete\");\n return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// ToolCallingTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_ToolCalling_Stream: AiProviderStreamFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n LlamaCppModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for ToolCallingTask.\");\n\n await loadSdk();\n\n const context = await getOrCreateTextContext(model);\n\n const capturedCalls: Array<{ name: string; input: Record<string, unknown> }> = [];\n const functions =\n input.toolChoice === \"none\" ? undefined : buildLlamaCppFunctions(input.tools, capturedCalls);\n\n const sequence = context.getSequence();\n const { LlamaChatSession } = _sdk!;\n const promptText = buildLlamaCppPrompt(input);\n const session = new LlamaChatSession({\n contextSequence: sequence,\n ...(input.systemPrompt && { systemPrompt: input.systemPrompt }),\n });\n\n const queue: string[] = [];\n let isComplete = false;\n let completionError: unknown;\n let resolveWait: (() => void) | null = null;\n\n const notifyWaiter = () => {\n resolveWait?.();\n resolveWait = null;\n };\n\n let accumulatedText = \"\";\n const promptPromise = session\n .prompt(promptText, {\n signal,\n ...(functions && { functions }),\n onTextChunk: (chunk: string) => {\n queue.push(chunk);\n notifyWaiter();\n },\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n })\n .then(() => {\n isComplete = true;\n notifyWaiter();\n })\n .catch((err: unknown) => {\n completionError = err;\n isComplete = true;\n notifyWaiter();\n });\n\n try {\n while (true) {\n while (queue.length > 0) {\n const chunk = queue.shift()!;\n accumulatedText += chunk;\n yield { type: \"text-delta\", port: \"text\", textDelta: chunk };\n }\n if (isComplete) break;\n await new Promise<void>((r) => {\n resolveWait = r;\n });\n }\n // Drain any remaining chunks after completion signal\n while (queue.length > 0) {\n const chunk = queue.shift()!;\n accumulatedText += chunk;\n yield { type: \"text-delta\", port: \"text\", textDelta: chunk };\n }\n } finally {\n await promptPromise.catch(() => {});\n sequence.dispose();\n }\n\n if (completionError) {\n if (!signal.aborted) throw completionError;\n return;\n }\n\n const toolCalls: ToolCalls = [];\n capturedCalls.forEach((call, index) => {\n const id = `call_${index}`;\n toolCalls.push({ id, name: call.name, input: call.input });\n });\n const validToolCalls = filterValidToolCalls(toolCalls, input.tools);\n\n if (validToolCalls.length > 0) {\n yield { type: \"object-delta\", port: \"toolCalls\", objectDelta: [...validToolCalls] };\n }\n\n yield {\n type: \"finish\",\n data: { text: accumulatedText, toolCalls: validToolCalls } as ToolCallingTaskOutput,\n };\n};\n\n// ========================================================================\n// StructuredGenerationTask\n// ========================================================================\n\nexport const LlamaCpp_StructuredGeneration: AiProviderRunFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n LlamaCppModelConfig\n> = async (input, model, update_progress, signal) => {\n if (!model) throw new Error(\"Model config is required for StructuredGenerationTask.\");\n\n await loadSdk();\n\n update_progress(0, \"Loading model\");\n const llama = await getLlamaInstance();\n const context = await getOrCreateTextContext(model);\n\n update_progress(10, \"Running structured generation\");\n const grammar = await llama.createGrammarForJsonSchema(input.outputSchema as any);\n const sequence = context.getSequence();\n const { LlamaChatSession } = _sdk!;\n const session = new LlamaChatSession({ contextSequence: sequence });\n\n try {\n const text = await session.prompt(input.prompt as string, {\n signal,\n grammar,\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n });\n\n let object: Record<string, unknown>;\n try {\n object = JSON.parse(text);\n } catch {\n object = {};\n }\n\n update_progress(100, \"Structured generation complete\");\n return { object };\n } finally {\n sequence.dispose();\n }\n};\n\n// ========================================================================\n// StructuredGenerationTask (streaming)\n// ========================================================================\n\nexport const LlamaCpp_StructuredGeneration_Stream: AiProviderStreamFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n LlamaCppModelConfig\n> = async function* (\n input,\n model,\n signal\n): AsyncIterable<StreamEvent<StructuredGenerationTaskOutput>> {\n if (!model) throw new Error(\"Model config is required for StructuredGenerationTask.\");\n\n await loadSdk();\n\n const llama = await getLlamaInstance();\n const context = await getOrCreateTextContext(model);\n const grammar = await llama.createGrammarForJsonSchema(input.outputSchema as any);\n\n const sequence = context.getSequence();\n const { LlamaChatSession } = _sdk!;\n const session = new LlamaChatSession({ contextSequence: sequence });\n\n const queue: string[] = [];\n let isComplete = false;\n let completionError: unknown;\n let resolveWait: (() => void) | null = null;\n\n const notifyWaiter = () => {\n resolveWait?.();\n resolveWait = null;\n };\n\n let accumulatedText = \"\";\n const promptPromise = session\n .prompt(input.prompt as string, {\n signal,\n grammar,\n onTextChunk: (chunk: string) => {\n queue.push(chunk);\n notifyWaiter();\n },\n ...(input.temperature !== undefined && { temperature: input.temperature }),\n ...(input.maxTokens !== undefined && { maxTokens: input.maxTokens }),\n })\n .then(() => {\n isComplete = true;\n notifyWaiter();\n })\n .catch((err: unknown) => {\n completionError = err;\n isComplete = true;\n notifyWaiter();\n });\n\n try {\n while (true) {\n while (queue.length > 0) {\n const chunk = queue.shift()!;\n accumulatedText += chunk;\n // Try to parse partial JSON and emit object-delta\n const partial = parsePartialJson(accumulatedText);\n if (partial !== undefined) {\n yield {\n type: \"object-delta\",\n port: \"object\",\n objectDelta: partial as Record<string, unknown>,\n };\n }\n }\n if (isComplete) break;\n await new Promise<void>((r) => {\n resolveWait = r;\n });\n }\n // Drain remaining chunks\n while (queue.length > 0) {\n const chunk = queue.shift()!;\n accumulatedText += chunk;\n }\n } finally {\n await promptPromise.catch(() => {});\n sequence.dispose();\n }\n\n if (completionError) {\n if (signal.aborted) return;\n throw completionError;\n }\n\n let finalObject: Record<string, unknown>;\n try {\n finalObject = JSON.parse(accumulatedText);\n } catch {\n finalObject = (parsePartialJson(accumulatedText) as Record<string, unknown>) ?? {};\n }\n\n yield { type: \"finish\", data: { object: finalObject } as StructuredGenerationTaskOutput };\n};\n\n// ========================================================================\n// Model info\n// ========================================================================\n\nexport const LlamaCpp_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n LlamaCppModelConfig\n> = async (input, model) => {\n if (!model) throw new Error(\"Model config is required for ModelInfoTask.\");\n\n const modelPath = getActualModelPath(model);\n const is_loaded = models.has(modelPath);\n\n let is_cached = is_loaded;\n let file_sizes: Record<string, number> | null = null;\n\n // Check if model file exists on disk\n try {\n const fs = await import(\"node:fs/promises\");\n const stat = await fs.stat(modelPath);\n is_cached = true;\n file_sizes = { model: stat.size };\n } catch {\n // File does not exist or fs not available\n // Fall back to checking if the path is in resolvedPaths\n if (resolvedPaths.has(getConfigKey(model))) {\n is_cached = true;\n }\n }\n\n return {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: false,\n supports_node: true,\n is_cached,\n is_loaded,\n file_sizes,\n };\n};\n\n// ========================================================================\n// Task registries\n// ========================================================================\n\nexport const LLAMACPP_TASKS: Record<string, AiProviderRunFn<any, any, LlamaCppModelConfig>> = {\n DownloadModelTask: LlamaCpp_Download,\n UnloadModelTask: LlamaCpp_Unload,\n ModelInfoTask: LlamaCpp_ModelInfo,\n CountTokensTask: LlamaCpp_CountTokens,\n TextGenerationTask: LlamaCpp_TextGeneration,\n TextEmbeddingTask: LlamaCpp_TextEmbedding,\n TextRewriterTask: LlamaCpp_TextRewriter,\n TextSummaryTask: LlamaCpp_TextSummary,\n ToolCallingTask: LlamaCpp_ToolCalling,\n StructuredGenerationTask: LlamaCpp_StructuredGeneration,\n};\n\nexport const LLAMACPP_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, LlamaCppModelConfig>\n> = {\n TextGenerationTask: LlamaCpp_TextGeneration_Stream,\n TextRewriterTask: LlamaCpp_TextRewriter_Stream,\n TextSummaryTask: LlamaCpp_TextSummary_Stream,\n ToolCallingTask: LlamaCpp_ToolCalling_Stream,\n StructuredGenerationTask: LlamaCpp_StructuredGeneration_Stream,\n};\n\nexport const LLAMACPP_REACTIVE_TASKS: Record<\n string,\n AiProviderReactiveRunFn<any, any, LlamaCppModelConfig>\n> = {\n CountTokensTask: LlamaCpp_CountTokens_Reactive,\n};\n",
6
6
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLogger, globalServiceRegistry, WORKER_SERVER } from \"@workglow/util\";\nimport {\n LLAMACPP_REACTIVE_TASKS,\n LLAMACPP_STREAM_TASKS,\n LLAMACPP_TASKS,\n} from \"./common/LlamaCpp_JobRunFns\";\nimport { LlamaCppProvider } from \"./LlamaCppProvider\";\n\nexport function LLAMACPP_WORKER_JOBRUN_REGISTER() {\n const workerServer = globalServiceRegistry.get(WORKER_SERVER);\n new LlamaCppProvider(\n LLAMACPP_TASKS,\n LLAMACPP_STREAM_TASKS,\n LLAMACPP_REACTIVE_TASKS\n ).registerOnWorkerServer(workerServer);\n workerServer.sendReady();\n getLogger().info(\"LLAMACPP_WORKER_JOBRUN registered\");\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "3B2BE18FF6F105A164756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "2C1EC584C3FA43E664756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Ollama_JobRunFns.browser.d.ts","sourceRoot":"","sources":["../../../src/provider-ollama/common/Ollama_JobRunFns.browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAKtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA4B9D,eAAO,MAAM,qBAAqB,EAAE,eAAe,CACjD,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CAiClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAqBlB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAC/C,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA6BlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA6BlB,CAAC;AAMF,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,CAC3D,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CA+BlB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CACzD,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA2BlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA2BlB,CAAC;AAiBF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA4DlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAqElB,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAqClB,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAOrF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,MAAM,EACN,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAMhD,CAAC"}
1
+ {"version":3,"file":"Ollama_JobRunFns.browser.d.ts","sourceRoot":"","sources":["../../../src/provider-ollama/common/Ollama_JobRunFns.browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAGtB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA4B9D,eAAO,MAAM,qBAAqB,EAAE,eAAe,CACjD,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CAsClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAqBlB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAC/C,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA6BlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA6BlB,CAAC;AAMF,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,CAC3D,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CA+BlB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CACzD,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA2BlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA2BlB,CAAC;AAiBF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAiElB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAqElB,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAqClB,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAOrF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,MAAM,EACN,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAMhD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Ollama_JobRunFns.d.ts","sourceRoot":"","sources":["../../../src/provider-ollama/common/Ollama_JobRunFns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAKtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA4B9D,eAAO,MAAM,qBAAqB,EAAE,eAAe,CACjD,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CAiClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAqBlB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAC/C,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA6BlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA6BlB,CAAC;AAMF,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,CAC3D,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CA+BlB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CACzD,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA2BlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA2BlB,CAAC;AAiBF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA4DlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAqElB,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAqClB,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAOrF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,MAAM,EACN,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAMhD,CAAC"}
1
+ {"version":3,"file":"Ollama_JobRunFns.d.ts","sourceRoot":"","sources":["../../../src/provider-ollama/common/Ollama_JobRunFns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAGtB,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA8B9D,eAAO,MAAM,qBAAqB,EAAE,eAAe,CACjD,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CAsClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAqBlB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAC/C,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA6BlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA6BlB,CAAC;AAMF,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,CAC3D,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CA+BlB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CACzD,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CA2BlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA2BlB,CAAC;AAiBF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CA6DlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAiElB,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAqClB,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAOrF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,MAAM,EACN,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAMhD,CAAC"}
@@ -245,7 +245,7 @@ var Ollama_ToolCalling = async (input, model, update_progress, signal) => {
245
245
  }
246
246
  });
247
247
  const text = response.message.content ?? "";
248
- const toolCalls = {};
248
+ const toolCalls = [];
249
249
  (response.message.tool_calls ?? []).forEach((tc, index) => {
250
250
  let parsedInput = {};
251
251
  const fnArgs = tc.function.arguments;
@@ -260,7 +260,7 @@ var Ollama_ToolCalling = async (input, model, update_progress, signal) => {
260
260
  parsedInput = fnArgs;
261
261
  }
262
262
  const id = `call_${index}`;
263
- toolCalls[id] = { id, name: tc.function.name, input: parsedInput };
263
+ toolCalls.push({ id, name: tc.function.name, input: parsedInput });
264
264
  });
265
265
  update_progress(100, "Completed Ollama tool calling");
266
266
  return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };
@@ -287,7 +287,7 @@ var Ollama_ToolCalling_Stream = async function* (input, model, signal) {
287
287
  const onAbort = () => stream.abort();
288
288
  signal.addEventListener("abort", onAbort, { once: true });
289
289
  let accumulatedText = "";
290
- const toolCalls = {};
290
+ const toolCalls = [];
291
291
  let callIndex = 0;
292
292
  try {
293
293
  for await (const chunk of stream) {
@@ -312,9 +312,9 @@ var Ollama_ToolCalling_Stream = async function* (input, model, signal) {
312
312
  parsedInput = fnArgs;
313
313
  }
314
314
  const id = `call_${callIndex++}`;
315
- toolCalls[id] = { id, name: tc.function.name, input: parsedInput };
315
+ toolCalls.push({ id, name: tc.function.name, input: parsedInput });
316
316
  }
317
- yield { type: "object-delta", port: "toolCalls", objectDelta: { ...toolCalls } };
317
+ yield { type: "object-delta", port: "toolCalls", objectDelta: [...toolCalls] };
318
318
  }
319
319
  }
320
320
  const validToolCalls = filterValidToolCalls(toolCalls, input.tools);
@@ -470,4 +470,4 @@ export {
470
470
  OLLAMA
471
471
  };
472
472
 
473
- //# debugId=4D350D3A0468238E64756E2164756E21
473
+ //# debugId=70594585799656F364756E2164756E21
@@ -3,12 +3,12 @@
3
3
  "sources": ["../src/provider-ollama/common/Ollama_Constants.ts", "../src/provider-ollama/common/Ollama_JobRunFns.browser.ts", "../src/provider-ollama/common/Ollama_ModelSchema.ts", "../src/provider-ollama/Ollama_Worker.browser.ts", "../src/provider-ollama/OllamaProvider.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const OLLAMA = \"OLLAMA\";\nexport const OLLAMA_DEFAULT_BASE_URL = \"http://localhost:11434\";\n",
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 AiProviderStreamFn,\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolDefinition,\n} from \"@workglow/ai\";\nimport { buildToolDescription, filterValidToolCalls } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger, parsePartialJson } from \"@workglow/util\";\nimport { OLLAMA_DEFAULT_BASE_URL } from \"./Ollama_Constants\";\nimport type { OllamaModelConfig } from \"./Ollama_ModelSchema\";\n\nlet _sdk: typeof import(\"ollama/browser\") | undefined;\nasync function loadOllamaSDK() {\n if (!_sdk) {\n try {\n _sdk = await import(\"ollama/browser\");\n } catch {\n throw new Error(\"ollama is required for Ollama tasks. Install it with: bun add ollama\");\n }\n }\n return _sdk.Ollama;\n}\n\nasync function getClient(model: OllamaModelConfig | undefined) {\n const Ollama = await loadOllamaSDK();\n const host = model?.provider_config?.base_url || OLLAMA_DEFAULT_BASE_URL;\n return new Ollama({ host });\n}\n\nfunction getModelName(model: OllamaModelConfig | 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 Ollama_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"Ollama_TextGeneration: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const results: string[] = [];\n for (const item of prompts) {\n const r = await Ollama_TextGeneration({ ...input, prompt: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting Ollama text generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat({\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt as string }],\n options: {\n temperature: input.temperature,\n top_p: input.topP,\n num_predict: input.maxTokens,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n });\n\n update_progress(100, \"Completed Ollama text generation\");\n return { text: response.message.content };\n};\n\nexport const Ollama_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting Ollama text embedding\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const texts = Array.isArray(input.text) ? input.text : [input.text];\n\n const response = await client.embed({\n model: modelName,\n input: texts,\n });\n\n update_progress(100, \"Completed Ollama text embedding\");\n\n if (Array.isArray(input.text)) {\n return {\n vector: response.embeddings.map((e) => new Float32Array(e)),\n };\n }\n return { vector: new Float32Array(response.embeddings[0]) };\n};\n\nexport const Ollama_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"Ollama_TextRewriter: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await Ollama_TextRewriter({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting Ollama text rewriting\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat({\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt as string },\n { role: \"user\", content: input.text as string },\n ],\n });\n\n update_progress(100, \"Completed Ollama text rewriting\");\n return { text: response.message.content };\n};\n\nexport const Ollama_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"Ollama_TextSummary: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await Ollama_TextSummary({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting Ollama text summarization\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat({\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text as string },\n ],\n });\n\n update_progress(100, \"Completed Ollama text summarization\");\n return { text: response.message.content };\n};\n\n// ========================================================================\n// Streaming implementations (append mode)\n// ========================================================================\n\nexport const Ollama_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OllamaModelConfig\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({\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt as string }],\n options: {\n temperature: input.temperature,\n top_p: input.topP,\n num_predict: input.maxTokens,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\nexport const Ollama_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OllamaModelConfig\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({\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt as string },\n { role: \"user\", content: input.text as string },\n ],\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\nexport const Ollama_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OllamaModelConfig\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({\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text as string },\n ],\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\n// ========================================================================\n// Tool calling implementations\n// ========================================================================\n\nfunction mapOllamaTools(tools: ReadonlyArray<ToolDefinition>) {\n return tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: buildToolDescription(t),\n parameters: t.inputSchema as any,\n },\n }));\n}\n\nexport const Ollama_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"Ollama_ToolCalling: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const texts: string[] = [];\n const toolCallsList: Record<string, unknown>[] = [];\n for (const item of prompts) {\n const r = await Ollama_ToolCalling({ ...input, prompt: item }, model, update_progress, signal);\n texts.push(r.text as string);\n toolCallsList.push(r.toolCalls as Record<string, unknown>);\n }\n return { text: texts, toolCalls: toolCallsList };\n }\n\n update_progress(0, \"Starting Ollama tool calling\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const messages: Array<{ role: string; content: string }> = [];\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt as string });\n }\n messages.push({ role: \"user\", content: input.prompt as string });\n\n const tools = input.toolChoice === \"none\" ? undefined : mapOllamaTools(input.tools);\n\n const response = await client.chat({\n model: modelName,\n messages,\n tools,\n options: {\n temperature: input.temperature,\n num_predict: input.maxTokens,\n },\n });\n\n const text = response.message.content ?? \"\";\n const toolCalls: Record<string, unknown> = {};\n (response.message.tool_calls ?? []).forEach((tc: any, index: number) => {\n let parsedInput: Record<string, unknown> = {};\n const fnArgs = tc.function.arguments;\n if (typeof fnArgs === \"string\") {\n try {\n parsedInput = JSON.parse(fnArgs);\n } catch {\n const partial = parsePartialJson(fnArgs);\n parsedInput = (partial as Record<string, unknown>) ?? {};\n }\n } else if (fnArgs != null) {\n parsedInput = fnArgs as Record<string, unknown>;\n }\n const id = `call_${index}`;\n toolCalls[id] = { id, name: tc.function.name as string, input: parsedInput };\n });\n\n update_progress(100, \"Completed Ollama tool calling\");\n return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };\n};\n\nexport const Ollama_ToolCalling_Stream: AiProviderStreamFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OllamaModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const messages: Array<{ role: string; content: string }> = [];\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt as string });\n }\n messages.push({ role: \"user\", content: input.prompt as string });\n\n const tools = input.toolChoice === \"none\" ? undefined : mapOllamaTools(input.tools);\n\n const stream = await client.chat({\n model: modelName,\n messages,\n tools,\n options: {\n temperature: input.temperature,\n num_predict: input.maxTokens,\n },\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n let accumulatedText = \"\";\n const toolCalls: Record<string, unknown> = {};\n let callIndex = 0;\n\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n accumulatedText += delta;\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n\n const chunkToolCalls = (chunk.message as any).tool_calls;\n if (Array.isArray(chunkToolCalls) && chunkToolCalls.length > 0) {\n for (const tc of chunkToolCalls) {\n let parsedInput: Record<string, unknown> = {};\n const fnArgs = tc.function.arguments;\n if (typeof fnArgs === \"string\") {\n try {\n parsedInput = JSON.parse(fnArgs);\n } catch {\n const partial = parsePartialJson(fnArgs);\n parsedInput = (partial as Record<string, unknown>) ?? {};\n }\n } else if (fnArgs != null) {\n parsedInput = fnArgs as Record<string, unknown>;\n }\n const id = `call_${callIndex++}`;\n toolCalls[id] = { id, name: tc.function.name as string, input: parsedInput };\n }\n yield { type: \"object-delta\", port: \"toolCalls\", objectDelta: { ...toolCalls } };\n }\n }\n\n const validToolCalls = filterValidToolCalls(toolCalls, input.tools);\n yield {\n type: \"finish\",\n data: { text: accumulatedText, toolCalls: validToolCalls } as ToolCallingTaskOutput,\n };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\n// ========================================================================\n// Model info\n// ========================================================================\n\nexport const Ollama_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n OllamaModelConfig\n> = async (input, model) => {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n let is_cached = false;\n let is_loaded = false;\n let file_sizes: Record<string, number> | null = null;\n\n try {\n const showResponse = await client.show({ model: modelName });\n is_cached = true;\n const size = (showResponse as any).size as number | undefined;\n if (size != null) {\n file_sizes = { model: size };\n }\n } catch {\n // Model not available on server\n }\n\n try {\n const psResponse = await client.ps();\n is_loaded = psResponse.models.some((m: any) => m.name === modelName);\n } catch {\n // ps() not available or failed\n }\n\n return {\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,\n };\n};\n\n// ========================================================================\n// Task registries\n// ========================================================================\n\nexport const OLLAMA_TASKS: Record<string, AiProviderRunFn<any, any, OllamaModelConfig>> = {\n ModelInfoTask: Ollama_ModelInfo,\n TextGenerationTask: Ollama_TextGeneration,\n TextEmbeddingTask: Ollama_TextEmbedding,\n TextRewriterTask: Ollama_TextRewriter,\n TextSummaryTask: Ollama_TextSummary,\n ToolCallingTask: Ollama_ToolCalling,\n};\n\nexport const OLLAMA_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, OllamaModelConfig>\n> = {\n TextGenerationTask: Ollama_TextGeneration_Stream,\n TextRewriterTask: Ollama_TextRewriter_Stream,\n TextSummaryTask: Ollama_TextSummary_Stream,\n ToolCallingTask: Ollama_ToolCalling_Stream,\n};\n",
6
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { buildToolDescription, filterValidToolCalls } from \"@workglow/ai\";\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n ToolDefinition,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger, parsePartialJson } from \"@workglow/util\";\nimport { OLLAMA_DEFAULT_BASE_URL } from \"./Ollama_Constants\";\nimport type { OllamaModelConfig } from \"./Ollama_ModelSchema\";\n\nlet _sdk: typeof import(\"ollama/browser\") | undefined;\nasync function loadOllamaSDK() {\n if (!_sdk) {\n try {\n _sdk = await import(\"ollama/browser\");\n } catch {\n throw new Error(\"ollama is required for Ollama tasks. Install it with: bun add ollama\");\n }\n }\n return _sdk.Ollama;\n}\n\nasync function getClient(model: OllamaModelConfig | undefined) {\n const Ollama = await loadOllamaSDK();\n const host = model?.provider_config?.base_url || OLLAMA_DEFAULT_BASE_URL;\n return new Ollama({ host });\n}\n\nfunction getModelName(model: OllamaModelConfig | 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 Ollama_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"Ollama_TextGeneration: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const results: string[] = [];\n for (const item of prompts) {\n const r = await Ollama_TextGeneration(\n { ...input, prompt: item },\n model,\n update_progress,\n signal\n );\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting Ollama text generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat({\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt as string }],\n options: {\n temperature: input.temperature,\n top_p: input.topP,\n num_predict: input.maxTokens,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n });\n\n update_progress(100, \"Completed Ollama text generation\");\n return { text: response.message.content };\n};\n\nexport const Ollama_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting Ollama text embedding\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const texts = Array.isArray(input.text) ? input.text : [input.text];\n\n const response = await client.embed({\n model: modelName,\n input: texts,\n });\n\n update_progress(100, \"Completed Ollama text embedding\");\n\n if (Array.isArray(input.text)) {\n return {\n vector: response.embeddings.map((e) => new Float32Array(e)),\n };\n }\n return { vector: new Float32Array(response.embeddings[0]) };\n};\n\nexport const Ollama_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"Ollama_TextRewriter: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await Ollama_TextRewriter({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting Ollama text rewriting\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat({\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt as string },\n { role: \"user\", content: input.text as string },\n ],\n });\n\n update_progress(100, \"Completed Ollama text rewriting\");\n return { text: response.message.content };\n};\n\nexport const Ollama_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"Ollama_TextSummary: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await Ollama_TextSummary({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting Ollama text summarization\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat({\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text as string },\n ],\n });\n\n update_progress(100, \"Completed Ollama text summarization\");\n return { text: response.message.content };\n};\n\n// ========================================================================\n// Streaming implementations (append mode)\n// ========================================================================\n\nexport const Ollama_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OllamaModelConfig\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({\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt as string }],\n options: {\n temperature: input.temperature,\n top_p: input.topP,\n num_predict: input.maxTokens,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\nexport const Ollama_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OllamaModelConfig\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({\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt as string },\n { role: \"user\", content: input.text as string },\n ],\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\nexport const Ollama_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OllamaModelConfig\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({\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text as string },\n ],\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\n// ========================================================================\n// Tool calling implementations\n// ========================================================================\n\nfunction mapOllamaTools(tools: ReadonlyArray<ToolDefinition>) {\n return tools.map((t) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: buildToolDescription(t),\n parameters: t.inputSchema as any,\n },\n }));\n}\n\nexport const Ollama_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OllamaModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"Ollama_ToolCalling: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const texts: string[] = [];\n const toolCallsList: ToolCalls[] = [];\n for (const item of prompts) {\n const r = await Ollama_ToolCalling(\n { ...input, prompt: item },\n model,\n update_progress,\n signal\n );\n texts.push(r.text as string);\n toolCallsList.push(r.toolCalls as ToolCalls);\n }\n return { text: texts, toolCalls: toolCallsList } as unknown as ToolCallingTaskOutput;\n }\n\n update_progress(0, \"Starting Ollama tool calling\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const messages: Array<{ role: string; content: string }> = [];\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt as string });\n }\n messages.push({ role: \"user\", content: input.prompt as string });\n\n const tools = input.toolChoice === \"none\" ? undefined : mapOllamaTools(input.tools);\n\n const response = await client.chat({\n model: modelName,\n messages,\n tools,\n options: {\n temperature: input.temperature,\n num_predict: input.maxTokens,\n },\n });\n\n const text = response.message.content ?? \"\";\n const toolCalls: ToolCalls = [];\n (response.message.tool_calls ?? []).forEach((tc: any, index: number) => {\n let parsedInput: Record<string, unknown> = {};\n const fnArgs = tc.function.arguments;\n if (typeof fnArgs === \"string\") {\n try {\n parsedInput = JSON.parse(fnArgs);\n } catch {\n const partial = parsePartialJson(fnArgs);\n parsedInput = (partial as Record<string, unknown>) ?? {};\n }\n } else if (fnArgs != null) {\n parsedInput = fnArgs as Record<string, unknown>;\n }\n const id = `call_${index}`;\n toolCalls.push({ id, name: tc.function.name as string, input: parsedInput });\n });\n\n update_progress(100, \"Completed Ollama tool calling\");\n return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };\n};\n\nexport const Ollama_ToolCalling_Stream: AiProviderStreamFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OllamaModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const messages: Array<{ role: string; content: string }> = [];\n if (input.systemPrompt) {\n messages.push({ role: \"system\", content: input.systemPrompt as string });\n }\n messages.push({ role: \"user\", content: input.prompt as string });\n\n const tools = input.toolChoice === \"none\" ? undefined : mapOllamaTools(input.tools);\n\n const stream = await client.chat({\n model: modelName,\n messages,\n tools,\n options: {\n temperature: input.temperature,\n num_predict: input.maxTokens,\n },\n stream: true,\n });\n\n const onAbort = () => stream.abort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n let accumulatedText = \"\";\n const toolCalls: ToolCalls = [];\n let callIndex = 0;\n\n try {\n for await (const chunk of stream) {\n const delta = chunk.message.content;\n if (delta) {\n accumulatedText += delta;\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n\n const chunkToolCalls = (chunk.message as any).tool_calls;\n if (Array.isArray(chunkToolCalls) && chunkToolCalls.length > 0) {\n for (const tc of chunkToolCalls) {\n let parsedInput: Record<string, unknown> = {};\n const fnArgs = tc.function.arguments;\n if (typeof fnArgs === \"string\") {\n try {\n parsedInput = JSON.parse(fnArgs);\n } catch {\n const partial = parsePartialJson(fnArgs);\n parsedInput = (partial as Record<string, unknown>) ?? {};\n }\n } else if (fnArgs != null) {\n parsedInput = fnArgs as Record<string, unknown>;\n }\n const id = `call_${callIndex++}`;\n toolCalls.push({ id, name: tc.function.name as string, input: parsedInput });\n }\n yield { type: \"object-delta\", port: \"toolCalls\", objectDelta: [...toolCalls] };\n }\n }\n\n const validToolCalls = filterValidToolCalls(toolCalls, input.tools);\n yield {\n type: \"finish\",\n data: { text: accumulatedText, toolCalls: validToolCalls } as ToolCallingTaskOutput,\n };\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n }\n};\n\n// ========================================================================\n// Model info\n// ========================================================================\n\nexport const Ollama_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n OllamaModelConfig\n> = async (input, model) => {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n let is_cached = false;\n let is_loaded = false;\n let file_sizes: Record<string, number> | null = null;\n\n try {\n const showResponse = await client.show({ model: modelName });\n is_cached = true;\n const size = (showResponse as any).size as number | undefined;\n if (size != null) {\n file_sizes = { model: size };\n }\n } catch {\n // Model not available on server\n }\n\n try {\n const psResponse = await client.ps();\n is_loaded = psResponse.models.some((m: any) => m.name === modelName);\n } catch {\n // ps() not available or failed\n }\n\n return {\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,\n };\n};\n\n// ========================================================================\n// Task registries\n// ========================================================================\n\nexport const OLLAMA_TASKS: Record<string, AiProviderRunFn<any, any, OllamaModelConfig>> = {\n ModelInfoTask: Ollama_ModelInfo,\n TextGenerationTask: Ollama_TextGeneration,\n TextEmbeddingTask: Ollama_TextEmbedding,\n TextRewriterTask: Ollama_TextRewriter,\n TextSummaryTask: Ollama_TextSummary,\n ToolCallingTask: Ollama_ToolCalling,\n};\n\nexport const OLLAMA_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, OllamaModelConfig>\n> = {\n TextGenerationTask: Ollama_TextGeneration_Stream,\n TextRewriterTask: Ollama_TextRewriter_Stream,\n TextSummaryTask: Ollama_TextSummary_Stream,\n ToolCallingTask: Ollama_ToolCalling_Stream,\n};\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 { OLLAMA, OLLAMA_DEFAULT_BASE_URL } from \"./Ollama_Constants\";\n\nexport const OllamaModelSchema = {\n type: \"object\",\n properties: {\n provider: {\n const: OLLAMA,\n description: \"Discriminator: Ollama local LLM server.\",\n },\n provider_config: {\n type: \"object\",\n description: \"Ollama-specific configuration.\",\n properties: {\n model_name: {\n type: \"string\",\n description: \"The Ollama model identifier (e.g., 'llama3.2', 'nomic-embed-text').\",\n },\n base_url: {\n type: \"string\",\n description: \"Base URL for the Ollama server.\",\n default: OLLAMA_DEFAULT_BASE_URL,\n },\n },\n required: [\"model_name\"],\n additionalProperties: false,\n },\n },\n required: [\"provider\", \"provider_config\"],\n additionalProperties: true,\n} as const satisfies DataPortSchemaObject;\n\nexport const OllamaModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelRecordSchema.properties,\n ...OllamaModelSchema.properties,\n },\n required: [...ModelRecordSchema.required, ...OllamaModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type OllamaModelRecord = FromSchema<typeof OllamaModelRecordSchema>;\n\nexport const OllamaModelConfigSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n ...OllamaModelSchema.properties,\n },\n required: [...ModelConfigSchema.required, ...OllamaModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type OllamaModelConfig = FromSchema<typeof OllamaModelConfigSchema>;\n",
8
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLogger, globalServiceRegistry, WORKER_SERVER } from \"@workglow/util\";\nimport { OLLAMA_STREAM_TASKS, OLLAMA_TASKS } from \"./common/Ollama_JobRunFns.browser\";\nimport { OllamaProvider } from \"./OllamaProvider\";\n\nexport function OLLAMA_WORKER_JOBRUN_REGISTER() {\n const workerServer = globalServiceRegistry.get(WORKER_SERVER);\n new OllamaProvider(OLLAMA_TASKS, OLLAMA_STREAM_TASKS).registerOnWorkerServer(workerServer);\n workerServer.sendReady();\n getLogger().info(\"OLLAMA_WORKER_JOBRUN registered\");\n}\n",
9
9
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai\";\nimport { OLLAMA } from \"./common/Ollama_Constants\";\nimport type { OllamaModelConfig } from \"./common/Ollama_ModelSchema\";\n\n/**\n * AI provider for Ollama local LLM server.\n *\n * Supports text generation, text embedding, text rewriting, and text summarization\n * via the Ollama API using the `ollama` SDK.\n *\n * Ollama runs locally and does not require an API key -- only a `base_url`\n * (defaults to `http://localhost:11434`).\n *\n * Task run functions are injected via the constructor so that the `ollama` SDK\n * is only imported where actually needed (inline mode, worker server), not on\n * the main thread in worker mode.\n *\n * @example\n * ```typescript\n * // Worker mode (main thread) -- lightweight, no SDK import:\n * await new OllamaProvider().register({\n * mode: \"worker\",\n * worker: new Worker(new URL(\"./worker_ollama.ts\", import.meta.url), { type: \"module\" }),\n * });\n *\n * // Inline mode -- caller provides the tasks:\n * import { OLLAMA_TASKS } from \"@workglow/ai-provider/ollama\";\n * await new OllamaProvider(OLLAMA_TASKS).register({ mode: \"inline\" });\n * ```\n */\nexport class OllamaProvider extends AiProvider<OllamaModelConfig> {\n readonly name = OLLAMA;\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"ModelInfoTask\",\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"ToolCallingTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, OllamaModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, OllamaModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, OllamaModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n"
10
10
  ],
11
- "mappings": "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",
12
- "debugId": "4D350D3A0468238E64756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "70594585799656F364756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -10,18 +10,19 @@ import {
10
10
  __require
11
11
  } from "../index-6j5pq722.js";
12
12
  // src/provider-ollama/common/Ollama_JobRunFns.ts
13
- import { buildToolDescription, filterValidToolCalls } from "@workglow/ai";
13
+ import { buildToolDescription, filterValidToolCalls, toTextFlatMessages } from "@workglow/ai";
14
14
  import { getLogger, parsePartialJson } from "@workglow/util";
15
- var _sdk;
15
+ var _OllamaClass;
16
16
  async function loadOllamaSDK() {
17
- if (!_sdk) {
17
+ if (!_OllamaClass) {
18
18
  try {
19
- _sdk = await import("ollama");
19
+ const sdk = await import("ollama");
20
+ _OllamaClass = sdk.Ollama;
20
21
  } catch {
21
22
  throw new Error("ollama is required for Ollama tasks. Install it with: bun add ollama");
22
23
  }
23
24
  }
24
- return _sdk.Ollama;
25
+ return _OllamaClass;
25
26
  }
26
27
  async function getClient(model) {
27
28
  const Ollama = await loadOllamaSDK();
@@ -233,11 +234,7 @@ var Ollama_ToolCalling = async (input, model, update_progress, signal) => {
233
234
  update_progress(0, "Starting Ollama tool calling");
234
235
  const client = await getClient(model);
235
236
  const modelName = getModelName(model);
236
- const messages = [];
237
- if (input.systemPrompt) {
238
- messages.push({ role: "system", content: input.systemPrompt });
239
- }
240
- messages.push({ role: "user", content: input.prompt });
237
+ const messages = toTextFlatMessages(input);
241
238
  const tools = input.toolChoice === "none" ? undefined : mapOllamaTools(input.tools);
242
239
  const response = await client.chat({
243
240
  model: modelName,
@@ -249,7 +246,7 @@ var Ollama_ToolCalling = async (input, model, update_progress, signal) => {
249
246
  }
250
247
  });
251
248
  const text = response.message.content ?? "";
252
- const toolCalls = {};
249
+ const toolCalls = [];
253
250
  (response.message.tool_calls ?? []).forEach((tc, index) => {
254
251
  let parsedInput = {};
255
252
  const fnArgs = tc.function.arguments;
@@ -264,7 +261,7 @@ var Ollama_ToolCalling = async (input, model, update_progress, signal) => {
264
261
  parsedInput = fnArgs;
265
262
  }
266
263
  const id = `call_${index}`;
267
- toolCalls[id] = { id, name: tc.function.name, input: parsedInput };
264
+ toolCalls.push({ id, name: tc.function.name, input: parsedInput });
268
265
  });
269
266
  update_progress(100, "Completed Ollama tool calling");
270
267
  return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };
@@ -272,11 +269,7 @@ var Ollama_ToolCalling = async (input, model, update_progress, signal) => {
272
269
  var Ollama_ToolCalling_Stream = async function* (input, model, signal) {
273
270
  const client = await getClient(model);
274
271
  const modelName = getModelName(model);
275
- const messages = [];
276
- if (input.systemPrompt) {
277
- messages.push({ role: "system", content: input.systemPrompt });
278
- }
279
- messages.push({ role: "user", content: input.prompt });
272
+ const messages = toTextFlatMessages(input);
280
273
  const tools = input.toolChoice === "none" ? undefined : mapOllamaTools(input.tools);
281
274
  const stream = await client.chat({
282
275
  model: modelName,
@@ -291,7 +284,7 @@ var Ollama_ToolCalling_Stream = async function* (input, model, signal) {
291
284
  const onAbort = () => stream.abort();
292
285
  signal.addEventListener("abort", onAbort, { once: true });
293
286
  let accumulatedText = "";
294
- const toolCalls = {};
287
+ const toolCalls = [];
295
288
  let callIndex = 0;
296
289
  try {
297
290
  for await (const chunk of stream) {
@@ -316,9 +309,9 @@ var Ollama_ToolCalling_Stream = async function* (input, model, signal) {
316
309
  parsedInput = fnArgs;
317
310
  }
318
311
  const id = `call_${callIndex++}`;
319
- toolCalls[id] = { id, name: tc.function.name, input: parsedInput };
312
+ toolCalls.push({ id, name: tc.function.name, input: parsedInput });
320
313
  }
321
- yield { type: "object-delta", port: "toolCalls", objectDelta: { ...toolCalls } };
314
+ yield { type: "object-delta", port: "toolCalls", objectDelta: [...toolCalls] };
322
315
  }
323
316
  }
324
317
  const validToolCalls = filterValidToolCalls(toolCalls, input.tools);
@@ -403,4 +396,4 @@ export {
403
396
  OLLAMA
404
397
  };
405
398
 
406
- //# debugId=2E6316DFEAFA3C9C64756E2164756E21
399
+ //# debugId=6E24B1F2CA5CD1D164756E2164756E21