Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a07f069ad0 | |||
| da15d299e6 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ztimson/ai-utils",
|
"name": "@ztimson/ai-utils",
|
||||||
"version": "0.7.1",
|
"version": "0.7.3",
|
||||||
"description": "AI Utility library",
|
"description": "AI Utility library",
|
||||||
"author": "Zak Timson",
|
"author": "Zak Timson",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
20
src/llm.ts
20
src/llm.ts
@@ -255,11 +255,11 @@ class LLM {
|
|||||||
/**
|
/**
|
||||||
* Create a vector representation of a string
|
* Create a vector representation of a string
|
||||||
* @param {object | string} target Item that will be embedded (objects get converted)
|
* @param {object | string} target Item that will be embedded (objects get converted)
|
||||||
* @param {number} maxTokens Chunking size. More = better context, less = more specific (Search by paragraphs or lines)
|
* @param {maxTokens?: number, overlapTokens?: number} opts Options for embedding such as chunk sizes
|
||||||
* @param {number} overlapTokens Includes previous X tokens to provide continuity to AI (In addition to max tokens)
|
|
||||||
* @returns {Promise<Awaited<{index: number, embedding: number[], text: string, tokens: number}>[]>} Chunked embeddings
|
* @returns {Promise<Awaited<{index: number, embedding: number[], text: string, tokens: number}>[]>} Chunked embeddings
|
||||||
*/
|
*/
|
||||||
embedding(target: object | string, maxTokens = 500, overlapTokens = 50) {
|
async embedding(target: object | string, opts: {maxTokens?: number, overlapTokens?: number} = {}) {
|
||||||
|
let {maxTokens = 500, overlapTokens = 50} = opts;
|
||||||
const embed = (text: string): Promise<number[]> => {
|
const embed = (text: string): Promise<number[]> => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const worker = new Worker(join(dirname(fileURLToPath(import.meta.url)), 'embedder.js'));
|
const worker = new Worker(join(dirname(fileURLToPath(import.meta.url)), 'embedder.js'));
|
||||||
@@ -279,13 +279,13 @@ class LLM {
|
|||||||
worker.postMessage({text, model: this.ai.options?.embedder || 'bge-small-en-v1.5', modelDir: this.ai.options.path});
|
worker.postMessage({text, model: this.ai.options?.embedder || 'bge-small-en-v1.5', modelDir: this.ai.options.path});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
const chunks = this.chunk(target, maxTokens, overlapTokens);
|
const chunks = this.chunk(target, maxTokens, overlapTokens), results: any[] = [];
|
||||||
return Promise.all(chunks.map(async (text, index) => ({
|
for(let i = 0; i < chunks.length; i++) {
|
||||||
index,
|
const text= chunks[i];
|
||||||
embedding: await embed(text),
|
const embedding = await embed(text);
|
||||||
text,
|
results.push({index: i, embedding, text, tokens: this.estimateTokens(text)});
|
||||||
tokens: this.estimateTokens(text),
|
}
|
||||||
})));
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user