UNPKG

huggingface-transformers-react

Version:

A React provider and hooks for using Hugging Face Transformers.js in React applications with built-in loading states, error handling, and Suspense support

5 lines (4 loc) 10 kB
import{jsx as r}from"react/jsx-runtime";import n,{useState as e,useRef as t,useCallback as o,useEffect as i,useContext as u}from"react";function a(r,n){(null==n||n>r.length)&&(n=r.length);for(var e=0,t=Array(n);e<n;e++)t[e]=r[e];return t}function c(r,n,e,t,o,i,u){try{var a=r[i](u),c=a.value}catch(r){return void e(r)}a.done?n(c):Promise.resolve(c).then(t,o)}function l(r){return function(){var n=this,e=arguments;return new Promise((function(t,o){var i=r.apply(n,e);function u(r){c(i,t,o,u,a,"next",r)}function a(r){c(i,t,o,u,a,"throw",r)}u(void 0)}))}}function f(r,n,e){return(n=function(r){var n=function(r,n){if("object"!=typeof r||!r)return r;var e=r[Symbol.toPrimitive];if(void 0!==e){var t=e.call(r,n);if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(r)}(r,"string");return"symbol"==typeof n?n:n+""}(n))in r?Object.defineProperty(r,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[n]=e,r}function s(r,n){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable}))),e.push.apply(e,t)}return e}function d(r){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?s(Object(e),!0).forEach((function(n){f(r,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(e)):s(Object(e)).forEach((function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(e,n))}))}return r}function v(){ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var r,n,e="function"==typeof Symbol?Symbol:{},t=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,t,o,i){var c=t&&t.prototype instanceof a?t:a,l=Object.create(c.prototype);return p(l,"_invoke",function(e,t,o){var i,a,c,l=0,f=o||[],s=!1,d={p:0,n:0,v:r,a:v,f:v.bind(r,4),d:function(n,e){return i=n,a=0,c=r,d.n=e,u}};function v(e,t){for(a=e,c=t,n=0;!s&&l&&!o&&n<f.length;n++){var o,i=f[n],v=d.p,p=i[2];e>3?(o=p===t)&&(c=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=r):i[0]<=v&&((o=e<2&&v<i[1])?(a=0,d.v=t,d.n=i[1]):v<p&&(o=e<3||i[0]>t||t>p)&&(i[4]=e,i[5]=t,d.n=p,a=0))}if(o||e>1)return u;throw s=!0,t}return function(o,f,p){if(l>1)throw TypeError("Generator is already running");for(s&&1===f&&v(f,p),a=f,c=p;(n=a<2?r:c)||!s;){i||(a?a<3?(a>1&&(d.n=-1),v(a,c)):d.n=c:d.v=c);try{if(l=2,i){if(a||(o="next"),n=i[o]){if(!(n=n.call(i,c)))throw TypeError("iterator result is not an object");if(!n.done)return n;c=n.value,a<2&&(a=0)}else 1===a&&(n=i.return)&&n.call(i),a<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),a=1);i=r}else if((n=(s=d.n<0)?c:e.call(t,d))!==u)break}catch(n){i=r,a=1,c=n}finally{l=1}}return{value:n,done:s}}}(e,o,i),!0),l}var u={};function a(){}function c(){}function l(){}n=Object.getPrototypeOf;var f=[][t]?n(n([][t]())):(p(n={},t,(function(){return this})),n),s=l.prototype=a.prototype=Object.create(f);function d(r){return Object.setPrototypeOf?Object.setPrototypeOf(r,l):(r.__proto__=l,p(r,o,"GeneratorFunction")),r.prototype=Object.create(s),r}return c.prototype=l,p(s,"constructor",l),p(l,"constructor",c),c.displayName="GeneratorFunction",p(l,o,"GeneratorFunction"),p(s),p(s,o,"Generator"),p(s,t,(function(){return this})),p(s,"toString",(function(){return"[object Generator]"})),(v=function(){return{w:i,m:d}})()}function p(r,n,e,t){var o=Object.defineProperty;try{o({},"",{})}catch(r){o=0}p=function(r,n,e,t){if(n)o?o(r,n,{value:e,enumerable:!t,configurable:!t,writable:!t}):r[n]=e;else{function i(n,e){p(r,n,(function(r){return this._invoke(n,e,r)}))}i("next",0),i("throw",1),i("return",2)}},p(r,n,e,t)}function y(r,n){return function(r){if(Array.isArray(r))return r}(r)||function(r,n){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=e){var t,o,i,u,a=[],c=!0,l=!1;try{if(i=(e=e.call(r)).next,0===n);else for(;!(c=(t=i.call(e)).done)&&(a.push(t.value),a.length!==n);c=!0);}catch(r){l=!0,o=r}finally{try{if(!c&&null!=e.return&&(u=e.return(),Object(u)!==u))return}finally{if(l)throw o}}return a}}(r,n)||function(r,n){if(r){if("string"==typeof r)return a(r,n);var e={}.toString.call(r).slice(8,-1);return"Object"===e&&r.constructor&&(e=r.constructor.name),"Map"===e||"Set"===e?Array.from(r):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(r,n):void 0}}(r,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var m=n.createContext(null);function b(n){var u=n.children,a=n.moduleUrl,c=void 0===a?"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.5.2":a,s=n.loadTimeout,p=void 0===s?6e4:s,b=n.maxRetries,h=void 0===b?3:b,w=n.nonce,g=n.onLibraryError,O=n.onModelError,j="undefined"!=typeof window&&"undefined"!=typeof document,P=y(e(!1),2),S=P[0],T=P[1],E=y(e("idle"),2),x=E[0],A=E[1],k=y(e(null),2),M=k[0],C=k[1],D=y(e({}),2),G=D[0],_=D[1],F=y(e({}),2),I=F[0],L=F[1],R=y(e({}),2),N=R[0],U=R[1],X=t(null),q=t(),z=t(!1),B=t(0),$=t({}),H=t(),J=t(),K=t();H.current||(H.current=new Promise((function(r,n){J.current=r,K.current=n})));var Q=function(){q.current&&(clearTimeout(q.current),q.current=void 0),z.current=!1},V=function(){var r;null===(r=X.current)||void 0===r||r.remove(),X.current=null},W=function(r){var n;if(Q(),B.current+=1,B.current<h){var e=Math.min(1e3*Math.pow(2,B.current-1),6e4)+1e3*Math.random();return console.debug("[Transformers] retrying library in ".concat(e.toFixed(0)," ms ")+"(".concat(B.current,"/").concat(h,")")),void setTimeout(Y,e)}C(r),A("error"),null===(n=K.current)||void 0===n||n.call(K,r),null==g||g(r),console.debug("[Transformers] library failed permanently")},Y=o((function(){j&&(S||"loading"===x||(A("loading"),C(null),function(){if(!X.current){var r=document.createElement("script");r.type="module",r.crossOrigin="anonymous",w&&(r.nonce=w),r.textContent="\n import { pipeline } from '".concat(c,"';\n window.transformers = { pipeline };\n "),r.onerror=function(){Q(),V(),W(new Error("Script load error"))},document.head.appendChild(r),X.current=r,console.debug("[Transformers] script tag injected")}}(),function(r){if(!z.current){z.current=!0;var n=function(){var e,t;return null!==(e=window.transformers)&&void 0!==e&&e.pipeline?(Q(),V(),T(!0),A("ready"),null===(t=J.current)||void 0===t||t.call(J),void console.debug("[Transformers] library ready")):Date.now()>=r?(Q(),V(),void W(new Error("transformers.js not ready within ".concat(p," ms")))):void(q.current=window.setTimeout(n,500))};n()}}(Date.now()+p)))}),[j,S,x,p]);i((function(){Y()}),[Y]);var Z=o(function(){var r=l(v().m((function r(n){var e,t,o,i=arguments;return v().w((function(r){for(;;)switch(r.n){case 0:if(e=i.length>1&&void 0!==i[1]?i[1]:"auto",t=i.length>2&&void 0!==i[2]?i[2]:1,!G[n]){r.n=1;break}return r.a(2,G[n]);case 1:if(!$.current[n]){r.n=2;break}return r.a(2,$.current[n]);case 2:return L((function(r){return d(d({},r),{},f({},n,"loading"))})),U((function(r){return d(d({},r),{},f({},n,null))})),o=function(){var r=l(v().m((function r(t){var i,u,a,c;return v().w((function(r){for(;;)switch(r.n){case 0:return r.p=0,r.n=1,H.current;case 1:return i=window.transformers.pipeline,u=i(e,n),$.current[n]=u,r.n=2,u;case 2:return a=r.v,_((function(r){return d(d({},r),{},f({},n,a))})),L((function(r){return d(d({},r),{},f({},n,"ready"))})),delete $.current[n],r.a(2,a);case 3:if(r.p=3,c=r.v,!(t>0)){r.n=4;break}return r.a(2,o(t-1));case 4:throw U((function(r){return d(d({},r),{},f({},n,c))})),L((function(r){return d(d({},r),{},f({},n,"error"))})),delete $.current[n],null==O||O(n,c),c;case 5:return r.a(2)}}),r,null,[[0,3]])})));return function(n){return r.apply(this,arguments)}}(),r.a(2,o(t))}}),r)})));return function(n){return r.apply(this,arguments)}}(),[G,O]),rr=o((function(r){$.current[r]&&delete $.current[r],_((function(n){var e=d({},n),t=e[r];if("function"==typeof(null==t?void 0:t.dispose))try{t.dispose()}catch(r){}return delete e[r],e})),L((function(n){var e=d({},n);return delete e[r],e})),U((function(n){var e=d({},n);return delete e[r],e}))}),[]),nr=o((function(r,n){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Z(n||"Xenova/distilbert-base-uncased-finetuned-sst-2-english","sentiment-analysis").then((function(n){return n(r,e)}))}),[Z]),er=o(function(){var r=l(v().m((function r(n){var e,t,o,i,u=arguments;return v().w((function(r){for(;;)switch(r.n){case 0:return e=u.length>1&&void 0!==u[1]?u[1]:{},t=function(){var r=l(v().m((function r(n){var e,t,o,i,u,a,c,l,f,s;return v().w((function(r){for(;;)switch(r.n){case 0:if(e=window.AudioContext||window.webkitAudioContext){r.n=1;break}throw new Error("AudioContext is not available. Audio transcription requires a browser environment.");case 1:return t=new e,r.n=2,n.arrayBuffer();case 2:return o=r.v,r.n=3,t.decodeAudioData(o);case 3:if(i=r.v,u=i.getChannelData(0),16e3!==i.sampleRate){for(a=i.sampleRate/16e3,c=Math.floor(u.length/a),l=new Float32Array(c),f=0;f<c;f++)s=Math.floor(f*a),l[f]=u[s]||0;u=l}return t.close(),r.a(2,u)}}),r)})));return function(n){return r.apply(this,arguments)}}(),r.n=1,t(n);case 1:return o=r.v,r.n=2,Z(e.model||"Xenova/whisper-tiny.en","automatic-speech-recognition");case 2:return i=r.v,r.a(2,i(o,e))}}),r)})));return function(n){return r.apply(this,arguments)}}(),[Z]),tr={isLibraryLoaded:S,libraryStatus:x,libraryError:M,models:G,modelStatus:I,modelErrors:N,loadModel:Z,unloadModel:rr,analyzeSentiment:nr,transcribeAudio:er,readyPromise:H.current};return r(m.Provider,{value:tr,children:u})}function h(){var r=u(m);if(!r)throw new Error("useTransformers must be used within TransformersProvider");return r}function w(){var r=h(),n=r.libraryStatus,e=r.readyPromise;if("ready"!==n)throw e}export{b as TransformersProvider,h as useTransformers,w as useTransformersReady}; //# sourceMappingURL=index.esm.js.map