@ismail-kattakath/mediapipe-react 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/audio.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkG5GKFZAWjs = require('./chunk-G5GKFZAW.js');
3
+ var _chunkUGBQ2DOXjs = require('./chunk-UGBQ2DOX.js');
4
4
 
5
5
 
6
- exports.useAudio = _chunkG5GKFZAWjs.useAudio;
6
+ exports.useAudio = _chunkUGBQ2DOXjs.useAudio;
7
7
  //# sourceMappingURL=audio.js.map
package/dist/audio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/audio.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,6CAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/audio.js"}
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/audio.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,6CAAC","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/audio.js"}
package/dist/audio.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useAudio
3
- } from "./chunk-LMIUBEL2.mjs";
3
+ } from "./chunk-3O75GTBE.mjs";
4
4
  export {
5
5
  useAudio
6
6
  };
@@ -6,4 +6,4 @@ var useAudio = () => {
6
6
  export {
7
7
  useAudio
8
8
  };
9
- //# sourceMappingURL=chunk-LMIUBEL2.mjs.map
9
+ //# sourceMappingURL=chunk-3O75GTBE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/audio/index.ts"],"sourcesContent":["export const useAudio = () => {\n return \"Audio implementation\";\n};\n"],"mappings":";AAAO,IAAM,WAAW,MAAM;AAC5B,SAAO;AACT;","names":[]}
@@ -28,7 +28,9 @@ var MediaPipeProvider = ({
28
28
  var useMediaPipeContext = () => {
29
29
  const context = _react.useContext.call(void 0, MediaPipeContext);
30
30
  if (!context) {
31
- throw new Error("useMediaPipeContext must be used within a MediaPipeProvider");
31
+ throw new Error(
32
+ "useMediaPipeContext must be used within a MediaPipeProvider"
33
+ );
32
34
  }
33
35
  return context;
34
36
  };
@@ -176,4 +178,4 @@ function useLlm(options = {}) {
176
178
 
177
179
 
178
180
  exports.useLlm = useLlm; exports.MediaPipeProvider = MediaPipeProvider; exports.useMediaPipeContext = useMediaPipeContext;
179
- //# sourceMappingURL=chunk-HQ7V4B42.js.map
181
+ //# sourceMappingURL=chunk-4NLVHDSL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/chunk-4NLVHDSL.js","../src/genai.ts","../src/index.tsx","../src/utils.ts"],"names":[],"mappings":"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","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/chunk-4NLVHDSL.js","sourcesContent":[null,"\"use client\";\n\nimport { useEffect, useState, useCallback, useRef } from \"react\";\nimport { useMediaPipeContext } from \"./index\";\n\n/**\n * The Web Worker logic for MediaPipe GenAI.\n * This is stringified so it can be easily initialized as a Blob URL if the file-based worker fails.\n */\nconst workerScript = `\nimport { LlmInference, FilesetResolver } from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai';\n\nlet llmInference = null;\n\nasync function checkGpuSupport() {\n if (!('gpu' in navigator)) {\n throw new Error('WebGPU is not supported in this browser.');\n }\n const gpu = navigator.gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error('No appropriate GPU adapter found.');\n }\n}\n\nasync function initInference(modelPath, wasmPath) {\n try {\n await checkGpuSupport();\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: 'INIT_COMPLETE' });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Unknown error during initialization' });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === 'INIT') {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === 'GENERATE') {\n if (!llmInference) {\n self.postMessage({ type: 'ERROR', error: 'LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.' });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: 'CHUNK',\n payload: { text: partialText, done }\n });\n });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Error generating response' });\n }\n }\n};\n`;\n\nexport interface UseLlmOptions {\n modelPath?: string;\n wasmPath?: string;\n}\n\nexport function useLlm(options: UseLlmOptions = {}) {\n const context = useMediaPipeContext();\n const [output, setOutput] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [progress, setProgress] = useState(0);\n\n const workerRef = useRef<Worker | null>(null);\n\n // Use values from props if provided, otherwise fallback to context\n const modelPath = options.modelPath || context.modelPath;\n const wasmPath =\n options.wasmPath ||\n context.wasmPath ||\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm\";\n\n useEffect(() => {\n if (!context.isBrowser || !modelPath) return;\n\n // Early check for WebGPU support in the UI thread too\n if (!(\"gpu\" in navigator)) {\n setTimeout(() => setError(\"WebGPU is not supported in this browser.\"), 0);\n return;\n }\n\n let worker: Worker;\n\n try {\n // Attempt to load from the separate worker file (Vite/Next.js/Webpack friendly)\n worker = new Worker(new URL(\"./genai.worker\", import.meta.url), {\n type: \"module\",\n name: \"mediapipe-genai-worker\",\n });\n } catch (_e) {\n // Fallback to Blob-based worker if relative path fails\n console.warn(\"MediaPipe React: Falling back to Blob-based GenAI worker\");\n const blob = new Blob([workerScript], { type: \"application/javascript\" });\n worker = new Worker(URL.createObjectURL(blob));\n }\n\n workerRef.current = worker;\n\n worker.onmessage = (event) => {\n const { type, payload, error: workerError } = event.data;\n\n switch (type) {\n case \"INIT_COMPLETE\":\n setIsLoading(false);\n setProgress(100);\n break;\n case \"CHUNK\":\n setOutput((prev) => prev + payload.text);\n if (payload.done) {\n setIsLoading(false);\n }\n break;\n case \"ERROR\":\n setError(workerError || \"Worker encountered an error\");\n setIsLoading(false);\n break;\n }\n };\n\n setTimeout(() => {\n setIsLoading(true);\n setProgress(10); // Initial progress\n }, 0);\n worker.postMessage({\n type: \"INIT\",\n payload: { modelPath, wasmPath },\n });\n\n return () => {\n worker.terminate();\n };\n }, [context.isBrowser, modelPath, wasmPath]);\n\n const generate = useCallback((prompt: string) => {\n if (!workerRef.current) {\n setError(\"Worker not initialized\");\n return;\n }\n\n setOutput(\"\");\n setIsLoading(true);\n setError(null);\n\n workerRef.current.postMessage({\n type: \"GENERATE\",\n payload: { prompt },\n });\n }, []);\n\n return {\n output,\n isLoading,\n progress,\n error,\n generate,\n };\n}\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport { isBrowser } from \"./utils\";\n\nexport * from \"./genai\";\nexport * from \"./vision\";\nexport * from \"./audio\";\n\nexport interface MediaPipeContextType {\n wasmPath?: string;\n modelPath?: string;\n isBrowser: boolean;\n}\n\nconst MediaPipeContext = createContext<MediaPipeContextType | null>(null);\n\nexport interface MediaPipeProviderProps {\n children: React.ReactNode;\n wasmPath?: string;\n modelPath?: string;\n}\n\nexport const MediaPipeProvider: React.FC<MediaPipeProviderProps> = ({\n children,\n wasmPath,\n modelPath,\n}) => {\n const value = useMemo(\n () => ({\n wasmPath,\n modelPath,\n isBrowser,\n }),\n [wasmPath, modelPath],\n );\n\n return (\n <MediaPipeContext.Provider value={value}>\n {children}\n </MediaPipeContext.Provider>\n );\n};\n\nexport const useMediaPipeContext = () => {\n const context = useContext(MediaPipeContext);\n if (!context) {\n throw new Error(\n \"useMediaPipeContext must be used within a MediaPipeProvider\",\n );\n }\n return context;\n};\n","export const isBrowser = typeof window !== \"undefined\";\n"]}
@@ -6,4 +6,4 @@ var useVision = () => {
6
6
  export {
7
7
  useVision
8
8
  };
9
- //# sourceMappingURL=chunk-HDKHZ5MY.mjs.map
9
+ //# sourceMappingURL=chunk-K7M5U7OS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vision/index.ts"],"sourcesContent":["export const useVision = () => {\n return \"Vision implementation\";\n};\n"],"mappings":";AAAO,IAAM,YAAY,MAAM;AAC7B,SAAO;AACT;","names":[]}
@@ -28,7 +28,9 @@ var MediaPipeProvider = ({
28
28
  var useMediaPipeContext = () => {
29
29
  const context = useContext(MediaPipeContext);
30
30
  if (!context) {
31
- throw new Error("useMediaPipeContext must be used within a MediaPipeProvider");
31
+ throw new Error(
32
+ "useMediaPipeContext must be used within a MediaPipeProvider"
33
+ );
32
34
  }
33
35
  return context;
34
36
  };
@@ -176,4 +178,4 @@ export {
176
178
  MediaPipeProvider,
177
179
  useMediaPipeContext
178
180
  };
179
- //# sourceMappingURL=chunk-Z5PADYRT.mjs.map
181
+ //# sourceMappingURL=chunk-NQTFX5JA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/genai.ts","../src/index.tsx","../src/utils.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, useCallback, useRef } from \"react\";\nimport { useMediaPipeContext } from \"./index\";\n\n/**\n * The Web Worker logic for MediaPipe GenAI.\n * This is stringified so it can be easily initialized as a Blob URL if the file-based worker fails.\n */\nconst workerScript = `\nimport { LlmInference, FilesetResolver } from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai';\n\nlet llmInference = null;\n\nasync function checkGpuSupport() {\n if (!('gpu' in navigator)) {\n throw new Error('WebGPU is not supported in this browser.');\n }\n const gpu = navigator.gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error('No appropriate GPU adapter found.');\n }\n}\n\nasync function initInference(modelPath, wasmPath) {\n try {\n await checkGpuSupport();\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: 'INIT_COMPLETE' });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Unknown error during initialization' });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === 'INIT') {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === 'GENERATE') {\n if (!llmInference) {\n self.postMessage({ type: 'ERROR', error: 'LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.' });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: 'CHUNK',\n payload: { text: partialText, done }\n });\n });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Error generating response' });\n }\n }\n};\n`;\n\nexport interface UseLlmOptions {\n modelPath?: string;\n wasmPath?: string;\n}\n\nexport function useLlm(options: UseLlmOptions = {}) {\n const context = useMediaPipeContext();\n const [output, setOutput] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [progress, setProgress] = useState(0);\n\n const workerRef = useRef<Worker | null>(null);\n\n // Use values from props if provided, otherwise fallback to context\n const modelPath = options.modelPath || context.modelPath;\n const wasmPath =\n options.wasmPath ||\n context.wasmPath ||\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm\";\n\n useEffect(() => {\n if (!context.isBrowser || !modelPath) return;\n\n // Early check for WebGPU support in the UI thread too\n if (!(\"gpu\" in navigator)) {\n setTimeout(() => setError(\"WebGPU is not supported in this browser.\"), 0);\n return;\n }\n\n let worker: Worker;\n\n try {\n // Attempt to load from the separate worker file (Vite/Next.js/Webpack friendly)\n worker = new Worker(new URL(\"./genai.worker\", import.meta.url), {\n type: \"module\",\n name: \"mediapipe-genai-worker\",\n });\n } catch (_e) {\n // Fallback to Blob-based worker if relative path fails\n console.warn(\"MediaPipe React: Falling back to Blob-based GenAI worker\");\n const blob = new Blob([workerScript], { type: \"application/javascript\" });\n worker = new Worker(URL.createObjectURL(blob));\n }\n\n workerRef.current = worker;\n\n worker.onmessage = (event) => {\n const { type, payload, error: workerError } = event.data;\n\n switch (type) {\n case \"INIT_COMPLETE\":\n setIsLoading(false);\n setProgress(100);\n break;\n case \"CHUNK\":\n setOutput((prev) => prev + payload.text);\n if (payload.done) {\n setIsLoading(false);\n }\n break;\n case \"ERROR\":\n setError(workerError || \"Worker encountered an error\");\n setIsLoading(false);\n break;\n }\n };\n\n setTimeout(() => {\n setIsLoading(true);\n setProgress(10); // Initial progress\n }, 0);\n worker.postMessage({\n type: \"INIT\",\n payload: { modelPath, wasmPath },\n });\n\n return () => {\n worker.terminate();\n };\n }, [context.isBrowser, modelPath, wasmPath]);\n\n const generate = useCallback((prompt: string) => {\n if (!workerRef.current) {\n setError(\"Worker not initialized\");\n return;\n }\n\n setOutput(\"\");\n setIsLoading(true);\n setError(null);\n\n workerRef.current.postMessage({\n type: \"GENERATE\",\n payload: { prompt },\n });\n }, []);\n\n return {\n output,\n isLoading,\n progress,\n error,\n generate,\n };\n}\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport { isBrowser } from \"./utils\";\n\nexport * from \"./genai\";\nexport * from \"./vision\";\nexport * from \"./audio\";\n\nexport interface MediaPipeContextType {\n wasmPath?: string;\n modelPath?: string;\n isBrowser: boolean;\n}\n\nconst MediaPipeContext = createContext<MediaPipeContextType | null>(null);\n\nexport interface MediaPipeProviderProps {\n children: React.ReactNode;\n wasmPath?: string;\n modelPath?: string;\n}\n\nexport const MediaPipeProvider: React.FC<MediaPipeProviderProps> = ({\n children,\n wasmPath,\n modelPath,\n}) => {\n const value = useMemo(\n () => ({\n wasmPath,\n modelPath,\n isBrowser,\n }),\n [wasmPath, modelPath],\n );\n\n return (\n <MediaPipeContext.Provider value={value}>\n {children}\n </MediaPipeContext.Provider>\n );\n};\n\nexport const useMediaPipeContext = () => {\n const context = useContext(MediaPipeContext);\n if (!context) {\n throw new Error(\n \"useMediaPipeContext must be used within a MediaPipeProvider\",\n );\n }\n return context;\n};\n","export const isBrowser = typeof window !== \"undefined\";\n"],"mappings":"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","names":[]}
@@ -6,4 +6,4 @@ var useAudio = () => {
6
6
 
7
7
 
8
8
  exports.useAudio = useAudio;
9
- //# sourceMappingURL=chunk-G5GKFZAW.js.map
9
+ //# sourceMappingURL=chunk-UGBQ2DOX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/chunk-UGBQ2DOX.js","../src/audio/index.ts"],"names":[],"mappings":"AAAA;ACAO,IAAM,SAAA,EAAW,CAAA,EAAA,GAAM;AAC5B,EAAA,OAAO,sBAAA;AACT,CAAA;ADEA;AACA;AACE;AACF,4BAAC","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/chunk-UGBQ2DOX.js","sourcesContent":[null,"export const useAudio = () => {\n return \"Audio implementation\";\n};\n"]}
@@ -6,4 +6,4 @@ var useVision = () => {
6
6
 
7
7
 
8
8
  exports.useVision = useVision;
9
- //# sourceMappingURL=chunk-SUBDHSBP.js.map
9
+ //# sourceMappingURL=chunk-V2U5YQLO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/chunk-V2U5YQLO.js","../src/vision/index.ts"],"names":[],"mappings":"AAAA;ACAO,IAAM,UAAA,EAAY,CAAA,EAAA,GAAM;AAC7B,EAAA,OAAO,uBAAA;AACT,CAAA;ADEA;AACA;AACE;AACF,8BAAC","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/chunk-V2U5YQLO.js","sourcesContent":[null,"export const useVision = () => {\n return \"Vision implementation\";\n};\n"]}
package/dist/genai.js CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
2
 
3
3
 
4
- var _chunkHQ7V4B42js = require('./chunk-HQ7V4B42.js');
5
- require('./chunk-SUBDHSBP.js');
6
- require('./chunk-G5GKFZAW.js');
4
+ var _chunk4NLVHDSLjs = require('./chunk-4NLVHDSL.js');
5
+ require('./chunk-V2U5YQLO.js');
6
+ require('./chunk-UGBQ2DOX.js');
7
7
 
8
8
 
9
- exports.useLlm = _chunkHQ7V4B42js.useLlm;
9
+ exports.useLlm = _chunk4NLVHDSLjs.useLlm;
10
10
  //# sourceMappingURL=genai.js.map
package/dist/genai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/genai.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,yCAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/genai.js"}
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/genai.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,yCAAC","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/genai.js"}
package/dist/genai.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import {
3
3
  useLlm
4
- } from "./chunk-Z5PADYRT.mjs";
5
- import "./chunk-HDKHZ5MY.mjs";
6
- import "./chunk-LMIUBEL2.mjs";
4
+ } from "./chunk-NQTFX5JA.mjs";
5
+ import "./chunk-K7M5U7OS.mjs";
6
+ import "./chunk-3O75GTBE.mjs";
7
7
  export {
8
8
  useLlm
9
9
  };
@@ -32,7 +32,10 @@ self.onmessage = async (event) => {
32
32
  }
33
33
  if (type === "GENERATE") {
34
34
  if (!llmInference) {
35
- self.postMessage({ type: "ERROR", error: "LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported." });
35
+ self.postMessage({
36
+ type: "ERROR",
37
+ error: "LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported."
38
+ });
36
39
  return;
37
40
  }
38
41
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/genai.worker.js","../src/genai.worker.ts"],"names":[],"mappings":"AAAA;ACAA,oDAA8C;AAE9C,IAAI,aAAA,EAAoC,IAAA;AAExC,MAAA,SAAe,eAAA,CAAA,EAAkB;AAC7B,EAAA,GAAA,CAAI,CAAA,CAAE,MAAA,GAAS,SAAA,CAAA,EAAY;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,0CAA0C,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,IAAA,EAAO,SAAA,CAAsC,GAAA;AACnD,EAAA,MAAM,QAAA,EAAU,MAAM,GAAA,CAAI,cAAA,CAAe,CAAA;AACzC,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA;AAAA,EACvD;AACJ;AAEA,MAAA,SAAe,aAAA,CAAc,SAAA,EAAmB,QAAA,EAAkB;AAC9D,EAAA,IAAI;AACA,IAAA,MAAM,eAAA,CAAgB,CAAA;AAEtB,IAAA,MAAM,MAAA,EAAQ,MAAM,2BAAA,CAAgB,aAAA,CAAc,QAAQ,CAAA;AAC1D,IAAA,aAAA,EAAe,MAAM,wBAAA,CAAa,iBAAA,CAAkB,KAAA,EAAO;AAAA,MACvD,WAAA,EAAa,EAAE,cAAA,EAAgB,UAAU;AAAA,IAC7C,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,gBAAgB,CAAC,CAAA;AAAA,EAC9C,EAAA,MAAA,CAAS,KAAA,EAAgB;AACrB,IAAA,MAAM,QAAA,EAAU,MAAA,WAAiB,MAAA,EAAQ,KAAA,CAAM,QAAA,EAAU,qCAAA;AACzD,IAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,EACtD;AACJ;AAEA,IAAA,CAAK,UAAA,EAAY,MAAA,CAAO,KAAA,EAAA,GAAU;AAC9B,EAAA,MAAM,EAAE,IAAA,EAAM,QAAQ,EAAA,EAAI,KAAA,CAAM,IAAA;AAEhC,EAAA,GAAA,CAAI,KAAA,IAAS,MAAA,EAAQ;AACjB,IAAA,MAAM,EAAE,SAAA,EAAW,SAAS,EAAA,EAAI,OAAA;AAChC,IAAA,MAAM,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AAAA,EAC3C;AAEA,EAAA,GAAA,CAAI,KAAA,IAAS,UAAA,EAAY;AACrB,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AACf,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,4FAA4F,CAAC,CAAA;AACtI,MAAA,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI;AACA,MAAA,MAAM,EAAE,OAAO,EAAA,EAAI,OAAA;AACnB,MAAA,YAAA,CAAa,gBAAA,CAAiB,MAAA,EAAQ,CAAC,WAAA,EAAa,IAAA,EAAA,GAAS;AACzD,QAAA,IAAA,CAAK,WAAA,CAAY;AAAA,UACb,IAAA,EAAM,OAAA;AAAA,UACN,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,KAAK;AAAA,QACvC,CAAC,CAAA;AAAA,MACL,CAAC,CAAA;AAAA,IACL,EAAA,MAAA,CAAS,KAAA,EAAgB;AACrB,MAAA,MAAM,QAAA,EAAU,MAAA,WAAiB,MAAA,EAAQ,KAAA,CAAM,QAAA,EAAU,2BAAA;AACzD,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,IACtD;AAAA,EACJ;AACJ,CAAA","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/genai.worker.js","sourcesContent":[null,"import { LlmInference, FilesetResolver } from '@mediapipe/tasks-genai';\n\nlet llmInference: LlmInference | null = null;\n\nasync function checkGpuSupport() {\n if (!('gpu' in navigator)) {\n throw new Error('WebGPU is not supported in this browser.');\n }\n const gpu = (navigator as unknown as { gpu: GPU }).gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error('No appropriate GPU adapter found.');\n }\n}\n\nasync function initInference(modelPath: string, wasmPath: string) {\n try {\n await checkGpuSupport();\n\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: 'INIT_COMPLETE' });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error during initialization';\n self.postMessage({ type: 'ERROR', error: message });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === 'INIT') {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === 'GENERATE') {\n if (!llmInference) {\n self.postMessage({ type: 'ERROR', error: 'LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.' });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: 'CHUNK',\n payload: { text: partialText, done }\n });\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Error generating response';\n self.postMessage({ type: 'ERROR', error: message });\n }\n }\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/genai.worker.js","../src/genai.worker.ts"],"names":[],"mappings":"AAAA;ACAA,oDAA8C;AAE9C,IAAI,aAAA,EAAoC,IAAA;AAExC,MAAA,SAAe,eAAA,CAAA,EAAkB;AAC/B,EAAA,GAAA,CAAI,CAAA,CAAE,MAAA,GAAS,SAAA,CAAA,EAAY;AACzB,IAAA,MAAM,IAAI,KAAA,CAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,IAAA,EAAO,SAAA,CAAsC,GAAA;AACnD,EAAA,MAAM,QAAA,EAAU,MAAM,GAAA,CAAI,cAAA,CAAe,CAAA;AACzC,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA;AAAA,EACrD;AACF;AAEA,MAAA,SAAe,aAAA,CAAc,SAAA,EAAmB,QAAA,EAAkB;AAChE,EAAA,IAAI;AACF,IAAA,MAAM,eAAA,CAAgB,CAAA;AAEtB,IAAA,MAAM,MAAA,EAAQ,MAAM,2BAAA,CAAgB,aAAA,CAAc,QAAQ,CAAA;AAC1D,IAAA,aAAA,EAAe,MAAM,wBAAA,CAAa,iBAAA,CAAkB,KAAA,EAAO;AAAA,MACzD,WAAA,EAAa,EAAE,cAAA,EAAgB,UAAU;AAAA,IAC3C,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,gBAAgB,CAAC,CAAA;AAAA,EAC5C,EAAA,MAAA,CAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,QAAA,EACJ,MAAA,WAAiB,MAAA,EACb,KAAA,CAAM,QAAA,EACN,qCAAA;AACN,IAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,EACpD;AACF;AAEA,IAAA,CAAK,UAAA,EAAY,MAAA,CAAO,KAAA,EAAA,GAAU;AAChC,EAAA,MAAM,EAAE,IAAA,EAAM,QAAQ,EAAA,EAAI,KAAA,CAAM,IAAA;AAEhC,EAAA,GAAA,CAAI,KAAA,IAAS,MAAA,EAAQ;AACnB,IAAA,MAAM,EAAE,SAAA,EAAW,SAAS,EAAA,EAAI,OAAA;AAChC,IAAA,MAAM,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AAAA,EACzC;AAEA,EAAA,GAAA,CAAI,KAAA,IAAS,UAAA,EAAY;AACvB,IAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY;AAAA,QACf,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EACE;AAAA,MACJ,CAAC,CAAA;AACD,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAO,EAAA,EAAI,OAAA;AACnB,MAAA,YAAA,CAAa,gBAAA,CAAiB,MAAA,EAAQ,CAAC,WAAA,EAAa,IAAA,EAAA,GAAS;AAC3D,QAAA,IAAA,CAAK,WAAA,CAAY;AAAA,UACf,IAAA,EAAM,OAAA;AAAA,UACN,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,KAAK;AAAA,QACrC,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,EAAA,MAAA,CAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,QAAA,EACJ,MAAA,WAAiB,MAAA,EAAQ,KAAA,CAAM,QAAA,EAAU,2BAAA;AAC3C,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAC,CAAA;AAAA,IACpD;AAAA,EACF;AACF,CAAA","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/genai.worker.js","sourcesContent":[null,"import { LlmInference, FilesetResolver } from \"@mediapipe/tasks-genai\";\n\nlet llmInference: LlmInference | null = null;\n\nasync function checkGpuSupport() {\n if (!(\"gpu\" in navigator)) {\n throw new Error(\"WebGPU is not supported in this browser.\");\n }\n const gpu = (navigator as unknown as { gpu: GPU }).gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error(\"No appropriate GPU adapter found.\");\n }\n}\n\nasync function initInference(modelPath: string, wasmPath: string) {\n try {\n await checkGpuSupport();\n\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: \"INIT_COMPLETE\" });\n } catch (error: unknown) {\n const message =\n error instanceof Error\n ? error.message\n : \"Unknown error during initialization\";\n self.postMessage({ type: \"ERROR\", error: message });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === \"INIT\") {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === \"GENERATE\") {\n if (!llmInference) {\n self.postMessage({\n type: \"ERROR\",\n error:\n \"LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.\",\n });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: \"CHUNK\",\n payload: { text: partialText, done },\n });\n });\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : \"Error generating response\";\n self.postMessage({ type: \"ERROR\", error: message });\n }\n }\n};\n"]}
@@ -32,7 +32,10 @@ self.onmessage = async (event) => {
32
32
  }
33
33
  if (type === "GENERATE") {
34
34
  if (!llmInference) {
35
- self.postMessage({ type: "ERROR", error: "LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported." });
35
+ self.postMessage({
36
+ type: "ERROR",
37
+ error: "LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported."
38
+ });
36
39
  return;
37
40
  }
38
41
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/genai.worker.ts"],"sourcesContent":["import { LlmInference, FilesetResolver } from '@mediapipe/tasks-genai';\n\nlet llmInference: LlmInference | null = null;\n\nasync function checkGpuSupport() {\n if (!('gpu' in navigator)) {\n throw new Error('WebGPU is not supported in this browser.');\n }\n const gpu = (navigator as unknown as { gpu: GPU }).gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error('No appropriate GPU adapter found.');\n }\n}\n\nasync function initInference(modelPath: string, wasmPath: string) {\n try {\n await checkGpuSupport();\n\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: 'INIT_COMPLETE' });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Unknown error during initialization';\n self.postMessage({ type: 'ERROR', error: message });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === 'INIT') {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === 'GENERATE') {\n if (!llmInference) {\n self.postMessage({ type: 'ERROR', error: 'LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.' });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: 'CHUNK',\n payload: { text: partialText, done }\n });\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Error generating response';\n self.postMessage({ type: 'ERROR', error: message });\n }\n }\n};\n"],"mappings":";AAAA,SAAS,cAAc,uBAAuB;AAE9C,IAAI,eAAoC;AAExC,eAAe,kBAAkB;AAC7B,MAAI,EAAE,SAAS,YAAY;AACvB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC9D;AACA,QAAM,MAAO,UAAsC;AACnD,QAAM,UAAU,MAAM,IAAI,eAAe;AACzC,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACvD;AACJ;AAEA,eAAe,cAAc,WAAmB,UAAkB;AAC9D,MAAI;AACA,UAAM,gBAAgB;AAEtB,UAAM,QAAQ,MAAM,gBAAgB,cAAc,QAAQ;AAC1D,mBAAe,MAAM,aAAa,kBAAkB,OAAO;AAAA,MACvD,aAAa,EAAE,gBAAgB,UAAU;AAAA,IAC7C,CAAC;AACD,SAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAAA,EAC9C,SAAS,OAAgB;AACrB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,SAAK,YAAY,EAAE,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,EACtD;AACJ;AAEA,KAAK,YAAY,OAAO,UAAU;AAC9B,QAAM,EAAE,MAAM,QAAQ,IAAI,MAAM;AAEhC,MAAI,SAAS,QAAQ;AACjB,UAAM,EAAE,WAAW,SAAS,IAAI;AAChC,UAAM,cAAc,WAAW,QAAQ;AAAA,EAC3C;AAEA,MAAI,SAAS,YAAY;AACrB,QAAI,CAAC,cAAc;AACf,WAAK,YAAY,EAAE,MAAM,SAAS,OAAO,4FAA4F,CAAC;AACtI;AAAA,IACJ;AAEA,QAAI;AACA,YAAM,EAAE,OAAO,IAAI;AACnB,mBAAa,iBAAiB,QAAQ,CAAC,aAAa,SAAS;AACzD,aAAK,YAAY;AAAA,UACb,MAAM;AAAA,UACN,SAAS,EAAE,MAAM,aAAa,KAAK;AAAA,QACvC,CAAC;AAAA,MACL,CAAC;AAAA,IACL,SAAS,OAAgB;AACrB,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,WAAK,YAAY,EAAE,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,IACtD;AAAA,EACJ;AACJ;","names":[]}
1
+ {"version":3,"sources":["../src/genai.worker.ts"],"sourcesContent":["import { LlmInference, FilesetResolver } from \"@mediapipe/tasks-genai\";\n\nlet llmInference: LlmInference | null = null;\n\nasync function checkGpuSupport() {\n if (!(\"gpu\" in navigator)) {\n throw new Error(\"WebGPU is not supported in this browser.\");\n }\n const gpu = (navigator as unknown as { gpu: GPU }).gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error(\"No appropriate GPU adapter found.\");\n }\n}\n\nasync function initInference(modelPath: string, wasmPath: string) {\n try {\n await checkGpuSupport();\n\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: \"INIT_COMPLETE\" });\n } catch (error: unknown) {\n const message =\n error instanceof Error\n ? error.message\n : \"Unknown error during initialization\";\n self.postMessage({ type: \"ERROR\", error: message });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === \"INIT\") {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === \"GENERATE\") {\n if (!llmInference) {\n self.postMessage({\n type: \"ERROR\",\n error:\n \"LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.\",\n });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: \"CHUNK\",\n payload: { text: partialText, done },\n });\n });\n } catch (error: unknown) {\n const message =\n error instanceof Error ? error.message : \"Error generating response\";\n self.postMessage({ type: \"ERROR\", error: message });\n }\n }\n};\n"],"mappings":";AAAA,SAAS,cAAc,uBAAuB;AAE9C,IAAI,eAAoC;AAExC,eAAe,kBAAkB;AAC/B,MAAI,EAAE,SAAS,YAAY;AACzB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,QAAM,MAAO,UAAsC;AACnD,QAAM,UAAU,MAAM,IAAI,eAAe;AACzC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACF;AAEA,eAAe,cAAc,WAAmB,UAAkB;AAChE,MAAI;AACF,UAAM,gBAAgB;AAEtB,UAAM,QAAQ,MAAM,gBAAgB,cAAc,QAAQ;AAC1D,mBAAe,MAAM,aAAa,kBAAkB,OAAO;AAAA,MACzD,aAAa,EAAE,gBAAgB,UAAU;AAAA,IAC3C,CAAC;AACD,SAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAAA,EAC5C,SAAS,OAAgB;AACvB,UAAM,UACJ,iBAAiB,QACb,MAAM,UACN;AACN,SAAK,YAAY,EAAE,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,EACpD;AACF;AAEA,KAAK,YAAY,OAAO,UAAU;AAChC,QAAM,EAAE,MAAM,QAAQ,IAAI,MAAM;AAEhC,MAAI,SAAS,QAAQ;AACnB,UAAM,EAAE,WAAW,SAAS,IAAI;AAChC,UAAM,cAAc,WAAW,QAAQ;AAAA,EACzC;AAEA,MAAI,SAAS,YAAY;AACvB,QAAI,CAAC,cAAc;AACjB,WAAK,YAAY;AAAA,QACf,MAAM;AAAA,QACN,OACE;AAAA,MACJ,CAAC;AACD;AAAA,IACF;AAEA,QAAI;AACF,YAAM,EAAE,OAAO,IAAI;AACnB,mBAAa,iBAAiB,QAAQ,CAAC,aAAa,SAAS;AAC3D,aAAK,YAAY;AAAA,UACf,MAAM;AAAA,UACN,SAAS,EAAE,MAAM,aAAa,KAAK;AAAA,QACrC,CAAC;AAAA,MACH,CAAC;AAAA,IACH,SAAS,OAAgB;AACvB,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,WAAK,YAAY,EAAE,MAAM,SAAS,OAAO,QAAQ,CAAC;AAAA,IACpD;AAAA,EACF;AACF;","names":[]}
package/dist/index.js CHANGED
@@ -3,18 +3,18 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkHQ7V4B42js = require('./chunk-HQ7V4B42.js');
6
+ var _chunk4NLVHDSLjs = require('./chunk-4NLVHDSL.js');
7
7
 
8
8
 
9
- var _chunkSUBDHSBPjs = require('./chunk-SUBDHSBP.js');
9
+ var _chunkV2U5YQLOjs = require('./chunk-V2U5YQLO.js');
10
10
 
11
11
 
12
- var _chunkG5GKFZAWjs = require('./chunk-G5GKFZAW.js');
12
+ var _chunkUGBQ2DOXjs = require('./chunk-UGBQ2DOX.js');
13
13
 
14
14
 
15
15
 
16
16
 
17
17
 
18
18
 
19
- exports.MediaPipeProvider = _chunkHQ7V4B42js.MediaPipeProvider; exports.useAudio = _chunkG5GKFZAWjs.useAudio; exports.useLlm = _chunkHQ7V4B42js.useLlm; exports.useMediaPipeContext = _chunkHQ7V4B42js.useMediaPipeContext; exports.useVision = _chunkSUBDHSBPjs.useVision;
19
+ exports.MediaPipeProvider = _chunk4NLVHDSLjs.MediaPipeProvider; exports.useAudio = _chunkUGBQ2DOXjs.useAudio; exports.useLlm = _chunk4NLVHDSLjs.useLlm; exports.useMediaPipeContext = _chunk4NLVHDSLjs.useMediaPipeContext; exports.useVision = _chunkV2U5YQLOjs.useVision;
20
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/index.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACF,2QAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/index.js"}
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/index.js"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACF,2QAAC","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/index.js"}
package/dist/index.mjs CHANGED
@@ -3,13 +3,13 @@ import {
3
3
  MediaPipeProvider,
4
4
  useLlm,
5
5
  useMediaPipeContext
6
- } from "./chunk-Z5PADYRT.mjs";
6
+ } from "./chunk-NQTFX5JA.mjs";
7
7
  import {
8
8
  useVision
9
- } from "./chunk-HDKHZ5MY.mjs";
9
+ } from "./chunk-K7M5U7OS.mjs";
10
10
  import {
11
11
  useAudio
12
- } from "./chunk-LMIUBEL2.mjs";
12
+ } from "./chunk-3O75GTBE.mjs";
13
13
  export {
14
14
  MediaPipeProvider,
15
15
  useAudio,
package/dist/vision.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkSUBDHSBPjs = require('./chunk-SUBDHSBP.js');
3
+ var _chunkV2U5YQLOjs = require('./chunk-V2U5YQLO.js');
4
4
 
5
5
 
6
- exports.useVision = _chunkSUBDHSBPjs.useVision;
6
+ exports.useVision = _chunkV2U5YQLOjs.useVision;
7
7
  //# sourceMappingURL=vision.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/vision.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,+CAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/vision.js"}
1
+ {"version":3,"sources":["/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/vision.js"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,+CAAC","file":"/home/runner/work/mediapipe-react/mediapipe-react/packages/core/dist/vision.js"}
package/dist/vision.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useVision
3
- } from "./chunk-HDKHZ5MY.mjs";
3
+ } from "./chunk-K7M5U7OS.mjs";
4
4
  export {
5
5
  useVision
6
6
  };
package/package.json CHANGED
@@ -1,8 +1,14 @@
1
1
  {
2
2
  "name": "@ismail-kattakath/mediapipe-react",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "git+https://github.com/ismail-kattakath/mediapipe-react.git",
7
+ "directory": "packages/core"
8
+ },
4
9
  "publishConfig": {
5
- "access": "public"
10
+ "access": "public",
11
+ "registry": "https://registry.npmjs.org/"
6
12
  },
7
13
  "main": "./dist/index.js",
8
14
  "module": "./dist/index.mjs",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/chunk-G5GKFZAW.js","../src/audio/index.ts"],"names":[],"mappings":"AAAA;ACAO,IAAM,SAAA,EAAW,CAAA,EAAA,GAAM;AAC1B,EAAA,OAAO,sBAAA;AACX,CAAA;ADEA;AACA;AACE;AACF,4BAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/chunk-G5GKFZAW.js","sourcesContent":[null,"export const useAudio = () => {\n return \"Audio implementation\";\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/vision/index.ts"],"sourcesContent":["export const useVision = () => {\n return \"Vision implementation\";\n};\n"],"mappings":";AAAO,IAAM,YAAY,MAAM;AAC3B,SAAO;AACX;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/chunk-HQ7V4B42.js","../src/genai.ts","../src/index.tsx","../src/utils.ts"],"names":[],"mappings":"AAAA;ACEA,8BAAyD;ADAzD;AACA;AEDA;AFGA;AACA;AGNO,IAAM,UAAA,EAAY,OAAO,OAAA,IAAW,WAAA;AHQ3C;AACA;AE6BQ,+CAAA;AAvBR,IAAM,iBAAA,EAAmB,kCAAA,IAA+C,CAAA;AAQjE,IAAM,kBAAA,EAAsD,CAAC;AAAA,EAChE,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAAA,GAAM;AACF,EAAA,MAAM,MAAA,EAAQ,4BAAA;AAAA,IACV,CAAA,EAAA,GAAA,CAAO;AAAA,MACH,QAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,IACJ,CAAA,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,SAAS;AAAA,EACxB,CAAA;AAEA,EAAA,uBACI,6BAAA,gBAAC,CAAiB,QAAA,EAAjB,EAA0B,KAAA,EACzB,SAAA,CACF,CAAA;AAER,CAAA;AAEO,IAAM,oBAAA,EAAsB,CAAA,EAAA,GAAM;AACrC,EAAA,MAAM,QAAA,EAAU,+BAAA,gBAA2B,CAAA;AAC3C,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,6DAA6D,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,OAAA;AACX,CAAA;AFhBA;AACA;AC1BA,IAAM,aAAA,EAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA+Dd,SAAS,MAAA,CAAO,QAAA,EAAyB,CAAC,CAAA,EAAG;AAClD,EAAA,MAAM,QAAA,EAAU,mBAAA,CAAoB,CAAA;AACpC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,EAAA,EAAI,6BAAA,EAAW,CAAA;AACvC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA,KAAc,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,EAAA,EAAI,6BAAA,IAA4B,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAI,6BAAA,CAAU,CAAA;AAE1C,EAAA,MAAM,UAAA,EAAY,2BAAA,IAA0B,CAAA;AAG5C,EAAA,MAAM,UAAA,EAAY,OAAA,CAAQ,UAAA,GAAa,OAAA,CAAQ,SAAA;AAC/C,EAAA,MAAM,SAAA,EAAW,OAAA,CAAQ,SAAA,GAAY,OAAA,CAAQ,SAAA,GAAY,0DAAA;AAEzD,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,CAAC,OAAA,CAAQ,UAAA,GAAa,CAAC,SAAA,EAAW,MAAA;AAGtC,IAAA,GAAA,CAAI,CAAA,CAAE,MAAA,GAAS,SAAA,CAAA,EAAY;AACzB,MAAA,UAAA,CAAW,CAAA,EAAA,GAAM,QAAA,CAAS,0CAA0C,CAAA,EAAG,CAAC,CAAA;AACxE,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI;AAEF,MAAA,OAAA,EAAS,IAAI,MAAA,CAAO,IAAI,GAAA,CAAI,gBAAA,EAAkB,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,EAAG;AAAA,QAC9D,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM;AAAA,MACR,CAAC,CAAA;AAAA,IACH,EAAA,MAAA,CAAS,EAAA,EAAI;AAEX,MAAA,OAAA,CAAQ,IAAA,CAAK,0DAA0D,CAAA;AACvE,MAAA,MAAM,KAAA,EAAO,IAAI,IAAA,CAAK,CAAC,YAAY,CAAA,EAAG,EAAE,IAAA,EAAM,yBAAyB,CAAC,CAAA;AACxE,MAAA,OAAA,EAAS,IAAI,MAAA,CAAO,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,IAC/C;AAEA,IAAA,SAAA,CAAU,QAAA,EAAU,MAAA;AAEpB,IAAA,MAAA,CAAO,UAAA,EAAY,CAAC,KAAA,EAAA,GAAU;AAC5B,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,YAAY,EAAA,EAAI,KAAA,CAAM,IAAA;AAEpD,MAAA,OAAA,CAAQ,IAAA,EAAM;AAAA,QACZ,KAAK,eAAA;AACH,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,WAAA,CAAY,GAAG,CAAA;AACf,UAAA,KAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,SAAA,CAAU,CAAC,IAAA,EAAA,GAAS,KAAA,EAAO,OAAA,CAAQ,IAAI,CAAA;AACvC,UAAA,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM;AAChB,YAAA,YAAA,CAAa,KAAK,CAAA;AAAA,UACpB;AACA,UAAA,KAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAA,QAAA,CAAS,YAAA,GAAe,6BAA6B,CAAA;AACrD,UAAA,YAAA,CAAa,KAAK,CAAA;AAClB,UAAA,KAAA;AAAA,MACJ;AAAA,IACF,CAAA;AAEA,IAAA,UAAA,CAAW,CAAA,EAAA,GAAM;AACf,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,WAAA,CAAY,EAAE,CAAA;AAAA,IAChB,CAAA,EAAG,CAAC,CAAA;AACJ,IAAA,MAAA,CAAO,WAAA,CAAY;AAAA,MACjB,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,EAAE,SAAA,EAAW,SAAS;AAAA,IACjC,CAAC,CAAA;AAED,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,MAAA,CAAO,SAAA,CAAU,CAAA;AAAA,IACnB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,CAAQ,SAAA,EAAW,SAAA,EAAW,QAAQ,CAAC,CAAA;AAE3C,EAAA,MAAM,SAAA,EAAW,gCAAA,CAAa,MAAA,EAAA,GAAmB;AAC/C,IAAA,GAAA,CAAI,CAAC,SAAA,CAAU,OAAA,EAAS;AACtB,MAAA,QAAA,CAAS,wBAAwB,CAAA;AACjC,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,SAAA,CAAU,OAAA,CAAQ,WAAA,CAAY;AAAA,MAC5B,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,EAAE,OAAO;AAAA,IACpB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,EACF,CAAA;AACF;ADGA;AACA;AACE;AACA;AACA;AACF,0HAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/chunk-HQ7V4B42.js","sourcesContent":[null,"'use client';\n\nimport { useEffect, useState, useCallback, useRef } from 'react';\nimport { useMediaPipeContext } from './index';\n\n/**\n * The Web Worker logic for MediaPipe GenAI.\n * This is stringified so it can be easily initialized as a Blob URL if the file-based worker fails.\n */\nconst workerScript = `\nimport { LlmInference, FilesetResolver } from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai';\n\nlet llmInference = null;\n\nasync function checkGpuSupport() {\n if (!('gpu' in navigator)) {\n throw new Error('WebGPU is not supported in this browser.');\n }\n const gpu = navigator.gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error('No appropriate GPU adapter found.');\n }\n}\n\nasync function initInference(modelPath, wasmPath) {\n try {\n await checkGpuSupport();\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: 'INIT_COMPLETE' });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Unknown error during initialization' });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === 'INIT') {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === 'GENERATE') {\n if (!llmInference) {\n self.postMessage({ type: 'ERROR', error: 'LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.' });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: 'CHUNK',\n payload: { text: partialText, done }\n });\n });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Error generating response' });\n }\n }\n};\n`;\n\nexport interface UseLlmOptions {\n modelPath?: string;\n wasmPath?: string;\n}\n\nexport function useLlm(options: UseLlmOptions = {}) {\n const context = useMediaPipeContext();\n const [output, setOutput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [progress, setProgress] = useState(0);\n\n const workerRef = useRef<Worker | null>(null);\n\n // Use values from props if provided, otherwise fallback to context\n const modelPath = options.modelPath || context.modelPath;\n const wasmPath = options.wasmPath || context.wasmPath || 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm';\n\n useEffect(() => {\n if (!context.isBrowser || !modelPath) return;\n\n // Early check for WebGPU support in the UI thread too\n if (!('gpu' in navigator)) {\n setTimeout(() => setError('WebGPU is not supported in this browser.'), 0);\n return;\n }\n\n let worker: Worker;\n\n try {\n // Attempt to load from the separate worker file (Vite/Next.js/Webpack friendly)\n worker = new Worker(new URL('./genai.worker', import.meta.url), {\n type: 'module',\n name: 'mediapipe-genai-worker'\n });\n } catch (_e) {\n // Fallback to Blob-based worker if relative path fails\n console.warn('MediaPipe React: Falling back to Blob-based GenAI worker');\n const blob = new Blob([workerScript], { type: 'application/javascript' });\n worker = new Worker(URL.createObjectURL(blob));\n }\n\n workerRef.current = worker;\n\n worker.onmessage = (event) => {\n const { type, payload, error: workerError } = event.data;\n\n switch (type) {\n case 'INIT_COMPLETE':\n setIsLoading(false);\n setProgress(100);\n break;\n case 'CHUNK':\n setOutput((prev) => prev + payload.text);\n if (payload.done) {\n setIsLoading(false);\n }\n break;\n case 'ERROR':\n setError(workerError || 'Worker encountered an error');\n setIsLoading(false);\n break;\n }\n };\n\n setTimeout(() => {\n setIsLoading(true);\n setProgress(10); // Initial progress\n }, 0);\n worker.postMessage({\n type: 'INIT',\n payload: { modelPath, wasmPath },\n });\n\n return () => {\n worker.terminate();\n };\n }, [context.isBrowser, modelPath, wasmPath]);\n\n const generate = useCallback((prompt: string) => {\n if (!workerRef.current) {\n setError('Worker not initialized');\n return;\n }\n\n setOutput('');\n setIsLoading(true);\n setError(null);\n\n workerRef.current.postMessage({\n type: 'GENERATE',\n payload: { prompt },\n });\n }, []);\n\n return {\n output,\n isLoading,\n progress,\n error,\n generate,\n };\n}\n","'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport { isBrowser } from './utils';\n\nexport * from './genai';\nexport * from './vision';\nexport * from './audio';\n\nexport interface MediaPipeContextType {\n wasmPath?: string;\n modelPath?: string;\n isBrowser: boolean;\n}\n\nconst MediaPipeContext = createContext<MediaPipeContextType | null>(null);\n\nexport interface MediaPipeProviderProps {\n children: React.ReactNode;\n wasmPath?: string;\n modelPath?: string;\n}\n\nexport const MediaPipeProvider: React.FC<MediaPipeProviderProps> = ({\n children,\n wasmPath,\n modelPath,\n}) => {\n const value = useMemo(\n () => ({\n wasmPath,\n modelPath,\n isBrowser,\n }),\n [wasmPath, modelPath]\n );\n\n return (\n <MediaPipeContext.Provider value= { value } >\n { children }\n </MediaPipeContext.Provider>\n );\n};\n\nexport const useMediaPipeContext = () => {\n const context = useContext(MediaPipeContext);\n if (!context) {\n throw new Error('useMediaPipeContext must be used within a MediaPipeProvider');\n }\n return context;\n};\n\n","export const isBrowser = typeof window !== 'undefined';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/audio/index.ts"],"sourcesContent":["export const useAudio = () => {\n return \"Audio implementation\";\n};\n"],"mappings":";AAAO,IAAM,WAAW,MAAM;AAC1B,SAAO;AACX;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/chunk-SUBDHSBP.js","../src/vision/index.ts"],"names":[],"mappings":"AAAA;ACAO,IAAM,UAAA,EAAY,CAAA,EAAA,GAAM;AAC3B,EAAA,OAAO,uBAAA;AACX,CAAA;ADEA;AACA;AACE;AACF,8BAAC","file":"/Users/aloshy/aloshy-ai/mediapipe-react/packages/core/dist/chunk-SUBDHSBP.js","sourcesContent":[null,"export const useVision = () => {\n return \"Vision implementation\";\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/genai.ts","../src/index.tsx","../src/utils.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState, useCallback, useRef } from 'react';\nimport { useMediaPipeContext } from './index';\n\n/**\n * The Web Worker logic for MediaPipe GenAI.\n * This is stringified so it can be easily initialized as a Blob URL if the file-based worker fails.\n */\nconst workerScript = `\nimport { LlmInference, FilesetResolver } from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai';\n\nlet llmInference = null;\n\nasync function checkGpuSupport() {\n if (!('gpu' in navigator)) {\n throw new Error('WebGPU is not supported in this browser.');\n }\n const gpu = navigator.gpu;\n const adapter = await gpu.requestAdapter();\n if (!adapter) {\n throw new Error('No appropriate GPU adapter found.');\n }\n}\n\nasync function initInference(modelPath, wasmPath) {\n try {\n await checkGpuSupport();\n const genai = await FilesetResolver.forGenAiTasks(wasmPath);\n llmInference = await LlmInference.createFromOptions(genai, {\n baseOptions: { modelAssetPath: modelPath },\n });\n self.postMessage({ type: 'INIT_COMPLETE' });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Unknown error during initialization' });\n }\n}\n\nself.onmessage = async (event) => {\n const { type, payload } = event.data;\n\n if (type === 'INIT') {\n const { modelPath, wasmPath } = payload;\n await initInference(modelPath, wasmPath);\n }\n\n if (type === 'GENERATE') {\n if (!llmInference) {\n self.postMessage({ type: 'ERROR', error: 'LLM Inference not initialized. Please ensure the model is loaded and WebGPU is supported.' });\n return;\n }\n\n try {\n const { prompt } = payload;\n llmInference.generateResponse(prompt, (partialText, done) => {\n self.postMessage({\n type: 'CHUNK',\n payload: { text: partialText, done }\n });\n });\n } catch (error) {\n self.postMessage({ type: 'ERROR', error: error.message || 'Error generating response' });\n }\n }\n};\n`;\n\nexport interface UseLlmOptions {\n modelPath?: string;\n wasmPath?: string;\n}\n\nexport function useLlm(options: UseLlmOptions = {}) {\n const context = useMediaPipeContext();\n const [output, setOutput] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [progress, setProgress] = useState(0);\n\n const workerRef = useRef<Worker | null>(null);\n\n // Use values from props if provided, otherwise fallback to context\n const modelPath = options.modelPath || context.modelPath;\n const wasmPath = options.wasmPath || context.wasmPath || 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm';\n\n useEffect(() => {\n if (!context.isBrowser || !modelPath) return;\n\n // Early check for WebGPU support in the UI thread too\n if (!('gpu' in navigator)) {\n setTimeout(() => setError('WebGPU is not supported in this browser.'), 0);\n return;\n }\n\n let worker: Worker;\n\n try {\n // Attempt to load from the separate worker file (Vite/Next.js/Webpack friendly)\n worker = new Worker(new URL('./genai.worker', import.meta.url), {\n type: 'module',\n name: 'mediapipe-genai-worker'\n });\n } catch (_e) {\n // Fallback to Blob-based worker if relative path fails\n console.warn('MediaPipe React: Falling back to Blob-based GenAI worker');\n const blob = new Blob([workerScript], { type: 'application/javascript' });\n worker = new Worker(URL.createObjectURL(blob));\n }\n\n workerRef.current = worker;\n\n worker.onmessage = (event) => {\n const { type, payload, error: workerError } = event.data;\n\n switch (type) {\n case 'INIT_COMPLETE':\n setIsLoading(false);\n setProgress(100);\n break;\n case 'CHUNK':\n setOutput((prev) => prev + payload.text);\n if (payload.done) {\n setIsLoading(false);\n }\n break;\n case 'ERROR':\n setError(workerError || 'Worker encountered an error');\n setIsLoading(false);\n break;\n }\n };\n\n setTimeout(() => {\n setIsLoading(true);\n setProgress(10); // Initial progress\n }, 0);\n worker.postMessage({\n type: 'INIT',\n payload: { modelPath, wasmPath },\n });\n\n return () => {\n worker.terminate();\n };\n }, [context.isBrowser, modelPath, wasmPath]);\n\n const generate = useCallback((prompt: string) => {\n if (!workerRef.current) {\n setError('Worker not initialized');\n return;\n }\n\n setOutput('');\n setIsLoading(true);\n setError(null);\n\n workerRef.current.postMessage({\n type: 'GENERATE',\n payload: { prompt },\n });\n }, []);\n\n return {\n output,\n isLoading,\n progress,\n error,\n generate,\n };\n}\n","'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport { isBrowser } from './utils';\n\nexport * from './genai';\nexport * from './vision';\nexport * from './audio';\n\nexport interface MediaPipeContextType {\n wasmPath?: string;\n modelPath?: string;\n isBrowser: boolean;\n}\n\nconst MediaPipeContext = createContext<MediaPipeContextType | null>(null);\n\nexport interface MediaPipeProviderProps {\n children: React.ReactNode;\n wasmPath?: string;\n modelPath?: string;\n}\n\nexport const MediaPipeProvider: React.FC<MediaPipeProviderProps> = ({\n children,\n wasmPath,\n modelPath,\n}) => {\n const value = useMemo(\n () => ({\n wasmPath,\n modelPath,\n isBrowser,\n }),\n [wasmPath, modelPath]\n );\n\n return (\n <MediaPipeContext.Provider value= { value } >\n { children }\n </MediaPipeContext.Provider>\n );\n};\n\nexport const useMediaPipeContext = () => {\n const context = useContext(MediaPipeContext);\n if (!context) {\n throw new Error('useMediaPipeContext must be used within a MediaPipeProvider');\n }\n return context;\n};\n\n","export const isBrowser = typeof window !== 'undefined';\n"],"mappings":"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","names":[]}