@seojin08/skill-finder 0.3.3 → 0.3.5
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/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/package.json +3 -2
- package/seed-index.json.gz +0 -0
- package/server/src/app.js +3 -0
- package/server/src/bootstrap.js +2 -1
- package/server/src/db/schema.js +3 -0
- package/server/src/db/seed.js +89 -0
- package/server/src/db/store.js +4 -3
- package/server/src/index.js +11 -0
- package/server/src/indexer.js +5 -1
- package/server/src/install/installed.js +95 -25
- package/server/src/recommend/readme.js +14 -2
- package/server/src/routes/favorites.js +55 -10
- package/server/src/routes/install.js +33 -7
- package/server/src/routes/translate.js +35 -0
- package/server/src/search/result.js +9 -1
- package/server/src/security.js +4 -1
- package/server/src/sources/gitTree.js +11 -1
- package/server/src/sources/github.js +17 -2
- package/server/src/tasks.js +45 -5
- package/server/src/translate/models.js +140 -0
- package/server/src/update.js +1 -1
- package/web/dist/THIRD-PARTY-LICENSES.txt +6 -0
- package/web/dist/assets/{ArasakaGame-C1Wkmqik.js → ArasakaGame-zvqzlnfW.js} +2 -2
- package/web/dist/assets/__vite-browser-external-BDfy7Drd.js +1 -0
- package/web/dist/assets/index-BGfauLB6.css +2 -0
- package/web/dist/assets/index-Bhi_rUeJ.js +66 -0
- package/web/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/web/dist/assets/translator-CCFr2ykW.js +2 -0
- package/web/dist/bergamot/bergamot-translator-worker.js +2919 -0
- package/web/dist/bergamot/bergamot-translator-worker.wasm +0 -0
- package/web/dist/bergamot/translator-worker.js +475 -0
- package/web/dist/index.html +3 -2
- package/web/dist/assets/index-BgL1OaU4.css +0 -2
- package/web/dist/assets/index-Ec2XBK4-.js +0 -66
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));export{s as n,l as r,o as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-BDfy7Drd.js","assets/rolldown-runtime-XKyaHtl9.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./index-Bhi_rUeJ.js";typeof window<`u`&&window.Worker||(globalThis.Worker=class{worker;constructor(n){this.worker=new Promise(async r=>{let{Worker:i}=await t(async()=>{let{Worker:t}=await import(`./__vite-browser-external-BDfy7Drd.js`).then(t=>e(t.default,1));return{Worker:t}},__vite__mapDeps([0,1]));r(new i(n))})}addEventListener(e,t){this.worker.then(n=>n.on(e,e=>t({data:e})))}postMessage(e){this.worker.then(t=>t.postMessage(e))}terminate(){this.worker.then(e=>e.terminate())}});var n=class extends Error{},r=class{options;registryUrl;workerUrl;downloadTimeout;registry;buffers=new Map;pivotLanguage;models;state;onerror;constructor(e){this.options=e||{},this.registryUrl=this.options.registryUrl||`https://bergamot.s3.amazonaws.com/models/index.json`,this.workerUrl=this.options.workerUrl||`./worker/translator-worker.js`,this.downloadTimeout=`downloadTimeout`in this.options?parseInt(this.options.downloadTimeout):6e4,this.registry=this.loadModelRegistry(),this.buffers=new Map,this.pivotLanguage=`pivotLanguage`in this.options?e.pivotLanguage:`en`,this.models=new Map,this.state=new Map,this.onerror=this.options.onerror||(e=>console.error(`WASM Translation Worker error:`,e))}async loadWorker(){let e=new Worker(new URL(this.workerUrl,import.meta.url)),t=0,n=new Map,r=(r,...i)=>new Promise((a,o)=>{let s=++t;n.set(s,{accept:a,reject:o,callsite:{message:`${r}(${i.map(e=>String(e)).join(`, `)})`,stack:Error().stack}}),e.postMessage({id:s,name:r,args:i})});return e.addEventListener(`message`,function({data:{id:e,result:t,error:r}}){if(!n.has(e))throw console.debug(`Received message with unknown id:`,arguments[0]),Error(`BergamotTranslator received response from worker to unknown call '${e}'`);let{accept:i,reject:a,callsite:o}=n.get(e);n.delete(e),r===void 0?i(t):a(Object.assign(Error(),r,{message:r.message+` (response to ${o.message})`,stack:r.stack?`${r.stack}\n${o.stack}`:o.stack}))}),e.addEventListener(`error`,this.onerror.bind(this)),await r(`initialize`,this.options),{worker:e,exports:new Proxy({},{get(e,t,n){if(t!==`then`)return(...e)=>r(t,...e)}})}}async loadModelRegistry(){let e=await(await fetch(this.registryUrl,{headers:{Accept:`application/json`},credentials:`omit`})).json();return Array.from(Object.entries(e),([e,t])=>({from:e.substring(0,2),to:e.substring(2,4),files:t}))}getTranslationModel({from:e,to:t},n){let r=JSON.stringify({from:e,to:t});if(!this.buffers.has(r)){let i=this.loadTranslationModel({from:e,to:t},n);this.buffers.set(r,i),this.state.set(r,`downloading`),i.catch(e=>{this.buffers.delete(r),this.state.set(r,`available`)})}return this.buffers.get(r)}async loadTranslationModel({from:e,to:t},r){let i=JSON.stringify({from:e,to:t});performance.mark(`loadTranslationModule.${i}`);let a=(await this.registry).filter(n=>n.from==e&&n.to==t);if(!a)throw Error(`No model for '${e}' -> '${t}'`);let o=a[0].files,s,c=new Promise((e,t)=>{r?.signal&&(s=()=>t(new n(`abort signal`)),r.signal.addEventListener(`abort`,s))}),l=await Promise.race([Promise.all(Object.entries(o).map(async([n,i])=>{if(i===void 0||i.name===void 0)return[n,null];try{return[n,await this.fetch(i.name,i.expectedSha256Hash,r)]}catch(n){throw Error(`Could not fetch ${i.name} for ${e}->${t} model. Cause: ${n}`)}})),c]),u=Object.fromEntries(l);r?.signal&&r.signal.removeEventListener(`abort`,s),performance.measure(`loadTranslationModel`,`loadTranslationModule.${i}`);let d=[];if(u.vocab)d=[u.vocab];else if(u.trgvocab&&u.srcvocab)d=[u.srcvocab,u.trgvocab];else throw Error(`Could not identify vocab files for ${e}->${t} model among: ${Array.from(Object.keys(o)).join(` `)}`);let f={};return o.model.name.endsWith(`intgemm8.bin`)&&(f[`gemm-precision`]=`int8shiftAll`),o.qualityModel&&(f[`skip-cost`]=!1),o.config&&Object.assign(f,o.config),this.state.set(i,`available`),{model:u.model,shortlist:u.lex,vocabs:d,qualityModel:u.qualityModel,config:f}}async fetch(e,t,n){let r=new AbortController,i=()=>r.abort(),a=this.downloadTimeout?setTimeout(i,this.downloadTimeout):null;try{n?.signal&&n.signal.addEventListener(`abort`,i);let a={credentials:`omit`,signal:r.signal};return t&&(a.integrity=`sha256-${this.hexToBase64(t)}`),typeof window>`u`&&delete a.integrity,(await fetch(e,a)).arrayBuffer()}finally{a&&clearTimeout(a),n?.signal&&n.signal.removeEventListener(`abort`,i)}}hexToBase64(e){return btoa(e.match(/\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(``))}getModels({from:e,to:t}){let n=JSON.stringify({from:e,to:t});return this.models.has(n)||this.models.set(n,this.findModels(e,t)),this.models.get(n)}async findModels(e,t){let n=await this.registry,r=[],i=[],a=[];if(n.forEach(n=>{n.from===e&&n.to===t?r.push(n):n.from===e&&n.to===this.pivotLanguage?i.push(n):n.to===t&&n.from===this.pivotLanguage&&a.push(n)}),r.length)return[r[0]];if(i.length&&a.length)return[i[0],a[0]];throw Error(`No model available to translate from '${e}' to '${t}'`)}async getState({from:e,to:t}){let n=JSON.stringify({from:e,to:t});try{return(await this.findModels(e,t)).length?this.state.get(n)||`downloadable`:`unavailable`}catch{return`unavailable`}}},i=class{backing;workers=[];workerLimit;queue=[];batchSerial=0;batchSize;onerror;constructor(e,t){t||=new r(e),this.backing=t,this.workerLimit=Math.max(e?.workers||0,1),this.batchSize=Math.max(e?.batchSize||8,1),this.onerror=e?.onerror||(e=>console.error(`WASM Translation Worker error:`,e))}async delete(){this.remove(()=>!0),this.workers.forEach(({worker:e})=>e.terminate())}notify(){setTimeout(async()=>{if(!this.queue.length)return;let e=this.workers.find(e=>e.idle);if(!e&&this.workers.length<this.workerLimit)try{let t={idle:!1};this.workers.push(t),Object.assign(t,await this.backing.loadWorker()),e=t}catch(e){this.onerror(Error(`Could not initialise translation worker: ${e.message}`))}if(!e)return;let t=this.queue.shift();e.idle=!1;try{await this.consumeBatch(t,e.exports)}catch(e){t.requests.forEach(({reject:t})=>t(e))}e.idle=!0,this.queue.length&&this.notify()})}translate(e){let{from:t,to:n,priority:r}=e;return new Promise(async(i,a)=>{try{let o=JSON.stringify({from:t,to:n}),s=await this.backing.getModels(e);this.enqueue({key:o,models:s,request:e,resolve:i,reject:a,priority:r}),this.notify()}catch(e){a(e)}})}remove(e){let t=this.queue;this.queue=[],t.forEach(t=>{t.requests.forEach(({request:r,resolve:i,reject:a})=>{e(r)?a(Object.assign(new n(`removed by filter`),{request:r})):this.enqueue({key:t.key,priority:t.priority,models:t.models,request:r,resolve:i,reject:a})})})}enqueue({key:e,models:t,request:n,resolve:r,reject:i,priority:a}){a===void 0&&(a=0);let o=this.queue.find(t=>t.key===e&&t.priority===a&&t.requests.length<this.batchSize);o||(o={id:++this.batchSerial,key:e,priority:a,models:t,requests:[]},this.queue.push(o),this.queue.sort((e,t)=>e.priority-t.priority)),o.requests.push({request:n,resolve:r,reject:i})}async consumeBatch(e,t){performance.mark(`BergamotBatchTranslator.start`),await Promise.all(e.models.map(async({from:e,to:n})=>{if(!await t.hasTranslationModel({from:e,to:n})){let r=await this.backing.getTranslationModel({from:e,to:n});await t.loadTranslationModel({from:e,to:n},r)}}));let n=await t.translate({models:e.models.map(({from:e,to:t})=>({from:e,to:t})),texts:e.requests.map(({request:{text:e,html:t,qualityScores:n}})=>({text:e.toString(),html:!!t,qualityScores:!!n}))});e.requests.forEach(({request:e,resolve:t,reject:r},i)=>{t({request:e,...n[i]})}),performance.measure(`BergamotBatchTranslator`,`BergamotBatchTranslator.start`)}};export{i as BatchTranslator};
|