diff --git a/package.json b/package.json index da52d32..2909f34 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/ai-utils", - "version": "0.7.2", + "version": "0.7.3", "description": "AI Utility library", "author": "Zak Timson", "license": "MIT", diff --git a/src/llm.ts b/src/llm.ts index a951b3d..4a9f0eb 100644 --- a/src/llm.ts +++ b/src/llm.ts @@ -255,12 +255,11 @@ class LLM { /** * Create a vector representation of a string * @param {object | string} target Item that will be embedded (objects get converted) - * @param {maxTokens?: number, overlapTokens?: number, parellel?: number} opts Options for embedding such as chunk sizes and parallel processing + * @param {maxTokens?: number, overlapTokens?: number} opts Options for embedding such as chunk sizes * @returns {Promise[]>} Chunked embeddings */ - async embedding(target: object | string, opts: {maxTokens?: number, overlapTokens?: number, parallel?: number} = {}) { - let {maxTokens = 500, overlapTokens = 50, parallel = 1} = opts; - + async embedding(target: object | string, opts: {maxTokens?: number, overlapTokens?: number} = {}) { + let {maxTokens = 500, overlapTokens = 50} = opts; const embed = (text: string): Promise => { return new Promise((resolve, reject) => { const worker = new Worker(join(dirname(fileURLToPath(import.meta.url)), 'embedder.js')); @@ -280,19 +279,13 @@ class LLM { worker.postMessage({text, model: this.ai.options?.embedder || 'bge-small-en-v1.5', modelDir: this.ai.options.path}); }); }; - let i = 0, chunks = this.chunk(target, maxTokens, overlapTokens), results: any[] = []; - const next: Function = () => { - const index = i++; - if(index >= chunks.length) return; - const text = chunks[index]; - return embed(text).then(embedding => { - results.push({index, embedding, text, tokens: this.estimateTokens(text)}); - return next(); - }) + const chunks = this.chunk(target, maxTokens, overlapTokens), results: any[] = []; + for(let i = 0; i < chunks.length; i++) { + const text= chunks[i]; + const embedding = await embed(text); + results.push({index: i, embedding, text, tokens: this.estimateTokens(text)}); } - - await Promise.all(Array(parallel).fill(null).map(() => next())); - return results.toSorted((a, b) => a.index - b.index); + return results; } /**