{"version":3,"sources":["../src/tools/transformers-js.ts"],"names":["tool","z"],"mappings":"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","file":"chunk-SFFMZUUI.cjs","sourcesContent":["/**\n * transformers-js.ts — On-device ML via 🤗 Transformers.js v4.2.0\n *\n * Runs ANY HF model from the Hub locally in the browser via ONNX Runtime Web.\n * Backends: WASM (universal) or WebGPU (faster, limited model support).\n * Models download once and cache in the browser (IndexedDB via Cache API).\n *\n * Package: @huggingface/transformers (v4.2.0)\n *\n * Coverage verified against node_modules/@huggingface/transformers/src/pipelines/index.js\n * — all 25 task types + 5 aliases supported, defaults match upstream exactly.\n */\nimport { tool } from '@strands-agents/sdk'\nimport { z } from 'zod'\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Task registry — sourced DIRECTLY from transformers.js v4.2.0 source.\n * Keeping this client-side lets the agent introspect available tasks +\n * default models without reaching into node_modules.\n * ──────────────────────────────────────────────────────────────────────── */\n\ntype TaskInfo = {\n  type: 'text' | 'audio' | 'image' | 'multimodal'\n  defaultModel: string\n  defaultDtype?: string\n  description: string\n}\n\nexport const TASK_REGISTRY: Record<string, TaskInfo> = {\n  // ── Text ──\n  'text-classification': {\n    type: 'text',\n    defaultModel: 'Xenova/distilbert-base-uncased-finetuned-sst-2-english',\n    description: 'Sentiment/topic classification. Returns label + score. Alias: sentiment-analysis.',\n  },\n  'token-classification': {\n    type: 'text',\n    defaultModel: 'Xenova/bert-base-multilingual-cased-ner-hrl',\n    description: 'NER/POS tagging, per-token labels. Alias: ner.',\n  },\n  'question-answering': {\n    type: 'text',\n    defaultModel: 'Xenova/distilbert-base-cased-distilled-squad',\n    description: 'Extractive QA. Input: { question, context }.',\n  },\n  'fill-mask': {\n    type: 'text',\n    defaultModel: 'onnx-community/ettin-encoder-32m-ONNX',\n    defaultDtype: 'fp32',\n    description: 'Masked-LM fill. Input must contain [MASK] (or model-specific token).',\n  },\n  summarization: {\n    type: 'text',\n    defaultModel: 'Xenova/distilbart-cnn-6-6',\n    description: 'Abstractive summary of long text.',\n  },\n  translation: {\n    type: 'text',\n    defaultModel: 'Xenova/t5-small',\n    description: 'Translate between languages. Task can be suffixed \"_xx_to_yy\".',\n  },\n  'text2text-generation': {\n    type: 'text',\n    defaultModel: 'Xenova/flan-t5-small',\n    description: 'T5-style seq2seq (instruction-following, translation, QA).',\n  },\n  'text-generation': {\n    type: 'text',\n    defaultModel: 'onnx-community/Qwen3-0.6B-ONNX',\n    defaultDtype: 'q4',\n    description: 'Causal LM generation. Accepts plain text OR chat Message[]. Streams via TextStreamer.',\n  },\n  'zero-shot-classification': {\n    type: 'text',\n    defaultModel: 'Xenova/distilbert-base-uncased-mnli',\n    description: 'Classify text against ARBITRARY candidate_labels at inference. No training.',\n  },\n  'feature-extraction': {\n    type: 'text',\n    defaultModel: 'onnx-community/all-MiniLM-L6-v2-ONNX',\n    defaultDtype: 'fp32',\n    description: 'Text embeddings for semantic search/clustering/RAG. Alias: embeddings.',\n  },\n\n  // ── Audio ──\n  'audio-classification': {\n    type: 'audio',\n    defaultModel: 'Xenova/wav2vec2-base-superb-ks',\n    description: 'Classify audio clip (keyword spotting, genre, speaker ID).',\n  },\n  'zero-shot-audio-classification': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/clap-htsat-unfused',\n    description: 'CLAP — classify audio against arbitrary text labels.',\n  },\n  'automatic-speech-recognition': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/whisper-tiny.en',\n    description: 'Speech-to-text. Whisper family. Alias: asr.',\n  },\n  'text-to-audio': {\n    type: 'text',\n    defaultModel: 'onnx-community/Supertonic-TTS-ONNX',\n    defaultDtype: 'fp32',\n    description: 'Text-to-speech. Alias: text-to-speech. Returns { audio: Float32Array, sampling_rate }.',\n  },\n\n  // ── Image ──\n  'image-to-text': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/vit-gpt2-image-captioning',\n    description: 'Image captioning / VLM. Also works with Florence-2, Moondream for rich VLM tasks.',\n  },\n  'image-classification': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/vit-base-patch16-224',\n    description: 'Classify image into fixed label set.',\n  },\n  'image-segmentation': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/detr-resnet-50-panoptic',\n    description: 'Panoptic/semantic/instance segmentation. Returns masks per label.',\n  },\n  'background-removal': {\n    type: 'image',\n    defaultModel: 'Xenova/modnet',\n    description: 'Alpha-matte foreground extraction (like remove.bg).',\n  },\n  'zero-shot-image-classification': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/clip-vit-base-patch32',\n    description: 'CLIP — classify image against arbitrary text labels.',\n  },\n  'object-detection': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/detr-resnet-50',\n    description: 'Detect objects with bounding boxes + labels.',\n  },\n  'zero-shot-object-detection': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/owlvit-base-patch32',\n    description: 'Detect arbitrary text-queried objects (OWL-ViT).',\n  },\n  'document-question-answering': {\n    type: 'multimodal',\n    defaultModel: 'Xenova/donut-base-finetuned-docvqa',\n    description: 'Answer questions about a document image (Donut).',\n  },\n  'image-to-image': {\n    type: 'image',\n    defaultModel: 'Xenova/swin2SR-classical-sr-x2-64',\n    description: 'Image super-resolution / enhancement.',\n  },\n  'depth-estimation': {\n    type: 'image',\n    defaultModel: 'onnx-community/depth-anything-v2-small',\n    description: 'Monocular depth estimation. Returns per-pixel depth map.',\n  },\n  'image-feature-extraction': {\n    type: 'image',\n    defaultModel: 'onnx-community/dinov3-vits16-pretrain-lvd1689m-ONNX',\n    defaultDtype: 'fp32',\n    description: 'Image embeddings for visual search / retrieval.',\n  },\n}\n\nexport const TASK_ALIASES: Record<string, string> = {\n  'sentiment-analysis': 'text-classification',\n  ner: 'token-classification',\n  asr: 'automatic-speech-recognition',\n  'text-to-speech': 'text-to-audio',\n  embeddings: 'feature-extraction',\n}\n\nfunction resolveTask(task: string): string {\n  return TASK_ALIASES[task] ?? task.split('_', 1)[0]\n}\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Lazy loader + pipeline cache with proper disposal\n * ──────────────────────────────────────────────────────────────────────── */\n\nlet _transformers: any = null\nasync function getTransformers() {\n  if (!_transformers) _transformers = await import('@huggingface/transformers')\n  return _transformers\n}\n\ntype DtypeSpec = string | Record<string, string>\n\ntype CachedPipeline = {\n  pipe: any\n  task: string\n  model: string\n  device: string\n  dtype?: DtypeSpec\n  loadedAt: number\n}\n\nconst PIPELINE_CACHE = new Map<string, CachedPipeline>()\n\nfunction cacheKey(task: string, model: string, device: string, dtype?: DtypeSpec): string {\n  const d = typeof dtype === 'object' ? JSON.stringify(dtype) : (dtype ?? 'default')\n  return `${task}::${model}::${device}::${d}`\n}\n\n/**\n * Firefox + ONNX Runtime Web has a known incompatibility with q8/q4 quantized\n * weights that use the MatMulNBits-with-merged-scale pattern. The error is:\n *\n *   \"Missing required scale: model.<path>.weight_merged_0_scale for node:\n *    model.<path>.weight_transposed_DequantizeLinear\"\n *\n * Chrome/Safari's bundled ORT tolerates this; Firefox's doesn't. It affects:\n *  - Whisper (decoder.embed_tokens)    - automatic-speech-recognition\n *  - BART/T5/NLLB (shared)             - summarization, translation\n *  - vit-gpt2 (shared)                 - image-to-text\n *  - CLIP (shared)                     - zero-shot-image-classification\n *  - BERT-NER (shared)                 - token-classification\n *  - Depth-Anything etc.               - depth-estimation\n *\n * Whenever possible, fall back to fp32 for all sessions. This doubles the\n * memory footprint but guarantees correctness across browsers.\n *\n * Known session keys across all model types (from upstream session_config.js):\n *   model, encoder_model, decoder_model_merged, embed_tokens, vision_encoder,\n *   audio_encoder, encodec_decode, prompt_encoder_mask_decoder,\n *   prepare_inputs_embeds\n */\nconst ALL_SESSION_KEYS = [\n  'model',\n  'encoder_model',\n  'decoder_model_merged',\n  'decoder_model',\n  'embed_tokens',\n  'vision_encoder',\n  'audio_encoder',\n  'encodec_decode',\n  'prompt_encoder_mask_decoder',\n  'prepare_inputs_embeds',\n  'text_encoder',\n]\n\n/** Produce a dtype object forcing fp32 on every session key — safest fallback. */\nfunction allSessionsFp32(): Record<string, string> {\n  const out: Record<string, string> = {}\n  for (const k of ALL_SESSION_KEYS) out[k] = 'fp32'\n  return out\n}\n\n/**\n * Detect if Firefox+ORT hits the missing-scale bug for this task/model.\n * Returns true for encoder-decoder / seq2seq / vision-seq / image-text models\n * where a shared embedding table triggers the bug. Decoder-only LLMs (Qwen, Llama)\n * don't use the shared-weight-merge pattern so they're safe.\n */\nfunction needsFp32Fallback(resolvedTask: string, model: string): boolean {\n  const m = model.toLowerCase()\n  // Decoder-only LLMs: NO shared weight merge — safe to quantize\n  const isDecoderOnlyLLM =\n    resolvedTask === 'text-generation' ||\n    /qwen|llama|phi|gemma|smollm|tinyllama|stablelm/i.test(m)\n  if (isDecoderOnlyLLM) return false\n  // Tasks that use seq2seq / encoder-decoder / shared-weight architectures:\n  const seq2seqTasks = [\n    'automatic-speech-recognition',  // Whisper\n    'summarization',                  // BART, T5, distilbart\n    'translation',                    // T5, NLLB, Marian\n    'text2text-generation',           // FLAN-T5, T5\n    'image-to-text',                  // vit-gpt2, Florence-2, BLIP\n    'document-question-answering',    // Donut\n    'zero-shot-image-classification', // CLIP\n    'token-classification',           // BERT-NER (shared embeddings)\n    'image-classification',           // ViT (shared)\n    'image-segmentation',             // DETR, SegFormer\n    'object-detection',               // DETR, OWL-ViT\n    'zero-shot-object-detection',\n    'depth-estimation',\n    'image-feature-extraction',\n  ]\n  return seq2seqTasks.includes(resolvedTask)\n}\n\n/**\n * Pick a safe dtype for this (task, model, device) combination.\n * Respects user override. Otherwise avoids the Firefox quant bug.\n */\nfunction pickSafeDtype(resolvedTask: string, model: string, device: string, userDtype?: DtypeSpec): DtypeSpec | undefined {\n  if (userDtype !== undefined) return userDtype\n  const info = TASK_REGISTRY[resolvedTask]\n  if (needsFp32Fallback(resolvedTask, model)) {\n    return allSessionsFp32()\n  }\n  return info?.defaultDtype\n}\n\nasync function getPipeline(opts: {\n  task: string\n  model?: string\n  device?: string\n  dtype?: DtypeSpec\n  progressCallback?: (p: any) => void\n}): Promise<CachedPipeline> {\n  const resolvedTask = resolveTask(opts.task)\n  const info = TASK_REGISTRY[resolvedTask]\n  const model = opts.model ?? info?.defaultModel\n  if (!model) throw new Error(`Unknown task: ${opts.task}. See transformers_list_tasks.`)\n  const device = opts.device ?? 'wasm'\n  const dtype = pickSafeDtype(resolvedTask, model, device, opts.dtype)\n\n  const key = cacheKey(resolvedTask, model, device, dtype)\n  const hit = PIPELINE_CACHE.get(key)\n  if (hit) return hit\n\n  const { pipeline } = await getTransformers()\n  const pipelineOpts: any = { device }\n  if (dtype) pipelineOpts.dtype = dtype\n  if (opts.progressCallback) pipelineOpts.progress_callback = opts.progressCallback\n\n  let pipe: any\n  let effectiveDtype: DtypeSpec | undefined = dtype\n  try {\n    pipe = await pipeline(resolvedTask, model, pipelineOpts)\n  } catch (err: unknown) {\n    const msg = (err as Error).message || String(err)\n    // Auto-retry once with all-sessions fp32 if it's the Firefox ORT quant bug.\n    // Don't retry if the user explicitly passed a dtype (respect their choice)\n    // or if we already tried fp32 everywhere (would be a different error).\n    const isQuantBug =\n      msg.includes('weight_merged_0_scale') ||\n      msg.includes('Missing required scale') ||\n      msg.includes('TransposeDQWeightsForMatMulNBits')\n    const triedAllFp32 = typeof dtype === 'object' && Object.values(dtype).every(v => v === 'fp32')\n    if (isQuantBug && opts.dtype === undefined && !triedAllFp32) {\n      try {\n        const retryDtype = allSessionsFp32()\n        const retryOpts = { ...pipelineOpts, dtype: retryDtype }\n        pipe = await pipeline(resolvedTask, model, retryOpts)\n        effectiveDtype = retryDtype\n      } catch (retryErr: unknown) {\n        const rmsg = (retryErr as Error).message || String(retryErr)\n        throw new Error(\n          `${rmsg}\\n\\n→ First attempt and fp32-fallback retry both failed. ` +\n          `Original error: ${msg}\\n` +\n          `Try a different model id — this ONNX model may not have fp32 weights published.`,\n        )\n      }\n    } else if (isQuantBug) {\n      throw new Error(\n        `${msg}\\n\\n→ HINT: ONNX quantization mismatch (Firefox+ORT). ` +\n        `Either remove the \\`dtype\\` override, or use a different model id with fp32 weights available.`,\n      )\n    } else if (msg.includes('WebGPU') || msg.includes('webgpu')) {\n      throw new Error(`${msg}\\n\\n→ HINT: WebGPU failed. Retry with device: \"wasm\".`)\n    } else {\n      throw err\n    }\n  }\n  const entry: CachedPipeline = {\n    pipe, task: resolvedTask, model, device, dtype: effectiveDtype, loadedAt: Date.now(),\n  }\n  PIPELINE_CACHE.set(key, entry)\n  return entry\n}\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Tools\n * ──────────────────────────────────────────────────────────────────────── */\n\n/** List every task with default model + description — lets agent discover capabilities. */\nexport const transformersListTasksTool = tool({\n  name: 'transformers_list_tasks',\n  description:\n    'List ALL supported Transformers.js tasks (25 pipeline types + 5 aliases) with their default models, ' +\n    'type (text/audio/image/multimodal), and what each does. Use this to pick the right task before transformers_run.',\n  inputSchema: z.object({\n    filter: z.enum(['text', 'audio', 'image', 'multimodal', 'all']).optional(),\n  }),\n  callback: (input) => {\n    const filter = input.filter || 'all'\n    const tasks: Record<string, any> = {}\n    for (const [task, info] of Object.entries(TASK_REGISTRY)) {\n      if (filter !== 'all' && info.type !== filter) continue\n      tasks[task] = info\n    }\n    return JSON.stringify({\n      status: 'success',\n      count: Object.keys(tasks).length,\n      tasks,\n      aliases: TASK_ALIASES,\n      dtypes: ['fp32', 'fp16', 'q8', 'int8', 'uint8', 'q4', 'q4f16', 'bnb4'],\n      devices: ['wasm', 'webgpu'],\n    })\n  },\n})\n\n/**\n * Universal pipeline runner — the one tool that covers all 25 tasks.\n */\nexport const transformersRunTool = tool({\n  name: 'transformers_run',\n  description:\n    'Run ANY 🤗 Transformers.js pipeline on-device. Covers all 25 task types: ' +\n    'text-classification, token-classification, question-answering, fill-mask, summarization, translation, ' +\n    'text2text-generation, text-generation, zero-shot-classification, audio-classification, ' +\n    'zero-shot-audio-classification, automatic-speech-recognition, text-to-audio, image-to-text, ' +\n    'image-classification, image-segmentation, background-removal, zero-shot-image-classification, ' +\n    'object-detection, zero-shot-object-detection, document-question-answering, image-to-image, ' +\n    'depth-estimation, feature-extraction, image-feature-extraction. ' +\n    'Call transformers_list_tasks first to see defaults. Models cache after first download.',\n  inputSchema: z.object({\n    task: z.string().describe('Pipeline task name (see transformers_list_tasks). Aliases accepted.'),\n    input: z.any().describe(\n      'Input matching the task type: string for text, URL/dataURL/blobURL for image/audio, ' +\n      '{question,context} for QA, {image,question} for document-QA, Message[] for text-generation chat.',\n    ),\n    model: z.string().optional().describe('HF model id. Omit to use task default.'),\n    options: z.record(z.string(), z.any()).optional().describe('Pipeline call options (max_new_tokens, top_k, candidate_labels, etc.).'),\n    device: z.enum(['wasm', 'webgpu']).optional(),\n    dtype: z.union([z.enum(['fp32', 'fp16', 'q8', 'int8', 'uint8', 'q4', 'q4f16', 'bnb4']), z.record(z.string(), z.string())]).optional().describe('Quantization. q4 for LLMs. For encoder-decoder models (Whisper, T5), pass an object: {encoder_model: \"q8\", decoder_model_merged: \"fp32\"}.'),\n  }),\n  callback: async (input) => {\n    try {\n      const entry = await getPipeline({\n        task: input.task, model: input.model, device: input.device, dtype: input.dtype,\n      })\n\n      // Handle pipelines that take candidate_labels as a 2nd positional argument:\n      //   zero-shot-classification.(texts, candidate_labels, options)\n      //   zero-shot-object-detection.(image, candidate_labels, options)\n      //   zero-shot-image-classification.(image, candidate_labels, options)\n      //   zero-shot-audio-classification.(audio, candidate_labels, options)\n      // NOTE: passing {candidate_labels: [...]} in options is a common mistake;\n      // we silently rewrite it to positional for these tasks.\n      const POSITIONAL_LABEL_TASKS = new Set([\n        'zero-shot-classification',\n        'zero-shot-object-detection',\n        'zero-shot-image-classification',\n        'zero-shot-audio-classification',\n      ])\n      let result: any\n      if (POSITIONAL_LABEL_TASKS.has(entry.task)) {\n        const opts = { ...(input.options || {}) } as any\n        const labels = opts.candidate_labels\n        delete opts.candidate_labels\n        if (!labels) {\n          return JSON.stringify({\n            status: 'error',\n            task: entry.task,\n            error: `${entry.task} requires options.candidate_labels: [ ... ] (array of class strings).`,\n          })\n        }\n        result = await entry.pipe(input.input, labels, opts)\n      } else {\n        result = await entry.pipe(input.input, input.options || {})\n      }\n\n      // Audio output (TTS) is not JSON-serializable — summarize instead.\n      if (result && result.audio instanceof Float32Array) {\n        return JSON.stringify({\n          status: 'success',\n          task: entry.task,\n          model: entry.model,\n          audio_samples: result.audio.length,\n          sampling_rate: result.sampling_rate,\n          duration_sec: result.audio.length / result.sampling_rate,\n          hint: 'Use transformers_tts to synthesize AND play audio.',\n        })\n      }\n      // Feature extraction returns a Tensor — convert to array for JSON\n      if (result && typeof result === 'object' && 'dims' in result && 'data' in result) {\n        return JSON.stringify({\n          status: 'success',\n          task: entry.task,\n          model: entry.model,\n          dims: (result as any).dims,\n          data: result.tolist ? result.tolist() : Array.from((result as any).data),\n        })\n      }\n      return JSON.stringify({ status: 'success', task: entry.task, model: entry.model, result })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', task: input.task, error: (err as Error).message })\n    }\n  },\n})\n\n/**\n * Dedicated chat tool — takes Message[], uses chat template, streams tokens.\n */\nexport const transformersChatTool = tool({\n  name: 'transformers_chat',\n  description:\n    'Chat with an on-device LLM via Transformers.js. Default: onnx-community/Qwen3-0.6B-ONNX (q4 quantized). ' +\n    'Accepts a Message[] ([{role:\"system\"|\"user\"|\"assistant\", content:\"...\"}]). ' +\n    'Applies the model\\'s chat template automatically. Fully local, no API call.',\n  inputSchema: z.object({\n    messages: z.array(\n      z.object({\n        role: z.enum(['system', 'user', 'assistant']),\n        content: z.string(),\n      }),\n    ),\n    model: z.string().optional().describe('Default: onnx-community/Qwen3-0.6B-ONNX'),\n    max_new_tokens: z.number().optional().describe('Default 256'),\n    temperature: z.number().optional(),\n    top_p: z.number().optional(),\n    top_k: z.number().optional(),\n    do_sample: z.boolean().optional(),\n    dtype: z.union([z.enum(['fp32', 'fp16', 'q8', 'int8', 'uint8', 'q4', 'q4f16', 'bnb4']), z.record(z.string(), z.string())]).optional().describe('Default: q4. For non-LLMs pass fp16 or fp32.'),\n    device: z.enum(['wasm', 'webgpu']).optional(),\n  }),\n  callback: async (input) => {\n    try {\n      const entry = await getPipeline({\n        task: 'text-generation',\n        model: input.model,\n        device: input.device,\n        dtype: input.dtype ?? 'q4',\n      })\n      const opts: any = { max_new_tokens: input.max_new_tokens ?? 256 }\n      if (input.temperature !== undefined) opts.temperature = input.temperature\n      if (input.top_p !== undefined) opts.top_p = input.top_p\n      if (input.top_k !== undefined) opts.top_k = input.top_k\n      if (input.do_sample !== undefined) opts.do_sample = input.do_sample\n\n      const out = await entry.pipe(input.messages, opts)\n      // out is TextGenerationChatOutput[]: [{ generated_text: Message[] }]\n      const first = Array.isArray(out) ? out[0] : out\n      const generated = first?.generated_text\n      let reply: string | null = null\n      if (Array.isArray(generated)) {\n        const last = generated[generated.length - 1]\n        reply = typeof last === 'string' ? last : last?.content\n      } else if (typeof generated === 'string') {\n        reply = generated\n      }\n      return JSON.stringify({\n        status: 'success',\n        model: entry.model,\n        reply,\n        full_output: first,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n/** Text-to-speech that ALSO plays via Web Audio. */\nexport const transformersTtsTool = tool({\n  name: 'transformers_tts',\n  description:\n    'On-device text-to-speech. Default: onnx-community/Supertonic-TTS-ONNX. ' +\n    'Synthesizes AND plays audio via Web Audio API. Also works with SpeechT5 (set speaker_embeddings URL).',\n  inputSchema: z.object({\n    text: z.string(),\n    model: z.string().optional().describe('Default: Supertonic. For SpeechT5: Xenova/speecht5_tts.'),\n    speaker_embeddings: z.string().optional().describe('Required for SpeechT5 (URL to .bin).'),\n    autoplay: z.boolean().optional().describe('Default true. false returns audio metadata only.'),\n    device: z.enum(['wasm', 'webgpu']).optional(),\n    dtype: z.union([z.enum(['fp32', 'fp16', 'q8', 'int8', 'uint8', 'q4', 'q4f16', 'bnb4']), z.record(z.string(), z.string())]).optional(),\n  }),\n  callback: async (input) => {\n    try {\n      const entry = await getPipeline({\n        task: 'text-to-audio',\n        model: input.model,\n        device: input.device,\n        dtype: input.dtype,\n      })\n      const opts: any = {}\n      if (input.speaker_embeddings) {\n        opts.speaker_embeddings = input.speaker_embeddings\n      } else if ((input.model || '').toLowerCase().includes('speecht5')) {\n        opts.speaker_embeddings =\n          'https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/speaker_embeddings.bin'\n      }\n      const out = await entry.pipe(input.text, opts)\n\n      if (input.autoplay !== false) {\n        const AC = (window as any).AudioContext || (window as any).webkitAudioContext\n        const ctx = new AC()\n        const buf = ctx.createBuffer(1, out.audio.length, out.sampling_rate)\n        buf.getChannelData(0).set(out.audio)\n        const src = ctx.createBufferSource()\n        src.buffer = buf\n        src.connect(ctx.destination)\n        src.start()\n      }\n      return JSON.stringify({\n        status: input.autoplay !== false ? 'playing' : 'synthesized',\n        model: entry.model,\n        samples: out.audio.length,\n        sampling_rate: out.sampling_rate,\n        duration_sec: out.audio.length / out.sampling_rate,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n/** Whisper STT — audio URL / blob URL / data URL. */\nexport const transformersSttTool = tool({\n  name: 'transformers_stt',\n  description:\n    'On-device speech-to-text via Whisper (default: Xenova/whisper-tiny.en). ' +\n    'Pass an audio URL (http/blob/data). Supports chunked long-form transcription with return_timestamps.',\n  inputSchema: z.object({\n    audio: z.string().describe('Audio URL (http/blob/data).'),\n    model: z.string().optional().describe('Default: Xenova/whisper-tiny.en. Others: whisper-base, whisper-small.en, whisper-large-v3-turbo.'),\n    language: z.string().optional().describe('ISO-639-1 code, e.g. \"en\", \"tr\", \"fr\". Multilingual Whisper only.'),\n    task: z.enum(['transcribe', 'translate']).optional(),\n    return_timestamps: z.union([z.boolean(), z.literal('word')]).optional(),\n    chunk_length_s: z.number().optional().describe('For long-form audio (e.g. 30).'),\n    stride_length_s: z.number().optional(),\n    device: z.enum(['wasm', 'webgpu']).optional(),\n    dtype: z.union([z.enum(['fp32', 'fp16', 'q8', 'int8', 'uint8', 'q4', 'q4f16', 'bnb4']), z.record(z.string(), z.string())]).optional().describe('Auto-selects a Firefox-compatible dtype if omitted. Override with e.g. {encoder_model: \"fp32\", decoder_model_merged: \"fp32\"} if you hit ONNX errors.'),\n  }),\n  callback: async (input) => {\n    try {\n      const entry = await getPipeline({\n        task: 'automatic-speech-recognition',\n        model: input.model,\n        device: input.device,\n        dtype: input.dtype,\n      })\n      const opts: any = {}\n      if (input.language) opts.language = input.language\n      if (input.task) opts.task = input.task\n      if (input.return_timestamps !== undefined) opts.return_timestamps = input.return_timestamps\n      if (input.chunk_length_s !== undefined) opts.chunk_length_s = input.chunk_length_s\n      if (input.stride_length_s !== undefined) opts.stride_length_s = input.stride_length_s\n      const result = await entry.pipe(input.audio, opts)\n      return JSON.stringify({ status: 'success', model: entry.model, ...result })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n/** Text / image embeddings. */\nexport const transformersEmbedTool = tool({\n  name: 'transformers_embed',\n  description:\n    'Generate embeddings on-device. For text: Xenova/all-MiniLM-L6-v2 (default). ' +\n    'For images: pass task=\"image-feature-extraction\" with default DINOv3. Returns vector(s) + dims.',\n  inputSchema: z.object({\n    input: z.union([z.string(), z.array(z.string())]).describe('Text string(s) or image URL(s)'),\n    task: z.enum(['feature-extraction', 'image-feature-extraction']).optional().describe('Default: feature-extraction (text)'),\n    model: z.string().optional(),\n    pooling: z.enum(['none', 'mean', 'cls']).optional(),\n    normalize: z.boolean().optional(),\n    device: z.enum(['wasm', 'webgpu']).optional(),\n    dtype: z.union([z.enum(['fp32', 'fp16', 'q8']), z.record(z.string(), z.string())]).optional(),\n  }),\n  callback: async (input) => {\n    try {\n      const entry = await getPipeline({\n        task: input.task ?? 'feature-extraction',\n        model: input.model,\n        device: input.device,\n        dtype: input.dtype,\n      })\n      const opts: any = {\n        pooling: input.pooling ?? 'mean',\n        normalize: input.normalize ?? true,\n      }\n      const out = await entry.pipe(input.input, opts)\n      const arr = out.tolist ? out.tolist() : Array.from(out.data)\n      return JSON.stringify({\n        status: 'success',\n        model: entry.model,\n        dims: out.dims,\n        count: Array.isArray(input.input) ? input.input.length : 1,\n        embeddings: arr,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n/** Configure global env (cache / remote / backends). */\nexport const transformersConfigureTool = tool({\n  name: 'transformers_configure',\n  description:\n    'Configure global Transformers.js env: remote host, cache, allowed model sources, backend settings. ' +\n    'Affects ALL subsequent pipeline loads.',\n  inputSchema: z.object({\n    allowRemoteModels: z.boolean().optional(),\n    allowLocalModels: z.boolean().optional(),\n    remoteHost: z.string().optional().describe('Default: https://huggingface.co/'),\n    remotePathTemplate: z.string().optional(),\n    useBrowserCache: z.boolean().optional(),\n  }),\n  callback: async (input) => {\n    try {\n      const { env } = await getTransformers()\n      const before: any = {\n        allowRemoteModels: env.allowRemoteModels,\n        allowLocalModels: env.allowLocalModels,\n        remoteHost: env.remoteHost,\n        remotePathTemplate: env.remotePathTemplate,\n        useBrowserCache: env.useBrowserCache,\n      }\n      if (input.allowRemoteModels !== undefined) env.allowRemoteModels = input.allowRemoteModels\n      if (input.allowLocalModels !== undefined) env.allowLocalModels = input.allowLocalModels\n      if (input.remoteHost !== undefined) env.remoteHost = input.remoteHost\n      if (input.remotePathTemplate !== undefined) env.remotePathTemplate = input.remotePathTemplate\n      if (input.useBrowserCache !== undefined) env.useBrowserCache = input.useBrowserCache\n      return JSON.stringify({\n        status: 'success',\n        before,\n        after: {\n          allowRemoteModels: env.allowRemoteModels,\n          allowLocalModels: env.allowLocalModels,\n          remoteHost: env.remoteHost,\n          remotePathTemplate: env.remotePathTemplate,\n          useBrowserCache: env.useBrowserCache,\n        },\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n/** List loaded pipelines with metadata. */\nexport const transformersStatusTool = tool({\n  name: 'transformers_status',\n  description: 'List all currently loaded Transformers.js pipelines with task, model, device, dtype, age.',\n  inputSchema: z.object({}),\n  callback: async () => {\n    const now = Date.now()\n    const loaded = Array.from(PIPELINE_CACHE.entries()).map(([key, e]) => ({\n      key, task: e.task, model: e.model, device: e.device, dtype: e.dtype ?? 'default',\n      loaded_ago_sec: Math.round((now - e.loadedAt) / 1000),\n    }))\n    let version: string | undefined\n    if (_transformers) {\n      try { version = _transformers.env?.version } catch {}\n    }\n    return JSON.stringify({\n      status: 'success',\n      transformers_loaded: _transformers !== null,\n      transformers_version: version,\n      pipeline_count: loaded.length,\n      pipelines: loaded,\n    })\n  },\n})\n\n/** Proper unload — calls pipe.dispose() to free WASM memory (not just Map.delete). */\nexport const transformersUnloadTool = tool({\n  name: 'transformers_unload',\n  description:\n    'Unload a cached pipeline AND dispose its underlying model to free WASM/WebGPU memory. ' +\n    'Pass specific (task,model,device,dtype) or just task to unload all matching.',\n  inputSchema: z.object({\n    task: z.string().optional().describe('Omit to unload ALL pipelines'),\n    model: z.string().optional(),\n    device: z.enum(['wasm', 'webgpu']).optional(),\n    dtype: z.union([z.string(), z.record(z.string(), z.string())]).optional(),\n    all: z.boolean().optional().describe('Unload every pipeline'),\n  }),\n  callback: async (input) => {\n    try {\n      const disposed: string[] = []\n      const errors: string[] = []\n      const matches = (e: CachedPipeline) =>\n        (input.all === true) ||\n        (!input.task || e.task === resolveTask(input.task)) &&\n        (!input.model || e.model === input.model) &&\n        (!input.device || e.device === input.device) &&\n        (!input.dtype || e.dtype === input.dtype)\n\n      for (const [key, entry] of Array.from(PIPELINE_CACHE.entries())) {\n        if (!matches(entry)) continue\n        try {\n          if (entry.pipe?.dispose) await entry.pipe.dispose()\n          PIPELINE_CACHE.delete(key)\n          disposed.push(key)\n        } catch (e: unknown) {\n          errors.push(`${key}: ${(e as Error).message}`)\n        }\n      }\n      return JSON.stringify({\n        status: 'success',\n        disposed_count: disposed.length,\n        disposed,\n        errors: errors.length ? errors : undefined,\n        remaining: PIPELINE_CACHE.size,\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\n/** Quick device capability probe — useful before choosing webgpu. */\nexport const transformersDeviceInfoTool = tool({\n  name: 'transformers_device_info',\n  description:\n    'Probe runtime capabilities: WebGPU support, WASM threads, SharedArrayBuffer, cross-origin-isolation. ' +\n    'Use this before choosing device: \"webgpu\".',\n  inputSchema: z.object({}),\n  callback: async () => {\n    try {\n      const nav = navigator as any\n      let webgpu = false\n      let adapterInfo: any = null\n      if (nav.gpu) {\n        try {\n          const adapter = await nav.gpu.requestAdapter()\n          if (adapter) {\n            webgpu = true\n            adapterInfo = await adapter.requestAdapterInfo?.().catch(() => null)\n          }\n        } catch {}\n      }\n      return JSON.stringify({\n        status: 'success',\n        webgpu_supported: webgpu,\n        adapter: adapterInfo,\n        shared_array_buffer: typeof SharedArrayBuffer !== 'undefined',\n        cross_origin_isolated: (window as any).crossOriginIsolated ?? false,\n        hardware_concurrency: navigator.hardwareConcurrency,\n        user_agent: navigator.userAgent,\n        recommendation: webgpu\n          ? 'WebGPU available — use device: \"webgpu\" for ~2-10x speedup on supported models (most LLMs, embeddings, vision models).'\n          : 'WebGPU not available — fallback to device: \"wasm\". Works everywhere but slower.',\n      })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const TRANSFORMERS_TOOLS = [\n  transformersListTasksTool,\n  transformersDeviceInfoTool,\n  transformersRunTool,\n  transformersChatTool,\n  transformersTtsTool,\n  transformersSttTool,\n  transformersEmbedTool,\n  transformersConfigureTool,\n  transformersStatusTool,\n  transformersUnloadTool,\n]\n"]}