@langchain/core 1.1.24 → 1.1.25
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/CHANGELOG.md +21 -0
- package/dist/_virtual/_rolldown/runtime.cjs +43 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/agents.cjs +3 -1
- package/dist/agents.d.cts.map +1 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +3 -1
- package/dist/caches/index.cjs +4 -4
- package/dist/caches/index.cjs.map +1 -1
- package/dist/caches/index.d.cts.map +1 -1
- package/dist/caches/index.d.ts.map +1 -1
- package/dist/caches/index.js +3 -4
- package/dist/caches/index.js.map +1 -1
- package/dist/callbacks/base.cjs +9 -16
- package/dist/callbacks/base.cjs.map +1 -1
- package/dist/callbacks/base.d.cts +1 -0
- package/dist/callbacks/base.d.cts.map +1 -1
- package/dist/callbacks/base.d.ts +1 -0
- package/dist/callbacks/base.d.ts.map +1 -1
- package/dist/callbacks/base.js +6 -15
- package/dist/callbacks/base.js.map +1 -1
- package/dist/callbacks/dispatch/index.cjs +6 -6
- package/dist/callbacks/dispatch/index.cjs.map +1 -1
- package/dist/callbacks/dispatch/index.d.cts +0 -1
- package/dist/callbacks/dispatch/index.d.cts.map +1 -1
- package/dist/callbacks/dispatch/index.d.ts +0 -1
- package/dist/callbacks/dispatch/index.d.ts.map +1 -1
- package/dist/callbacks/dispatch/index.js +4 -5
- package/dist/callbacks/dispatch/index.js.map +1 -1
- package/dist/callbacks/dispatch/web.cjs +1 -0
- package/dist/callbacks/dispatch/web.cjs.map +1 -1
- package/dist/callbacks/dispatch/web.d.cts +0 -1
- package/dist/callbacks/dispatch/web.d.cts.map +1 -1
- package/dist/callbacks/dispatch/web.d.ts +0 -1
- package/dist/callbacks/dispatch/web.d.ts.map +1 -1
- package/dist/callbacks/dispatch/web.js.map +1 -1
- package/dist/callbacks/manager.cjs +30 -50
- package/dist/callbacks/manager.cjs.map +1 -1
- package/dist/callbacks/manager.d.cts.map +1 -1
- package/dist/callbacks/manager.d.ts.map +1 -1
- package/dist/callbacks/manager.js +28 -49
- package/dist/callbacks/manager.js.map +1 -1
- package/dist/callbacks/promises.cjs +3 -3
- package/dist/callbacks/promises.js +2 -3
- package/dist/chat_history.cjs +4 -4
- package/dist/chat_history.cjs.map +1 -1
- package/dist/chat_history.d.cts +0 -1
- package/dist/chat_history.d.cts.map +1 -1
- package/dist/chat_history.d.ts +0 -1
- package/dist/chat_history.d.ts.map +1 -1
- package/dist/chat_history.js +3 -4
- package/dist/chat_history.js.map +1 -1
- package/dist/context.cjs +10 -2
- package/dist/context.cjs.map +1 -1
- package/dist/context.d.cts.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +7 -0
- package/dist/context.js.map +1 -1
- package/dist/document_loaders/base.cjs +3 -3
- package/dist/document_loaders/base.cjs.map +1 -1
- package/dist/document_loaders/base.d.cts +0 -1
- package/dist/document_loaders/base.d.cts.map +1 -1
- package/dist/document_loaders/base.d.ts +0 -1
- package/dist/document_loaders/base.d.ts.map +1 -1
- package/dist/document_loaders/base.js +2 -3
- package/dist/document_loaders/base.js.map +1 -1
- package/dist/document_loaders/langsmith.cjs +4 -4
- package/dist/document_loaders/langsmith.cjs.map +1 -1
- package/dist/document_loaders/langsmith.d.cts.map +1 -1
- package/dist/document_loaders/langsmith.d.ts.map +1 -1
- package/dist/document_loaders/langsmith.js +2 -3
- package/dist/document_loaders/langsmith.js.map +1 -1
- package/dist/documents/document.cjs.map +1 -1
- package/dist/documents/document.d.cts.map +1 -1
- package/dist/documents/document.d.ts.map +1 -1
- package/dist/documents/document.js.map +1 -1
- package/dist/documents/index.cjs +3 -3
- package/dist/documents/index.js +2 -3
- package/dist/documents/transformers.cjs.map +1 -1
- package/dist/documents/transformers.d.cts +0 -1
- package/dist/documents/transformers.d.cts.map +1 -1
- package/dist/documents/transformers.d.ts +0 -1
- package/dist/documents/transformers.d.ts.map +1 -1
- package/dist/documents/transformers.js.map +1 -1
- package/dist/embeddings.cjs +3 -3
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts +0 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts +0 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +2 -3
- package/dist/embeddings.js.map +1 -1
- package/dist/errors/index.cjs +141 -15
- package/dist/errors/index.cjs.map +1 -1
- package/dist/errors/index.d.cts +134 -11
- package/dist/errors/index.d.cts.map +1 -1
- package/dist/errors/index.d.ts +134 -11
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +138 -16
- package/dist/errors/index.js.map +1 -1
- package/dist/example_selectors/base.cjs.map +1 -1
- package/dist/example_selectors/base.d.cts +0 -1
- package/dist/example_selectors/base.d.cts.map +1 -1
- package/dist/example_selectors/base.d.ts +0 -1
- package/dist/example_selectors/base.d.ts.map +1 -1
- package/dist/example_selectors/base.js.map +1 -1
- package/dist/example_selectors/conditional.cjs +1 -2
- package/dist/example_selectors/conditional.cjs.map +1 -1
- package/dist/example_selectors/conditional.d.cts.map +1 -1
- package/dist/example_selectors/conditional.d.ts.map +1 -1
- package/dist/example_selectors/conditional.js +1 -2
- package/dist/example_selectors/conditional.js.map +1 -1
- package/dist/example_selectors/index.cjs +3 -3
- package/dist/example_selectors/index.js +2 -3
- package/dist/example_selectors/length_based.cjs +1 -2
- package/dist/example_selectors/length_based.cjs.map +1 -1
- package/dist/example_selectors/length_based.d.cts +0 -1
- package/dist/example_selectors/length_based.d.cts.map +1 -1
- package/dist/example_selectors/length_based.d.ts +0 -1
- package/dist/example_selectors/length_based.d.ts.map +1 -1
- package/dist/example_selectors/length_based.js +1 -2
- package/dist/example_selectors/length_based.js.map +1 -1
- package/dist/example_selectors/semantic_similarity.cjs +4 -8
- package/dist/example_selectors/semantic_similarity.cjs.map +1 -1
- package/dist/example_selectors/semantic_similarity.d.cts +0 -1
- package/dist/example_selectors/semantic_similarity.d.cts.map +1 -1
- package/dist/example_selectors/semantic_similarity.d.ts +0 -1
- package/dist/example_selectors/semantic_similarity.d.ts.map +1 -1
- package/dist/example_selectors/semantic_similarity.js +4 -8
- package/dist/example_selectors/semantic_similarity.js.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.js +3 -1
- package/dist/indexing/base.cjs +7 -11
- package/dist/indexing/base.cjs.map +1 -1
- package/dist/indexing/base.d.cts.map +1 -1
- package/dist/indexing/base.d.ts.map +1 -1
- package/dist/indexing/base.js +5 -9
- package/dist/indexing/base.js.map +1 -1
- package/dist/indexing/index.cjs +3 -3
- package/dist/indexing/index.js +2 -3
- package/dist/indexing/record_manager.cjs.map +1 -1
- package/dist/indexing/record_manager.d.cts.map +1 -1
- package/dist/indexing/record_manager.d.ts.map +1 -1
- package/dist/indexing/record_manager.js.map +1 -1
- package/dist/language_models/base.cjs +10 -14
- package/dist/language_models/base.cjs.map +1 -1
- package/dist/language_models/base.d.cts +2 -4
- package/dist/language_models/base.d.cts.map +1 -1
- package/dist/language_models/base.d.ts +2 -4
- package/dist/language_models/base.d.ts.map +1 -1
- package/dist/language_models/base.js +9 -14
- package/dist/language_models/base.js.map +1 -1
- package/dist/language_models/chat_models.cjs +19 -25
- package/dist/language_models/chat_models.cjs.map +1 -1
- package/dist/language_models/chat_models.d.cts.map +1 -1
- package/dist/language_models/chat_models.d.ts.map +1 -1
- package/dist/language_models/chat_models.js +18 -25
- package/dist/language_models/chat_models.js.map +1 -1
- package/dist/language_models/llms.cjs +12 -15
- package/dist/language_models/llms.cjs.map +1 -1
- package/dist/language_models/llms.d.cts.map +1 -1
- package/dist/language_models/llms.d.ts.map +1 -1
- package/dist/language_models/llms.js +11 -15
- package/dist/language_models/llms.js.map +1 -1
- package/dist/language_models/profile.cjs +3 -1
- package/dist/language_models/profile.d.cts.map +1 -1
- package/dist/language_models/profile.d.ts.map +1 -1
- package/dist/language_models/profile.js +3 -1
- package/dist/language_models/utils.cjs.map +1 -1
- package/dist/language_models/utils.js.map +1 -1
- package/dist/load/import_constants.cjs.map +1 -1
- package/dist/load/import_constants.js.map +1 -1
- package/dist/load/import_map.cjs +13 -14
- package/dist/load/import_map.js +13 -14
- package/dist/load/import_type.d.cts.map +1 -1
- package/dist/load/import_type.d.ts.map +1 -1
- package/dist/load/index.cjs +74 -13
- package/dist/load/index.cjs.map +1 -1
- package/dist/load/index.d.cts +13 -4
- package/dist/load/index.d.cts.map +1 -1
- package/dist/load/index.d.ts +13 -4
- package/dist/load/index.d.ts.map +1 -1
- package/dist/load/index.js +68 -8
- package/dist/load/index.js.map +1 -1
- package/dist/load/map_keys.cjs +5 -3
- package/dist/load/map_keys.cjs.map +1 -1
- package/dist/load/map_keys.d.cts.map +1 -1
- package/dist/load/map_keys.d.ts.map +1 -1
- package/dist/load/map_keys.js.map +1 -1
- package/dist/load/serializable.cjs +9 -19
- package/dist/load/serializable.cjs.map +1 -1
- package/dist/load/serializable.d.cts.map +1 -1
- package/dist/load/serializable.d.ts.map +1 -1
- package/dist/load/serializable.js +8 -19
- package/dist/load/serializable.js.map +1 -1
- package/dist/load/validation.cjs.map +1 -1
- package/dist/load/validation.js.map +1 -1
- package/dist/memory.cjs +3 -3
- package/dist/memory.cjs.map +1 -1
- package/dist/memory.d.cts.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +2 -3
- package/dist/memory.js.map +1 -1
- package/dist/messages/ai.cjs.map +1 -1
- package/dist/messages/ai.d.cts.map +1 -1
- package/dist/messages/ai.d.ts.map +1 -1
- package/dist/messages/ai.js.map +1 -1
- package/dist/messages/base.cjs +10 -12
- package/dist/messages/base.cjs.map +1 -1
- package/dist/messages/base.d.cts +6 -3
- package/dist/messages/base.d.cts.map +1 -1
- package/dist/messages/base.d.ts +6 -3
- package/dist/messages/base.d.ts.map +1 -1
- package/dist/messages/base.js +10 -12
- package/dist/messages/base.js.map +1 -1
- package/dist/messages/block_translators/anthropic.cjs +30 -35
- package/dist/messages/block_translators/anthropic.cjs.map +1 -1
- package/dist/messages/block_translators/anthropic.js +30 -35
- package/dist/messages/block_translators/anthropic.js.map +1 -1
- package/dist/messages/block_translators/bedrock_converse.cjs +38 -46
- package/dist/messages/block_translators/bedrock_converse.cjs.map +1 -1
- package/dist/messages/block_translators/bedrock_converse.js +38 -46
- package/dist/messages/block_translators/bedrock_converse.js.map +1 -1
- package/dist/messages/block_translators/data.cjs.map +1 -1
- package/dist/messages/block_translators/data.js.map +1 -1
- package/dist/messages/block_translators/deepseek.cjs.map +1 -1
- package/dist/messages/block_translators/deepseek.js.map +1 -1
- package/dist/messages/block_translators/google.cjs +6 -9
- package/dist/messages/block_translators/google.cjs.map +1 -1
- package/dist/messages/block_translators/google.js +6 -9
- package/dist/messages/block_translators/google.js.map +1 -1
- package/dist/messages/block_translators/google_genai.cjs.map +1 -1
- package/dist/messages/block_translators/google_genai.js.map +1 -1
- package/dist/messages/block_translators/google_vertexai.cjs +1 -3
- package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
- package/dist/messages/block_translators/google_vertexai.js +1 -3
- package/dist/messages/block_translators/google_vertexai.js.map +1 -1
- package/dist/messages/block_translators/groq.cjs.map +1 -1
- package/dist/messages/block_translators/groq.js.map +1 -1
- package/dist/messages/block_translators/index.cjs.map +1 -1
- package/dist/messages/block_translators/index.js.map +1 -1
- package/dist/messages/block_translators/ollama.cjs.map +1 -1
- package/dist/messages/block_translators/ollama.js.map +1 -1
- package/dist/messages/block_translators/openai.cjs +6 -10
- package/dist/messages/block_translators/openai.cjs.map +1 -1
- package/dist/messages/block_translators/openai.js +6 -10
- package/dist/messages/block_translators/openai.js.map +1 -1
- package/dist/messages/block_translators/utils.cjs +1 -1
- package/dist/messages/block_translators/utils.cjs.map +1 -1
- package/dist/messages/block_translators/utils.js +1 -1
- package/dist/messages/block_translators/utils.js.map +1 -1
- package/dist/messages/block_translators/xai.cjs.map +1 -1
- package/dist/messages/block_translators/xai.js.map +1 -1
- package/dist/messages/chat.cjs.map +1 -1
- package/dist/messages/chat.d.cts.map +1 -1
- package/dist/messages/chat.d.ts.map +1 -1
- package/dist/messages/chat.js.map +1 -1
- package/dist/messages/content/base.d.cts.map +1 -1
- package/dist/messages/content/base.d.ts.map +1 -1
- package/dist/messages/content/data.cjs +1 -3
- package/dist/messages/content/data.cjs.map +1 -1
- package/dist/messages/content/data.d.cts +0 -1
- package/dist/messages/content/data.d.cts.map +1 -1
- package/dist/messages/content/data.d.ts +0 -1
- package/dist/messages/content/data.d.ts.map +1 -1
- package/dist/messages/content/data.js +1 -3
- package/dist/messages/content/data.js.map +1 -1
- package/dist/messages/content/index.cjs +2 -2
- package/dist/messages/content/index.cjs.map +1 -1
- package/dist/messages/content/index.d.cts.map +1 -1
- package/dist/messages/content/index.d.ts.map +1 -1
- package/dist/messages/content/index.js +6 -6
- package/dist/messages/content/index.js.map +1 -1
- package/dist/messages/content/multimodal.cjs.map +1 -1
- package/dist/messages/content/multimodal.d.cts +4 -8
- package/dist/messages/content/multimodal.d.cts.map +1 -1
- package/dist/messages/content/multimodal.d.ts +4 -8
- package/dist/messages/content/multimodal.d.ts.map +1 -1
- package/dist/messages/content/multimodal.js.map +1 -1
- package/dist/messages/content/tools.cjs.map +1 -1
- package/dist/messages/content/tools.d.cts.map +1 -1
- package/dist/messages/content/tools.d.ts.map +1 -1
- package/dist/messages/content/tools.js.map +1 -1
- package/dist/messages/format.cjs.map +1 -1
- package/dist/messages/format.d.cts.map +1 -1
- package/dist/messages/format.d.ts.map +1 -1
- package/dist/messages/format.js.map +1 -1
- package/dist/messages/function.cjs.map +1 -1
- package/dist/messages/function.d.cts.map +1 -1
- package/dist/messages/function.d.ts.map +1 -1
- package/dist/messages/function.js.map +1 -1
- package/dist/messages/human.cjs.map +1 -1
- package/dist/messages/human.d.cts.map +1 -1
- package/dist/messages/human.d.ts.map +1 -1
- package/dist/messages/human.js.map +1 -1
- package/dist/messages/index.cjs +4 -4
- package/dist/messages/index.js +3 -4
- package/dist/messages/message.cjs.map +1 -1
- package/dist/messages/message.d.cts +13 -24
- package/dist/messages/message.d.cts.map +1 -1
- package/dist/messages/message.d.ts +13 -24
- package/dist/messages/message.d.ts.map +1 -1
- package/dist/messages/message.js.map +1 -1
- package/dist/messages/metadata.cjs +1 -2
- package/dist/messages/metadata.cjs.map +1 -1
- package/dist/messages/metadata.d.cts.map +1 -1
- package/dist/messages/metadata.d.ts.map +1 -1
- package/dist/messages/metadata.js +1 -2
- package/dist/messages/metadata.js.map +1 -1
- package/dist/messages/modifier.cjs.map +1 -1
- package/dist/messages/modifier.d.cts.map +1 -1
- package/dist/messages/modifier.d.ts.map +1 -1
- package/dist/messages/modifier.js.map +1 -1
- package/dist/messages/system.cjs.map +1 -1
- package/dist/messages/system.d.cts.map +1 -1
- package/dist/messages/system.d.ts.map +1 -1
- package/dist/messages/system.js.map +1 -1
- package/dist/messages/tool.cjs +3 -3
- package/dist/messages/tool.cjs.map +1 -1
- package/dist/messages/tool.d.cts.map +1 -1
- package/dist/messages/tool.d.ts.map +1 -1
- package/dist/messages/tool.js +2 -3
- package/dist/messages/tool.js.map +1 -1
- package/dist/messages/transformers.cjs +8 -14
- package/dist/messages/transformers.cjs.map +1 -1
- package/dist/messages/transformers.d.cts.map +1 -1
- package/dist/messages/transformers.d.ts.map +1 -1
- package/dist/messages/transformers.js +8 -14
- package/dist/messages/transformers.js.map +1 -1
- package/dist/messages/utils.cjs +11 -14
- package/dist/messages/utils.cjs.map +1 -1
- package/dist/messages/utils.d.cts +7 -7
- package/dist/messages/utils.d.cts.map +1 -1
- package/dist/messages/utils.d.ts +7 -7
- package/dist/messages/utils.d.ts.map +1 -1
- package/dist/messages/utils.js +11 -14
- package/dist/messages/utils.js.map +1 -1
- package/dist/output_parsers/base.cjs +5 -5
- package/dist/output_parsers/base.cjs.map +1 -1
- package/dist/output_parsers/base.d.cts.map +1 -1
- package/dist/output_parsers/base.d.ts.map +1 -1
- package/dist/output_parsers/base.js +5 -5
- package/dist/output_parsers/base.js.map +1 -1
- package/dist/output_parsers/bytes.cjs.map +1 -1
- package/dist/output_parsers/bytes.d.cts +0 -1
- package/dist/output_parsers/bytes.d.cts.map +1 -1
- package/dist/output_parsers/bytes.d.ts +0 -1
- package/dist/output_parsers/bytes.d.ts.map +1 -1
- package/dist/output_parsers/bytes.js.map +1 -1
- package/dist/output_parsers/index.cjs +3 -3
- package/dist/output_parsers/index.js +2 -3
- package/dist/output_parsers/json.cjs +1 -1
- package/dist/output_parsers/json.cjs.map +1 -1
- package/dist/output_parsers/json.d.cts +0 -1
- package/dist/output_parsers/json.d.cts.map +1 -1
- package/dist/output_parsers/json.d.ts.map +1 -1
- package/dist/output_parsers/json.js +1 -1
- package/dist/output_parsers/json.js.map +1 -1
- package/dist/output_parsers/list.cjs.map +1 -1
- package/dist/output_parsers/list.d.cts +0 -1
- package/dist/output_parsers/list.d.cts.map +1 -1
- package/dist/output_parsers/list.d.ts +0 -1
- package/dist/output_parsers/list.d.ts.map +1 -1
- package/dist/output_parsers/list.js.map +1 -1
- package/dist/output_parsers/openai_functions/index.cjs +3 -3
- package/dist/output_parsers/openai_functions/index.js +2 -3
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs +6 -9
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts +0 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts.map +1 -1
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.js +6 -9
- package/dist/output_parsers/openai_functions/json_output_functions_parsers.js.map +1 -1
- package/dist/output_parsers/openai_tools/index.cjs +3 -3
- package/dist/output_parsers/openai_tools/index.js +2 -3
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs +14 -21
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.cts +1 -2
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.cts.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.ts +1 -2
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.ts.map +1 -1
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.js +14 -21
- package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
- package/dist/output_parsers/string.cjs +3 -0
- package/dist/output_parsers/string.cjs.map +1 -1
- package/dist/output_parsers/string.d.cts +0 -1
- package/dist/output_parsers/string.d.cts.map +1 -1
- package/dist/output_parsers/string.d.ts +0 -1
- package/dist/output_parsers/string.d.ts.map +1 -1
- package/dist/output_parsers/string.js +3 -0
- package/dist/output_parsers/string.js.map +1 -1
- package/dist/output_parsers/structured.cjs +10 -13
- package/dist/output_parsers/structured.cjs.map +1 -1
- package/dist/output_parsers/structured.d.cts.map +1 -1
- package/dist/output_parsers/structured.d.ts.map +1 -1
- package/dist/output_parsers/structured.js +8 -11
- package/dist/output_parsers/structured.js.map +1 -1
- package/dist/output_parsers/transform.cjs +3 -3
- package/dist/output_parsers/transform.cjs.map +1 -1
- package/dist/output_parsers/transform.d.cts +0 -1
- package/dist/output_parsers/transform.d.cts.map +1 -1
- package/dist/output_parsers/transform.d.ts +0 -1
- package/dist/output_parsers/transform.d.ts.map +1 -1
- package/dist/output_parsers/transform.js.map +1 -1
- package/dist/output_parsers/xml.cjs +4 -7
- package/dist/output_parsers/xml.cjs.map +1 -1
- package/dist/output_parsers/xml.d.cts.map +1 -1
- package/dist/output_parsers/xml.d.ts.map +1 -1
- package/dist/output_parsers/xml.js +4 -7
- package/dist/output_parsers/xml.js.map +1 -1
- package/dist/outputs.cjs +3 -3
- package/dist/outputs.cjs.map +1 -1
- package/dist/outputs.d.cts.map +1 -1
- package/dist/outputs.d.ts.map +1 -1
- package/dist/outputs.js +2 -3
- package/dist/outputs.js.map +1 -1
- package/dist/prompt_values.cjs +3 -3
- package/dist/prompt_values.cjs.map +1 -1
- package/dist/prompt_values.d.cts +1 -3
- package/dist/prompt_values.d.cts.map +1 -1
- package/dist/prompt_values.d.ts +1 -3
- package/dist/prompt_values.d.ts.map +1 -1
- package/dist/prompt_values.js +2 -3
- package/dist/prompt_values.js.map +1 -1
- package/dist/prompts/base.cjs +2 -3
- package/dist/prompts/base.cjs.map +1 -1
- package/dist/prompts/base.d.cts.map +1 -1
- package/dist/prompts/base.d.ts.map +1 -1
- package/dist/prompts/base.js +2 -3
- package/dist/prompts/base.js.map +1 -1
- package/dist/prompts/chat.cjs +22 -37
- package/dist/prompts/chat.cjs.map +1 -1
- package/dist/prompts/chat.d.cts +1 -0
- package/dist/prompts/chat.d.cts.map +1 -1
- package/dist/prompts/chat.d.ts +1 -0
- package/dist/prompts/chat.d.ts.map +1 -1
- package/dist/prompts/chat.js +22 -37
- package/dist/prompts/chat.js.map +1 -1
- package/dist/prompts/dict.cjs.map +1 -1
- package/dist/prompts/dict.d.cts.map +1 -1
- package/dist/prompts/dict.d.ts.map +1 -1
- package/dist/prompts/dict.js.map +1 -1
- package/dist/prompts/few_shot.cjs +9 -14
- package/dist/prompts/few_shot.cjs.map +1 -1
- package/dist/prompts/few_shot.d.cts.map +1 -1
- package/dist/prompts/few_shot.d.ts.map +1 -1
- package/dist/prompts/few_shot.js +9 -14
- package/dist/prompts/few_shot.js.map +1 -1
- package/dist/prompts/image.cjs +3 -5
- package/dist/prompts/image.cjs.map +1 -1
- package/dist/prompts/image.d.cts +0 -1
- package/dist/prompts/image.d.cts.map +1 -1
- package/dist/prompts/image.d.ts +0 -1
- package/dist/prompts/image.d.ts.map +1 -1
- package/dist/prompts/image.js +3 -5
- package/dist/prompts/image.js.map +1 -1
- package/dist/prompts/index.cjs +3 -3
- package/dist/prompts/index.js +2 -3
- package/dist/prompts/pipeline.cjs.map +1 -1
- package/dist/prompts/pipeline.d.cts +0 -1
- package/dist/prompts/pipeline.d.cts.map +1 -1
- package/dist/prompts/pipeline.d.ts +0 -1
- package/dist/prompts/pipeline.d.ts.map +1 -1
- package/dist/prompts/pipeline.js.map +1 -1
- package/dist/prompts/prompt.cjs +9 -12
- package/dist/prompts/prompt.cjs.map +1 -1
- package/dist/prompts/prompt.d.cts +0 -1
- package/dist/prompts/prompt.d.cts.map +1 -1
- package/dist/prompts/prompt.d.ts.map +1 -1
- package/dist/prompts/prompt.js +9 -12
- package/dist/prompts/prompt.js.map +1 -1
- package/dist/prompts/serde.d.cts +0 -1
- package/dist/prompts/serde.d.cts.map +1 -1
- package/dist/prompts/serde.d.ts +0 -1
- package/dist/prompts/serde.d.ts.map +1 -1
- package/dist/prompts/string.cjs +1 -2
- package/dist/prompts/string.cjs.map +1 -1
- package/dist/prompts/string.d.cts +0 -1
- package/dist/prompts/string.d.cts.map +1 -1
- package/dist/prompts/string.d.ts +0 -1
- package/dist/prompts/string.d.ts.map +1 -1
- package/dist/prompts/string.js +1 -2
- package/dist/prompts/string.js.map +1 -1
- package/dist/prompts/structured.cjs.map +1 -1
- package/dist/prompts/structured.d.cts +0 -1
- package/dist/prompts/structured.d.cts.map +1 -1
- package/dist/prompts/structured.d.ts.map +1 -1
- package/dist/prompts/structured.js.map +1 -1
- package/dist/prompts/template.cjs +7 -11
- package/dist/prompts/template.cjs.map +1 -1
- package/dist/prompts/template.d.cts +0 -1
- package/dist/prompts/template.d.cts.map +1 -1
- package/dist/prompts/template.d.ts.map +1 -1
- package/dist/prompts/template.js +4 -9
- package/dist/prompts/template.js.map +1 -1
- package/dist/retrievers/document_compressors/index.cjs +3 -3
- package/dist/retrievers/document_compressors/index.cjs.map +1 -1
- package/dist/retrievers/document_compressors/index.d.cts +0 -1
- package/dist/retrievers/document_compressors/index.d.cts.map +1 -1
- package/dist/retrievers/document_compressors/index.d.ts +0 -1
- package/dist/retrievers/document_compressors/index.d.ts.map +1 -1
- package/dist/retrievers/document_compressors/index.js +2 -3
- package/dist/retrievers/document_compressors/index.js.map +1 -1
- package/dist/retrievers/index.cjs +4 -5
- package/dist/retrievers/index.cjs.map +1 -1
- package/dist/retrievers/index.d.cts +0 -1
- package/dist/retrievers/index.d.cts.map +1 -1
- package/dist/retrievers/index.d.ts +0 -1
- package/dist/retrievers/index.d.ts.map +1 -1
- package/dist/retrievers/index.js +3 -5
- package/dist/retrievers/index.js.map +1 -1
- package/dist/runnables/base.cjs +44 -67
- package/dist/runnables/base.cjs.map +1 -1
- package/dist/runnables/base.d.cts +1 -2
- package/dist/runnables/base.d.cts.map +1 -1
- package/dist/runnables/base.d.ts +1 -2
- package/dist/runnables/base.d.ts.map +1 -1
- package/dist/runnables/base.js +40 -63
- package/dist/runnables/base.js.map +1 -1
- package/dist/runnables/branch.cjs +4 -8
- package/dist/runnables/branch.cjs.map +1 -1
- package/dist/runnables/branch.d.cts +0 -1
- package/dist/runnables/branch.d.cts.map +1 -1
- package/dist/runnables/branch.d.ts +0 -1
- package/dist/runnables/branch.d.ts.map +1 -1
- package/dist/runnables/branch.js +4 -8
- package/dist/runnables/branch.js.map +1 -1
- package/dist/runnables/config.cjs +1 -1
- package/dist/runnables/config.cjs.map +1 -1
- package/dist/runnables/config.d.cts.map +1 -1
- package/dist/runnables/config.d.ts.map +1 -1
- package/dist/runnables/config.js +1 -1
- package/dist/runnables/config.js.map +1 -1
- package/dist/runnables/graph.cjs +6 -8
- package/dist/runnables/graph.cjs.map +1 -1
- package/dist/runnables/graph.d.cts.map +1 -1
- package/dist/runnables/graph.d.ts.map +1 -1
- package/dist/runnables/graph.js +4 -7
- package/dist/runnables/graph.js.map +1 -1
- package/dist/runnables/graph_mermaid.cjs +6 -9
- package/dist/runnables/graph_mermaid.cjs.map +1 -1
- package/dist/runnables/graph_mermaid.js +6 -9
- package/dist/runnables/graph_mermaid.js.map +1 -1
- package/dist/runnables/history.cjs +4 -6
- package/dist/runnables/history.cjs.map +1 -1
- package/dist/runnables/history.d.cts.map +1 -1
- package/dist/runnables/history.d.ts.map +1 -1
- package/dist/runnables/history.js +4 -6
- package/dist/runnables/history.js.map +1 -1
- package/dist/runnables/index.cjs +3 -3
- package/dist/runnables/index.js +2 -3
- package/dist/runnables/iter.cjs.map +1 -1
- package/dist/runnables/iter.js.map +1 -1
- package/dist/runnables/passthrough.cjs +1 -1
- package/dist/runnables/passthrough.cjs.map +1 -1
- package/dist/runnables/passthrough.d.cts.map +1 -1
- package/dist/runnables/passthrough.d.ts.map +1 -1
- package/dist/runnables/passthrough.js +1 -1
- package/dist/runnables/passthrough.js.map +1 -1
- package/dist/runnables/router.cjs +2 -3
- package/dist/runnables/router.cjs.map +1 -1
- package/dist/runnables/router.d.cts.map +1 -1
- package/dist/runnables/router.d.ts.map +1 -1
- package/dist/runnables/router.js +2 -3
- package/dist/runnables/router.js.map +1 -1
- package/dist/runnables/types.d.cts +1 -2
- package/dist/runnables/types.d.cts.map +1 -1
- package/dist/runnables/types.d.ts +1 -2
- package/dist/runnables/types.d.ts.map +1 -1
- package/dist/runnables/utils.cjs +1 -2
- package/dist/runnables/utils.cjs.map +1 -1
- package/dist/runnables/utils.js +1 -2
- package/dist/runnables/utils.js.map +1 -1
- package/dist/runnables/wrappers.cjs.map +1 -1
- package/dist/runnables/wrappers.js.map +1 -1
- package/dist/singletons/async_local_storage/context.cjs +4 -5
- package/dist/singletons/async_local_storage/context.cjs.map +1 -1
- package/dist/singletons/async_local_storage/context.d.cts +0 -1
- package/dist/singletons/async_local_storage/context.d.cts.map +1 -1
- package/dist/singletons/async_local_storage/context.d.ts +0 -1
- package/dist/singletons/async_local_storage/context.d.ts.map +1 -1
- package/dist/singletons/async_local_storage/context.js +2 -3
- package/dist/singletons/async_local_storage/context.js.map +1 -1
- package/dist/singletons/async_local_storage/globals.cjs.map +1 -1
- package/dist/singletons/async_local_storage/globals.d.cts.map +1 -1
- package/dist/singletons/async_local_storage/globals.d.ts.map +1 -1
- package/dist/singletons/async_local_storage/globals.js.map +1 -1
- package/dist/singletons/async_local_storage/index.cjs +5 -10
- package/dist/singletons/async_local_storage/index.cjs.map +1 -1
- package/dist/singletons/async_local_storage/index.d.cts.map +1 -1
- package/dist/singletons/async_local_storage/index.d.ts.map +1 -1
- package/dist/singletons/async_local_storage/index.js +3 -8
- package/dist/singletons/async_local_storage/index.js.map +1 -1
- package/dist/singletons/callbacks.cjs +4 -4
- package/dist/singletons/callbacks.cjs.map +1 -1
- package/dist/singletons/callbacks.d.cts +0 -1
- package/dist/singletons/callbacks.d.cts.map +1 -1
- package/dist/singletons/callbacks.d.ts +0 -1
- package/dist/singletons/callbacks.d.ts.map +1 -1
- package/dist/singletons/callbacks.js +1 -2
- package/dist/singletons/callbacks.js.map +1 -1
- package/dist/singletons/index.cjs +3 -3
- package/dist/singletons/index.js +2 -3
- package/dist/singletons/tracer.cjs +3 -6
- package/dist/singletons/tracer.cjs.map +1 -1
- package/dist/singletons/tracer.js +1 -4
- package/dist/singletons/tracer.js.map +1 -1
- package/dist/stores.cjs +3 -3
- package/dist/stores.cjs.map +1 -1
- package/dist/stores.d.cts +0 -1
- package/dist/stores.d.cts.map +1 -1
- package/dist/stores.d.ts +0 -1
- package/dist/stores.d.ts.map +1 -1
- package/dist/stores.js +2 -3
- package/dist/stores.js.map +1 -1
- package/dist/structured_query/base.cjs +3 -3
- package/dist/structured_query/base.cjs.map +1 -1
- package/dist/structured_query/base.d.cts +0 -1
- package/dist/structured_query/base.d.cts.map +1 -1
- package/dist/structured_query/base.d.ts +0 -1
- package/dist/structured_query/base.d.ts.map +1 -1
- package/dist/structured_query/base.js +3 -3
- package/dist/structured_query/base.js.map +1 -1
- package/dist/structured_query/functional.cjs +3 -3
- package/dist/structured_query/functional.cjs.map +1 -1
- package/dist/structured_query/functional.d.cts +0 -1
- package/dist/structured_query/functional.d.cts.map +1 -1
- package/dist/structured_query/functional.d.ts +0 -1
- package/dist/structured_query/functional.d.ts.map +1 -1
- package/dist/structured_query/functional.js +3 -3
- package/dist/structured_query/functional.js.map +1 -1
- package/dist/structured_query/index.cjs +3 -3
- package/dist/structured_query/index.js +2 -3
- package/dist/structured_query/ir.cjs.map +1 -1
- package/dist/structured_query/ir.d.cts +0 -1
- package/dist/structured_query/ir.d.cts.map +1 -1
- package/dist/structured_query/ir.d.ts +0 -1
- package/dist/structured_query/ir.d.ts.map +1 -1
- package/dist/structured_query/ir.js.map +1 -1
- package/dist/structured_query/utils.cjs.map +1 -1
- package/dist/structured_query/utils.d.cts.map +1 -1
- package/dist/structured_query/utils.d.ts.map +1 -1
- package/dist/structured_query/utils.js.map +1 -1
- package/dist/tools/index.cjs +11 -12
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.d.cts +2 -1
- package/dist/tools/index.d.cts.map +1 -1
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.cjs.map +1 -1
- package/dist/tools/types.d.cts +1 -0
- package/dist/tools/types.d.cts.map +1 -1
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/utils.cjs.map +1 -1
- package/dist/tools/utils.d.cts +0 -1
- package/dist/tools/utils.d.cts.map +1 -1
- package/dist/tools/utils.d.ts +0 -1
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js.map +1 -1
- package/dist/tracers/base.cjs +7 -7
- package/dist/tracers/base.cjs.map +1 -1
- package/dist/tracers/base.d.cts +6 -12
- package/dist/tracers/base.d.cts.map +1 -1
- package/dist/tracers/base.d.ts +6 -12
- package/dist/tracers/base.d.ts.map +1 -1
- package/dist/tracers/base.js +5 -6
- package/dist/tracers/base.js.map +1 -1
- package/dist/tracers/console.cjs +9 -9
- package/dist/tracers/console.cjs.map +1 -1
- package/dist/tracers/console.d.cts +0 -1
- package/dist/tracers/console.d.cts.map +1 -1
- package/dist/tracers/console.d.ts +0 -1
- package/dist/tracers/console.d.ts.map +1 -1
- package/dist/tracers/console.js +6 -8
- package/dist/tracers/console.js.map +1 -1
- package/dist/tracers/event_stream.cjs +2 -4
- package/dist/tracers/event_stream.cjs.map +1 -1
- package/dist/tracers/event_stream.d.cts +2 -5
- package/dist/tracers/event_stream.d.cts.map +1 -1
- package/dist/tracers/event_stream.d.ts +2 -5
- package/dist/tracers/event_stream.d.ts.map +1 -1
- package/dist/tracers/event_stream.js +2 -4
- package/dist/tracers/event_stream.js.map +1 -1
- package/dist/tracers/log_stream.cjs +5 -5
- package/dist/tracers/log_stream.cjs.map +1 -1
- package/dist/tracers/log_stream.d.cts +14 -31
- package/dist/tracers/log_stream.d.cts.map +1 -1
- package/dist/tracers/log_stream.d.ts +14 -31
- package/dist/tracers/log_stream.d.ts.map +1 -1
- package/dist/tracers/log_stream.js +4 -5
- package/dist/tracers/log_stream.js.map +1 -1
- package/dist/tracers/root_listener.cjs.map +1 -1
- package/dist/tracers/root_listener.js.map +1 -1
- package/dist/tracers/run_collector.cjs +3 -3
- package/dist/tracers/run_collector.cjs.map +1 -1
- package/dist/tracers/run_collector.d.cts +0 -1
- package/dist/tracers/run_collector.d.cts.map +1 -1
- package/dist/tracers/run_collector.d.ts +0 -1
- package/dist/tracers/run_collector.d.ts.map +1 -1
- package/dist/tracers/run_collector.js +2 -3
- package/dist/tracers/run_collector.js.map +1 -1
- package/dist/tracers/tracer_langchain.cjs +8 -11
- package/dist/tracers/tracer_langchain.cjs.map +1 -1
- package/dist/tracers/tracer_langchain.d.cts +8 -8
- package/dist/tracers/tracer_langchain.d.cts.map +1 -1
- package/dist/tracers/tracer_langchain.d.ts +8 -8
- package/dist/tracers/tracer_langchain.d.ts.map +1 -1
- package/dist/tracers/tracer_langchain.js +5 -9
- package/dist/tracers/tracer_langchain.js.map +1 -1
- package/dist/types/_internal.d.cts.map +1 -1
- package/dist/types/_internal.d.ts.map +1 -1
- package/dist/types/stream.cjs +3 -1
- package/dist/types/stream.js +3 -1
- package/dist/types/type-utils.d.cts.map +1 -1
- package/dist/types/type-utils.d.ts.map +1 -1
- package/dist/utils/async_caller.cjs +8 -9
- package/dist/utils/async_caller.cjs.map +1 -1
- package/dist/utils/async_caller.d.cts.map +1 -1
- package/dist/utils/async_caller.d.ts.map +1 -1
- package/dist/utils/async_caller.js +5 -8
- package/dist/utils/async_caller.js.map +1 -1
- package/dist/utils/callbacks.cjs +2 -3
- package/dist/utils/callbacks.cjs.map +1 -1
- package/dist/utils/callbacks.js +2 -3
- package/dist/utils/callbacks.js.map +1 -1
- package/dist/utils/chunk_array.cjs +4 -5
- package/dist/utils/chunk_array.cjs.map +1 -1
- package/dist/utils/chunk_array.d.cts.map +1 -1
- package/dist/utils/chunk_array.d.ts.map +1 -1
- package/dist/utils/chunk_array.js +3 -5
- package/dist/utils/chunk_array.js.map +1 -1
- package/dist/utils/context.cjs +4 -5
- package/dist/utils/context.cjs.map +1 -1
- package/dist/utils/context.d.cts.map +1 -1
- package/dist/utils/context.d.ts.map +1 -1
- package/dist/utils/context.js +3 -5
- package/dist/utils/context.js.map +1 -1
- package/dist/utils/env.cjs +9 -12
- package/dist/utils/env.cjs.map +1 -1
- package/dist/utils/env.d.cts.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +8 -12
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/event_source_parse.cjs +9 -9
- package/dist/utils/event_source_parse.cjs.map +1 -1
- package/dist/utils/event_source_parse.d.cts.map +1 -1
- package/dist/utils/event_source_parse.d.ts.map +1 -1
- package/dist/utils/event_source_parse.js +8 -9
- package/dist/utils/event_source_parse.js.map +1 -1
- package/dist/utils/fast-json-patch/index.cjs +3 -0
- package/dist/utils/fast-json-patch/index.cjs.map +1 -1
- package/dist/utils/fast-json-patch/index.js +4 -0
- package/dist/utils/fast-json-patch/index.js.map +1 -1
- package/dist/utils/fast-json-patch/src/core.cjs +6 -10
- package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
- package/dist/utils/fast-json-patch/src/core.d.cts +0 -1
- package/dist/utils/fast-json-patch/src/core.d.cts.map +1 -1
- package/dist/utils/fast-json-patch/src/core.d.ts +0 -1
- package/dist/utils/fast-json-patch/src/core.d.ts.map +1 -1
- package/dist/utils/fast-json-patch/src/core.js +6 -10
- package/dist/utils/fast-json-patch/src/core.js.map +1 -1
- package/dist/utils/fast-json-patch/src/duplex.cjs +5 -3
- package/dist/utils/fast-json-patch/src/duplex.cjs.map +1 -1
- package/dist/utils/fast-json-patch/src/duplex.d.cts +0 -1
- package/dist/utils/fast-json-patch/src/duplex.d.cts.map +1 -1
- package/dist/utils/fast-json-patch/src/duplex.d.ts +0 -1
- package/dist/utils/fast-json-patch/src/duplex.d.ts.map +1 -1
- package/dist/utils/fast-json-patch/src/duplex.js +5 -3
- package/dist/utils/fast-json-patch/src/duplex.js.map +1 -1
- package/dist/utils/fast-json-patch/src/helpers.cjs +4 -4
- package/dist/utils/fast-json-patch/src/helpers.cjs.map +1 -1
- package/dist/utils/fast-json-patch/src/helpers.js +4 -4
- package/dist/utils/fast-json-patch/src/helpers.js.map +1 -1
- package/dist/utils/format.cjs +3 -1
- package/dist/utils/format.d.cts.map +1 -1
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +3 -1
- package/dist/utils/function_calling.cjs +3 -3
- package/dist/utils/function_calling.cjs.map +1 -1
- package/dist/utils/function_calling.d.cts +0 -1
- package/dist/utils/function_calling.d.cts.map +1 -1
- package/dist/utils/function_calling.d.ts +0 -1
- package/dist/utils/function_calling.d.ts.map +1 -1
- package/dist/utils/function_calling.js +2 -3
- package/dist/utils/function_calling.js.map +1 -1
- package/dist/utils/hash.cjs +3 -3
- package/dist/utils/hash.d.cts +0 -1
- package/dist/utils/hash.d.cts.map +1 -1
- package/dist/utils/hash.d.ts +0 -1
- package/dist/utils/hash.d.ts.map +1 -1
- package/dist/utils/hash.js +2 -3
- package/dist/utils/is-network-error/index.cjs +2 -3
- package/dist/utils/is-network-error/index.cjs.map +1 -1
- package/dist/utils/is-network-error/index.js +2 -3
- package/dist/utils/is-network-error/index.js.map +1 -1
- package/dist/utils/js-sha256/hash.cjs +41 -34
- package/dist/utils/js-sha256/hash.cjs.map +1 -1
- package/dist/utils/js-sha256/hash.d.cts.map +1 -1
- package/dist/utils/js-sha256/hash.d.ts.map +1 -1
- package/dist/utils/js-sha256/hash.js +41 -35
- package/dist/utils/js-sha256/hash.js.map +1 -1
- package/dist/utils/json.cjs.map +1 -1
- package/dist/utils/json.d.cts.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/json_patch.cjs +3 -3
- package/dist/utils/json_patch.js +2 -3
- package/dist/utils/json_schema.cjs +12 -14
- package/dist/utils/json_schema.cjs.map +1 -1
- package/dist/utils/json_schema.d.cts.map +1 -1
- package/dist/utils/json_schema.d.ts.map +1 -1
- package/dist/utils/json_schema.js +4 -7
- package/dist/utils/json_schema.js.map +1 -1
- package/dist/utils/math.cjs +7 -8
- package/dist/utils/math.cjs.map +1 -1
- package/dist/utils/math.d.cts.map +1 -1
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +8 -10
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/ml-distance/distances.cjs.map +1 -1
- package/dist/utils/ml-distance/distances.js.map +1 -1
- package/dist/utils/ml-distance/similarities.cjs.map +1 -1
- package/dist/utils/ml-distance/similarities.d.cts.map +1 -1
- package/dist/utils/ml-distance/similarities.d.ts.map +1 -1
- package/dist/utils/ml-distance/similarities.js.map +1 -1
- package/dist/utils/ml-distance-euclidean/euclidean.cjs.map +1 -1
- package/dist/utils/ml-distance-euclidean/euclidean.js.map +1 -1
- package/dist/utils/namespace.cjs +63 -0
- package/dist/utils/namespace.cjs.map +1 -0
- package/dist/utils/namespace.d.cts +73 -0
- package/dist/utils/namespace.d.cts.map +1 -0
- package/dist/utils/namespace.d.ts +73 -0
- package/dist/utils/namespace.d.ts.map +1 -0
- package/dist/utils/namespace.js +62 -0
- package/dist/utils/namespace.js.map +1 -0
- package/dist/utils/p-retry/index.cjs +2 -2
- package/dist/utils/p-retry/index.cjs.map +1 -1
- package/dist/utils/p-retry/index.js +2 -2
- package/dist/utils/p-retry/index.js.map +1 -1
- package/dist/utils/sax-js/sax.cjs +28 -34
- package/dist/utils/sax-js/sax.cjs.map +1 -1
- package/dist/utils/sax-js/sax.js +28 -34
- package/dist/utils/sax-js/sax.js.map +1 -1
- package/dist/utils/signal.cjs +1 -1
- package/dist/utils/signal.cjs.map +1 -1
- package/dist/utils/signal.d.cts.map +1 -1
- package/dist/utils/signal.d.ts.map +1 -1
- package/dist/utils/signal.js +1 -1
- package/dist/utils/signal.js.map +1 -1
- package/dist/utils/ssrf.cjs +8 -10
- package/dist/utils/ssrf.cjs.map +1 -1
- package/dist/utils/ssrf.d.cts.map +1 -1
- package/dist/utils/ssrf.d.ts.map +1 -1
- package/dist/utils/ssrf.js +7 -10
- package/dist/utils/ssrf.js.map +1 -1
- package/dist/utils/stream.cjs +4 -4
- package/dist/utils/stream.cjs.map +1 -1
- package/dist/utils/stream.d.cts.map +1 -1
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/stream.js +3 -4
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/testing/chat_models.cjs +3 -5
- package/dist/utils/testing/chat_models.cjs.map +1 -1
- package/dist/utils/testing/chat_models.d.cts.map +1 -1
- package/dist/utils/testing/chat_models.d.ts.map +1 -1
- package/dist/utils/testing/chat_models.js +3 -5
- package/dist/utils/testing/chat_models.js.map +1 -1
- package/dist/utils/testing/embeddings.cjs +2 -4
- package/dist/utils/testing/embeddings.cjs.map +1 -1
- package/dist/utils/testing/embeddings.d.cts +0 -1
- package/dist/utils/testing/embeddings.d.cts.map +1 -1
- package/dist/utils/testing/embeddings.d.ts +0 -1
- package/dist/utils/testing/embeddings.d.ts.map +1 -1
- package/dist/utils/testing/embeddings.js +2 -4
- package/dist/utils/testing/embeddings.js.map +1 -1
- package/dist/utils/testing/index.cjs +3 -3
- package/dist/utils/testing/index.js +2 -3
- package/dist/utils/testing/llms.cjs.map +1 -1
- package/dist/utils/testing/llms.d.cts.map +1 -1
- package/dist/utils/testing/llms.d.ts.map +1 -1
- package/dist/utils/testing/llms.js.map +1 -1
- package/dist/utils/testing/message_history.cjs +1 -1
- package/dist/utils/testing/message_history.cjs.map +1 -1
- package/dist/utils/testing/message_history.d.cts.map +1 -1
- package/dist/utils/testing/message_history.d.ts.map +1 -1
- package/dist/utils/testing/message_history.js +1 -1
- package/dist/utils/testing/message_history.js.map +1 -1
- package/dist/utils/testing/output_parsers.cjs.map +1 -1
- package/dist/utils/testing/output_parsers.d.cts +0 -1
- package/dist/utils/testing/output_parsers.d.cts.map +1 -1
- package/dist/utils/testing/output_parsers.d.ts +0 -1
- package/dist/utils/testing/output_parsers.d.ts.map +1 -1
- package/dist/utils/testing/output_parsers.js.map +1 -1
- package/dist/utils/testing/retrievers.cjs +1 -1
- package/dist/utils/testing/retrievers.cjs.map +1 -1
- package/dist/utils/testing/retrievers.d.cts.map +1 -1
- package/dist/utils/testing/retrievers.d.ts.map +1 -1
- package/dist/utils/testing/retrievers.js +1 -1
- package/dist/utils/testing/retrievers.js.map +1 -1
- package/dist/utils/testing/runnables.cjs.map +1 -1
- package/dist/utils/testing/runnables.d.cts.map +1 -1
- package/dist/utils/testing/runnables.d.ts.map +1 -1
- package/dist/utils/testing/runnables.js.map +1 -1
- package/dist/utils/testing/tools.cjs.map +1 -1
- package/dist/utils/testing/tools.d.cts.map +1 -1
- package/dist/utils/testing/tools.d.ts.map +1 -1
- package/dist/utils/testing/tools.js.map +1 -1
- package/dist/utils/testing/tracers.cjs.map +1 -1
- package/dist/utils/testing/tracers.d.cts.map +1 -1
- package/dist/utils/testing/tracers.d.ts.map +1 -1
- package/dist/utils/testing/tracers.js.map +1 -1
- package/dist/utils/testing/vectorstores.cjs +7 -11
- package/dist/utils/testing/vectorstores.cjs.map +1 -1
- package/dist/utils/testing/vectorstores.d.cts +0 -1
- package/dist/utils/testing/vectorstores.d.cts.map +1 -1
- package/dist/utils/testing/vectorstores.d.ts +0 -1
- package/dist/utils/testing/vectorstores.d.ts.map +1 -1
- package/dist/utils/testing/vectorstores.js +7 -11
- package/dist/utils/testing/vectorstores.js.map +1 -1
- package/dist/utils/tiktoken.cjs +4 -4
- package/dist/utils/tiktoken.cjs.map +1 -1
- package/dist/utils/tiktoken.d.cts.map +1 -1
- package/dist/utils/tiktoken.d.ts.map +1 -1
- package/dist/utils/tiktoken.js +2 -3
- package/dist/utils/tiktoken.js.map +1 -1
- package/dist/utils/types/index.cjs +3 -3
- package/dist/utils/types/index.d.cts +0 -1
- package/dist/utils/types/index.d.cts.map +1 -1
- package/dist/utils/types/index.d.ts +0 -1
- package/dist/utils/types/index.d.ts.map +1 -1
- package/dist/utils/types/index.js +2 -3
- package/dist/utils/types/zod.cjs +17 -32
- package/dist/utils/types/zod.cjs.map +1 -1
- package/dist/utils/types/zod.d.cts +1 -1
- package/dist/utils/types/zod.d.cts.map +1 -1
- package/dist/utils/types/zod.d.ts +1 -1
- package/dist/utils/types/zod.d.ts.map +1 -1
- package/dist/utils/types/zod.js +15 -30
- package/dist/utils/types/zod.js.map +1 -1
- package/dist/utils/zod-to-json-schema/Options.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/Options.js.map +1 -1
- package/dist/utils/zod-to-json-schema/Refs.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/Refs.js.map +1 -1
- package/dist/utils/zod-to-json-schema/errorMessages.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/errorMessages.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/errorMessages.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/errorMessages.js.map +1 -1
- package/dist/utils/zod-to-json-schema/getRelativePath.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/getRelativePath.js.map +1 -1
- package/dist/utils/zod-to-json-schema/index.js +2 -0
- package/dist/utils/zod-to-json-schema/parseDef.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parseDef.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parseTypes.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parseTypes.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/any.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/any.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/any.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/any.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/array.cjs +2 -2
- package/dist/utils/zod-to-json-schema/parsers/array.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/array.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/array.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/array.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/bigint.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/bigint.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/boolean.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/boolean.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/boolean.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/boolean.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/branded.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/branded.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/catch.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/catch.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/date.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/date.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/date.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/date.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/date.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/default.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/default.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/effects.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/effects.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/enum.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/enum.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/enum.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/enum.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.cjs +1 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.js +1 -1
- package/dist/utils/zod-to-json-schema/parsers/intersection.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/literal.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/literal.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/literal.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/literal.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/map.cjs +17 -19
- package/dist/utils/zod-to-json-schema/parsers/map.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/map.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/map.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/map.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/map.js +17 -19
- package/dist/utils/zod-to-json-schema/parsers/map.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs +2 -3
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js +2 -3
- package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/never.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/never.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/never.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/never.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/null.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/null.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/null.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/null.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nullable.cjs +5 -5
- package/dist/utils/zod-to-json-schema/parsers/nullable.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/nullable.js +5 -5
- package/dist/utils/zod-to-json-schema/parsers/nullable.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/number.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/number.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/number.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/number.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/object.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/object.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/object.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/object.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/optional.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/optional.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs +2 -3
- package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/pipeline.js +2 -3
- package/dist/utils/zod-to-json-schema/parsers/pipeline.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/promise.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/promise.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/readonly.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/readonly.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/record.cjs +4 -4
- package/dist/utils/zod-to-json-schema/parsers/record.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/record.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/record.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/record.js +2 -2
- package/dist/utils/zod-to-json-schema/parsers/record.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.cjs +4 -5
- package/dist/utils/zod-to-json-schema/parsers/set.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/set.js +4 -5
- package/dist/utils/zod-to-json-schema/parsers/set.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.d.cts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/string.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.d.ts +0 -1
- package/dist/utils/zod-to-json-schema/parsers/string.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/tuple.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/tuple.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/tuple.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/undefined.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/undefined.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/undefined.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/union.cjs +3 -6
- package/dist/utils/zod-to-json-schema/parsers/union.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/union.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/union.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/union.js +3 -6
- package/dist/utils/zod-to-json-schema/parsers/union.js.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/unknown.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/unknown.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema/parsers/unknown.js.map +1 -1
- package/dist/utils/zod-to-json-schema/selectParser.cjs +3 -3
- package/dist/utils/zod-to-json-schema/selectParser.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/selectParser.js +1 -1
- package/dist/utils/zod-to-json-schema/selectParser.js.map +1 -1
- package/dist/utils/zod-to-json-schema/zodToJsonSchema.cjs +3 -3
- package/dist/utils/zod-to-json-schema/zodToJsonSchema.cjs.map +1 -1
- package/dist/utils/zod-to-json-schema/zodToJsonSchema.js +3 -3
- package/dist/utils/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
- package/dist/vectorstores.cjs +4 -5
- package/dist/vectorstores.cjs.map +1 -1
- package/dist/vectorstores.d.cts +0 -1
- package/dist/vectorstores.d.cts.map +1 -1
- package/dist/vectorstores.d.ts +0 -1
- package/dist/vectorstores.d.ts.map +1 -1
- package/dist/vectorstores.js +3 -5
- package/dist/vectorstores.js.map +1 -1
- package/package.json +2 -2
- package/dist/_virtual/rolldown_runtime.cjs +0 -32
- package/dist/_virtual/rolldown_runtime.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic_similarity.cjs","names":["
|
|
1
|
+
{"version":3,"file":"semantic_similarity.cjs","names":["BaseExampleSelector","Document"],"sources":["../../src/example_selectors/semantic_similarity.ts"],"sourcesContent":["import type { Embeddings } from \"../embeddings.js\";\nimport type {\n VectorStoreInterface,\n VectorStoreRetrieverInterface,\n VectorStore,\n} from \"../vectorstores.js\";\nimport type { Example } from \"../prompts/base.js\";\nimport { Document } from \"../documents/document.js\";\nimport { BaseExampleSelector } from \"./base.js\";\n\nfunction sortedValues<T>(values: Record<string, T>): T[] {\n return Object.keys(values)\n .sort()\n .map((key) => values[key]);\n}\n\n/**\n * Interface for the input data of the SemanticSimilarityExampleSelector\n * class.\n */\nexport type SemanticSimilarityExampleSelectorInput<\n V extends VectorStoreInterface = VectorStoreInterface,\n> =\n | {\n vectorStore: V;\n k?: number;\n filter?: V[\"FilterType\"];\n exampleKeys?: string[];\n inputKeys?: string[];\n vectorStoreRetriever?: never;\n }\n | {\n vectorStoreRetriever: VectorStoreRetrieverInterface<V>;\n exampleKeys?: string[];\n inputKeys?: string[];\n vectorStore?: never;\n k?: never;\n filter?: never;\n };\n\n/**\n * Class that selects examples based on semantic similarity. It extends\n * the BaseExampleSelector class.\n * @example\n * ```typescript\n * const exampleSelector = await SemanticSimilarityExampleSelector.fromExamples(\n * [\n * { input: \"happy\", output: \"sad\" },\n * { input: \"tall\", output: \"short\" },\n * { input: \"energetic\", output: \"lethargic\" },\n * { input: \"sunny\", output: \"gloomy\" },\n * { input: \"windy\", output: \"calm\" },\n * ],\n * new OpenAIEmbeddings(),\n * HNSWLib,\n * { k: 1 },\n * );\n * const dynamicPrompt = new FewShotPromptTemplate({\n * exampleSelector,\n * examplePrompt: PromptTemplate.fromTemplate(\n * \"Input: {input}\\nOutput: {output}\",\n * ),\n * prefix: \"Give the antonym of every input\",\n * suffix: \"Input: {adjective}\\nOutput:\",\n * inputVariables: [\"adjective\"],\n * });\n * console.log(await dynamicPrompt.format({ adjective: \"rainy\" }));\n * ```\n */\nexport class SemanticSimilarityExampleSelector<\n V extends VectorStoreInterface = VectorStoreInterface,\n> extends BaseExampleSelector {\n vectorStoreRetriever: VectorStoreRetrieverInterface<V>;\n\n exampleKeys?: string[];\n\n inputKeys?: string[];\n\n constructor(data: SemanticSimilarityExampleSelectorInput<V>) {\n super(data);\n this.exampleKeys = data.exampleKeys;\n this.inputKeys = data.inputKeys;\n if (data.vectorStore !== undefined) {\n this.vectorStoreRetriever = data.vectorStore.asRetriever({\n k: data.k ?? 4,\n filter: data.filter,\n });\n } else if (data.vectorStoreRetriever) {\n this.vectorStoreRetriever = data.vectorStoreRetriever;\n } else {\n throw new Error(\n `You must specify one of \"vectorStore\" and \"vectorStoreRetriever\".`\n );\n }\n }\n\n /**\n * Method that adds a new example to the vectorStore. The example is\n * converted to a string and added to the vectorStore as a document.\n * @param example The example to be added to the vectorStore.\n * @returns Promise that resolves when the example has been added to the vectorStore.\n */\n async addExample(example: Example): Promise<void> {\n const inputKeys = this.inputKeys ?? Object.keys(example);\n const stringExample = sortedValues(\n inputKeys.reduce(\n (acc, key) => ({ ...acc, [key]: example[key] }),\n {} as Example\n )\n ).join(\" \");\n\n await this.vectorStoreRetriever.addDocuments([\n new Document({\n pageContent: stringExample,\n metadata: example,\n }),\n ]);\n }\n\n /**\n * Method that selects which examples to use based on semantic similarity.\n * It performs a similarity search in the vectorStore using the input\n * variables and returns the examples with the highest similarity.\n * @param inputVariables The input variables used for the similarity search.\n * @returns Promise that resolves with an array of the selected examples.\n */\n async selectExamples<T>(\n inputVariables: Record<string, T>\n ): Promise<Example[]> {\n const inputKeys = this.inputKeys ?? Object.keys(inputVariables);\n const query = sortedValues(\n inputKeys.reduce(\n (acc, key) => ({ ...acc, [key]: inputVariables[key] }),\n {} as Record<string, T>\n )\n ).join(\" \");\n\n const exampleDocs = await this.vectorStoreRetriever.invoke(query);\n\n const examples = exampleDocs.map((doc) => doc.metadata);\n if (this.exampleKeys) {\n // If example keys are provided, filter examples to those keys.\n return examples.map((example) =>\n (this.exampleKeys as string[]).reduce(\n (acc, key) => ({ ...acc, [key]: example[key] }),\n {}\n )\n );\n }\n return examples;\n }\n\n /**\n * Static method that creates a new instance of\n * SemanticSimilarityExampleSelector. It takes a list of examples, an\n * instance of Embeddings, a VectorStore class, and an options object as\n * parameters. It converts the examples to strings, creates a VectorStore\n * from the strings and the embeddings, and returns a new\n * SemanticSimilarityExampleSelector with the created VectorStore and the\n * options provided.\n * @param examples The list of examples to be used.\n * @param embeddings The instance of Embeddings to be used.\n * @param vectorStoreCls The VectorStore class to be used.\n * @param options The options object for the SemanticSimilarityExampleSelector.\n * @returns Promise that resolves with a new instance of SemanticSimilarityExampleSelector.\n */\n static async fromExamples<C extends typeof VectorStore>(\n examples: Record<string, string>[],\n embeddings: Embeddings,\n vectorStoreCls: C,\n options: {\n k?: number;\n inputKeys?: string[];\n } & Parameters<C[\"fromTexts\"]>[3] = {}\n ): Promise<SemanticSimilarityExampleSelector> {\n const inputKeys = options.inputKeys ?? null;\n const stringExamples = examples.map((example) =>\n sortedValues(\n inputKeys\n ? inputKeys.reduce(\n (acc, key) => ({ ...acc, [key]: example[key] }),\n {} as Record<string, string>\n )\n : example\n ).join(\" \")\n );\n\n const vectorStore = await vectorStoreCls.fromTexts(\n stringExamples,\n examples, // metadatas\n embeddings,\n options\n );\n\n return new SemanticSimilarityExampleSelector({\n vectorStore,\n k: options.k ?? 4,\n exampleKeys: options.exampleKeys,\n inputKeys: options.inputKeys,\n });\n }\n}\n"],"mappings":";;;;AAUA,SAAS,aAAgB,QAAgC;AACvD,QAAO,OAAO,KAAK,OAAO,CACvB,MAAM,CACN,KAAK,QAAQ,OAAO,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwD9B,IAAa,oCAAb,MAAa,0CAEHA,iCAAoB;CAC5B;CAEA;CAEA;CAEA,YAAY,MAAiD;AAC3D,QAAM,KAAK;AACX,OAAK,cAAc,KAAK;AACxB,OAAK,YAAY,KAAK;AACtB,MAAI,KAAK,gBAAgB,OACvB,MAAK,uBAAuB,KAAK,YAAY,YAAY;GACvD,GAAG,KAAK,KAAK;GACb,QAAQ,KAAK;GACd,CAAC;WACO,KAAK,qBACd,MAAK,uBAAuB,KAAK;MAEjC,OAAM,IAAI,MACR,oEACD;;;;;;;;CAUL,MAAM,WAAW,SAAiC;EAEhD,MAAM,gBAAgB,cADJ,KAAK,aAAa,OAAO,KAAK,QAAQ,EAE5C,QACP,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,QAAQ;GAAM,GAC9C,EAAE,CACH,CACF,CAAC,KAAK,IAAI;AAEX,QAAM,KAAK,qBAAqB,aAAa,CAC3C,IAAIC,0BAAS;GACX,aAAa;GACb,UAAU;GACX,CAAC,CACH,CAAC;;;;;;;;;CAUJ,MAAM,eACJ,gBACoB;EAEpB,MAAM,QAAQ,cADI,KAAK,aAAa,OAAO,KAAK,eAAe,EAEnD,QACP,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,eAAe;GAAM,GACrD,EAAE,CACH,CACF,CAAC,KAAK,IAAI;EAIX,MAAM,YAFc,MAAM,KAAK,qBAAqB,OAAO,MAAM,EAEpC,KAAK,QAAQ,IAAI,SAAS;AACvD,MAAI,KAAK,YAEP,QAAO,SAAS,KAAK,YAClB,KAAK,YAAyB,QAC5B,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,QAAQ;GAAM,GAC9C,EAAE,CACH,CACF;AAEH,SAAO;;;;;;;;;;;;;;;;CAiBT,aAAa,aACX,UACA,YACA,gBACA,UAGoC,EAAE,EACM;EAC5C,MAAM,YAAY,QAAQ,aAAa;EACvC,MAAM,iBAAiB,SAAS,KAAK,YACnC,aACE,YACI,UAAU,QACP,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,QAAQ;GAAM,GAC9C,EAAE,CACH,GACD,QACL,CAAC,KAAK,IAAI,CACZ;AASD,SAAO,IAAI,kCAAkC;GAC3C,aARkB,MAAM,eAAe,UACvC,gBACA,UACA,YACA,QACD;GAIC,GAAG,QAAQ,KAAK;GAChB,aAAa,QAAQ;GACrB,WAAW,QAAQ;GACpB,CAAC"}
|
|
@@ -4,7 +4,6 @@ import { BaseExampleSelector } from "./base.cjs";
|
|
|
4
4
|
import { VectorStore, VectorStoreInterface, VectorStoreRetrieverInterface } from "../vectorstores.cjs";
|
|
5
5
|
|
|
6
6
|
//#region src/example_selectors/semantic_similarity.d.ts
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* Interface for the input data of the SemanticSimilarityExampleSelector
|
|
10
9
|
* class.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic_similarity.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"semantic_similarity.d.cts","names":[],"sources":["../../src/example_selectors/semantic_similarity.ts"],"mappings":";;;;;;;;AAoBA;;KAAY,sCAAA,WACA,oBAAA,GAAuB,oBAAA;EAG7B,WAAA,EAAa,CAAA;EACb,CAAA;EACA,MAAA,GAAS,CAAA;EACT,WAAA;EACA,SAAA;EACA,oBAAA;AAAA;EAGA,oBAAA,EAAsB,6BAAA,CAA8B,CAAA;EACpD,WAAA;EACA,SAAA;EACA,WAAA;EACA,CAAA;EACA,MAAA;AAAA;;;;;;;;;;;;;;;;AAgCN;;;;;;;;;;;;;;cAAa,iCAAA,WACD,oBAAA,GAAuB,oBAAA,UACzB,mBAAA;EACR,oBAAA,EAAsB,6BAAA,CAA8B,CAAA;EAEpD,WAAA;EAEA,SAAA;EAEA,WAAA,CAAY,IAAA,EAAM,sCAAA,CAAuC,CAAA;EA+FxC;;;;;;EAvEX,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,OAAA;EAhCpC;;;;;;;EAwDM,cAAA,GAAA,CACJ,cAAA,EAAgB,MAAA,SAAe,CAAA,IAC9B,OAAA,CAAQ,OAAA;EApDX;;;;;;;;;;;;;;EAAA,OA0Fa,YAAA,kBAA8B,WAAA,CAAA,CACzC,QAAA,EAAU,MAAA,oBACV,UAAA,EAAY,UAAA,EACZ,cAAA,EAAgB,CAAA,EAChB,OAAA;IACE,CAAA;IACA,SAAA;EAAA,IACE,UAAA,CAAW,CAAA,oBACd,OAAA,CAAQ,iCAAA;AAAA"}
|
|
@@ -4,7 +4,6 @@ import { BaseExampleSelector } from "./base.js";
|
|
|
4
4
|
import { VectorStore, VectorStoreInterface, VectorStoreRetrieverInterface } from "../vectorstores.js";
|
|
5
5
|
|
|
6
6
|
//#region src/example_selectors/semantic_similarity.d.ts
|
|
7
|
-
|
|
8
7
|
/**
|
|
9
8
|
* Interface for the input data of the SemanticSimilarityExampleSelector
|
|
10
9
|
* class.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic_similarity.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"semantic_similarity.d.ts","names":[],"sources":["../../src/example_selectors/semantic_similarity.ts"],"mappings":";;;;;;;;AAoBA;;KAAY,sCAAA,WACA,oBAAA,GAAuB,oBAAA;EAG7B,WAAA,EAAa,CAAA;EACb,CAAA;EACA,MAAA,GAAS,CAAA;EACT,WAAA;EACA,SAAA;EACA,oBAAA;AAAA;EAGA,oBAAA,EAAsB,6BAAA,CAA8B,CAAA;EACpD,WAAA;EACA,SAAA;EACA,WAAA;EACA,CAAA;EACA,MAAA;AAAA;;;;;;;;;;;;;;;;AAgCN;;;;;;;;;;;;;;cAAa,iCAAA,WACD,oBAAA,GAAuB,oBAAA,UACzB,mBAAA;EACR,oBAAA,EAAsB,6BAAA,CAA8B,CAAA;EAEpD,WAAA;EAEA,SAAA;EAEA,WAAA,CAAY,IAAA,EAAM,sCAAA,CAAuC,CAAA;EA+FxC;;;;;;EAvEX,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,OAAA;EAhCpC;;;;;;;EAwDM,cAAA,GAAA,CACJ,cAAA,EAAgB,MAAA,SAAe,CAAA,IAC9B,OAAA,CAAQ,OAAA;EApDX;;;;;;;;;;;;;;EAAA,OA0Fa,YAAA,kBAA8B,WAAA,CAAA,CACzC,QAAA,EAAU,MAAA,oBACV,UAAA,EAAY,UAAA,EACZ,cAAA,EAAgB,CAAA,EAChB,OAAA;IACE,CAAA;IACA,SAAA;EAAA,IACE,UAAA,CAAW,CAAA,oBACd,OAAA,CAAQ,iCAAA;AAAA"}
|
|
@@ -56,8 +56,7 @@ var SemanticSimilarityExampleSelector = class SemanticSimilarityExampleSelector
|
|
|
56
56
|
* @returns Promise that resolves when the example has been added to the vectorStore.
|
|
57
57
|
*/
|
|
58
58
|
async addExample(example) {
|
|
59
|
-
const
|
|
60
|
-
const stringExample = sortedValues(inputKeys.reduce((acc, key) => ({
|
|
59
|
+
const stringExample = sortedValues((this.inputKeys ?? Object.keys(example)).reduce((acc, key) => ({
|
|
61
60
|
...acc,
|
|
62
61
|
[key]: example[key]
|
|
63
62
|
}), {})).join(" ");
|
|
@@ -74,13 +73,11 @@ var SemanticSimilarityExampleSelector = class SemanticSimilarityExampleSelector
|
|
|
74
73
|
* @returns Promise that resolves with an array of the selected examples.
|
|
75
74
|
*/
|
|
76
75
|
async selectExamples(inputVariables) {
|
|
77
|
-
const
|
|
78
|
-
const query = sortedValues(inputKeys.reduce((acc, key) => ({
|
|
76
|
+
const query = sortedValues((this.inputKeys ?? Object.keys(inputVariables)).reduce((acc, key) => ({
|
|
79
77
|
...acc,
|
|
80
78
|
[key]: inputVariables[key]
|
|
81
79
|
}), {})).join(" ");
|
|
82
|
-
const
|
|
83
|
-
const examples = exampleDocs.map((doc) => doc.metadata);
|
|
80
|
+
const examples = (await this.vectorStoreRetriever.invoke(query)).map((doc) => doc.metadata);
|
|
84
81
|
if (this.exampleKeys) return examples.map((example) => this.exampleKeys.reduce((acc, key) => ({
|
|
85
82
|
...acc,
|
|
86
83
|
[key]: example[key]
|
|
@@ -107,9 +104,8 @@ var SemanticSimilarityExampleSelector = class SemanticSimilarityExampleSelector
|
|
|
107
104
|
...acc,
|
|
108
105
|
[key]: example[key]
|
|
109
106
|
}), {}) : example).join(" "));
|
|
110
|
-
const vectorStore = await vectorStoreCls.fromTexts(stringExamples, examples, embeddings, options);
|
|
111
107
|
return new SemanticSimilarityExampleSelector({
|
|
112
|
-
vectorStore,
|
|
108
|
+
vectorStore: await vectorStoreCls.fromTexts(stringExamples, examples, embeddings, options),
|
|
113
109
|
k: options.k ?? 4,
|
|
114
110
|
exampleKeys: options.exampleKeys,
|
|
115
111
|
inputKeys: options.inputKeys
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic_similarity.js","names":[
|
|
1
|
+
{"version":3,"file":"semantic_similarity.js","names":[],"sources":["../../src/example_selectors/semantic_similarity.ts"],"sourcesContent":["import type { Embeddings } from \"../embeddings.js\";\nimport type {\n VectorStoreInterface,\n VectorStoreRetrieverInterface,\n VectorStore,\n} from \"../vectorstores.js\";\nimport type { Example } from \"../prompts/base.js\";\nimport { Document } from \"../documents/document.js\";\nimport { BaseExampleSelector } from \"./base.js\";\n\nfunction sortedValues<T>(values: Record<string, T>): T[] {\n return Object.keys(values)\n .sort()\n .map((key) => values[key]);\n}\n\n/**\n * Interface for the input data of the SemanticSimilarityExampleSelector\n * class.\n */\nexport type SemanticSimilarityExampleSelectorInput<\n V extends VectorStoreInterface = VectorStoreInterface,\n> =\n | {\n vectorStore: V;\n k?: number;\n filter?: V[\"FilterType\"];\n exampleKeys?: string[];\n inputKeys?: string[];\n vectorStoreRetriever?: never;\n }\n | {\n vectorStoreRetriever: VectorStoreRetrieverInterface<V>;\n exampleKeys?: string[];\n inputKeys?: string[];\n vectorStore?: never;\n k?: never;\n filter?: never;\n };\n\n/**\n * Class that selects examples based on semantic similarity. It extends\n * the BaseExampleSelector class.\n * @example\n * ```typescript\n * const exampleSelector = await SemanticSimilarityExampleSelector.fromExamples(\n * [\n * { input: \"happy\", output: \"sad\" },\n * { input: \"tall\", output: \"short\" },\n * { input: \"energetic\", output: \"lethargic\" },\n * { input: \"sunny\", output: \"gloomy\" },\n * { input: \"windy\", output: \"calm\" },\n * ],\n * new OpenAIEmbeddings(),\n * HNSWLib,\n * { k: 1 },\n * );\n * const dynamicPrompt = new FewShotPromptTemplate({\n * exampleSelector,\n * examplePrompt: PromptTemplate.fromTemplate(\n * \"Input: {input}\\nOutput: {output}\",\n * ),\n * prefix: \"Give the antonym of every input\",\n * suffix: \"Input: {adjective}\\nOutput:\",\n * inputVariables: [\"adjective\"],\n * });\n * console.log(await dynamicPrompt.format({ adjective: \"rainy\" }));\n * ```\n */\nexport class SemanticSimilarityExampleSelector<\n V extends VectorStoreInterface = VectorStoreInterface,\n> extends BaseExampleSelector {\n vectorStoreRetriever: VectorStoreRetrieverInterface<V>;\n\n exampleKeys?: string[];\n\n inputKeys?: string[];\n\n constructor(data: SemanticSimilarityExampleSelectorInput<V>) {\n super(data);\n this.exampleKeys = data.exampleKeys;\n this.inputKeys = data.inputKeys;\n if (data.vectorStore !== undefined) {\n this.vectorStoreRetriever = data.vectorStore.asRetriever({\n k: data.k ?? 4,\n filter: data.filter,\n });\n } else if (data.vectorStoreRetriever) {\n this.vectorStoreRetriever = data.vectorStoreRetriever;\n } else {\n throw new Error(\n `You must specify one of \"vectorStore\" and \"vectorStoreRetriever\".`\n );\n }\n }\n\n /**\n * Method that adds a new example to the vectorStore. The example is\n * converted to a string and added to the vectorStore as a document.\n * @param example The example to be added to the vectorStore.\n * @returns Promise that resolves when the example has been added to the vectorStore.\n */\n async addExample(example: Example): Promise<void> {\n const inputKeys = this.inputKeys ?? Object.keys(example);\n const stringExample = sortedValues(\n inputKeys.reduce(\n (acc, key) => ({ ...acc, [key]: example[key] }),\n {} as Example\n )\n ).join(\" \");\n\n await this.vectorStoreRetriever.addDocuments([\n new Document({\n pageContent: stringExample,\n metadata: example,\n }),\n ]);\n }\n\n /**\n * Method that selects which examples to use based on semantic similarity.\n * It performs a similarity search in the vectorStore using the input\n * variables and returns the examples with the highest similarity.\n * @param inputVariables The input variables used for the similarity search.\n * @returns Promise that resolves with an array of the selected examples.\n */\n async selectExamples<T>(\n inputVariables: Record<string, T>\n ): Promise<Example[]> {\n const inputKeys = this.inputKeys ?? Object.keys(inputVariables);\n const query = sortedValues(\n inputKeys.reduce(\n (acc, key) => ({ ...acc, [key]: inputVariables[key] }),\n {} as Record<string, T>\n )\n ).join(\" \");\n\n const exampleDocs = await this.vectorStoreRetriever.invoke(query);\n\n const examples = exampleDocs.map((doc) => doc.metadata);\n if (this.exampleKeys) {\n // If example keys are provided, filter examples to those keys.\n return examples.map((example) =>\n (this.exampleKeys as string[]).reduce(\n (acc, key) => ({ ...acc, [key]: example[key] }),\n {}\n )\n );\n }\n return examples;\n }\n\n /**\n * Static method that creates a new instance of\n * SemanticSimilarityExampleSelector. It takes a list of examples, an\n * instance of Embeddings, a VectorStore class, and an options object as\n * parameters. It converts the examples to strings, creates a VectorStore\n * from the strings and the embeddings, and returns a new\n * SemanticSimilarityExampleSelector with the created VectorStore and the\n * options provided.\n * @param examples The list of examples to be used.\n * @param embeddings The instance of Embeddings to be used.\n * @param vectorStoreCls The VectorStore class to be used.\n * @param options The options object for the SemanticSimilarityExampleSelector.\n * @returns Promise that resolves with a new instance of SemanticSimilarityExampleSelector.\n */\n static async fromExamples<C extends typeof VectorStore>(\n examples: Record<string, string>[],\n embeddings: Embeddings,\n vectorStoreCls: C,\n options: {\n k?: number;\n inputKeys?: string[];\n } & Parameters<C[\"fromTexts\"]>[3] = {}\n ): Promise<SemanticSimilarityExampleSelector> {\n const inputKeys = options.inputKeys ?? null;\n const stringExamples = examples.map((example) =>\n sortedValues(\n inputKeys\n ? inputKeys.reduce(\n (acc, key) => ({ ...acc, [key]: example[key] }),\n {} as Record<string, string>\n )\n : example\n ).join(\" \")\n );\n\n const vectorStore = await vectorStoreCls.fromTexts(\n stringExamples,\n examples, // metadatas\n embeddings,\n options\n );\n\n return new SemanticSimilarityExampleSelector({\n vectorStore,\n k: options.k ?? 4,\n exampleKeys: options.exampleKeys,\n inputKeys: options.inputKeys,\n });\n }\n}\n"],"mappings":";;;;AAUA,SAAS,aAAgB,QAAgC;AACvD,QAAO,OAAO,KAAK,OAAO,CACvB,MAAM,CACN,KAAK,QAAQ,OAAO,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwD9B,IAAa,oCAAb,MAAa,0CAEH,oBAAoB;CAC5B;CAEA;CAEA;CAEA,YAAY,MAAiD;AAC3D,QAAM,KAAK;AACX,OAAK,cAAc,KAAK;AACxB,OAAK,YAAY,KAAK;AACtB,MAAI,KAAK,gBAAgB,OACvB,MAAK,uBAAuB,KAAK,YAAY,YAAY;GACvD,GAAG,KAAK,KAAK;GACb,QAAQ,KAAK;GACd,CAAC;WACO,KAAK,qBACd,MAAK,uBAAuB,KAAK;MAEjC,OAAM,IAAI,MACR,oEACD;;;;;;;;CAUL,MAAM,WAAW,SAAiC;EAEhD,MAAM,gBAAgB,cADJ,KAAK,aAAa,OAAO,KAAK,QAAQ,EAE5C,QACP,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,QAAQ;GAAM,GAC9C,EAAE,CACH,CACF,CAAC,KAAK,IAAI;AAEX,QAAM,KAAK,qBAAqB,aAAa,CAC3C,IAAI,SAAS;GACX,aAAa;GACb,UAAU;GACX,CAAC,CACH,CAAC;;;;;;;;;CAUJ,MAAM,eACJ,gBACoB;EAEpB,MAAM,QAAQ,cADI,KAAK,aAAa,OAAO,KAAK,eAAe,EAEnD,QACP,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,eAAe;GAAM,GACrD,EAAE,CACH,CACF,CAAC,KAAK,IAAI;EAIX,MAAM,YAFc,MAAM,KAAK,qBAAqB,OAAO,MAAM,EAEpC,KAAK,QAAQ,IAAI,SAAS;AACvD,MAAI,KAAK,YAEP,QAAO,SAAS,KAAK,YAClB,KAAK,YAAyB,QAC5B,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,QAAQ;GAAM,GAC9C,EAAE,CACH,CACF;AAEH,SAAO;;;;;;;;;;;;;;;;CAiBT,aAAa,aACX,UACA,YACA,gBACA,UAGoC,EAAE,EACM;EAC5C,MAAM,YAAY,QAAQ,aAAa;EACvC,MAAM,iBAAiB,SAAS,KAAK,YACnC,aACE,YACI,UAAU,QACP,KAAK,SAAS;GAAE,GAAG;IAAM,MAAM,QAAQ;GAAM,GAC9C,EAAE,CACH,GACD,QACL,CAAC,KAAK,IAAI,CACZ;AASD,SAAO,IAAI,kCAAkC;GAC3C,aARkB,MAAM,eAAe,UACvC,gBACA,UACA,YACA,QACD;GAIC,GAAG,QAAQ,KAAK;GAChB,aAAa,QAAQ;GACrB,WAAW,QAAQ;GACpB,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
1
3
|
|
|
2
4
|
//#region src/index.ts
|
|
3
|
-
var src_exports = {};
|
|
5
|
+
var src_exports = /* @__PURE__ */ require_runtime.__exportAll({});
|
|
4
6
|
|
|
5
7
|
//#endregion
|
|
6
8
|
Object.defineProperty(exports, 'src_exports', {
|
package/dist/index.js
CHANGED
package/dist/indexing/base.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
2
2
|
const require_hash = require('../utils/js-sha256/hash.cjs');
|
|
3
3
|
require('../utils/hash.cjs');
|
|
4
4
|
const require_document = require('../documents/document.cjs');
|
|
5
5
|
const require_record_manager = require('./record_manager.cjs');
|
|
6
|
-
|
|
6
|
+
let uuid = require("uuid");
|
|
7
7
|
|
|
8
8
|
//#region src/indexing/base.ts
|
|
9
9
|
/**
|
|
@@ -61,13 +61,11 @@ var _HashedDocument = class {
|
|
|
61
61
|
return doc;
|
|
62
62
|
}
|
|
63
63
|
_hashStringToUUID(inputString) {
|
|
64
|
-
|
|
65
|
-
return (0, uuid.v5)(hash_value, require_record_manager.UUIDV5_NAMESPACE);
|
|
64
|
+
return (0, uuid.v5)(this.keyEncoder(inputString), require_record_manager.UUIDV5_NAMESPACE);
|
|
66
65
|
}
|
|
67
66
|
_hashNestedDictToUUID(data) {
|
|
68
67
|
const serialized_data = JSON.stringify(data, Object.keys(data).sort());
|
|
69
|
-
|
|
70
|
-
return (0, uuid.v5)(hash_value, require_record_manager.UUIDV5_NAMESPACE);
|
|
68
|
+
return (0, uuid.v5)(this.keyEncoder(serialized_data), require_record_manager.UUIDV5_NAMESPACE);
|
|
71
69
|
}
|
|
72
70
|
};
|
|
73
71
|
function _batch(size, iterable) {
|
|
@@ -139,9 +137,8 @@ async function index(args) {
|
|
|
139
137
|
for (const batch of batches) {
|
|
140
138
|
const hashedDocs = _deduplicateInOrder(batch.map((doc) => _HashedDocument.fromDocument(doc)));
|
|
141
139
|
const sourceIds = hashedDocs.map((doc) => sourceIdAssigner(doc));
|
|
142
|
-
if (cleanup === "incremental") hashedDocs.forEach((_hashedDoc, index
|
|
143
|
-
|
|
144
|
-
if (source === null) throw new Error("sourceIdKey must be provided when cleanup is incremental");
|
|
140
|
+
if (cleanup === "incremental") hashedDocs.forEach((_hashedDoc, index) => {
|
|
141
|
+
if (sourceIds[index] === null) throw new Error("sourceIdKey must be provided when cleanup is incremental");
|
|
145
142
|
});
|
|
146
143
|
const batchExists = await recordManager.exists(hashedDocs.map((doc) => doc.uid));
|
|
147
144
|
const uids = [];
|
|
@@ -149,8 +146,7 @@ async function index(args) {
|
|
|
149
146
|
const docsToUpdate = [];
|
|
150
147
|
const seenDocs = /* @__PURE__ */ new Set();
|
|
151
148
|
hashedDocs.forEach((hashedDoc, i) => {
|
|
152
|
-
|
|
153
|
-
if (docExists) if (forceUpdate) seenDocs.add(hashedDoc.uid);
|
|
149
|
+
if (batchExists[i]) if (forceUpdate) seenDocs.add(hashedDoc.uid);
|
|
154
150
|
else {
|
|
155
151
|
docsToUpdate.push(hashedDoc.uid);
|
|
156
152
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.cjs","names":["sha256","fields: HashedDocumentArgs","keyEncoderFn: HashKeyEncoder","Document","document: DocumentInterface","uid?: string","inputString: string","UUIDV5_NAMESPACE","data: Record<string, unknown>","size: number","iterable: T[]","batches: T[][]","currentBatch: T[]","hashedDocuments: HashedDocumentInterface[]","deduplicated: HashedDocumentInterface[]","sourceIdKey: StringOrDocFunc | null","_doc: DocumentInterface","doc: DocumentInterface","arg: any","args: IndexArgs","index","uids: string[]","docsToIndex: DocumentInterface[]","docsToUpdate: string[]"],"sources":["../../src/indexing/base.ts"],"sourcesContent":["import { v5 as uuidv5 } from \"uuid\";\nimport { VectorStore } from \"../vectorstores.js\";\nimport { RecordManagerInterface, UUIDV5_NAMESPACE } from \"./record_manager.js\";\nimport { sha256, type HashKeyEncoder } from \"../utils/hash.js\";\nimport { DocumentInterface, Document } from \"../documents/document.js\";\nimport { BaseDocumentLoader } from \"../document_loaders/base.js\";\n\ntype Metadata = Record<string, unknown>;\n\ntype IndexingResult = {\n numAdded: number;\n numDeleted: number;\n numUpdated: number;\n numSkipped: number;\n};\n\ntype StringOrDocFunc = string | ((doc: DocumentInterface) => string);\n\nexport interface HashedDocumentInterface extends DocumentInterface {\n uid: string;\n hash_?: string;\n contentHash?: string;\n metadataHash?: string;\n pageContent: string;\n metadata: Metadata;\n calculateHashes(): void;\n toDocument(): DocumentInterface;\n}\n\ninterface HashedDocumentArgs {\n pageContent: string;\n metadata: Metadata;\n uid: string;\n}\n\n/**\n * HashedDocument is a Document with hashes calculated.\n * Hashes are calculated based on page content and metadata.\n * It is used for indexing.\n */\nexport class _HashedDocument implements HashedDocumentInterface {\n uid: string;\n\n hash_?: string;\n\n contentHash?: string;\n\n metadataHash?: string;\n\n pageContent: string;\n\n metadata: Metadata;\n\n private keyEncoder: HashKeyEncoder = sha256;\n\n constructor(fields: HashedDocumentArgs) {\n this.uid = fields.uid;\n this.pageContent = fields.pageContent;\n this.metadata = fields.metadata;\n }\n\n makeDefaultKeyEncoder(keyEncoderFn: HashKeyEncoder): void {\n this.keyEncoder = keyEncoderFn;\n }\n\n calculateHashes(): void {\n const forbiddenKeys = [\"hash_\", \"content_hash\", \"metadata_hash\"];\n\n for (const key of forbiddenKeys) {\n if (key in this.metadata) {\n throw new Error(\n `Metadata cannot contain key ${key} as it is reserved for internal use. Restricted keys: [${forbiddenKeys.join(\n \", \"\n )}]`\n );\n }\n }\n\n const contentHash = this._hashStringToUUID(this.pageContent);\n\n try {\n const metadataHash = this._hashNestedDictToUUID(this.metadata);\n this.contentHash = contentHash;\n this.metadataHash = metadataHash;\n } catch (e) {\n throw new Error(\n `Failed to hash metadata: ${e}. Please use a dict that can be serialized using json.`\n );\n }\n\n this.hash_ = this._hashStringToUUID(this.contentHash + this.metadataHash);\n\n if (!this.uid) {\n this.uid = this.hash_;\n }\n }\n\n toDocument(): DocumentInterface {\n return new Document({\n pageContent: this.pageContent,\n metadata: this.metadata,\n });\n }\n\n static fromDocument(\n document: DocumentInterface,\n uid?: string\n ): _HashedDocument {\n const doc = new this({\n pageContent: document.pageContent,\n metadata: document.metadata,\n uid: uid || (document as DocumentInterface & { uid: string }).uid,\n });\n doc.calculateHashes();\n return doc;\n }\n\n private _hashStringToUUID(inputString: string): string {\n const hash_value = this.keyEncoder(inputString);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n\n private _hashNestedDictToUUID(data: Record<string, unknown>): string {\n const serialized_data = JSON.stringify(data, Object.keys(data).sort());\n const hash_value = this.keyEncoder(serialized_data);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n}\n\nexport type CleanupMode = \"full\" | \"incremental\";\n\nexport type IndexOptions = {\n /**\n * The number of documents to index in one batch.\n */\n batchSize?: number;\n /**\n * The cleanup mode to use. Can be \"full\", \"incremental\" or undefined.\n * - **Incremental**: Cleans up all documents that haven't been updated AND\n * that are associated with source ids that were seen\n * during indexing.\n * Clean up is done continuously during indexing helping\n * to minimize the probability of users seeing duplicated\n * content.\n * - **Full**: Delete all documents that haven to been returned by the loader.\n * Clean up runs after all documents have been indexed.\n * This means that users may see duplicated content during indexing.\n * - **undefined**: Do not delete any documents.\n */\n cleanup?: CleanupMode;\n /**\n * Optional key that helps identify the original source of the document.\n * Must either be a string representing the key of the source in the metadata\n * or a function that takes a document and returns a string representing the source.\n * **Required when cleanup is incremental**.\n */\n sourceIdKey?: StringOrDocFunc;\n /**\n * Batch size to use when cleaning up documents.\n */\n cleanupBatchSize?: number;\n /**\n * Force update documents even if they are present in the\n * record manager. Useful if you are re-indexing with updated embeddings.\n */\n forceUpdate?: boolean;\n};\n\nexport function _batch<T>(size: number, iterable: T[]): T[][] {\n const batches: T[][] = [];\n let currentBatch: T[] = [];\n\n iterable.forEach((item) => {\n currentBatch.push(item);\n\n if (currentBatch.length >= size) {\n batches.push(currentBatch);\n currentBatch = [];\n }\n });\n\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n\n return batches;\n}\n\nexport function _deduplicateInOrder(\n hashedDocuments: HashedDocumentInterface[]\n): HashedDocumentInterface[] {\n const seen = new Set<string>();\n const deduplicated: HashedDocumentInterface[] = [];\n\n for (const hashedDoc of hashedDocuments) {\n if (!hashedDoc.hash_) {\n throw new Error(\"Hashed document does not have a hash\");\n }\n\n if (!seen.has(hashedDoc.hash_)) {\n seen.add(hashedDoc.hash_);\n deduplicated.push(hashedDoc);\n }\n }\n return deduplicated;\n}\n\nexport function _getSourceIdAssigner(\n sourceIdKey: StringOrDocFunc | null\n): (doc: DocumentInterface) => string | null {\n if (sourceIdKey === null) {\n return (_doc: DocumentInterface) => null;\n } else if (typeof sourceIdKey === \"string\") {\n return (doc: DocumentInterface) => doc.metadata[sourceIdKey];\n } else if (typeof sourceIdKey === \"function\") {\n return sourceIdKey;\n } else {\n throw new Error(\n `sourceIdKey should be null, a string or a function, got ${typeof sourceIdKey}`\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const _isBaseDocumentLoader = (arg: any): arg is BaseDocumentLoader => {\n if (\n \"load\" in arg &&\n typeof arg.load === \"function\" &&\n \"loadAndSplit\" in arg &&\n typeof arg.loadAndSplit === \"function\"\n ) {\n return true;\n }\n return false;\n};\n\ninterface IndexArgs {\n docsSource: BaseDocumentLoader | DocumentInterface[];\n recordManager: RecordManagerInterface;\n vectorStore: VectorStore;\n options?: IndexOptions;\n}\n\n/**\n * Index data from the doc source into the vector store.\n *\n * Indexing functionality uses a manager to keep track of which documents\n * are in the vector store.\n *\n * This allows us to keep track of which documents were updated, and which\n * documents were deleted, which documents should be skipped.\n *\n * For the time being, documents are indexed using their hashes, and users\n * are not able to specify the uid of the document.\n *\n * @param {IndexArgs} args\n * @param {BaseDocumentLoader | DocumentInterface[]} args.docsSource The source of documents to index. Can be a DocumentLoader or a list of Documents.\n * @param {RecordManagerInterface} args.recordManager The record manager to use for keeping track of indexed documents.\n * @param {VectorStore} args.vectorStore The vector store to use for storing the documents.\n * @param {IndexOptions | undefined} args.options Options for indexing.\n * @returns {Promise<IndexingResult>}\n */\nexport async function index(args: IndexArgs): Promise<IndexingResult> {\n const { docsSource, recordManager, vectorStore, options } = args;\n const {\n batchSize = 100,\n cleanup,\n sourceIdKey,\n cleanupBatchSize = 1000,\n forceUpdate = false,\n } = options ?? {};\n\n if (cleanup === \"incremental\" && !sourceIdKey) {\n throw new Error(\n \"sourceIdKey is required when cleanup mode is incremental. Please provide through 'options.sourceIdKey'.\"\n );\n }\n\n const docs = _isBaseDocumentLoader(docsSource)\n ? await docsSource.load()\n : docsSource;\n\n const sourceIdAssigner = _getSourceIdAssigner(sourceIdKey ?? null);\n\n const indexStartDt = await recordManager.getTime();\n let numAdded = 0;\n let numDeleted = 0;\n let numUpdated = 0;\n let numSkipped = 0;\n\n const batches = _batch<DocumentInterface>(batchSize ?? 100, docs);\n\n for (const batch of batches) {\n const hashedDocs = _deduplicateInOrder(\n batch.map((doc) => _HashedDocument.fromDocument(doc))\n );\n\n const sourceIds = hashedDocs.map((doc) => sourceIdAssigner(doc));\n\n if (cleanup === \"incremental\") {\n hashedDocs.forEach((_hashedDoc, index) => {\n const source = sourceIds[index];\n if (source === null) {\n throw new Error(\n \"sourceIdKey must be provided when cleanup is incremental\"\n );\n }\n });\n }\n\n const batchExists = await recordManager.exists(\n hashedDocs.map((doc) => doc.uid)\n );\n\n const uids: string[] = [];\n const docsToIndex: DocumentInterface[] = [];\n const docsToUpdate: string[] = [];\n const seenDocs = new Set<string>();\n hashedDocs.forEach((hashedDoc, i) => {\n const docExists = batchExists[i];\n if (docExists) {\n if (forceUpdate) {\n seenDocs.add(hashedDoc.uid);\n } else {\n docsToUpdate.push(hashedDoc.uid);\n return;\n }\n }\n uids.push(hashedDoc.uid);\n docsToIndex.push(hashedDoc.toDocument());\n });\n\n if (docsToUpdate.length > 0) {\n await recordManager.update(docsToUpdate, { timeAtLeast: indexStartDt });\n numSkipped += docsToUpdate.length;\n }\n\n if (docsToIndex.length > 0) {\n await vectorStore.addDocuments(docsToIndex, { ids: uids });\n numAdded += docsToIndex.length - seenDocs.size;\n numUpdated += seenDocs.size;\n }\n\n await recordManager.update(\n hashedDocs.map((doc) => doc.uid),\n { timeAtLeast: indexStartDt, groupIds: sourceIds }\n );\n\n if (cleanup === \"incremental\") {\n sourceIds.forEach((sourceId) => {\n if (!sourceId) throw new Error(\"Source id cannot be null\");\n });\n const uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n groupIds: sourceIds,\n });\n\n if (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n }\n }\n }\n\n if (cleanup === \"full\") {\n let uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n while (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n }\n }\n\n return {\n numAdded,\n numDeleted,\n numUpdated,\n numSkipped,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.cjs","names":["sha256","Document","UUIDV5_NAMESPACE"],"sources":["../../src/indexing/base.ts"],"sourcesContent":["import { v5 as uuidv5 } from \"uuid\";\nimport { VectorStore } from \"../vectorstores.js\";\nimport { RecordManagerInterface, UUIDV5_NAMESPACE } from \"./record_manager.js\";\nimport { sha256, type HashKeyEncoder } from \"../utils/hash.js\";\nimport { DocumentInterface, Document } from \"../documents/document.js\";\nimport { BaseDocumentLoader } from \"../document_loaders/base.js\";\n\ntype Metadata = Record<string, unknown>;\n\ntype IndexingResult = {\n numAdded: number;\n numDeleted: number;\n numUpdated: number;\n numSkipped: number;\n};\n\ntype StringOrDocFunc = string | ((doc: DocumentInterface) => string);\n\nexport interface HashedDocumentInterface extends DocumentInterface {\n uid: string;\n hash_?: string;\n contentHash?: string;\n metadataHash?: string;\n pageContent: string;\n metadata: Metadata;\n calculateHashes(): void;\n toDocument(): DocumentInterface;\n}\n\ninterface HashedDocumentArgs {\n pageContent: string;\n metadata: Metadata;\n uid: string;\n}\n\n/**\n * HashedDocument is a Document with hashes calculated.\n * Hashes are calculated based on page content and metadata.\n * It is used for indexing.\n */\nexport class _HashedDocument implements HashedDocumentInterface {\n uid: string;\n\n hash_?: string;\n\n contentHash?: string;\n\n metadataHash?: string;\n\n pageContent: string;\n\n metadata: Metadata;\n\n private keyEncoder: HashKeyEncoder = sha256;\n\n constructor(fields: HashedDocumentArgs) {\n this.uid = fields.uid;\n this.pageContent = fields.pageContent;\n this.metadata = fields.metadata;\n }\n\n makeDefaultKeyEncoder(keyEncoderFn: HashKeyEncoder): void {\n this.keyEncoder = keyEncoderFn;\n }\n\n calculateHashes(): void {\n const forbiddenKeys = [\"hash_\", \"content_hash\", \"metadata_hash\"];\n\n for (const key of forbiddenKeys) {\n if (key in this.metadata) {\n throw new Error(\n `Metadata cannot contain key ${key} as it is reserved for internal use. Restricted keys: [${forbiddenKeys.join(\n \", \"\n )}]`\n );\n }\n }\n\n const contentHash = this._hashStringToUUID(this.pageContent);\n\n try {\n const metadataHash = this._hashNestedDictToUUID(this.metadata);\n this.contentHash = contentHash;\n this.metadataHash = metadataHash;\n } catch (e) {\n throw new Error(\n `Failed to hash metadata: ${e}. Please use a dict that can be serialized using json.`\n );\n }\n\n this.hash_ = this._hashStringToUUID(this.contentHash + this.metadataHash);\n\n if (!this.uid) {\n this.uid = this.hash_;\n }\n }\n\n toDocument(): DocumentInterface {\n return new Document({\n pageContent: this.pageContent,\n metadata: this.metadata,\n });\n }\n\n static fromDocument(\n document: DocumentInterface,\n uid?: string\n ): _HashedDocument {\n const doc = new this({\n pageContent: document.pageContent,\n metadata: document.metadata,\n uid: uid || (document as DocumentInterface & { uid: string }).uid,\n });\n doc.calculateHashes();\n return doc;\n }\n\n private _hashStringToUUID(inputString: string): string {\n const hash_value = this.keyEncoder(inputString);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n\n private _hashNestedDictToUUID(data: Record<string, unknown>): string {\n const serialized_data = JSON.stringify(data, Object.keys(data).sort());\n const hash_value = this.keyEncoder(serialized_data);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n}\n\nexport type CleanupMode = \"full\" | \"incremental\";\n\nexport type IndexOptions = {\n /**\n * The number of documents to index in one batch.\n */\n batchSize?: number;\n /**\n * The cleanup mode to use. Can be \"full\", \"incremental\" or undefined.\n * - **Incremental**: Cleans up all documents that haven't been updated AND\n * that are associated with source ids that were seen\n * during indexing.\n * Clean up is done continuously during indexing helping\n * to minimize the probability of users seeing duplicated\n * content.\n * - **Full**: Delete all documents that haven to been returned by the loader.\n * Clean up runs after all documents have been indexed.\n * This means that users may see duplicated content during indexing.\n * - **undefined**: Do not delete any documents.\n */\n cleanup?: CleanupMode;\n /**\n * Optional key that helps identify the original source of the document.\n * Must either be a string representing the key of the source in the metadata\n * or a function that takes a document and returns a string representing the source.\n * **Required when cleanup is incremental**.\n */\n sourceIdKey?: StringOrDocFunc;\n /**\n * Batch size to use when cleaning up documents.\n */\n cleanupBatchSize?: number;\n /**\n * Force update documents even if they are present in the\n * record manager. Useful if you are re-indexing with updated embeddings.\n */\n forceUpdate?: boolean;\n};\n\nexport function _batch<T>(size: number, iterable: T[]): T[][] {\n const batches: T[][] = [];\n let currentBatch: T[] = [];\n\n iterable.forEach((item) => {\n currentBatch.push(item);\n\n if (currentBatch.length >= size) {\n batches.push(currentBatch);\n currentBatch = [];\n }\n });\n\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n\n return batches;\n}\n\nexport function _deduplicateInOrder(\n hashedDocuments: HashedDocumentInterface[]\n): HashedDocumentInterface[] {\n const seen = new Set<string>();\n const deduplicated: HashedDocumentInterface[] = [];\n\n for (const hashedDoc of hashedDocuments) {\n if (!hashedDoc.hash_) {\n throw new Error(\"Hashed document does not have a hash\");\n }\n\n if (!seen.has(hashedDoc.hash_)) {\n seen.add(hashedDoc.hash_);\n deduplicated.push(hashedDoc);\n }\n }\n return deduplicated;\n}\n\nexport function _getSourceIdAssigner(\n sourceIdKey: StringOrDocFunc | null\n): (doc: DocumentInterface) => string | null {\n if (sourceIdKey === null) {\n return (_doc: DocumentInterface) => null;\n } else if (typeof sourceIdKey === \"string\") {\n return (doc: DocumentInterface) => doc.metadata[sourceIdKey];\n } else if (typeof sourceIdKey === \"function\") {\n return sourceIdKey;\n } else {\n throw new Error(\n `sourceIdKey should be null, a string or a function, got ${typeof sourceIdKey}`\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const _isBaseDocumentLoader = (arg: any): arg is BaseDocumentLoader => {\n if (\n \"load\" in arg &&\n typeof arg.load === \"function\" &&\n \"loadAndSplit\" in arg &&\n typeof arg.loadAndSplit === \"function\"\n ) {\n return true;\n }\n return false;\n};\n\ninterface IndexArgs {\n docsSource: BaseDocumentLoader | DocumentInterface[];\n recordManager: RecordManagerInterface;\n vectorStore: VectorStore;\n options?: IndexOptions;\n}\n\n/**\n * Index data from the doc source into the vector store.\n *\n * Indexing functionality uses a manager to keep track of which documents\n * are in the vector store.\n *\n * This allows us to keep track of which documents were updated, and which\n * documents were deleted, which documents should be skipped.\n *\n * For the time being, documents are indexed using their hashes, and users\n * are not able to specify the uid of the document.\n *\n * @param {IndexArgs} args\n * @param {BaseDocumentLoader | DocumentInterface[]} args.docsSource The source of documents to index. Can be a DocumentLoader or a list of Documents.\n * @param {RecordManagerInterface} args.recordManager The record manager to use for keeping track of indexed documents.\n * @param {VectorStore} args.vectorStore The vector store to use for storing the documents.\n * @param {IndexOptions | undefined} args.options Options for indexing.\n * @returns {Promise<IndexingResult>}\n */\nexport async function index(args: IndexArgs): Promise<IndexingResult> {\n const { docsSource, recordManager, vectorStore, options } = args;\n const {\n batchSize = 100,\n cleanup,\n sourceIdKey,\n cleanupBatchSize = 1000,\n forceUpdate = false,\n } = options ?? {};\n\n if (cleanup === \"incremental\" && !sourceIdKey) {\n throw new Error(\n \"sourceIdKey is required when cleanup mode is incremental. Please provide through 'options.sourceIdKey'.\"\n );\n }\n\n const docs = _isBaseDocumentLoader(docsSource)\n ? await docsSource.load()\n : docsSource;\n\n const sourceIdAssigner = _getSourceIdAssigner(sourceIdKey ?? null);\n\n const indexStartDt = await recordManager.getTime();\n let numAdded = 0;\n let numDeleted = 0;\n let numUpdated = 0;\n let numSkipped = 0;\n\n const batches = _batch<DocumentInterface>(batchSize ?? 100, docs);\n\n for (const batch of batches) {\n const hashedDocs = _deduplicateInOrder(\n batch.map((doc) => _HashedDocument.fromDocument(doc))\n );\n\n const sourceIds = hashedDocs.map((doc) => sourceIdAssigner(doc));\n\n if (cleanup === \"incremental\") {\n hashedDocs.forEach((_hashedDoc, index) => {\n const source = sourceIds[index];\n if (source === null) {\n throw new Error(\n \"sourceIdKey must be provided when cleanup is incremental\"\n );\n }\n });\n }\n\n const batchExists = await recordManager.exists(\n hashedDocs.map((doc) => doc.uid)\n );\n\n const uids: string[] = [];\n const docsToIndex: DocumentInterface[] = [];\n const docsToUpdate: string[] = [];\n const seenDocs = new Set<string>();\n hashedDocs.forEach((hashedDoc, i) => {\n const docExists = batchExists[i];\n if (docExists) {\n if (forceUpdate) {\n seenDocs.add(hashedDoc.uid);\n } else {\n docsToUpdate.push(hashedDoc.uid);\n return;\n }\n }\n uids.push(hashedDoc.uid);\n docsToIndex.push(hashedDoc.toDocument());\n });\n\n if (docsToUpdate.length > 0) {\n await recordManager.update(docsToUpdate, { timeAtLeast: indexStartDt });\n numSkipped += docsToUpdate.length;\n }\n\n if (docsToIndex.length > 0) {\n await vectorStore.addDocuments(docsToIndex, { ids: uids });\n numAdded += docsToIndex.length - seenDocs.size;\n numUpdated += seenDocs.size;\n }\n\n await recordManager.update(\n hashedDocs.map((doc) => doc.uid),\n { timeAtLeast: indexStartDt, groupIds: sourceIds }\n );\n\n if (cleanup === \"incremental\") {\n sourceIds.forEach((sourceId) => {\n if (!sourceId) throw new Error(\"Source id cannot be null\");\n });\n const uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n groupIds: sourceIds,\n });\n\n if (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n }\n }\n }\n\n if (cleanup === \"full\") {\n let uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n while (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n }\n }\n\n return {\n numAdded,\n numDeleted,\n numUpdated,\n numSkipped,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"base.d.cts","names":[],"sources":["../../src/indexing/base.ts"],"mappings":";;;;;;;KAOK,QAAA,GAAW,MAAA;AAAA,KAEX,cAAA;EACH,QAAA;EACA,UAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAGG,eAAA,cAA6B,GAAA,EAAK,iBAAA;AAAA,UAEtB,uBAAA,SAAgC,iBAAA;EAC/C,GAAA;EACA,KAAA;EACA,WAAA;EACA,YAAA;EACA,WAAA;EACA,QAAA,EAAU,QAAA;EACV,eAAA;EACA,UAAA,IAAc,iBAAA;AAAA;AAAA,UAGN,kBAAA;EACR,WAAA;EACA,QAAA,EAAU,QAAA;EACV,GAAA;AAAA;;;;;;cAQW,eAAA,YAA2B,uBAAA;EACtC,GAAA;EAEA,KAAA;EAEA,WAAA;EAEA,YAAA;EAEA,WAAA;EAEA,QAAA,EAAU,QAAA;EAAA,QAEF,UAAA;EAER,WAAA,CAAY,MAAA,EAAQ,kBAAA;EAMpB,qBAAA,CAAsB,YAAA,EAAc,cAAA;EAIpC,eAAA,CAAA;EAgCA,UAAA,CAAA,GAAc,iBAAA;EAAA,OAOP,YAAA,CACL,QAAA,EAAU,iBAAA,EACV,GAAA,YACC,eAAA;EAAA,QAUK,iBAAA;EAAA,QAKA,qBAAA;AAAA;AAAA,KAOE,WAAA;AAAA,KAEA,YAAA;EApGQ;;;EAwGlB,SAAA;EAvGA;;;AAQF;;;;;;;;;;EA6GE,OAAA,GAAU,WAAA;EA7GmD;;;;;;EAoH7D,WAAA,GAAc,eAAA;EAzGd;;;EA6GA,gBAAA;EAzGoB;;;;EA8GpB,WAAA;AAAA;AAAA,iBAGc,MAAA,GAAA,CAAU,IAAA,UAAc,QAAA,EAAU,CAAA,KAAM,CAAA;AAAA,iBAoBxC,mBAAA,CACd,eAAA,EAAiB,uBAAA,KAChB,uBAAA;AAAA,iBAiBa,oBAAA,CACd,WAAA,EAAa,eAAA,WACX,GAAA,EAAK,iBAAA;AAAA,cAeI,qBAAA,GAAqB,GAAA,UAAA,GAAA,IAAA,kBAAA;AAAA,UAYxB,SAAA;EACR,UAAA,EAAY,kBAAA,GAAqB,iBAAA;EACjC,aAAA,EAAe,sBAAA;EACf,WAAA,EAAa,WAAA;EACb,OAAA,GAAU,YAAA;AAAA;;AA/GZ;;;;;AAEA;;;;;;;;;;;;;iBAmIsB,KAAA,CAAM,IAAA,EAAM,SAAA,GAAY,OAAA,CAAQ,cAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"base.d.ts","names":[],"sources":["../../src/indexing/base.ts"],"mappings":";;;;;;;KAOK,QAAA,GAAW,MAAA;AAAA,KAEX,cAAA;EACH,QAAA;EACA,UAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAGG,eAAA,cAA6B,GAAA,EAAK,iBAAA;AAAA,UAEtB,uBAAA,SAAgC,iBAAA;EAC/C,GAAA;EACA,KAAA;EACA,WAAA;EACA,YAAA;EACA,WAAA;EACA,QAAA,EAAU,QAAA;EACV,eAAA;EACA,UAAA,IAAc,iBAAA;AAAA;AAAA,UAGN,kBAAA;EACR,WAAA;EACA,QAAA,EAAU,QAAA;EACV,GAAA;AAAA;;;;;;cAQW,eAAA,YAA2B,uBAAA;EACtC,GAAA;EAEA,KAAA;EAEA,WAAA;EAEA,YAAA;EAEA,WAAA;EAEA,QAAA,EAAU,QAAA;EAAA,QAEF,UAAA;EAER,WAAA,CAAY,MAAA,EAAQ,kBAAA;EAMpB,qBAAA,CAAsB,YAAA,EAAc,cAAA;EAIpC,eAAA,CAAA;EAgCA,UAAA,CAAA,GAAc,iBAAA;EAAA,OAOP,YAAA,CACL,QAAA,EAAU,iBAAA,EACV,GAAA,YACC,eAAA;EAAA,QAUK,iBAAA;EAAA,QAKA,qBAAA;AAAA;AAAA,KAOE,WAAA;AAAA,KAEA,YAAA;EApGQ;;;EAwGlB,SAAA;EAvGA;;;AAQF;;;;;;;;;;EA6GE,OAAA,GAAU,WAAA;EA7GmD;;;;;;EAoH7D,WAAA,GAAc,eAAA;EAzGd;;;EA6GA,gBAAA;EAzGoB;;;;EA8GpB,WAAA;AAAA;AAAA,iBAGc,MAAA,GAAA,CAAU,IAAA,UAAc,QAAA,EAAU,CAAA,KAAM,CAAA;AAAA,iBAoBxC,mBAAA,CACd,eAAA,EAAiB,uBAAA,KAChB,uBAAA;AAAA,iBAiBa,oBAAA,CACd,WAAA,EAAa,eAAA,WACX,GAAA,EAAK,iBAAA;AAAA,cAeI,qBAAA,GAAqB,GAAA,UAAA,GAAA,IAAA,kBAAA;AAAA,UAYxB,SAAA;EACR,UAAA,EAAY,kBAAA,GAAqB,iBAAA;EACjC,aAAA,EAAe,sBAAA;EACf,WAAA,EAAa,WAAA;EACb,OAAA,GAAU,YAAA;AAAA;;AA/GZ;;;;;AAEA;;;;;;;;;;;;;iBAmIsB,KAAA,CAAM,IAAA,EAAM,SAAA,GAAY,OAAA,CAAQ,cAAA"}
|
package/dist/indexing/base.js
CHANGED
|
@@ -60,13 +60,11 @@ var _HashedDocument = class {
|
|
|
60
60
|
return doc;
|
|
61
61
|
}
|
|
62
62
|
_hashStringToUUID(inputString) {
|
|
63
|
-
|
|
64
|
-
return v5(hash_value, UUIDV5_NAMESPACE);
|
|
63
|
+
return v5(this.keyEncoder(inputString), UUIDV5_NAMESPACE);
|
|
65
64
|
}
|
|
66
65
|
_hashNestedDictToUUID(data) {
|
|
67
66
|
const serialized_data = JSON.stringify(data, Object.keys(data).sort());
|
|
68
|
-
|
|
69
|
-
return v5(hash_value, UUIDV5_NAMESPACE);
|
|
67
|
+
return v5(this.keyEncoder(serialized_data), UUIDV5_NAMESPACE);
|
|
70
68
|
}
|
|
71
69
|
};
|
|
72
70
|
function _batch(size, iterable) {
|
|
@@ -138,9 +136,8 @@ async function index(args) {
|
|
|
138
136
|
for (const batch of batches) {
|
|
139
137
|
const hashedDocs = _deduplicateInOrder(batch.map((doc) => _HashedDocument.fromDocument(doc)));
|
|
140
138
|
const sourceIds = hashedDocs.map((doc) => sourceIdAssigner(doc));
|
|
141
|
-
if (cleanup === "incremental") hashedDocs.forEach((_hashedDoc, index
|
|
142
|
-
|
|
143
|
-
if (source === null) throw new Error("sourceIdKey must be provided when cleanup is incremental");
|
|
139
|
+
if (cleanup === "incremental") hashedDocs.forEach((_hashedDoc, index) => {
|
|
140
|
+
if (sourceIds[index] === null) throw new Error("sourceIdKey must be provided when cleanup is incremental");
|
|
144
141
|
});
|
|
145
142
|
const batchExists = await recordManager.exists(hashedDocs.map((doc) => doc.uid));
|
|
146
143
|
const uids = [];
|
|
@@ -148,8 +145,7 @@ async function index(args) {
|
|
|
148
145
|
const docsToUpdate = [];
|
|
149
146
|
const seenDocs = /* @__PURE__ */ new Set();
|
|
150
147
|
hashedDocs.forEach((hashedDoc, i) => {
|
|
151
|
-
|
|
152
|
-
if (docExists) if (forceUpdate) seenDocs.add(hashedDoc.uid);
|
|
148
|
+
if (batchExists[i]) if (forceUpdate) seenDocs.add(hashedDoc.uid);
|
|
153
149
|
else {
|
|
154
150
|
docsToUpdate.push(hashedDoc.uid);
|
|
155
151
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","names":["fields: HashedDocumentArgs","keyEncoderFn: HashKeyEncoder","document: DocumentInterface","uid?: string","inputString: string","uuidv5","data: Record<string, unknown>","size: number","iterable: T[]","batches: T[][]","currentBatch: T[]","hashedDocuments: HashedDocumentInterface[]","deduplicated: HashedDocumentInterface[]","sourceIdKey: StringOrDocFunc | null","_doc: DocumentInterface","doc: DocumentInterface","arg: any","args: IndexArgs","index","uids: string[]","docsToIndex: DocumentInterface[]","docsToUpdate: string[]"],"sources":["../../src/indexing/base.ts"],"sourcesContent":["import { v5 as uuidv5 } from \"uuid\";\nimport { VectorStore } from \"../vectorstores.js\";\nimport { RecordManagerInterface, UUIDV5_NAMESPACE } from \"./record_manager.js\";\nimport { sha256, type HashKeyEncoder } from \"../utils/hash.js\";\nimport { DocumentInterface, Document } from \"../documents/document.js\";\nimport { BaseDocumentLoader } from \"../document_loaders/base.js\";\n\ntype Metadata = Record<string, unknown>;\n\ntype IndexingResult = {\n numAdded: number;\n numDeleted: number;\n numUpdated: number;\n numSkipped: number;\n};\n\ntype StringOrDocFunc = string | ((doc: DocumentInterface) => string);\n\nexport interface HashedDocumentInterface extends DocumentInterface {\n uid: string;\n hash_?: string;\n contentHash?: string;\n metadataHash?: string;\n pageContent: string;\n metadata: Metadata;\n calculateHashes(): void;\n toDocument(): DocumentInterface;\n}\n\ninterface HashedDocumentArgs {\n pageContent: string;\n metadata: Metadata;\n uid: string;\n}\n\n/**\n * HashedDocument is a Document with hashes calculated.\n * Hashes are calculated based on page content and metadata.\n * It is used for indexing.\n */\nexport class _HashedDocument implements HashedDocumentInterface {\n uid: string;\n\n hash_?: string;\n\n contentHash?: string;\n\n metadataHash?: string;\n\n pageContent: string;\n\n metadata: Metadata;\n\n private keyEncoder: HashKeyEncoder = sha256;\n\n constructor(fields: HashedDocumentArgs) {\n this.uid = fields.uid;\n this.pageContent = fields.pageContent;\n this.metadata = fields.metadata;\n }\n\n makeDefaultKeyEncoder(keyEncoderFn: HashKeyEncoder): void {\n this.keyEncoder = keyEncoderFn;\n }\n\n calculateHashes(): void {\n const forbiddenKeys = [\"hash_\", \"content_hash\", \"metadata_hash\"];\n\n for (const key of forbiddenKeys) {\n if (key in this.metadata) {\n throw new Error(\n `Metadata cannot contain key ${key} as it is reserved for internal use. Restricted keys: [${forbiddenKeys.join(\n \", \"\n )}]`\n );\n }\n }\n\n const contentHash = this._hashStringToUUID(this.pageContent);\n\n try {\n const metadataHash = this._hashNestedDictToUUID(this.metadata);\n this.contentHash = contentHash;\n this.metadataHash = metadataHash;\n } catch (e) {\n throw new Error(\n `Failed to hash metadata: ${e}. Please use a dict that can be serialized using json.`\n );\n }\n\n this.hash_ = this._hashStringToUUID(this.contentHash + this.metadataHash);\n\n if (!this.uid) {\n this.uid = this.hash_;\n }\n }\n\n toDocument(): DocumentInterface {\n return new Document({\n pageContent: this.pageContent,\n metadata: this.metadata,\n });\n }\n\n static fromDocument(\n document: DocumentInterface,\n uid?: string\n ): _HashedDocument {\n const doc = new this({\n pageContent: document.pageContent,\n metadata: document.metadata,\n uid: uid || (document as DocumentInterface & { uid: string }).uid,\n });\n doc.calculateHashes();\n return doc;\n }\n\n private _hashStringToUUID(inputString: string): string {\n const hash_value = this.keyEncoder(inputString);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n\n private _hashNestedDictToUUID(data: Record<string, unknown>): string {\n const serialized_data = JSON.stringify(data, Object.keys(data).sort());\n const hash_value = this.keyEncoder(serialized_data);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n}\n\nexport type CleanupMode = \"full\" | \"incremental\";\n\nexport type IndexOptions = {\n /**\n * The number of documents to index in one batch.\n */\n batchSize?: number;\n /**\n * The cleanup mode to use. Can be \"full\", \"incremental\" or undefined.\n * - **Incremental**: Cleans up all documents that haven't been updated AND\n * that are associated with source ids that were seen\n * during indexing.\n * Clean up is done continuously during indexing helping\n * to minimize the probability of users seeing duplicated\n * content.\n * - **Full**: Delete all documents that haven to been returned by the loader.\n * Clean up runs after all documents have been indexed.\n * This means that users may see duplicated content during indexing.\n * - **undefined**: Do not delete any documents.\n */\n cleanup?: CleanupMode;\n /**\n * Optional key that helps identify the original source of the document.\n * Must either be a string representing the key of the source in the metadata\n * or a function that takes a document and returns a string representing the source.\n * **Required when cleanup is incremental**.\n */\n sourceIdKey?: StringOrDocFunc;\n /**\n * Batch size to use when cleaning up documents.\n */\n cleanupBatchSize?: number;\n /**\n * Force update documents even if they are present in the\n * record manager. Useful if you are re-indexing with updated embeddings.\n */\n forceUpdate?: boolean;\n};\n\nexport function _batch<T>(size: number, iterable: T[]): T[][] {\n const batches: T[][] = [];\n let currentBatch: T[] = [];\n\n iterable.forEach((item) => {\n currentBatch.push(item);\n\n if (currentBatch.length >= size) {\n batches.push(currentBatch);\n currentBatch = [];\n }\n });\n\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n\n return batches;\n}\n\nexport function _deduplicateInOrder(\n hashedDocuments: HashedDocumentInterface[]\n): HashedDocumentInterface[] {\n const seen = new Set<string>();\n const deduplicated: HashedDocumentInterface[] = [];\n\n for (const hashedDoc of hashedDocuments) {\n if (!hashedDoc.hash_) {\n throw new Error(\"Hashed document does not have a hash\");\n }\n\n if (!seen.has(hashedDoc.hash_)) {\n seen.add(hashedDoc.hash_);\n deduplicated.push(hashedDoc);\n }\n }\n return deduplicated;\n}\n\nexport function _getSourceIdAssigner(\n sourceIdKey: StringOrDocFunc | null\n): (doc: DocumentInterface) => string | null {\n if (sourceIdKey === null) {\n return (_doc: DocumentInterface) => null;\n } else if (typeof sourceIdKey === \"string\") {\n return (doc: DocumentInterface) => doc.metadata[sourceIdKey];\n } else if (typeof sourceIdKey === \"function\") {\n return sourceIdKey;\n } else {\n throw new Error(\n `sourceIdKey should be null, a string or a function, got ${typeof sourceIdKey}`\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const _isBaseDocumentLoader = (arg: any): arg is BaseDocumentLoader => {\n if (\n \"load\" in arg &&\n typeof arg.load === \"function\" &&\n \"loadAndSplit\" in arg &&\n typeof arg.loadAndSplit === \"function\"\n ) {\n return true;\n }\n return false;\n};\n\ninterface IndexArgs {\n docsSource: BaseDocumentLoader | DocumentInterface[];\n recordManager: RecordManagerInterface;\n vectorStore: VectorStore;\n options?: IndexOptions;\n}\n\n/**\n * Index data from the doc source into the vector store.\n *\n * Indexing functionality uses a manager to keep track of which documents\n * are in the vector store.\n *\n * This allows us to keep track of which documents were updated, and which\n * documents were deleted, which documents should be skipped.\n *\n * For the time being, documents are indexed using their hashes, and users\n * are not able to specify the uid of the document.\n *\n * @param {IndexArgs} args\n * @param {BaseDocumentLoader | DocumentInterface[]} args.docsSource The source of documents to index. Can be a DocumentLoader or a list of Documents.\n * @param {RecordManagerInterface} args.recordManager The record manager to use for keeping track of indexed documents.\n * @param {VectorStore} args.vectorStore The vector store to use for storing the documents.\n * @param {IndexOptions | undefined} args.options Options for indexing.\n * @returns {Promise<IndexingResult>}\n */\nexport async function index(args: IndexArgs): Promise<IndexingResult> {\n const { docsSource, recordManager, vectorStore, options } = args;\n const {\n batchSize = 100,\n cleanup,\n sourceIdKey,\n cleanupBatchSize = 1000,\n forceUpdate = false,\n } = options ?? {};\n\n if (cleanup === \"incremental\" && !sourceIdKey) {\n throw new Error(\n \"sourceIdKey is required when cleanup mode is incremental. Please provide through 'options.sourceIdKey'.\"\n );\n }\n\n const docs = _isBaseDocumentLoader(docsSource)\n ? await docsSource.load()\n : docsSource;\n\n const sourceIdAssigner = _getSourceIdAssigner(sourceIdKey ?? null);\n\n const indexStartDt = await recordManager.getTime();\n let numAdded = 0;\n let numDeleted = 0;\n let numUpdated = 0;\n let numSkipped = 0;\n\n const batches = _batch<DocumentInterface>(batchSize ?? 100, docs);\n\n for (const batch of batches) {\n const hashedDocs = _deduplicateInOrder(\n batch.map((doc) => _HashedDocument.fromDocument(doc))\n );\n\n const sourceIds = hashedDocs.map((doc) => sourceIdAssigner(doc));\n\n if (cleanup === \"incremental\") {\n hashedDocs.forEach((_hashedDoc, index) => {\n const source = sourceIds[index];\n if (source === null) {\n throw new Error(\n \"sourceIdKey must be provided when cleanup is incremental\"\n );\n }\n });\n }\n\n const batchExists = await recordManager.exists(\n hashedDocs.map((doc) => doc.uid)\n );\n\n const uids: string[] = [];\n const docsToIndex: DocumentInterface[] = [];\n const docsToUpdate: string[] = [];\n const seenDocs = new Set<string>();\n hashedDocs.forEach((hashedDoc, i) => {\n const docExists = batchExists[i];\n if (docExists) {\n if (forceUpdate) {\n seenDocs.add(hashedDoc.uid);\n } else {\n docsToUpdate.push(hashedDoc.uid);\n return;\n }\n }\n uids.push(hashedDoc.uid);\n docsToIndex.push(hashedDoc.toDocument());\n });\n\n if (docsToUpdate.length > 0) {\n await recordManager.update(docsToUpdate, { timeAtLeast: indexStartDt });\n numSkipped += docsToUpdate.length;\n }\n\n if (docsToIndex.length > 0) {\n await vectorStore.addDocuments(docsToIndex, { ids: uids });\n numAdded += docsToIndex.length - seenDocs.size;\n numUpdated += seenDocs.size;\n }\n\n await recordManager.update(\n hashedDocs.map((doc) => doc.uid),\n { timeAtLeast: indexStartDt, groupIds: sourceIds }\n );\n\n if (cleanup === \"incremental\") {\n sourceIds.forEach((sourceId) => {\n if (!sourceId) throw new Error(\"Source id cannot be null\");\n });\n const uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n groupIds: sourceIds,\n });\n\n if (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n }\n }\n }\n\n if (cleanup === \"full\") {\n let uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n while (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n }\n }\n\n return {\n numAdded,\n numDeleted,\n numUpdated,\n numSkipped,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.js","names":["uuidv5"],"sources":["../../src/indexing/base.ts"],"sourcesContent":["import { v5 as uuidv5 } from \"uuid\";\nimport { VectorStore } from \"../vectorstores.js\";\nimport { RecordManagerInterface, UUIDV5_NAMESPACE } from \"./record_manager.js\";\nimport { sha256, type HashKeyEncoder } from \"../utils/hash.js\";\nimport { DocumentInterface, Document } from \"../documents/document.js\";\nimport { BaseDocumentLoader } from \"../document_loaders/base.js\";\n\ntype Metadata = Record<string, unknown>;\n\ntype IndexingResult = {\n numAdded: number;\n numDeleted: number;\n numUpdated: number;\n numSkipped: number;\n};\n\ntype StringOrDocFunc = string | ((doc: DocumentInterface) => string);\n\nexport interface HashedDocumentInterface extends DocumentInterface {\n uid: string;\n hash_?: string;\n contentHash?: string;\n metadataHash?: string;\n pageContent: string;\n metadata: Metadata;\n calculateHashes(): void;\n toDocument(): DocumentInterface;\n}\n\ninterface HashedDocumentArgs {\n pageContent: string;\n metadata: Metadata;\n uid: string;\n}\n\n/**\n * HashedDocument is a Document with hashes calculated.\n * Hashes are calculated based on page content and metadata.\n * It is used for indexing.\n */\nexport class _HashedDocument implements HashedDocumentInterface {\n uid: string;\n\n hash_?: string;\n\n contentHash?: string;\n\n metadataHash?: string;\n\n pageContent: string;\n\n metadata: Metadata;\n\n private keyEncoder: HashKeyEncoder = sha256;\n\n constructor(fields: HashedDocumentArgs) {\n this.uid = fields.uid;\n this.pageContent = fields.pageContent;\n this.metadata = fields.metadata;\n }\n\n makeDefaultKeyEncoder(keyEncoderFn: HashKeyEncoder): void {\n this.keyEncoder = keyEncoderFn;\n }\n\n calculateHashes(): void {\n const forbiddenKeys = [\"hash_\", \"content_hash\", \"metadata_hash\"];\n\n for (const key of forbiddenKeys) {\n if (key in this.metadata) {\n throw new Error(\n `Metadata cannot contain key ${key} as it is reserved for internal use. Restricted keys: [${forbiddenKeys.join(\n \", \"\n )}]`\n );\n }\n }\n\n const contentHash = this._hashStringToUUID(this.pageContent);\n\n try {\n const metadataHash = this._hashNestedDictToUUID(this.metadata);\n this.contentHash = contentHash;\n this.metadataHash = metadataHash;\n } catch (e) {\n throw new Error(\n `Failed to hash metadata: ${e}. Please use a dict that can be serialized using json.`\n );\n }\n\n this.hash_ = this._hashStringToUUID(this.contentHash + this.metadataHash);\n\n if (!this.uid) {\n this.uid = this.hash_;\n }\n }\n\n toDocument(): DocumentInterface {\n return new Document({\n pageContent: this.pageContent,\n metadata: this.metadata,\n });\n }\n\n static fromDocument(\n document: DocumentInterface,\n uid?: string\n ): _HashedDocument {\n const doc = new this({\n pageContent: document.pageContent,\n metadata: document.metadata,\n uid: uid || (document as DocumentInterface & { uid: string }).uid,\n });\n doc.calculateHashes();\n return doc;\n }\n\n private _hashStringToUUID(inputString: string): string {\n const hash_value = this.keyEncoder(inputString);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n\n private _hashNestedDictToUUID(data: Record<string, unknown>): string {\n const serialized_data = JSON.stringify(data, Object.keys(data).sort());\n const hash_value = this.keyEncoder(serialized_data);\n return uuidv5(hash_value, UUIDV5_NAMESPACE);\n }\n}\n\nexport type CleanupMode = \"full\" | \"incremental\";\n\nexport type IndexOptions = {\n /**\n * The number of documents to index in one batch.\n */\n batchSize?: number;\n /**\n * The cleanup mode to use. Can be \"full\", \"incremental\" or undefined.\n * - **Incremental**: Cleans up all documents that haven't been updated AND\n * that are associated with source ids that were seen\n * during indexing.\n * Clean up is done continuously during indexing helping\n * to minimize the probability of users seeing duplicated\n * content.\n * - **Full**: Delete all documents that haven to been returned by the loader.\n * Clean up runs after all documents have been indexed.\n * This means that users may see duplicated content during indexing.\n * - **undefined**: Do not delete any documents.\n */\n cleanup?: CleanupMode;\n /**\n * Optional key that helps identify the original source of the document.\n * Must either be a string representing the key of the source in the metadata\n * or a function that takes a document and returns a string representing the source.\n * **Required when cleanup is incremental**.\n */\n sourceIdKey?: StringOrDocFunc;\n /**\n * Batch size to use when cleaning up documents.\n */\n cleanupBatchSize?: number;\n /**\n * Force update documents even if they are present in the\n * record manager. Useful if you are re-indexing with updated embeddings.\n */\n forceUpdate?: boolean;\n};\n\nexport function _batch<T>(size: number, iterable: T[]): T[][] {\n const batches: T[][] = [];\n let currentBatch: T[] = [];\n\n iterable.forEach((item) => {\n currentBatch.push(item);\n\n if (currentBatch.length >= size) {\n batches.push(currentBatch);\n currentBatch = [];\n }\n });\n\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n\n return batches;\n}\n\nexport function _deduplicateInOrder(\n hashedDocuments: HashedDocumentInterface[]\n): HashedDocumentInterface[] {\n const seen = new Set<string>();\n const deduplicated: HashedDocumentInterface[] = [];\n\n for (const hashedDoc of hashedDocuments) {\n if (!hashedDoc.hash_) {\n throw new Error(\"Hashed document does not have a hash\");\n }\n\n if (!seen.has(hashedDoc.hash_)) {\n seen.add(hashedDoc.hash_);\n deduplicated.push(hashedDoc);\n }\n }\n return deduplicated;\n}\n\nexport function _getSourceIdAssigner(\n sourceIdKey: StringOrDocFunc | null\n): (doc: DocumentInterface) => string | null {\n if (sourceIdKey === null) {\n return (_doc: DocumentInterface) => null;\n } else if (typeof sourceIdKey === \"string\") {\n return (doc: DocumentInterface) => doc.metadata[sourceIdKey];\n } else if (typeof sourceIdKey === \"function\") {\n return sourceIdKey;\n } else {\n throw new Error(\n `sourceIdKey should be null, a string or a function, got ${typeof sourceIdKey}`\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const _isBaseDocumentLoader = (arg: any): arg is BaseDocumentLoader => {\n if (\n \"load\" in arg &&\n typeof arg.load === \"function\" &&\n \"loadAndSplit\" in arg &&\n typeof arg.loadAndSplit === \"function\"\n ) {\n return true;\n }\n return false;\n};\n\ninterface IndexArgs {\n docsSource: BaseDocumentLoader | DocumentInterface[];\n recordManager: RecordManagerInterface;\n vectorStore: VectorStore;\n options?: IndexOptions;\n}\n\n/**\n * Index data from the doc source into the vector store.\n *\n * Indexing functionality uses a manager to keep track of which documents\n * are in the vector store.\n *\n * This allows us to keep track of which documents were updated, and which\n * documents were deleted, which documents should be skipped.\n *\n * For the time being, documents are indexed using their hashes, and users\n * are not able to specify the uid of the document.\n *\n * @param {IndexArgs} args\n * @param {BaseDocumentLoader | DocumentInterface[]} args.docsSource The source of documents to index. Can be a DocumentLoader or a list of Documents.\n * @param {RecordManagerInterface} args.recordManager The record manager to use for keeping track of indexed documents.\n * @param {VectorStore} args.vectorStore The vector store to use for storing the documents.\n * @param {IndexOptions | undefined} args.options Options for indexing.\n * @returns {Promise<IndexingResult>}\n */\nexport async function index(args: IndexArgs): Promise<IndexingResult> {\n const { docsSource, recordManager, vectorStore, options } = args;\n const {\n batchSize = 100,\n cleanup,\n sourceIdKey,\n cleanupBatchSize = 1000,\n forceUpdate = false,\n } = options ?? {};\n\n if (cleanup === \"incremental\" && !sourceIdKey) {\n throw new Error(\n \"sourceIdKey is required when cleanup mode is incremental. Please provide through 'options.sourceIdKey'.\"\n );\n }\n\n const docs = _isBaseDocumentLoader(docsSource)\n ? await docsSource.load()\n : docsSource;\n\n const sourceIdAssigner = _getSourceIdAssigner(sourceIdKey ?? null);\n\n const indexStartDt = await recordManager.getTime();\n let numAdded = 0;\n let numDeleted = 0;\n let numUpdated = 0;\n let numSkipped = 0;\n\n const batches = _batch<DocumentInterface>(batchSize ?? 100, docs);\n\n for (const batch of batches) {\n const hashedDocs = _deduplicateInOrder(\n batch.map((doc) => _HashedDocument.fromDocument(doc))\n );\n\n const sourceIds = hashedDocs.map((doc) => sourceIdAssigner(doc));\n\n if (cleanup === \"incremental\") {\n hashedDocs.forEach((_hashedDoc, index) => {\n const source = sourceIds[index];\n if (source === null) {\n throw new Error(\n \"sourceIdKey must be provided when cleanup is incremental\"\n );\n }\n });\n }\n\n const batchExists = await recordManager.exists(\n hashedDocs.map((doc) => doc.uid)\n );\n\n const uids: string[] = [];\n const docsToIndex: DocumentInterface[] = [];\n const docsToUpdate: string[] = [];\n const seenDocs = new Set<string>();\n hashedDocs.forEach((hashedDoc, i) => {\n const docExists = batchExists[i];\n if (docExists) {\n if (forceUpdate) {\n seenDocs.add(hashedDoc.uid);\n } else {\n docsToUpdate.push(hashedDoc.uid);\n return;\n }\n }\n uids.push(hashedDoc.uid);\n docsToIndex.push(hashedDoc.toDocument());\n });\n\n if (docsToUpdate.length > 0) {\n await recordManager.update(docsToUpdate, { timeAtLeast: indexStartDt });\n numSkipped += docsToUpdate.length;\n }\n\n if (docsToIndex.length > 0) {\n await vectorStore.addDocuments(docsToIndex, { ids: uids });\n numAdded += docsToIndex.length - seenDocs.size;\n numUpdated += seenDocs.size;\n }\n\n await recordManager.update(\n hashedDocs.map((doc) => doc.uid),\n { timeAtLeast: indexStartDt, groupIds: sourceIds }\n );\n\n if (cleanup === \"incremental\") {\n sourceIds.forEach((sourceId) => {\n if (!sourceId) throw new Error(\"Source id cannot be null\");\n });\n const uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n groupIds: sourceIds,\n });\n\n if (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n }\n }\n }\n\n if (cleanup === \"full\") {\n let uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n while (uidsToDelete.length > 0) {\n await vectorStore.delete({ ids: uidsToDelete });\n await recordManager.deleteKeys(uidsToDelete);\n numDeleted += uidsToDelete.length;\n uidsToDelete = await recordManager.listKeys({\n before: indexStartDt,\n limit: cleanupBatchSize,\n });\n }\n }\n\n return {\n numAdded,\n numDeleted,\n numUpdated,\n numSkipped,\n };\n}\n"],"mappings":"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"}
|
package/dist/indexing/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
2
3
|
const require_record_manager = require('./record_manager.cjs');
|
|
3
4
|
const require_base = require('./base.cjs');
|
|
4
5
|
|
|
5
6
|
//#region src/indexing/index.ts
|
|
6
|
-
var indexing_exports = {
|
|
7
|
-
require_rolldown_runtime.__export(indexing_exports, {
|
|
7
|
+
var indexing_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
8
8
|
RecordManager: () => require_record_manager.RecordManager,
|
|
9
9
|
UUIDV5_NAMESPACE: () => require_record_manager.UUIDV5_NAMESPACE,
|
|
10
10
|
_HashedDocument: () => require_base._HashedDocument,
|
package/dist/indexing/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { RecordManager, UUIDV5_NAMESPACE } from "./record_manager.js";
|
|
3
3
|
import { _HashedDocument, _batch, _deduplicateInOrder, _getSourceIdAssigner, _isBaseDocumentLoader, index } from "./base.js";
|
|
4
4
|
|
|
5
5
|
//#region src/indexing/index.ts
|
|
6
|
-
var indexing_exports = {
|
|
7
|
-
__export(indexing_exports, {
|
|
6
|
+
var indexing_exports = /* @__PURE__ */ __exportAll({
|
|
8
7
|
RecordManager: () => RecordManager,
|
|
9
8
|
UUIDV5_NAMESPACE: () => UUIDV5_NAMESPACE,
|
|
10
9
|
_HashedDocument: () => _HashedDocument,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record_manager.cjs","names":["Serializable"],"sources":["../../src/indexing/record_manager.ts"],"sourcesContent":["import { Serializable } from \"../load/serializable.js\";\n\n// Arbitrary value, used for generating namespaced UUIDs.\nexport const UUIDV5_NAMESPACE = \"10f90ea3-90a4-4962-bf75-83a0f3c1c62a\";\n\nexport type UpdateOptions = {\n groupIds?: (string | null)[];\n timeAtLeast?: number;\n};\n\nexport type ListKeyOptions = {\n before?: number;\n after?: number;\n groupIds?: (string | null)[];\n limit?: number;\n};\n\nexport interface RecordManagerInterface {\n /**\n * Creates schema in the record manager.\n * @returns Promise\n */\n createSchema(): Promise<void>;\n /**\n * Returns current time from the record manager.\n * @returns Current time\n */\n getTime(): Promise<number>;\n /**\n * Updates keys in the record manager.\n * @param keys List of keys to update\n * @param groupIds List of groupIds to update\n * @param timeAtLeast Update only if current time is at least this value\n * @returns Promise\n * @throws Error if timeAtLeast is provided and current time is less than timeAtLeast\n * @throws Error if number of keys does not match number of groupIds\n */\n update(keys: string[], updateOptions: UpdateOptions): Promise<void>;\n /**\n * Checks if keys exist in the record manager.\n * @param keys List of keys to check\n * @returns List of booleans indicating if key exists in same order as provided keys\n */\n exists(keys: string[]): Promise<boolean[]>;\n /**\n * Lists keys from the record manager.\n * @param before List keys before this timestamp\n * @param after List keys after this timestamp\n * @param groupIds List keys with these groupIds\n * @param limit Limit the number of keys returned\n * @returns List of keys\n *\n */\n listKeys(options: ListKeyOptions): Promise<string[]>;\n /**\n * Deletes keys from the record manager.\n * @param keys List of keys to delete\n */\n deleteKeys(keys: string[]): Promise<void>;\n}\n\nexport abstract class RecordManager\n extends Serializable\n implements RecordManagerInterface\n{\n lc_namespace = [\"langchain\", \"recordmanagers\"];\n\n abstract createSchema(): Promise<void>;\n\n abstract getTime(): Promise<number>;\n\n abstract update(keys: string[], updateOptions?: UpdateOptions): Promise<void>;\n\n abstract exists(keys: string[]): Promise<boolean[]>;\n\n abstract listKeys(options?: ListKeyOptions): Promise<string[]>;\n\n abstract deleteKeys(keys: string[]): Promise<void>;\n}\n"],"mappings":";;;AAGA,MAAa,mBAAmB;AA0DhC,IAAsB,gBAAtB,cACUA,uCAEV;CACE,eAAe,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"record_manager.cjs","names":["Serializable"],"sources":["../../src/indexing/record_manager.ts"],"sourcesContent":["import { Serializable } from \"../load/serializable.js\";\n\n// Arbitrary value, used for generating namespaced UUIDs.\nexport const UUIDV5_NAMESPACE = \"10f90ea3-90a4-4962-bf75-83a0f3c1c62a\";\n\nexport type UpdateOptions = {\n groupIds?: (string | null)[];\n timeAtLeast?: number;\n};\n\nexport type ListKeyOptions = {\n before?: number;\n after?: number;\n groupIds?: (string | null)[];\n limit?: number;\n};\n\nexport interface RecordManagerInterface {\n /**\n * Creates schema in the record manager.\n * @returns Promise\n */\n createSchema(): Promise<void>;\n /**\n * Returns current time from the record manager.\n * @returns Current time\n */\n getTime(): Promise<number>;\n /**\n * Updates keys in the record manager.\n * @param keys List of keys to update\n * @param groupIds List of groupIds to update\n * @param timeAtLeast Update only if current time is at least this value\n * @returns Promise\n * @throws Error if timeAtLeast is provided and current time is less than timeAtLeast\n * @throws Error if number of keys does not match number of groupIds\n */\n update(keys: string[], updateOptions: UpdateOptions): Promise<void>;\n /**\n * Checks if keys exist in the record manager.\n * @param keys List of keys to check\n * @returns List of booleans indicating if key exists in same order as provided keys\n */\n exists(keys: string[]): Promise<boolean[]>;\n /**\n * Lists keys from the record manager.\n * @param before List keys before this timestamp\n * @param after List keys after this timestamp\n * @param groupIds List keys with these groupIds\n * @param limit Limit the number of keys returned\n * @returns List of keys\n *\n */\n listKeys(options: ListKeyOptions): Promise<string[]>;\n /**\n * Deletes keys from the record manager.\n * @param keys List of keys to delete\n */\n deleteKeys(keys: string[]): Promise<void>;\n}\n\nexport abstract class RecordManager\n extends Serializable\n implements RecordManagerInterface\n{\n lc_namespace = [\"langchain\", \"recordmanagers\"];\n\n abstract createSchema(): Promise<void>;\n\n abstract getTime(): Promise<number>;\n\n abstract update(keys: string[], updateOptions?: UpdateOptions): Promise<void>;\n\n abstract exists(keys: string[]): Promise<boolean[]>;\n\n abstract listKeys(options?: ListKeyOptions): Promise<string[]>;\n\n abstract deleteKeys(keys: string[]): Promise<void>;\n}\n"],"mappings":";;;AAGA,MAAa,mBAAmB;AA0DhC,IAAsB,gBAAtB,cACUA,uCAEV;CACE,eAAe,CAAC,aAAa,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record_manager.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"record_manager.d.cts","names":[],"sources":["../../src/indexing/record_manager.ts"],"mappings":";;;cAGa,gBAAA;AAAA,KAED,aAAA;EACV,QAAA;EACA,WAAA;AAAA;AAAA,KAGU,cAAA;EACV,MAAA;EACA,KAAA;EACA,QAAA;EACA,KAAA;AAAA;AAAA,UAGe,sBAAA;EAPL;;;;EAYV,YAAA,IAAgB,OAAA;EAVhB;;;;EAeA,OAAA,IAAW,OAAA;EAVI;;;;;;;;;EAoBf,MAAA,CAAO,IAAA,YAAgB,aAAA,EAAe,aAAA,GAAgB,OAAA;EAqB1B;;;;;EAf5B,MAAA,CAAO,IAAA,aAAiB,OAAA;EAhBb;;;;;;;;;EA0BX,QAAA,CAAS,OAAA,EAAS,cAAA,GAAiB,OAAA;EAAjB;;;;EAKlB,UAAA,CAAW,IAAA,aAAiB,OAAA;AAAA;AAAA,uBAGR,aAAA,SACZ,YAAA,YACG,sBAAA;EAEX,YAAA;EAAA,SAES,YAAA,CAAA,GAAgB,OAAA;EAAA,SAEhB,OAAA,CAAA,GAAW,OAAA;EAAA,SAEX,MAAA,CAAO,IAAA,YAAgB,aAAA,GAAgB,aAAA,GAAgB,OAAA;EAAA,SAEvD,MAAA,CAAO,IAAA,aAAiB,OAAA;EAAA,SAExB,QAAA,CAAS,OAAA,GAAU,cAAA,GAAiB,OAAA;EAAA,SAEpC,UAAA,CAAW,IAAA,aAAiB,OAAA;AAAA"}
|