From acf72727b6a1be85c38594e01c09ed6f0ca18a7f Mon Sep 17 00:00:00 2001 From: kwaroran Date: Wed, 24 Apr 2024 20:29:10 +0900 Subject: [PATCH] Remove unessesary convertions --- src/ts/process/memory/hypamemory.ts | 36 +++++++++++------------------ src/ts/process/transformers.ts | 7 +++--- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/ts/process/memory/hypamemory.ts b/src/ts/process/memory/hypamemory.ts index 57dee944..b03a9998 100644 --- a/src/ts/process/memory/hypamemory.ts +++ b/src/ts/process/memory/hypamemory.ts @@ -17,10 +17,10 @@ export class HypaProcesser{ this.model = model } - async embedDocuments(texts: string[]): Promise { + async embedDocuments(texts: string[]): Promise { const subPrompts = chunkArray(texts,512); - const embeddings: number[][] = []; + const embeddings: VectorArray[] = []; for (let i = 0; i < subPrompts.length; i += 1) { const input = subPrompts[i]; @@ -37,22 +37,8 @@ export class HypaProcesser{ async getEmbeds(input:string[]|string) { if(this.model === 'MiniLM' || this.model === 'nomic'){ const inputs:string[] = Array.isArray(input) ? input : [input] - let results:Float32Array[] = [] - for(let i=0;i { const memoryVectors = this.vectors const searches = memoryVectors @@ -160,12 +146,18 @@ export class HypaProcesser{ return similarity(query1, query2) } } -function similarity(a:number[], b:number[]) { - return a.reduce((acc, val, i) => acc + val * b[i], 0); +function similarity(a:VectorArray, b:VectorArray) { + let dot = 0; + for(let i=0;i { let extractor:FeatureExtractionPipeline = null type EmbeddingModel = 'Xenova/all-MiniLM-L6-v2'|'nomic-ai/nomic-embed-text-v1.5' -export const runEmbedding = async (text: string, model:EmbeddingModel = 'Xenova/all-MiniLM-L6-v2'):Promise => { +export const runEmbedding = async (texts: string[], model:EmbeddingModel = 'Xenova/all-MiniLM-L6-v2'):Promise => { await initTransformers() if(!extractor){ extractor = await pipeline('feature-extraction', model); } - const tokenizer = await AutoTokenizer.from_pretrained(model); - let result = await extractor(text, { pooling: 'mean', normalize: true }); - return (result?.data as Float32Array) ?? null; + let result = await extractor(texts, { pooling: 'mean', normalize: true }); + return (result.data as Float32Array[]) ?? null; } export const runImageEmbedding = async (dataurl:string) => {