langchain 0.0.4 → 0.0.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/dist/cjs/agents/agent.d.ts +54 -0
- package/dist/cjs/agents/agent.js +81 -59
- package/dist/cjs/agents/agent.js.map +1 -1
- package/dist/cjs/agents/executor.d.ts +5 -0
- package/dist/cjs/agents/executor.js +36 -42
- package/dist/cjs/agents/executor.js.map +1 -1
- package/dist/cjs/agents/helpers.js +4 -13
- package/dist/cjs/agents/helpers.js.map +1 -1
- package/dist/cjs/agents/index.d.ts +1 -0
- package/dist/cjs/agents/index.js +5 -1
- package/dist/cjs/agents/index.js.map +1 -1
- package/dist/cjs/agents/initialize.d.ts +4 -0
- package/dist/cjs/agents/initialize.js +21 -0
- package/dist/cjs/agents/initialize.js.map +1 -0
- package/dist/cjs/agents/load.js +6 -15
- package/dist/cjs/agents/load.js.map +1 -1
- package/dist/cjs/agents/mrkl/index.d.ts +17 -0
- package/dist/cjs/agents/mrkl/index.js +21 -29
- package/dist/cjs/agents/mrkl/index.js.map +1 -1
- package/dist/cjs/agents/mrkl/prompt.js +0 -1
- package/dist/cjs/agents/mrkl/prompt.js.map +1 -1
- package/dist/cjs/agents/tests/agent.test.js +19 -15
- package/dist/cjs/agents/tests/agent.test.js.map +1 -1
- package/dist/cjs/agents/tests/calculator.test.d.ts +1 -0
- package/dist/cjs/agents/tests/calculator.test.js +30 -0
- package/dist/cjs/agents/tests/calculator.test.js.map +1 -0
- package/dist/cjs/agents/tools/base.d.ts +6 -0
- package/dist/cjs/agents/tools/base.js +15 -0
- package/dist/cjs/agents/tools/base.js.map +1 -0
- package/dist/cjs/agents/tools/calculator.d.ts +6 -0
- package/dist/cjs/agents/tools/calculator.js +33 -0
- package/dist/cjs/agents/tools/calculator.js.map +1 -0
- package/dist/cjs/agents/tools/index.d.ts +2 -6
- package/dist/cjs/agents/tools/index.js +5 -1
- package/dist/cjs/agents/tools/index.js.map +1 -1
- package/dist/cjs/agents/tools/serpapi.d.ts +18 -3
- package/dist/cjs/agents/tools/serpapi.js +88 -45
- package/dist/cjs/agents/tools/serpapi.js.map +1 -1
- package/dist/cjs/chains/base.d.ts +34 -4
- package/dist/cjs/chains/base.js +41 -3
- package/dist/cjs/chains/base.js.map +1 -1
- package/dist/cjs/chains/chat_vector_db_chain.d.ts +41 -0
- package/dist/cjs/chains/chat_vector_db_chain.js +132 -0
- package/dist/cjs/chains/chat_vector_db_chain.js.map +1 -0
- package/dist/cjs/chains/combine_docs_chain.d.ts +35 -0
- package/dist/cjs/chains/combine_docs_chain.js +75 -0
- package/dist/cjs/chains/combine_docs_chain.js.map +1 -0
- package/dist/cjs/chains/conversation.d.ts +12 -0
- package/dist/cjs/chains/conversation.js +29 -0
- package/dist/cjs/chains/conversation.js.map +1 -0
- package/dist/cjs/chains/index.d.ts +5 -1
- package/dist/cjs/chains/index.js +10 -1
- package/dist/cjs/chains/index.js.map +1 -1
- package/dist/cjs/chains/llm_chain.d.ts +35 -0
- package/dist/cjs/chains/llm_chain.js +66 -34
- package/dist/cjs/chains/llm_chain.js.map +1 -1
- package/dist/cjs/chains/load.d.ts +20 -1
- package/dist/cjs/chains/load.js +25 -17
- package/dist/cjs/chains/load.js.map +1 -1
- package/dist/cjs/chains/question_answering/load.d.ts +3 -0
- package/dist/cjs/chains/question_answering/load.js +13 -0
- package/dist/cjs/chains/question_answering/load.js.map +1 -0
- package/dist/cjs/chains/question_answering/stuff_prompts.d.ts +2 -0
- package/dist/cjs/chains/question_answering/stuff_prompts.js +10 -0
- package/dist/cjs/chains/question_answering/stuff_prompts.js.map +1 -0
- package/dist/cjs/chains/question_answering/tests/load.test.d.ts +1 -0
- package/dist/cjs/chains/question_answering/tests/load.test.js +14 -0
- package/dist/cjs/chains/question_answering/tests/load.test.js.map +1 -0
- package/dist/cjs/chains/tests/chat_vector_db_qa_chain.test.d.ts +1 -0
- package/dist/cjs/chains/tests/chat_vector_db_qa_chain.test.js +35 -0
- package/dist/cjs/chains/tests/chat_vector_db_qa_chain.test.js.map +1 -0
- package/dist/cjs/chains/tests/combine_docs_chain.test.d.ts +1 -0
- package/dist/cjs/chains/tests/combine_docs_chain.test.js +28 -0
- package/dist/cjs/chains/tests/combine_docs_chain.test.js.map +1 -0
- package/dist/cjs/chains/tests/llm_chain.test.js +13 -16
- package/dist/cjs/chains/tests/llm_chain.test.js.map +1 -1
- package/dist/cjs/chains/tests/vector_db_qa_chain.test.d.ts +1 -0
- package/dist/cjs/chains/tests/vector_db_qa_chain.test.js +46 -0
- package/dist/cjs/chains/tests/vector_db_qa_chain.test.js.map +1 -0
- package/dist/cjs/chains/vector_db_qa.d.ts +36 -0
- package/dist/cjs/chains/vector_db_qa.js +85 -0
- package/dist/cjs/chains/vector_db_qa.js.map +1 -0
- package/dist/cjs/document.d.ts +13 -0
- package/dist/cjs/document.js +28 -0
- package/dist/cjs/document.js.map +1 -0
- package/dist/cjs/embeddings/base.d.ts +4 -0
- package/dist/cjs/embeddings/base.js +7 -0
- package/dist/cjs/embeddings/base.js.map +1 -0
- package/dist/cjs/embeddings/index.d.ts +1 -0
- package/dist/cjs/embeddings/index.js +6 -0
- package/dist/cjs/embeddings/index.js.map +1 -0
- package/dist/cjs/embeddings/openai.d.ts +20 -0
- package/dist/cjs/embeddings/openai.js +86 -0
- package/dist/cjs/embeddings/openai.js.map +1 -0
- package/dist/cjs/embeddings/tests/openai.test.d.ts +1 -0
- package/dist/cjs/embeddings/tests/openai.test.js +17 -0
- package/dist/cjs/embeddings/tests/openai.test.js.map +1 -0
- package/dist/cjs/llms/base.d.ts +41 -0
- package/dist/cjs/llms/base.js +97 -92
- package/dist/cjs/llms/base.js.map +1 -1
- package/dist/cjs/llms/index.d.ts +19 -0
- package/dist/cjs/llms/load.d.ts +10 -2
- package/dist/cjs/llms/load.js +12 -4
- package/dist/cjs/llms/load.js.map +1 -1
- package/dist/cjs/llms/openai.d.ts +69 -7
- package/dist/cjs/llms/openai.js +96 -58
- package/dist/cjs/llms/openai.js.map +1 -1
- package/dist/cjs/llms/tests/openai.test.js +3 -12
- package/dist/cjs/llms/tests/openai.test.js.map +1 -1
- package/dist/cjs/memory/base.d.ts +7 -0
- package/dist/cjs/memory/base.js +7 -0
- package/dist/cjs/memory/base.js.map +1 -0
- package/dist/cjs/memory/buffer_memory.d.ts +15 -0
- package/dist/cjs/memory/buffer_memory.js +57 -0
- package/dist/cjs/memory/buffer_memory.js.map +1 -0
- package/dist/cjs/memory/index.d.ts +2 -0
- package/dist/cjs/memory/index.js +8 -0
- package/dist/cjs/memory/index.js.map +1 -0
- package/dist/cjs/memory/tests/buffer_memory.test.d.ts +1 -0
- package/dist/cjs/memory/tests/buffer_memory.test.js +17 -0
- package/dist/cjs/memory/tests/buffer_memory.test.js.map +1 -0
- package/dist/cjs/prompt/base.d.ts +39 -0
- package/dist/cjs/prompt/base.js +24 -25
- package/dist/cjs/prompt/base.js.map +1 -1
- package/dist/cjs/prompt/few_shot.d.ts +36 -1
- package/dist/cjs/prompt/few_shot.js +27 -33
- package/dist/cjs/prompt/few_shot.js.map +1 -1
- package/dist/cjs/prompt/index.d.ts +1 -0
- package/dist/cjs/prompt/index.js +3 -1
- package/dist/cjs/prompt/index.js.map +1 -1
- package/dist/cjs/prompt/load.d.ts +17 -0
- package/dist/cjs/prompt/load.js +21 -13
- package/dist/cjs/prompt/load.js.map +1 -1
- package/dist/cjs/prompt/parser.d.ts +30 -0
- package/dist/cjs/prompt/parser.js +21 -0
- package/dist/cjs/prompt/parser.js.map +1 -1
- package/dist/cjs/prompt/prompt.d.ts +48 -0
- package/dist/cjs/prompt/prompt.js +38 -18
- package/dist/cjs/prompt/prompt.js.map +1 -1
- package/dist/cjs/prompt/template.js.map +1 -1
- package/dist/cjs/prompt/tests/load.test.js +6 -15
- package/dist/cjs/prompt/tests/load.test.js.map +1 -1
- package/dist/cjs/text_splitter.d.ts +32 -0
- package/dist/cjs/text_splitter.js +165 -0
- package/dist/cjs/text_splitter.js.map +1 -0
- package/dist/cjs/text_splitter.test.d.ts +1 -0
- package/dist/cjs/text_splitter.test.js +87 -0
- package/dist/cjs/text_splitter.test.js.map +1 -0
- package/dist/cjs/util/hub.d.ts +2 -1
- package/dist/cjs/util/hub.js +5 -14
- package/dist/cjs/util/hub.js.map +1 -1
- package/dist/cjs/util/index.d.ts +1 -0
- package/dist/cjs/util/index.js +13 -25
- package/dist/cjs/util/index.js.map +1 -1
- package/dist/cjs/vectorstores/base.d.ts +18 -0
- package/dist/cjs/vectorstores/base.js +38 -0
- package/dist/cjs/vectorstores/base.js.map +1 -0
- package/dist/cjs/vectorstores/hnswlib.d.ts +19 -0
- package/dist/cjs/vectorstores/hnswlib.js +126 -0
- package/dist/cjs/vectorstores/hnswlib.js.map +1 -0
- package/dist/cjs/vectorstores/index.d.ts +1 -0
- package/dist/cjs/vectorstores/index.js +6 -0
- package/dist/cjs/vectorstores/index.js.map +1 -0
- package/dist/cjs/vectorstores/tests/hnswlib.test.d.ts +1 -0
- package/dist/cjs/vectorstores/tests/hnswlib.test.js +44 -0
- package/dist/cjs/vectorstores/tests/hnswlib.test.js.map +1 -0
- package/dist/esm/agents/agent.d.ts +54 -0
- package/dist/esm/agents/agent.js +81 -59
- package/dist/esm/agents/agent.js.map +1 -1
- package/dist/esm/agents/executor.d.ts +5 -0
- package/dist/esm/agents/executor.js +36 -42
- package/dist/esm/agents/executor.js.map +1 -1
- package/dist/esm/agents/helpers.js +4 -13
- package/dist/esm/agents/helpers.js.map +1 -1
- package/dist/esm/agents/index.d.ts +1 -0
- package/dist/esm/agents/index.js +2 -0
- package/dist/esm/agents/index.js.map +1 -1
- package/dist/esm/agents/initialize.d.ts +4 -0
- package/dist/esm/agents/initialize.js +17 -0
- package/dist/esm/agents/initialize.js.map +1 -0
- package/dist/esm/agents/load.js +6 -15
- package/dist/esm/agents/load.js.map +1 -1
- package/dist/esm/agents/mrkl/index.d.ts +17 -0
- package/dist/esm/agents/mrkl/index.js +21 -29
- package/dist/esm/agents/mrkl/index.js.map +1 -1
- package/dist/esm/agents/mrkl/prompt.js +0 -1
- package/dist/esm/agents/mrkl/prompt.js.map +1 -1
- package/dist/esm/agents/tests/agent.test.js +19 -15
- package/dist/esm/agents/tests/agent.test.js.map +1 -1
- package/dist/esm/agents/tests/calculator.test.d.ts +1 -0
- package/dist/esm/agents/tests/calculator.test.js +28 -0
- package/dist/esm/agents/tests/calculator.test.js.map +1 -0
- package/dist/esm/agents/tools/base.d.ts +6 -0
- package/dist/esm/agents/tools/base.js +11 -0
- package/dist/esm/agents/tools/base.js.map +1 -0
- package/dist/esm/agents/tools/calculator.d.ts +6 -0
- package/dist/esm/agents/tools/calculator.js +29 -0
- package/dist/esm/agents/tools/calculator.js.map +1 -0
- package/dist/esm/agents/tools/index.d.ts +2 -6
- package/dist/esm/agents/tools/index.js +2 -0
- package/dist/esm/agents/tools/index.js.map +1 -1
- package/dist/esm/agents/tools/serpapi.d.ts +18 -3
- package/dist/esm/agents/tools/serpapi.js +88 -45
- package/dist/esm/agents/tools/serpapi.js.map +1 -1
- package/dist/esm/chains/base.d.ts +34 -4
- package/dist/esm/chains/base.js +42 -4
- package/dist/esm/chains/base.js.map +1 -1
- package/dist/esm/chains/chat_vector_db_chain.d.ts +41 -0
- package/dist/esm/chains/chat_vector_db_chain.js +128 -0
- package/dist/esm/chains/chat_vector_db_chain.js.map +1 -0
- package/dist/esm/chains/combine_docs_chain.d.ts +35 -0
- package/dist/esm/chains/combine_docs_chain.js +71 -0
- package/dist/esm/chains/combine_docs_chain.js.map +1 -0
- package/dist/esm/chains/conversation.d.ts +12 -0
- package/dist/esm/chains/conversation.js +25 -0
- package/dist/esm/chains/conversation.js.map +1 -0
- package/dist/esm/chains/index.d.ts +5 -1
- package/dist/esm/chains/index.js +5 -1
- package/dist/esm/chains/index.js.map +1 -1
- package/dist/esm/chains/llm_chain.d.ts +35 -0
- package/dist/esm/chains/llm_chain.js +65 -34
- package/dist/esm/chains/llm_chain.js.map +1 -1
- package/dist/esm/chains/load.d.ts +20 -1
- package/dist/esm/chains/load.js +25 -17
- package/dist/esm/chains/load.js.map +1 -1
- package/dist/esm/chains/question_answering/load.d.ts +3 -0
- package/dist/esm/chains/question_answering/load.js +9 -0
- package/dist/esm/chains/question_answering/load.js.map +1 -0
- package/dist/esm/chains/question_answering/stuff_prompts.d.ts +2 -0
- package/dist/esm/chains/question_answering/stuff_prompts.js +7 -0
- package/dist/esm/chains/question_answering/stuff_prompts.js.map +1 -0
- package/dist/esm/chains/question_answering/tests/load.test.d.ts +1 -0
- package/dist/esm/chains/question_answering/tests/load.test.js +12 -0
- package/dist/esm/chains/question_answering/tests/load.test.js.map +1 -0
- package/dist/esm/chains/tests/chat_vector_db_qa_chain.test.d.ts +1 -0
- package/dist/esm/chains/tests/chat_vector_db_qa_chain.test.js +33 -0
- package/dist/esm/chains/tests/chat_vector_db_qa_chain.test.js.map +1 -0
- package/dist/esm/chains/tests/combine_docs_chain.test.d.ts +1 -0
- package/dist/esm/chains/tests/combine_docs_chain.test.js +26 -0
- package/dist/esm/chains/tests/combine_docs_chain.test.js.map +1 -0
- package/dist/esm/chains/tests/llm_chain.test.js +14 -17
- package/dist/esm/chains/tests/llm_chain.test.js.map +1 -1
- package/dist/esm/chains/tests/vector_db_qa_chain.test.d.ts +1 -0
- package/dist/esm/chains/tests/vector_db_qa_chain.test.js +44 -0
- package/dist/esm/chains/tests/vector_db_qa_chain.test.js.map +1 -0
- package/dist/esm/chains/vector_db_qa.d.ts +36 -0
- package/dist/esm/chains/vector_db_qa.js +81 -0
- package/dist/esm/chains/vector_db_qa.js.map +1 -0
- package/dist/esm/document.d.ts +13 -0
- package/dist/esm/document.js +24 -0
- package/dist/esm/document.js.map +1 -0
- package/dist/esm/embeddings/base.d.ts +4 -0
- package/dist/esm/embeddings/base.js +3 -0
- package/dist/esm/embeddings/base.js.map +1 -0
- package/dist/esm/embeddings/index.d.ts +1 -0
- package/dist/esm/embeddings/index.js +2 -0
- package/dist/esm/embeddings/index.js.map +1 -0
- package/dist/esm/embeddings/openai.d.ts +20 -0
- package/dist/esm/embeddings/openai.js +82 -0
- package/dist/esm/embeddings/openai.js.map +1 -0
- package/dist/esm/embeddings/tests/openai.test.d.ts +1 -0
- package/dist/esm/embeddings/tests/openai.test.js +15 -0
- package/dist/esm/embeddings/tests/openai.test.js.map +1 -0
- package/dist/esm/llms/base.d.ts +41 -0
- package/dist/esm/llms/base.js +97 -92
- package/dist/esm/llms/base.js.map +1 -1
- package/dist/esm/llms/index.d.ts +19 -0
- package/dist/esm/llms/load.d.ts +10 -2
- package/dist/esm/llms/load.js +10 -2
- package/dist/esm/llms/load.js.map +1 -1
- package/dist/esm/llms/openai.d.ts +69 -7
- package/dist/esm/llms/openai.js +96 -58
- package/dist/esm/llms/openai.js.map +1 -1
- package/dist/esm/llms/tests/openai.test.js +3 -12
- package/dist/esm/llms/tests/openai.test.js.map +1 -1
- package/dist/esm/memory/base.d.ts +7 -0
- package/dist/esm/memory/base.js +3 -0
- package/dist/esm/memory/base.js.map +1 -0
- package/dist/esm/memory/buffer_memory.d.ts +15 -0
- package/dist/esm/memory/buffer_memory.js +53 -0
- package/dist/esm/memory/buffer_memory.js.map +1 -0
- package/dist/esm/memory/index.d.ts +2 -0
- package/dist/esm/memory/index.js +3 -0
- package/dist/esm/memory/index.js.map +1 -0
- package/dist/esm/memory/tests/buffer_memory.test.d.ts +1 -0
- package/dist/esm/memory/tests/buffer_memory.test.js +15 -0
- package/dist/esm/memory/tests/buffer_memory.test.js.map +1 -0
- package/dist/esm/prompt/base.d.ts +39 -0
- package/dist/esm/prompt/base.js +24 -25
- package/dist/esm/prompt/base.js.map +1 -1
- package/dist/esm/prompt/few_shot.d.ts +36 -1
- package/dist/esm/prompt/few_shot.js +27 -33
- package/dist/esm/prompt/few_shot.js.map +1 -1
- package/dist/esm/prompt/index.d.ts +1 -0
- package/dist/esm/prompt/index.js +1 -0
- package/dist/esm/prompt/index.js.map +1 -1
- package/dist/esm/prompt/load.d.ts +17 -0
- package/dist/esm/prompt/load.js +21 -13
- package/dist/esm/prompt/load.js.map +1 -1
- package/dist/esm/prompt/parser.d.ts +30 -0
- package/dist/esm/prompt/parser.js +21 -0
- package/dist/esm/prompt/parser.js.map +1 -1
- package/dist/esm/prompt/prompt.d.ts +48 -0
- package/dist/esm/prompt/prompt.js +38 -18
- package/dist/esm/prompt/prompt.js.map +1 -1
- package/dist/esm/prompt/template.js.map +1 -1
- package/dist/esm/prompt/tests/load.test.js +6 -15
- package/dist/esm/prompt/tests/load.test.js.map +1 -1
- package/dist/esm/text_splitter.d.ts +32 -0
- package/dist/esm/text_splitter.js +160 -0
- package/dist/esm/text_splitter.js.map +1 -0
- package/dist/esm/text_splitter.test.d.ts +1 -0
- package/dist/esm/text_splitter.test.js +85 -0
- package/dist/esm/text_splitter.test.js.map +1 -0
- package/dist/esm/util/hub.d.ts +2 -1
- package/dist/esm/util/hub.js +5 -14
- package/dist/esm/util/hub.js.map +1 -1
- package/dist/esm/util/index.d.ts +1 -0
- package/dist/esm/util/index.js +11 -24
- package/dist/esm/util/index.js.map +1 -1
- package/dist/esm/vectorstores/base.d.ts +18 -0
- package/dist/esm/vectorstores/base.js +33 -0
- package/dist/esm/vectorstores/base.js.map +1 -0
- package/dist/esm/vectorstores/hnswlib.d.ts +19 -0
- package/dist/esm/vectorstores/hnswlib.js +119 -0
- package/dist/esm/vectorstores/hnswlib.js.map +1 -0
- package/dist/esm/vectorstores/index.d.ts +1 -0
- package/dist/esm/vectorstores/index.js +2 -0
- package/dist/esm/vectorstores/index.js.map +1 -0
- package/dist/esm/vectorstores/tests/hnswlib.test.d.ts +1 -0
- package/dist/esm/vectorstores/tests/hnswlib.test.js +39 -0
- package/dist/esm/vectorstores/tests/hnswlib.test.js.map +1 -0
- package/package.json +65 -38
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { test, expect } from "@jest/globals";
|
|
2
|
+
import { Document } from './document';
|
|
3
|
+
import { CharacterTextSplitter, RecursiveCharacterTextSplitter } from './text_splitter';
|
|
4
|
+
test('Test splitting by character count.', () => {
|
|
5
|
+
const text = 'foo bar baz 123';
|
|
6
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 7, chunkOverlap: 3 });
|
|
7
|
+
const output = splitter.splitText(text);
|
|
8
|
+
const expectedOutput = ['foo bar', 'bar baz', 'baz 123'];
|
|
9
|
+
expect(output).toEqual(expectedOutput);
|
|
10
|
+
});
|
|
11
|
+
test('Test splitting by character count doesn\'t create empty documents.', () => {
|
|
12
|
+
const text = 'foo bar';
|
|
13
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 2, chunkOverlap: 0 });
|
|
14
|
+
const output = splitter.splitText(text);
|
|
15
|
+
const expectedOutput = ['foo', 'bar'];
|
|
16
|
+
expect(output).toEqual(expectedOutput);
|
|
17
|
+
});
|
|
18
|
+
test('Test splitting by character count on long words.', () => {
|
|
19
|
+
const text = 'foo bar baz a a';
|
|
20
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 3, chunkOverlap: 1 });
|
|
21
|
+
const output = splitter.splitText(text);
|
|
22
|
+
const expectedOutput = ['foo', 'bar', 'baz', 'a a'];
|
|
23
|
+
expect(output).toEqual(expectedOutput);
|
|
24
|
+
});
|
|
25
|
+
test('Test splitting by character count when shorter words are first.', () => {
|
|
26
|
+
const text = 'a a foo bar baz';
|
|
27
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 3, chunkOverlap: 1 });
|
|
28
|
+
const output = splitter.splitText(text);
|
|
29
|
+
const expectedOutput = ['a a', 'foo', 'bar', 'baz'];
|
|
30
|
+
expect(output).toEqual(expectedOutput);
|
|
31
|
+
});
|
|
32
|
+
test('Test splitting by characters when splits not found easily.', () => {
|
|
33
|
+
const text = 'foo bar baz 123';
|
|
34
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 1, chunkOverlap: 0 });
|
|
35
|
+
const output = splitter.splitText(text);
|
|
36
|
+
const expectedOutput = ['foo', 'bar', 'baz', '123'];
|
|
37
|
+
expect(output).toEqual(expectedOutput);
|
|
38
|
+
});
|
|
39
|
+
test('Test invalid arguments.', () => {
|
|
40
|
+
expect(() => {
|
|
41
|
+
new CharacterTextSplitter({ chunkSize: 2, chunkOverlap: 4 });
|
|
42
|
+
}).toThrow();
|
|
43
|
+
});
|
|
44
|
+
test('Test create documents method.', () => {
|
|
45
|
+
const texts = ['foo bar', 'baz'];
|
|
46
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 3, chunkOverlap: 0 });
|
|
47
|
+
const docs = splitter.createDocuments(texts);
|
|
48
|
+
const expectedDocs = [new Document({ pageContent: 'foo' }), new Document({ pageContent: 'bar' }), new Document({ pageContent: 'baz' }),];
|
|
49
|
+
expect(docs).toEqual(expectedDocs);
|
|
50
|
+
});
|
|
51
|
+
test('Test create documents with metadata method.', () => {
|
|
52
|
+
const texts = ['foo bar', 'baz'];
|
|
53
|
+
const splitter = new CharacterTextSplitter({ separator: ' ', chunkSize: 3, chunkOverlap: 0 });
|
|
54
|
+
const docs = splitter.createDocuments(texts, [{ source: '1' }, { source: '2' }]);
|
|
55
|
+
const expectedDocs = [new Document({ pageContent: 'foo', metadata: { source: '1' } }), new Document({ pageContent: 'bar', metadata: { source: '1' } }), new Document({ pageContent: 'baz', metadata: { source: '2' } }),];
|
|
56
|
+
expect(docs).toEqual(expectedDocs);
|
|
57
|
+
});
|
|
58
|
+
test('Test iterative text splitter.', () => {
|
|
59
|
+
const text = `Hi.\n\nI'm Harrison.\n\nHow? Are? You?\nOkay then f f f f.
|
|
60
|
+
This is a weird text to write, but gotta test the splittingggg some how.\n\n
|
|
61
|
+
Bye!\n\n-H.`;
|
|
62
|
+
const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 10, chunkOverlap: 1 });
|
|
63
|
+
const output = splitter.splitText(text);
|
|
64
|
+
const expectedOutput = [
|
|
65
|
+
"Hi.",
|
|
66
|
+
"I'm",
|
|
67
|
+
"Harrison.",
|
|
68
|
+
"How? Are?",
|
|
69
|
+
"You?",
|
|
70
|
+
"Okay then f",
|
|
71
|
+
"f f f f.",
|
|
72
|
+
"This is a",
|
|
73
|
+
"a weird",
|
|
74
|
+
"text to",
|
|
75
|
+
"write, but",
|
|
76
|
+
"gotta test",
|
|
77
|
+
"the",
|
|
78
|
+
"splitting",
|
|
79
|
+
"gggg",
|
|
80
|
+
"some how.",
|
|
81
|
+
"Bye!\n\n-H.",
|
|
82
|
+
];
|
|
83
|
+
expect(output).toEqual(expectedOutput);
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=text_splitter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text_splitter.test.js","sourceRoot":"","sources":["../../text_splitter.test.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/util/hub.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type LoadValues = Record<string, any>;
|
|
2
|
+
export declare const loadFromHub: <T>(uri: string, loader: (a: string, values: LoadValues) => T, validPrefix: string, validSuffixes: Set<string>, values?: LoadValues) => Promise<T | undefined>;
|
package/dist/esm/util/hub.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
var _a, _b;
|
|
11
2
|
import path from "path";
|
|
12
3
|
import os from "os";
|
|
@@ -15,7 +6,7 @@ import { fetchWithTimeout } from "./index";
|
|
|
15
6
|
const HUB_PATH_REGEX = /lc(@[^:]+)?:\/\/(.*)/;
|
|
16
7
|
const DEFAULT_REF = (_a = process.env.LANGCHAIN_HUB_DEFAULT_REF) !== null && _a !== void 0 ? _a : "master";
|
|
17
8
|
const URL_BASE = (_b = process.env.LANGCHAIN_HUB_URL_BASE) !== null && _b !== void 0 ? _b : "https://raw.githubusercontent.com/hwchase17/langchain-hub/";
|
|
18
|
-
export const loadFromHub = (uri, loader, validPrefix, validSuffixes
|
|
9
|
+
export const loadFromHub = async (uri, loader, validPrefix, validSuffixes, values = {}) => {
|
|
19
10
|
const match = uri.match(HUB_PATH_REGEX);
|
|
20
11
|
if (!match) {
|
|
21
12
|
return undefined;
|
|
@@ -30,14 +21,14 @@ export const loadFromHub = (uri, loader, validPrefix, validSuffixes) => __awaite
|
|
|
30
21
|
throw new Error("Unsupported file type.");
|
|
31
22
|
}
|
|
32
23
|
const url = [URL_BASE, ref, remotePath].join("/");
|
|
33
|
-
const res =
|
|
24
|
+
const res = await fetchWithTimeout(url, { timeout: 5000 });
|
|
34
25
|
if (res.status !== 200) {
|
|
35
26
|
throw new Error(`Could not find file at ${url}`);
|
|
36
27
|
}
|
|
37
|
-
const text =
|
|
28
|
+
const text = await res.text();
|
|
38
29
|
const tmpdir = fs.mkdtempSync(path.join(os.tmpdir(), "langchain"));
|
|
39
30
|
const file = path.join(tmpdir, path.basename(remotePath));
|
|
40
31
|
fs.writeFileSync(file, text);
|
|
41
|
-
return loader(file);
|
|
42
|
-
}
|
|
32
|
+
return loader(file, values);
|
|
33
|
+
};
|
|
43
34
|
//# sourceMappingURL=hub.js.map
|
package/dist/esm/util/hub.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../../../util/hub.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../../../util/hub.ts"],"names":[],"mappings":";AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAC9C,MAAM,WAAW,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,mCAAI,QAAQ,CAAC;AACtE,MAAM,QAAQ,GACZ,MAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,mCAClC,4DAA4D,CAAC;AAI/D,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,GAAW,EACX,MAA4C,EAC5C,WAAmB,EACnB,aAA0B,EAC1B,SAAqB,EAAE,EACC,EAAE;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;QAC5B,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACzD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC3C;IAED,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;KAClD;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9B,CAAC,CAAC"}
|
package/dist/esm/util/index.d.ts
CHANGED
|
@@ -10,3 +10,4 @@ export type FromPath<key extends string, T> = {
|
|
|
10
10
|
export declare const resolveTemplateFromFile: <K extends string>(fieldName: K, config: FromPath<K, string>) => string;
|
|
11
11
|
export declare const resolveConfigFromFile: <K extends string, T>(fieldName: K, config: FromPath<K, T>) => T;
|
|
12
12
|
export declare const parseFileConfig: (file: string, supportedTypes?: string[]) => any;
|
|
13
|
+
export declare const chunkArray: <T>(arr: T[], chunkSize: number) => T[][];
|
package/dist/esm/util/index.js
CHANGED
|
@@ -1,36 +1,16 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
11
|
-
var t = {};
|
|
12
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
13
|
-
t[p] = s[p];
|
|
14
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
15
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
16
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
17
|
-
t[p[i]] = s[p[i]];
|
|
18
|
-
}
|
|
19
|
-
return t;
|
|
20
|
-
};
|
|
21
1
|
import path from "path";
|
|
22
2
|
import fetch from "node-fetch";
|
|
23
3
|
import fs from "fs";
|
|
24
4
|
import * as yaml from "yaml";
|
|
25
|
-
export const fetchWithTimeout = (url, init) =>
|
|
26
|
-
const { timeout
|
|
5
|
+
export const fetchWithTimeout = async (url, init) => {
|
|
6
|
+
const { timeout, ...rest } = init;
|
|
27
7
|
const controller = new AbortController();
|
|
28
8
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
29
9
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
-
const res =
|
|
10
|
+
const res = await fetch(url, { ...rest, signal: controller.signal });
|
|
31
11
|
clearTimeout(timeoutId);
|
|
32
12
|
return res;
|
|
33
|
-
}
|
|
13
|
+
};
|
|
34
14
|
const loadFileContents = (contents, format) => {
|
|
35
15
|
switch (format) {
|
|
36
16
|
case ".json":
|
|
@@ -71,4 +51,11 @@ export const parseFileConfig = (file, supportedTypes) => {
|
|
|
71
51
|
const contents = fs.readFileSync(file).toString();
|
|
72
52
|
return loadFileContents(contents, suffix);
|
|
73
53
|
};
|
|
54
|
+
export const chunkArray = (arr, chunkSize) => arr.reduce((chunks, elem, index) => {
|
|
55
|
+
const chunkIndex = Math.floor(index / chunkSize);
|
|
56
|
+
const chunk = chunks[chunkIndex] || [];
|
|
57
|
+
// eslint-disable-next-line no-param-reassign
|
|
58
|
+
chunks[chunkIndex] = chunk.concat([elem]);
|
|
59
|
+
return chunks;
|
|
60
|
+
}, []);
|
|
74
61
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../util/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../util/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Embeddings } from "embeddings/base";
|
|
2
|
+
import { Document } from "../document";
|
|
3
|
+
export interface DocStore {
|
|
4
|
+
[key: number]: object;
|
|
5
|
+
}
|
|
6
|
+
export declare abstract class VectorStore {
|
|
7
|
+
embeddings: Embeddings;
|
|
8
|
+
docstore: DocStore;
|
|
9
|
+
abstract addVectors(vectors: number[][], documents: Document[]): Promise<void>;
|
|
10
|
+
abstract similaritySearchVectorWithScore(query: number[], k: number): Promise<[Document, number][]>;
|
|
11
|
+
addDocuments(documents: Document[]): Promise<void>;
|
|
12
|
+
similaritySearch(query: string, k?: number): Promise<Document[]>;
|
|
13
|
+
similaritySearchWithScore(query: string, k?: number): Promise<[object, number][]>;
|
|
14
|
+
}
|
|
15
|
+
export declare abstract class SaveableVectorStore extends VectorStore {
|
|
16
|
+
abstract save(directory: string): Promise<void>;
|
|
17
|
+
static load(_directory: string, _embeddings: Embeddings): Promise<SaveableVectorStore>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export class VectorStore {
|
|
2
|
+
constructor() {
|
|
3
|
+
Object.defineProperty(this, "embeddings", {
|
|
4
|
+
enumerable: true,
|
|
5
|
+
configurable: true,
|
|
6
|
+
writable: true,
|
|
7
|
+
value: void 0
|
|
8
|
+
});
|
|
9
|
+
Object.defineProperty(this, "docstore", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: void 0
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async addDocuments(documents) {
|
|
17
|
+
const texts = documents.map(({ pageContent }) => (pageContent));
|
|
18
|
+
this.addVectors(await this.embeddings.embedDocuments(texts), documents);
|
|
19
|
+
}
|
|
20
|
+
async similaritySearch(query, k = 4) {
|
|
21
|
+
const results = await this.similaritySearchVectorWithScore(await this.embeddings.embedQuery(query), k);
|
|
22
|
+
return results.map((result) => result[0]);
|
|
23
|
+
}
|
|
24
|
+
async similaritySearchWithScore(query, k = 4) {
|
|
25
|
+
return this.similaritySearchVectorWithScore(await this.embeddings.embedQuery(query), k);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class SaveableVectorStore extends VectorStore {
|
|
29
|
+
static load(_directory, _embeddings) {
|
|
30
|
+
throw new Error("Not implemented");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../vectorstores/base.ts"],"names":[],"mappings":"AAQA,MAAM,OAAgB,WAAW;IAAjC;QACE;;;;;WAAuB;QAEvB;;;;;WAAmB;IAmCrB,CAAC;IA1BC,KAAK,CAAC,YAAY,CAAC,SAAqB;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAE,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,CACb,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,EAC3C,SAAS,CACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,CAAC,GAAG,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,+BAA+B,CACxD,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EACvC,CAAC,CACF,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,KAAa,EACb,CAAC,GAAG,CAAC;QAEL,OAAO,IAAI,CAAC,+BAA+B,CACzC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EACvC,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAgB,mBAAoB,SAAQ,WAAW;IAG3D,MAAM,CAAC,IAAI,CACT,UAAkB,EAClB,WAAuB;QAEvB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HierarchicalNSW as HierarchicalNSWT, SpaceName } from "hnswlib-node";
|
|
2
|
+
import { Embeddings } from "../embeddings/base";
|
|
3
|
+
import { DocStore, SaveableVectorStore } from "./base";
|
|
4
|
+
import { Document } from "../document";
|
|
5
|
+
export interface HNSWLibArgs {
|
|
6
|
+
space: SpaceName;
|
|
7
|
+
numDimensions?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class HNSWLib extends SaveableVectorStore {
|
|
10
|
+
index?: HierarchicalNSWT;
|
|
11
|
+
args: HNSWLibArgs;
|
|
12
|
+
constructor(args: HNSWLibArgs, embeddings: Embeddings, docstore: DocStore, index?: HierarchicalNSWT);
|
|
13
|
+
addVectors(vectors: number[][], documents: Document[]): Promise<void>;
|
|
14
|
+
similaritySearchVectorWithScore(query: number[], k: number): Promise<[Document, number][]>;
|
|
15
|
+
save(directory: string): Promise<void>;
|
|
16
|
+
static load(directory: string, embeddings: Embeddings): Promise<HNSWLib>;
|
|
17
|
+
static fromTexts(texts: string[], metadatas: object[], embeddings: Embeddings): Promise<HNSWLib>;
|
|
18
|
+
static fromDocuments(docs: Document[], embeddings: Embeddings): Promise<HNSWLib>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import fs from "fs/promises";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { SaveableVectorStore } from "./base";
|
|
4
|
+
import { Document } from "../document";
|
|
5
|
+
let HierarchicalNSW = null;
|
|
6
|
+
try {
|
|
7
|
+
// eslint-disable-next-line global-require
|
|
8
|
+
({ HierarchicalNSW } = require("hnswlib-node"));
|
|
9
|
+
}
|
|
10
|
+
catch (_a) {
|
|
11
|
+
// ignore error
|
|
12
|
+
}
|
|
13
|
+
export class HNSWLib extends SaveableVectorStore {
|
|
14
|
+
constructor(args, embeddings, docstore, index) {
|
|
15
|
+
super();
|
|
16
|
+
Object.defineProperty(this, "index", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "args", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
this.index = index;
|
|
29
|
+
this.args = args;
|
|
30
|
+
this.embeddings = embeddings;
|
|
31
|
+
this.docstore = docstore;
|
|
32
|
+
}
|
|
33
|
+
async addVectors(vectors, documents) {
|
|
34
|
+
if (vectors.length === 0) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!this.index) {
|
|
38
|
+
if (this.args.numDimensions === undefined) {
|
|
39
|
+
this.args.numDimensions = vectors[0].length;
|
|
40
|
+
}
|
|
41
|
+
if (HierarchicalNSW === null) {
|
|
42
|
+
throw new Error("Please install hnswlib-node as a dependency with, e.g. `npm install -S hnswlib-node`");
|
|
43
|
+
}
|
|
44
|
+
this.index = new HierarchicalNSW(this.args.space, this.args.numDimensions);
|
|
45
|
+
this.index.initIndex(vectors.length);
|
|
46
|
+
}
|
|
47
|
+
// TODO here we could optionally normalise the vectors to unit length
|
|
48
|
+
// so that dot product is equivalent to cosine similarity, like this
|
|
49
|
+
// https://github.com/nmslib/hnswlib/issues/384#issuecomment-1155737730
|
|
50
|
+
// While we only support OpenAI embeddings this isn't necessary
|
|
51
|
+
if (vectors.length !== documents.length) {
|
|
52
|
+
throw new Error(`Vectors and metadatas must have the same length`);
|
|
53
|
+
}
|
|
54
|
+
if (vectors[0].length !== this.args.numDimensions) {
|
|
55
|
+
throw new Error(`Vectors must have the same length as the number of dimensions (${this.args.numDimensions})`);
|
|
56
|
+
}
|
|
57
|
+
const capacity = this.index.getMaxElements();
|
|
58
|
+
const needed = this.index.getCurrentCount() + vectors.length;
|
|
59
|
+
if (needed > capacity) {
|
|
60
|
+
this.index.resizeIndex(needed - capacity);
|
|
61
|
+
}
|
|
62
|
+
for (let i = 0; i < vectors.length; i += 1) {
|
|
63
|
+
this.index.addPoint(vectors[i], i);
|
|
64
|
+
this.docstore[i] = documents[i];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async similaritySearchVectorWithScore(query, k) {
|
|
68
|
+
if (!this.index) {
|
|
69
|
+
throw new Error("Vector store not initialised yet. Try calling `addTexts` first.");
|
|
70
|
+
}
|
|
71
|
+
const result = this.index.searchKnn(query, k);
|
|
72
|
+
return result.neighbors.map((docIndex, resultIndex) => [this.docstore[docIndex], result.distances[resultIndex]]);
|
|
73
|
+
}
|
|
74
|
+
async save(directory) {
|
|
75
|
+
if (!this.index) {
|
|
76
|
+
throw new Error("Vector store not initialised yet. Try calling `addTexts` first.");
|
|
77
|
+
}
|
|
78
|
+
await fs.mkdir(directory, { recursive: true });
|
|
79
|
+
await Promise.all([
|
|
80
|
+
this.index.writeIndex(path.join(directory, "hnswlib.index")),
|
|
81
|
+
await fs.writeFile(path.join(directory, "args.json"), JSON.stringify(this.args)),
|
|
82
|
+
await fs.writeFile(path.join(directory, "docstore.json"), JSON.stringify(this.docstore)),
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
85
|
+
static async load(directory, embeddings) {
|
|
86
|
+
if (HierarchicalNSW === null) {
|
|
87
|
+
throw new Error("Please install hnswlib-node as a dependency with, e.g. `npm install -S hnswlib-node`");
|
|
88
|
+
}
|
|
89
|
+
const args = JSON.parse(await fs.readFile(path.join(directory, "args.json"), "utf8"));
|
|
90
|
+
const index = new HierarchicalNSW(args.space, args.numDimensions);
|
|
91
|
+
const [docstore] = await Promise.all([
|
|
92
|
+
fs
|
|
93
|
+
.readFile(path.join(directory, "docstore.json"), "utf8")
|
|
94
|
+
.then(JSON.parse),
|
|
95
|
+
index.readIndex(path.join(directory, "hnswlib.index")),
|
|
96
|
+
]);
|
|
97
|
+
return new HNSWLib(args, embeddings, docstore, index);
|
|
98
|
+
}
|
|
99
|
+
static async fromTexts(texts, metadatas, embeddings) {
|
|
100
|
+
const docs = [];
|
|
101
|
+
for (let i = 0; i < texts.length; i++) {
|
|
102
|
+
const newDoc = new Document({ pageContent: texts[i], metadata: metadatas[i] });
|
|
103
|
+
docs.push(newDoc);
|
|
104
|
+
}
|
|
105
|
+
return HNSWLib.fromDocuments(docs, embeddings);
|
|
106
|
+
}
|
|
107
|
+
static async fromDocuments(docs, embeddings) {
|
|
108
|
+
if (HierarchicalNSW === null) {
|
|
109
|
+
throw new Error("Please install hnswlib-node as a dependency with, e.g. `npm install -S hnswlib-node`");
|
|
110
|
+
}
|
|
111
|
+
const args = {
|
|
112
|
+
space: "ip", // dot product
|
|
113
|
+
};
|
|
114
|
+
const instance = new this(args, embeddings, {});
|
|
115
|
+
await instance.addDocuments(docs);
|
|
116
|
+
return instance;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=hnswlib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnswlib.js","sourceRoot":"","sources":["../../../vectorstores/hnswlib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { HNSWLib } from "./hnswlib";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../vectorstores/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { test, expect } from "@jest/globals";
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
5
|
+
import { HNSWLib } from "../hnswlib";
|
|
6
|
+
import { OpenAIEmbeddings } from "../../embeddings";
|
|
7
|
+
test("Test HNSWLib.fromTexts", async () => {
|
|
8
|
+
var _a;
|
|
9
|
+
const vectorStore = await HNSWLib.fromTexts(["Hello world", "Bye bye", "hello nice world"], [{ id: 2 }, { id: 1 }, { id: 3 }], new OpenAIEmbeddings());
|
|
10
|
+
expect((_a = vectorStore.index) === null || _a === void 0 ? void 0 : _a.getCurrentCount()).toBe(3);
|
|
11
|
+
const resultOne = await vectorStore.similaritySearch("hello world", 1);
|
|
12
|
+
const resultOneMetadatas = resultOne.map(({ metadata }) => (metadata));
|
|
13
|
+
expect(resultOneMetadatas).toEqual([{ id: 2 }]);
|
|
14
|
+
const resultTwo = await vectorStore.similaritySearch("hello world", 3);
|
|
15
|
+
const resultTwoMetadatas = resultTwo.map(({ metadata }) => (metadata));
|
|
16
|
+
expect(resultTwoMetadatas).toEqual([{ id: 2 }, { id: 3 }, { id: 1 }]);
|
|
17
|
+
});
|
|
18
|
+
test("Test HNSWLib.load and HNSWLib.save", async () => {
|
|
19
|
+
var _a;
|
|
20
|
+
const vectorStore = await HNSWLib.fromTexts(["Hello world", "Bye bye", "hello nice world"], [{ id: 2 }, { id: 1 }, { id: 3 }], new OpenAIEmbeddings());
|
|
21
|
+
expect((_a = vectorStore.index) === null || _a === void 0 ? void 0 : _a.getCurrentCount()).toBe(3);
|
|
22
|
+
const resultOne = await vectorStore.similaritySearch("hello world", 1);
|
|
23
|
+
const resultOneMetadatas = resultOne.map(({ metadata }) => (metadata));
|
|
24
|
+
expect(resultOneMetadatas).toEqual([{ id: 2 }]);
|
|
25
|
+
const resultTwo = await vectorStore.similaritySearch("hello world", 3);
|
|
26
|
+
const resultTwoMetadatas = resultTwo.map(({ metadata }) => (metadata));
|
|
27
|
+
expect(resultTwoMetadatas).toEqual([{ id: 2 }, { id: 3 }, { id: 1 }]);
|
|
28
|
+
const tempDirectory = await fs.mkdtemp(path.join(os.tmpdir(), "lcjs-"));
|
|
29
|
+
console.log(tempDirectory);
|
|
30
|
+
await vectorStore.save(tempDirectory);
|
|
31
|
+
const loadedVectorStore = await HNSWLib.load(tempDirectory, new OpenAIEmbeddings());
|
|
32
|
+
const resultThree = await loadedVectorStore.similaritySearch("hello world", 1);
|
|
33
|
+
const resultThreeMetadatas = resultThree.map(({ metadata }) => (metadata));
|
|
34
|
+
expect(resultThreeMetadatas).toEqual([{ id: 2 }]);
|
|
35
|
+
const resultFour = await loadedVectorStore.similaritySearch("hello world", 3);
|
|
36
|
+
const resultFourMetadatas = resultFour.map(({ metadata }) => (metadata));
|
|
37
|
+
expect(resultFourMetadatas).toEqual([{ id: 2 }, { id: 3 }, { id: 1 }]);
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=hnswlib.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnswlib.test.js","sourceRoot":"","sources":["../../../../vectorstores/tests/hnswlib.test.ts"],"names":[],"mappings":"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"}
|