Slow Triage
Exact reviewed source / 35 of 64

prototype/src/model.mjs

SHA-256 of original bytes
7273332e105fcb43cd9c5bbe378fa63138d05da897cfb948f010e09a8f6c2351
import { pipeline, env } from '@huggingface/transformers';
import { fileURLToPath } from 'node:url';
import { readFile } from 'node:fs/promises';
const root=fileURLToPath(new URL('../',import.meta.url));
export const MODEL=Object.freeze({name:'Xenova/all-MiniLM-L6-v2',revision:'751bff37182d3f1213fa05d7196b954e230abad9',dtype:'q8',dimensions:384,maxTokens:256,license:'Apache-2.0',offline:true});
env.allowRemoteModels=false;
env.allowLocalModels=true;
env.localModelPath=root+'models/';
env.useBrowserCache=false;
env.backends.onnx.wasm.numThreads=1;
let extractorPromise,referencePromise;
export async function getExtractor(){
  if(!extractorPromise)extractorPromise=pipeline('feature-extraction',MODEL.name,{dtype:'q8',device:'cpu',local_files_only:true});
  return extractorPromise;
}
export async function embedTexts(texts){
  const extractor=await getExtractor();
  const result=[];
  // Bounded batches avoid padding all input to the longest issue.
  for(let start=0;start<texts.length;start+=8){
    const output=await extractor(texts.slice(start,start+8),{pooling:'mean',normalize:true,truncation:true,max_length:MODEL.maxTokens});
    result.push(...output.tolist());
  }
  return result;
}
export function issueText(issue){return `${issue.title}\n${issue.body}`;}
export async function referenceModel(){
  if(!referencePromise)referencePromise=(async()=>{
    const references=JSON.parse(await readFile(root+'data/reference.json','utf8'));
    return {references,referenceVectors:await embedTexts(references.map(issueText))};
  })();
  return referencePromise;
}
← prototype/src/core.mjsprototype/src/server.mjs →