langchain 0.0.203 → 0.0.204-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/cloudflare_kv.cjs +15 -69
- package/dist/cache/cloudflare_kv.d.ts +1 -42
- package/dist/cache/cloudflare_kv.js +1 -67
- package/dist/cache/momento.cjs +15 -135
- package/dist/cache/momento.d.ts +1 -91
- package/dist/cache/momento.js +1 -133
- package/dist/cache/upstash_redis.cjs +15 -72
- package/dist/cache/upstash_redis.d.ts +1 -45
- package/dist/cache/upstash_redis.js +1 -70
- package/dist/callbacks/handlers/llmonitor.cjs +14 -238
- package/dist/callbacks/handlers/llmonitor.d.ts +1 -35
- package/dist/callbacks/handlers/llmonitor.js +1 -233
- package/dist/chains/openai_moderation.cjs +2 -2
- package/dist/chains/openai_moderation.d.ts +1 -1
- package/dist/chains/openai_moderation.js +1 -1
- package/dist/chat_models/anthropic.d.ts +4 -4
- package/dist/chat_models/baiduwenxin.cjs +15 -411
- package/dist/chat_models/baiduwenxin.d.ts +1 -150
- package/dist/chat_models/baiduwenxin.js +1 -409
- package/dist/chat_models/bedrock/index.cjs +15 -33
- package/dist/chat_models/bedrock/index.d.ts +1 -23
- package/dist/chat_models/bedrock/index.js +1 -29
- package/dist/chat_models/bedrock/web.cjs +15 -360
- package/dist/chat_models/bedrock/web.d.ts +1 -82
- package/dist/chat_models/bedrock/web.js +1 -356
- package/dist/chat_models/cloudflare_workersai.cjs +15 -216
- package/dist/chat_models/cloudflare_workersai.d.ts +1 -68
- package/dist/chat_models/cloudflare_workersai.js +1 -214
- package/dist/chat_models/fireworks.cjs +15 -89
- package/dist/chat_models/fireworks.d.ts +1 -43
- package/dist/chat_models/fireworks.js +1 -87
- package/dist/chat_models/googlepalm.cjs +15 -235
- package/dist/chat_models/googlepalm.d.ts +1 -108
- package/dist/chat_models/googlepalm.js +1 -233
- package/dist/chat_models/googlevertexai/index.cjs +15 -40
- package/dist/chat_models/googlevertexai/index.d.ts +1 -28
- package/dist/chat_models/googlevertexai/index.js +1 -38
- package/dist/chat_models/googlevertexai/web.cjs +15 -39
- package/dist/chat_models/googlevertexai/web.d.ts +1 -28
- package/dist/chat_models/googlevertexai/web.js +1 -37
- package/dist/chat_models/iflytek_xinghuo/index.cjs +14 -40
- package/dist/chat_models/iflytek_xinghuo/index.d.ts +1 -13
- package/dist/chat_models/iflytek_xinghuo/index.js +1 -36
- package/dist/chat_models/iflytek_xinghuo/web.cjs +15 -36
- package/dist/chat_models/iflytek_xinghuo/web.d.ts +1 -13
- package/dist/chat_models/iflytek_xinghuo/web.js +1 -34
- package/dist/chat_models/llama_cpp.cjs +15 -275
- package/dist/chat_models/llama_cpp.d.ts +1 -71
- package/dist/chat_models/llama_cpp.js +1 -273
- package/dist/chat_models/minimax.cjs +15 -578
- package/dist/chat_models/minimax.d.ts +1 -369
- package/dist/chat_models/minimax.js +1 -576
- package/dist/chat_models/ollama.cjs +15 -394
- package/dist/chat_models/ollama.d.ts +1 -127
- package/dist/chat_models/ollama.js +1 -392
- package/dist/chat_models/openai.cjs +4 -698
- package/dist/chat_models/openai.d.ts +4 -137
- package/dist/chat_models/openai.js +2 -695
- package/dist/chat_models/portkey.cjs +15 -167
- package/dist/chat_models/portkey.d.ts +1 -17
- package/dist/chat_models/portkey.js +1 -165
- package/dist/chat_models/yandex.cjs +15 -132
- package/dist/chat_models/yandex.d.ts +1 -30
- package/dist/chat_models/yandex.js +1 -130
- package/dist/document_loaders/fs/openai_whisper_audio.cjs +2 -2
- package/dist/document_loaders/fs/openai_whisper_audio.d.ts +1 -1
- package/dist/document_loaders/fs/openai_whisper_audio.js +1 -1
- package/dist/document_transformers/html_to_text.cjs +15 -47
- package/dist/document_transformers/html_to_text.d.ts +1 -30
- package/dist/document_transformers/html_to_text.js +1 -45
- package/dist/document_transformers/mozilla_readability.cjs +15 -53
- package/dist/document_transformers/mozilla_readability.d.ts +1 -31
- package/dist/document_transformers/mozilla_readability.js +1 -51
- package/dist/embeddings/bedrock.cjs +15 -109
- package/dist/embeddings/bedrock.d.ts +1 -71
- package/dist/embeddings/bedrock.js +1 -107
- package/dist/embeddings/cloudflare_workersai.cjs +15 -67
- package/dist/embeddings/cloudflare_workersai.d.ts +1 -28
- package/dist/embeddings/cloudflare_workersai.js +1 -65
- package/dist/embeddings/cohere.cjs +15 -124
- package/dist/embeddings/cohere.d.ts +1 -66
- package/dist/embeddings/cohere.js +1 -122
- package/dist/embeddings/googlepalm.cjs +15 -88
- package/dist/embeddings/googlepalm.d.ts +1 -61
- package/dist/embeddings/googlepalm.js +1 -86
- package/dist/embeddings/googlevertexai.cjs +15 -81
- package/dist/embeddings/googlevertexai.d.ts +1 -54
- package/dist/embeddings/googlevertexai.js +1 -79
- package/dist/embeddings/gradient_ai.cjs +15 -101
- package/dist/embeddings/gradient_ai.d.ts +1 -48
- package/dist/embeddings/gradient_ai.js +1 -99
- package/dist/embeddings/hf.cjs +15 -75
- package/dist/embeddings/hf.d.ts +1 -41
- package/dist/embeddings/hf.js +1 -73
- package/dist/embeddings/hf_transformers.cjs +15 -87
- package/dist/embeddings/hf_transformers.d.ts +1 -47
- package/dist/embeddings/hf_transformers.js +1 -85
- package/dist/embeddings/llama_cpp.cjs +15 -81
- package/dist/embeddings/llama_cpp.d.ts +1 -42
- package/dist/embeddings/llama_cpp.js +1 -79
- package/dist/embeddings/minimax.cjs +15 -165
- package/dist/embeddings/minimax.d.ts +1 -119
- package/dist/embeddings/minimax.js +1 -163
- package/dist/embeddings/ollama.cjs +15 -118
- package/dist/embeddings/ollama.d.ts +1 -34
- package/dist/embeddings/ollama.js +1 -116
- package/dist/embeddings/openai.cjs +2 -240
- package/dist/embeddings/openai.d.ts +1 -82
- package/dist/embeddings/openai.js +1 -239
- package/dist/embeddings/tensorflow.cjs +3 -96
- package/dist/embeddings/tensorflow.d.ts +1 -59
- package/dist/embeddings/tensorflow.js +1 -83
- package/dist/embeddings/voyage.cjs +15 -118
- package/dist/embeddings/voyage.d.ts +1 -66
- package/dist/embeddings/voyage.js +1 -116
- package/dist/experimental/chat_models/ollama_functions.d.ts +1 -1
- package/dist/experimental/openai_assistant/index.cjs +3 -3
- package/dist/experimental/openai_assistant/index.d.ts +1 -1
- package/dist/experimental/openai_assistant/index.js +1 -1
- package/dist/experimental/openai_assistant/schema.d.ts +1 -1
- package/dist/experimental/openai_files/index.cjs +2 -2
- package/dist/experimental/openai_files/index.d.ts +1 -1
- package/dist/experimental/openai_files/index.js +1 -1
- package/dist/graphs/neo4j_graph.cjs +3 -254
- package/dist/graphs/neo4j_graph.d.ts +1 -63
- package/dist/graphs/neo4j_graph.js +1 -241
- package/dist/llms/ai21.cjs +15 -200
- package/dist/llms/ai21.d.ts +1 -100
- package/dist/llms/ai21.js +1 -198
- package/dist/llms/aleph_alpha.cjs +15 -374
- package/dist/llms/aleph_alpha.d.ts +1 -161
- package/dist/llms/aleph_alpha.js +1 -372
- package/dist/llms/bedrock/web.cjs +15 -310
- package/dist/llms/bedrock/web.d.ts +1 -66
- package/dist/llms/bedrock/web.js +1 -308
- package/dist/llms/cloudflare_workersai.cjs +15 -168
- package/dist/llms/cloudflare_workersai.d.ts +1 -55
- package/dist/llms/cloudflare_workersai.js +1 -166
- package/dist/llms/cohere.cjs +15 -110
- package/dist/llms/cohere.d.ts +1 -54
- package/dist/llms/cohere.js +1 -108
- package/dist/llms/fireworks.cjs +15 -90
- package/dist/llms/fireworks.d.ts +1 -33
- package/dist/llms/fireworks.js +1 -88
- package/dist/llms/googlepalm.cjs +15 -134
- package/dist/llms/googlepalm.d.ts +1 -92
- package/dist/llms/googlepalm.js +1 -132
- package/dist/llms/googlevertexai/index.cjs +15 -45
- package/dist/llms/googlevertexai/index.d.ts +1 -38
- package/dist/llms/googlevertexai/index.js +1 -43
- package/dist/llms/googlevertexai/web.cjs +15 -42
- package/dist/llms/googlevertexai/web.d.ts +1 -36
- package/dist/llms/googlevertexai/web.js +1 -40
- package/dist/llms/gradient_ai.cjs +15 -110
- package/dist/llms/gradient_ai.d.ts +1 -55
- package/dist/llms/gradient_ai.js +1 -108
- package/dist/llms/hf.cjs +15 -136
- package/dist/llms/hf.d.ts +1 -68
- package/dist/llms/hf.js +1 -134
- package/dist/llms/llama_cpp.cjs +15 -111
- package/dist/llms/llama_cpp.d.ts +1 -41
- package/dist/llms/llama_cpp.js +1 -109
- package/dist/llms/ollama.cjs +15 -353
- package/dist/llms/ollama.d.ts +1 -106
- package/dist/llms/ollama.js +1 -351
- package/dist/llms/openai-chat.cjs +3 -445
- package/dist/llms/openai-chat.d.ts +4 -123
- package/dist/llms/openai-chat.js +2 -443
- package/dist/llms/openai.cjs +6 -530
- package/dist/llms/openai.d.ts +4 -123
- package/dist/llms/openai.js +2 -525
- package/dist/llms/portkey.cjs +14 -168
- package/dist/llms/portkey.d.ts +1 -57
- package/dist/llms/portkey.js +1 -162
- package/dist/llms/raycast.cjs +15 -94
- package/dist/llms/raycast.d.ts +1 -50
- package/dist/llms/raycast.js +1 -92
- package/dist/llms/replicate.cjs +15 -132
- package/dist/llms/replicate.d.ts +1 -51
- package/dist/llms/replicate.js +1 -130
- package/dist/llms/sagemaker_endpoint.cjs +15 -203
- package/dist/llms/sagemaker_endpoint.d.ts +1 -121
- package/dist/llms/sagemaker_endpoint.js +1 -200
- package/dist/llms/watsonx_ai.cjs +15 -152
- package/dist/llms/watsonx_ai.d.ts +1 -72
- package/dist/llms/watsonx_ai.js +1 -150
- package/dist/llms/writer.cjs +15 -165
- package/dist/llms/writer.d.ts +1 -60
- package/dist/llms/writer.js +1 -163
- package/dist/llms/yandex.cjs +15 -98
- package/dist/llms/yandex.d.ts +1 -40
- package/dist/llms/yandex.js +1 -96
- package/dist/load/index.cjs +3 -1
- package/dist/load/index.d.ts +1 -1
- package/dist/load/index.js +3 -1
- package/dist/retrievers/amazon_kendra.cjs +15 -273
- package/dist/retrievers/amazon_kendra.d.ts +1 -142
- package/dist/retrievers/amazon_kendra.js +1 -271
- package/dist/retrievers/chaindesk.cjs +15 -88
- package/dist/retrievers/chaindesk.d.ts +1 -31
- package/dist/retrievers/chaindesk.js +1 -86
- package/dist/retrievers/databerry.cjs +15 -82
- package/dist/retrievers/databerry.d.ts +1 -34
- package/dist/retrievers/databerry.js +1 -80
- package/dist/retrievers/metal.cjs +15 -51
- package/dist/retrievers/metal.d.ts +1 -36
- package/dist/retrievers/metal.js +1 -49
- package/dist/retrievers/supabase.cjs +15 -167
- package/dist/retrievers/supabase.d.ts +1 -82
- package/dist/retrievers/supabase.js +1 -165
- package/dist/retrievers/tavily_search_api.cjs +15 -142
- package/dist/retrievers/tavily_search_api.d.ts +1 -38
- package/dist/retrievers/tavily_search_api.js +1 -140
- package/dist/retrievers/zep.cjs +15 -150
- package/dist/retrievers/zep.d.ts +1 -76
- package/dist/retrievers/zep.js +1 -148
- package/dist/schema/document.cjs +2 -16
- package/dist/schema/document.d.ts +1 -11
- package/dist/schema/document.js +1 -16
- package/dist/schema/index.cjs +2 -7
- package/dist/schema/index.d.ts +2 -10
- package/dist/schema/index.js +1 -6
- package/dist/storage/convex.cjs +15 -143
- package/dist/storage/convex.d.ts +1 -106
- package/dist/storage/convex.js +1 -141
- package/dist/storage/ioredis.cjs +15 -158
- package/dist/storage/ioredis.d.ts +1 -71
- package/dist/storage/ioredis.js +1 -156
- package/dist/storage/upstash_redis.cjs +15 -172
- package/dist/storage/upstash_redis.d.ts +1 -78
- package/dist/storage/upstash_redis.js +1 -170
- package/dist/storage/vercel_kv.cjs +15 -161
- package/dist/storage/vercel_kv.d.ts +1 -62
- package/dist/storage/vercel_kv.js +1 -159
- package/dist/stores/doc/in_memory.cjs +15 -105
- package/dist/stores/doc/in_memory.d.ts +1 -46
- package/dist/stores/doc/in_memory.js +1 -102
- package/dist/stores/message/cassandra.cjs +15 -158
- package/dist/stores/message/cassandra.d.ts +1 -69
- package/dist/stores/message/cassandra.js +1 -156
- package/dist/stores/message/cloudflare_d1.cjs +15 -150
- package/dist/stores/message/cloudflare_d1.d.ts +1 -67
- package/dist/stores/message/cloudflare_d1.js +1 -148
- package/dist/stores/message/convex.cjs +15 -118
- package/dist/stores/message/convex.d.ts +1 -81
- package/dist/stores/message/convex.js +1 -116
- package/dist/stores/message/dynamodb.cjs +15 -159
- package/dist/stores/message/dynamodb.d.ts +1 -51
- package/dist/stores/message/dynamodb.js +1 -157
- package/dist/stores/message/firestore.cjs +15 -185
- package/dist/stores/message/firestore.d.ts +1 -68
- package/dist/stores/message/firestore.js +1 -183
- package/dist/stores/message/ioredis.cjs +15 -98
- package/dist/stores/message/ioredis.d.ts +1 -64
- package/dist/stores/message/ioredis.js +1 -96
- package/dist/stores/message/momento.cjs +15 -160
- package/dist/stores/message/momento.d.ts +1 -97
- package/dist/stores/message/momento.js +1 -158
- package/dist/stores/message/mongodb.cjs +15 -57
- package/dist/stores/message/mongodb.d.ts +1 -26
- package/dist/stores/message/mongodb.js +1 -55
- package/dist/stores/message/planetscale.cjs +15 -170
- package/dist/stores/message/planetscale.d.ts +1 -75
- package/dist/stores/message/planetscale.js +1 -168
- package/dist/stores/message/redis.cjs +15 -114
- package/dist/stores/message/redis.d.ts +1 -69
- package/dist/stores/message/redis.js +1 -112
- package/dist/stores/message/upstash_redis.cjs +15 -85
- package/dist/stores/message/upstash_redis.d.ts +1 -43
- package/dist/stores/message/upstash_redis.js +1 -83
- package/dist/stores/message/utils.cjs +3 -23
- package/dist/stores/message/utils.d.ts +1 -17
- package/dist/stores/message/utils.js +1 -21
- package/dist/stores/message/xata.cjs +15 -216
- package/dist/stores/message/xata.d.ts +1 -76
- package/dist/stores/message/xata.js +1 -214
- package/dist/tools/IFTTTWebhook.cjs +15 -87
- package/dist/tools/IFTTTWebhook.d.ts +1 -50
- package/dist/tools/IFTTTWebhook.js +1 -85
- package/dist/tools/aiplugin.cjs +15 -73
- package/dist/tools/aiplugin.d.ts +1 -34
- package/dist/tools/aiplugin.js +1 -71
- package/dist/tools/aws_sfn.cjs +15 -201
- package/dist/tools/aws_sfn.d.ts +1 -57
- package/dist/tools/aws_sfn.js +1 -197
- package/dist/tools/bingserpapi.cjs +15 -76
- package/dist/tools/bingserpapi.d.ts +1 -23
- package/dist/tools/bingserpapi.js +1 -75
- package/dist/tools/brave_search.cjs +15 -64
- package/dist/tools/brave_search.d.ts +1 -23
- package/dist/tools/brave_search.js +1 -62
- package/dist/tools/connery.cjs +15 -277
- package/dist/tools/connery.d.ts +1 -145
- package/dist/tools/connery.js +1 -274
- package/dist/tools/convert_to_openai.d.ts +1 -1
- package/dist/tools/dadjokeapi.cjs +15 -46
- package/dist/tools/dadjokeapi.d.ts +1 -15
- package/dist/tools/dadjokeapi.js +1 -45
- package/dist/tools/dataforseo_api_search.cjs +15 -280
- package/dist/tools/dataforseo_api_search.d.ts +1 -170
- package/dist/tools/dataforseo_api_search.js +1 -278
- package/dist/tools/gmail/index.cjs +15 -11
- package/dist/tools/gmail/index.d.ts +1 -11
- package/dist/tools/gmail/index.js +1 -5
- package/dist/tools/google_custom_search.cjs +15 -70
- package/dist/tools/google_custom_search.d.ts +1 -25
- package/dist/tools/google_custom_search.js +1 -68
- package/dist/tools/google_places.cjs +15 -79
- package/dist/tools/google_places.d.ts +1 -21
- package/dist/tools/google_places.js +1 -77
- package/dist/tools/searchapi.cjs +15 -164
- package/dist/tools/searchapi.d.ts +1 -91
- package/dist/tools/searchapi.js +1 -162
- package/dist/tools/searxng_search.cjs +15 -156
- package/dist/tools/searxng_search.d.ts +1 -114
- package/dist/tools/searxng_search.js +1 -154
- package/dist/tools/serpapi.cjs +15 -199
- package/dist/tools/serpapi.d.ts +1 -302
- package/dist/tools/serpapi.js +1 -197
- package/dist/tools/serper.cjs +15 -94
- package/dist/tools/serper.d.ts +1 -32
- package/dist/tools/serper.js +1 -92
- package/dist/tools/wikipedia_query_run.cjs +15 -133
- package/dist/tools/wikipedia_query_run.d.ts +1 -54
- package/dist/tools/wikipedia_query_run.js +1 -131
- package/dist/tools/wolframalpha.cjs +15 -47
- package/dist/tools/wolframalpha.d.ts +1 -21
- package/dist/tools/wolframalpha.js +1 -45
- package/dist/types/openai-types.d.ts +1 -1
- package/dist/util/convex.d.ts +1 -1
- package/dist/util/event-source-parse.cjs +15 -224
- package/dist/util/event-source-parse.d.ts +1 -39
- package/dist/util/event-source-parse.js +1 -219
- package/dist/util/math.cjs +15 -123
- package/dist/util/math.d.ts +1 -40
- package/dist/util/math.js +1 -116
- package/dist/util/openapi.d.ts +2 -2
- package/dist/vectorstores/analyticdb.cjs +3 -333
- package/dist/vectorstores/analyticdb.d.ts +1 -110
- package/dist/vectorstores/analyticdb.js +1 -317
- package/dist/vectorstores/base.cjs +15 -165
- package/dist/vectorstores/base.d.ts +1 -104
- package/dist/vectorstores/base.js +1 -161
- package/dist/vectorstores/cassandra.cjs +15 -478
- package/dist/vectorstores/cassandra.d.ts +1 -162
- package/dist/vectorstores/cassandra.js +1 -476
- package/dist/vectorstores/chroma.cjs +3 -312
- package/dist/vectorstores/chroma.d.ts +1 -133
- package/dist/vectorstores/chroma.js +1 -299
- package/dist/vectorstores/clickhouse.cjs +3 -272
- package/dist/vectorstores/clickhouse.d.ts +1 -126
- package/dist/vectorstores/clickhouse.js +1 -259
- package/dist/vectorstores/closevector/node.cjs +15 -107
- package/dist/vectorstores/closevector/node.d.ts +1 -83
- package/dist/vectorstores/closevector/node.js +1 -105
- package/dist/vectorstores/closevector/web.cjs +15 -107
- package/dist/vectorstores/closevector/web.d.ts +1 -80
- package/dist/vectorstores/closevector/web.js +1 -105
- package/dist/vectorstores/cloudflare_vectorize.cjs +3 -186
- package/dist/vectorstores/cloudflare_vectorize.d.ts +1 -90
- package/dist/vectorstores/cloudflare_vectorize.js +1 -173
- package/dist/vectorstores/convex.cjs +15 -175
- package/dist/vectorstores/convex.d.ts +1 -134
- package/dist/vectorstores/convex.js +1 -173
- package/dist/vectorstores/elasticsearch.cjs +3 -287
- package/dist/vectorstores/elasticsearch.d.ts +1 -143
- package/dist/vectorstores/elasticsearch.js +1 -274
- package/dist/vectorstores/faiss.cjs +3 -378
- package/dist/vectorstores/faiss.d.ts +1 -127
- package/dist/vectorstores/faiss.js +1 -365
- package/dist/vectorstores/googlevertexai.cjs +3 -538
- package/dist/vectorstores/googlevertexai.d.ts +1 -181
- package/dist/vectorstores/googlevertexai.js +1 -521
- package/dist/vectorstores/hnswlib.cjs +15 -273
- package/dist/vectorstores/hnswlib.d.ts +1 -122
- package/dist/vectorstores/hnswlib.js +1 -271
- package/dist/vectorstores/lancedb.cjs +15 -126
- package/dist/vectorstores/lancedb.d.ts +1 -61
- package/dist/vectorstores/lancedb.js +1 -124
- package/dist/vectorstores/memory.cjs +15 -143
- package/dist/vectorstores/memory.d.ts +1 -92
- package/dist/vectorstores/memory.js +1 -141
- package/dist/vectorstores/milvus.cjs +3 -592
- package/dist/vectorstores/milvus.d.ts +1 -139
- package/dist/vectorstores/milvus.js +1 -579
- package/dist/vectorstores/momento_vector_index.cjs +3 -305
- package/dist/vectorstores/momento_vector_index.d.ts +1 -143
- package/dist/vectorstores/momento_vector_index.js +1 -292
- package/dist/vectorstores/mongodb_atlas.cjs +15 -218
- package/dist/vectorstores/mongodb_atlas.d.ts +1 -118
- package/dist/vectorstores/mongodb_atlas.js +1 -216
- package/dist/vectorstores/myscale.cjs +3 -263
- package/dist/vectorstores/myscale.d.ts +1 -129
- package/dist/vectorstores/myscale.js +1 -250
- package/dist/vectorstores/neo4j_vector.cjs +3 -578
- package/dist/vectorstores/neo4j_vector.d.ts +1 -75
- package/dist/vectorstores/neo4j_vector.js +1 -562
- package/dist/vectorstores/opensearch.cjs +3 -274
- package/dist/vectorstores/opensearch.d.ts +1 -119
- package/dist/vectorstores/opensearch.js +1 -261
- package/dist/vectorstores/pgvector.cjs +14 -404
- package/dist/vectorstores/pgvector.d.ts +1 -160
- package/dist/vectorstores/pgvector.js +1 -400
- package/dist/vectorstores/pinecone.cjs +3 -280
- package/dist/vectorstores/pinecone.d.ts +1 -120
- package/dist/vectorstores/pinecone.js +1 -264
- package/dist/vectorstores/prisma.cjs +15 -305
- package/dist/vectorstores/prisma.d.ts +1 -180
- package/dist/vectorstores/prisma.js +1 -303
- package/dist/vectorstores/qdrant.cjs +15 -195
- package/dist/vectorstores/qdrant.d.ts +1 -95
- package/dist/vectorstores/qdrant.js +1 -193
- package/dist/vectorstores/redis.cjs +15 -333
- package/dist/vectorstores/redis.d.ts +1 -186
- package/dist/vectorstores/redis.js +1 -331
- package/dist/vectorstores/rockset.cjs +15 -351
- package/dist/vectorstores/rockset.d.ts +1 -202
- package/dist/vectorstores/rockset.js +1 -347
- package/dist/vectorstores/singlestore.cjs +15 -220
- package/dist/vectorstores/singlestore.d.ts +1 -88
- package/dist/vectorstores/singlestore.js +1 -218
- package/dist/vectorstores/supabase.cjs +15 -217
- package/dist/vectorstores/supabase.d.ts +1 -118
- package/dist/vectorstores/supabase.js +1 -215
- package/dist/vectorstores/tigris.cjs +3 -143
- package/dist/vectorstores/tigris.d.ts +1 -74
- package/dist/vectorstores/tigris.js +1 -130
- package/dist/vectorstores/typeorm.cjs +15 -259
- package/dist/vectorstores/typeorm.d.ts +1 -109
- package/dist/vectorstores/typeorm.js +1 -256
- package/dist/vectorstores/typesense.cjs +15 -223
- package/dist/vectorstores/typesense.d.ts +1 -131
- package/dist/vectorstores/typesense.js +1 -221
- package/dist/vectorstores/usearch.cjs +3 -203
- package/dist/vectorstores/usearch.d.ts +1 -85
- package/dist/vectorstores/usearch.js +1 -187
- package/dist/vectorstores/vectara.cjs +3 -409
- package/dist/vectorstores/vectara.d.ts +1 -148
- package/dist/vectorstores/vectara.js +1 -396
- package/dist/vectorstores/vercel_postgres.cjs +15 -320
- package/dist/vectorstores/vercel_postgres.d.ts +1 -145
- package/dist/vectorstores/vercel_postgres.js +1 -318
- package/dist/vectorstores/voy.cjs +15 -156
- package/dist/vectorstores/voy.d.ts +1 -73
- package/dist/vectorstores/voy.js +1 -154
- package/dist/vectorstores/weaviate.cjs +3 -347
- package/dist/vectorstores/weaviate.d.ts +1 -140
- package/dist/vectorstores/weaviate.js +1 -333
- package/dist/vectorstores/xata.cjs +15 -108
- package/dist/vectorstores/xata.d.ts +1 -70
- package/dist/vectorstores/xata.js +1 -106
- package/dist/vectorstores/zep.cjs +15 -313
- package/dist/vectorstores/zep.d.ts +1 -146
- package/dist/vectorstores/zep.js +1 -311
- package/package.json +4 -26
- package/dist/chat_models/googlevertexai/common.cjs +0 -274
- package/dist/chat_models/googlevertexai/common.d.ts +0 -123
- package/dist/chat_models/googlevertexai/common.js +0 -269
- package/dist/chat_models/iflytek_xinghuo/common.cjs +0 -340
- package/dist/chat_models/iflytek_xinghuo/common.d.ts +0 -165
- package/dist/chat_models/iflytek_xinghuo/common.js +0 -336
- package/dist/llms/googlevertexai/common.cjs +0 -168
- package/dist/llms/googlevertexai/common.d.ts +0 -82
- package/dist/llms/googlevertexai/common.js +0 -164
- package/dist/tools/gmail/base.cjs +0 -69
- package/dist/tools/gmail/base.d.ts +0 -19
- package/dist/tools/gmail/base.js +0 -65
- package/dist/tools/gmail/create_draft.cjs +0 -62
- package/dist/tools/gmail/create_draft.d.ts +0 -35
- package/dist/tools/gmail/create_draft.js +0 -58
- package/dist/tools/gmail/descriptions.cjs +0 -118
- package/dist/tools/gmail/descriptions.d.ts +0 -5
- package/dist/tools/gmail/descriptions.js +0 -115
- package/dist/tools/gmail/get_message.cjs +0 -83
- package/dist/tools/gmail/get_message.d.ts +0 -18
- package/dist/tools/gmail/get_message.js +0 -79
- package/dist/tools/gmail/get_thread.cjs +0 -89
- package/dist/tools/gmail/get_thread.d.ts +0 -18
- package/dist/tools/gmail/get_thread.js +0 -85
- package/dist/tools/gmail/search.cjs +0 -118
- package/dist/tools/gmail/search.d.ts +0 -29
- package/dist/tools/gmail/search.js +0 -114
- package/dist/tools/gmail/send_message.cjs +0 -74
- package/dist/tools/gmail/send_message.d.ts +0 -35
- package/dist/tools/gmail/send_message.js +0 -70
- package/dist/util/openai-format-fndef.cjs +0 -81
- package/dist/util/openai-format-fndef.d.ts +0 -44
- package/dist/util/openai-format-fndef.js +0 -77
- package/dist/util/openai.cjs +0 -21
- package/dist/util/openai.d.ts +0 -1
- package/dist/util/openai.js +0 -17
- package/dist/vectorstores/closevector/common.cjs +0 -128
- package/dist/vectorstores/closevector/common.d.ts +0 -82
- package/dist/vectorstores/closevector/common.js +0 -124
|
@@ -1,275 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports
|
|
4
|
-
const base_js_1 = require("./base.cjs");
|
|
5
|
-
const document_js_1 = require("../document.cjs");
|
|
6
|
-
const in_memory_js_1 = require("../stores/doc/in_memory.cjs");
|
|
7
|
-
/**
|
|
8
|
-
* Class that implements a vector store using Hierarchical Navigable Small
|
|
9
|
-
* World (HNSW) graphs. It extends the SaveableVectorStore class and
|
|
10
|
-
* provides methods for adding documents and vectors, performing
|
|
11
|
-
* similarity searches, and saving and loading the vector store.
|
|
12
|
-
*/
|
|
13
|
-
class HNSWLib extends base_js_1.SaveableVectorStore {
|
|
14
|
-
_vectorstoreType() {
|
|
15
|
-
return "hnswlib";
|
|
16
|
-
}
|
|
17
|
-
constructor(embeddings, args) {
|
|
18
|
-
super(embeddings, args);
|
|
19
|
-
Object.defineProperty(this, "_index", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true,
|
|
23
|
-
value: void 0
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(this, "docstore", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
configurable: true,
|
|
28
|
-
writable: true,
|
|
29
|
-
value: void 0
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(this, "args", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
configurable: true,
|
|
34
|
-
writable: true,
|
|
35
|
-
value: void 0
|
|
36
|
-
});
|
|
37
|
-
this._index = args.index;
|
|
38
|
-
this.args = args;
|
|
39
|
-
this.embeddings = embeddings;
|
|
40
|
-
this.docstore = args?.docstore ?? new in_memory_js_1.SynchronousInMemoryDocstore();
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Method to add documents to the vector store. It first converts the
|
|
44
|
-
* documents to vectors using the embeddings, then adds the vectors to the
|
|
45
|
-
* vector store.
|
|
46
|
-
* @param documents The documents to be added to the vector store.
|
|
47
|
-
* @returns A Promise that resolves when the documents have been added.
|
|
48
|
-
*/
|
|
49
|
-
async addDocuments(documents) {
|
|
50
|
-
const texts = documents.map(({ pageContent }) => pageContent);
|
|
51
|
-
return this.addVectors(await this.embeddings.embedDocuments(texts), documents);
|
|
52
|
-
}
|
|
53
|
-
static async getHierarchicalNSW(args) {
|
|
54
|
-
const { HierarchicalNSW } = await HNSWLib.imports();
|
|
55
|
-
if (!args.space) {
|
|
56
|
-
throw new Error("hnswlib-node requires a space argument");
|
|
57
|
-
}
|
|
58
|
-
if (args.numDimensions === undefined) {
|
|
59
|
-
throw new Error("hnswlib-node requires a numDimensions argument");
|
|
60
|
-
}
|
|
61
|
-
return new HierarchicalNSW(args.space, args.numDimensions);
|
|
62
|
-
}
|
|
63
|
-
async initIndex(vectors) {
|
|
64
|
-
if (!this._index) {
|
|
65
|
-
if (this.args.numDimensions === undefined) {
|
|
66
|
-
this.args.numDimensions = vectors[0].length;
|
|
67
|
-
}
|
|
68
|
-
this.index = await HNSWLib.getHierarchicalNSW(this.args);
|
|
69
|
-
}
|
|
70
|
-
if (!this.index.getCurrentCount()) {
|
|
71
|
-
this.index.initIndex(vectors.length);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
get index() {
|
|
75
|
-
if (!this._index) {
|
|
76
|
-
throw new Error("Vector store not initialised yet. Try calling `addTexts` first.");
|
|
77
|
-
}
|
|
78
|
-
return this._index;
|
|
79
|
-
}
|
|
80
|
-
set index(index) {
|
|
81
|
-
this._index = index;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Method to add vectors to the vector store. It first initializes the
|
|
85
|
-
* index if it hasn't been initialized yet, then adds the vectors to the
|
|
86
|
-
* index and the documents to the document store.
|
|
87
|
-
* @param vectors The vectors to be added to the vector store.
|
|
88
|
-
* @param documents The documents corresponding to the vectors.
|
|
89
|
-
* @returns A Promise that resolves when the vectors and documents have been added.
|
|
90
|
-
*/
|
|
91
|
-
async addVectors(vectors, documents) {
|
|
92
|
-
if (vectors.length === 0) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
await this.initIndex(vectors);
|
|
96
|
-
// TODO here we could optionally normalise the vectors to unit length
|
|
97
|
-
// so that dot product is equivalent to cosine similarity, like this
|
|
98
|
-
// https://github.com/nmslib/hnswlib/issues/384#issuecomment-1155737730
|
|
99
|
-
// While we only support OpenAI embeddings this isn't necessary
|
|
100
|
-
if (vectors.length !== documents.length) {
|
|
101
|
-
throw new Error(`Vectors and metadatas must have the same length`);
|
|
102
|
-
}
|
|
103
|
-
if (vectors[0].length !== this.args.numDimensions) {
|
|
104
|
-
throw new Error(`Vectors must have the same length as the number of dimensions (${this.args.numDimensions})`);
|
|
105
|
-
}
|
|
106
|
-
const capacity = this.index.getMaxElements();
|
|
107
|
-
const needed = this.index.getCurrentCount() + vectors.length;
|
|
108
|
-
if (needed > capacity) {
|
|
109
|
-
this.index.resizeIndex(needed);
|
|
110
|
-
}
|
|
111
|
-
const docstoreSize = this.index.getCurrentCount();
|
|
112
|
-
const toSave = {};
|
|
113
|
-
for (let i = 0; i < vectors.length; i += 1) {
|
|
114
|
-
this.index.addPoint(vectors[i], docstoreSize + i);
|
|
115
|
-
toSave[docstoreSize + i] = documents[i];
|
|
116
|
-
}
|
|
117
|
-
this.docstore.add(toSave);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Method to perform a similarity search in the vector store using a query
|
|
121
|
-
* vector. It returns the k most similar documents along with their
|
|
122
|
-
* similarity scores. An optional filter function can be provided to
|
|
123
|
-
* filter the documents.
|
|
124
|
-
* @param query The query vector.
|
|
125
|
-
* @param k The number of most similar documents to return.
|
|
126
|
-
* @param filter An optional filter function to filter the documents.
|
|
127
|
-
* @returns A Promise that resolves to an array of tuples, where each tuple contains a document and its similarity score.
|
|
128
|
-
*/
|
|
129
|
-
async similaritySearchVectorWithScore(query, k, filter) {
|
|
130
|
-
if (this.args.numDimensions && !this._index) {
|
|
131
|
-
await this.initIndex([[]]);
|
|
132
|
-
}
|
|
133
|
-
if (query.length !== this.args.numDimensions) {
|
|
134
|
-
throw new Error(`Query vector must have the same length as the number of dimensions (${this.args.numDimensions})`);
|
|
135
|
-
}
|
|
136
|
-
if (k > this.index.getCurrentCount()) {
|
|
137
|
-
const total = this.index.getCurrentCount();
|
|
138
|
-
console.warn(`k (${k}) is greater than the number of elements in the index (${total}), setting k to ${total}`);
|
|
139
|
-
// eslint-disable-next-line no-param-reassign
|
|
140
|
-
k = total;
|
|
141
|
-
}
|
|
142
|
-
const filterFunction = (label) => {
|
|
143
|
-
if (!filter) {
|
|
144
|
-
return true;
|
|
145
|
-
}
|
|
146
|
-
const document = this.docstore.search(String(label));
|
|
147
|
-
// eslint-disable-next-line no-instanceof/no-instanceof
|
|
148
|
-
if (typeof document !== "string") {
|
|
149
|
-
return filter(document);
|
|
150
|
-
}
|
|
151
|
-
return false;
|
|
152
|
-
};
|
|
153
|
-
const result = this.index.searchKnn(query, k, filter ? filterFunction : undefined);
|
|
154
|
-
return result.neighbors.map((docIndex, resultIndex) => [
|
|
155
|
-
this.docstore.search(String(docIndex)),
|
|
156
|
-
result.distances[resultIndex],
|
|
157
|
-
]);
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Method to delete the vector store from a directory. It deletes the
|
|
161
|
-
* hnswlib.index file, the docstore.json file, and the args.json file from
|
|
162
|
-
* the directory.
|
|
163
|
-
* @param params An object with a directory property that specifies the directory from which to delete the vector store.
|
|
164
|
-
* @returns A Promise that resolves when the vector store has been deleted.
|
|
165
|
-
*/
|
|
166
|
-
async delete(params) {
|
|
167
|
-
const fs = await import("node:fs/promises");
|
|
168
|
-
const path = await import("node:path");
|
|
169
|
-
try {
|
|
170
|
-
await fs.access(path.join(params.directory, "hnswlib.index"));
|
|
171
|
-
}
|
|
172
|
-
catch (err) {
|
|
173
|
-
throw new Error(`Directory ${params.directory} does not contain a hnswlib.index file.`);
|
|
174
|
-
}
|
|
175
|
-
await Promise.all([
|
|
176
|
-
await fs.rm(path.join(params.directory, "hnswlib.index"), {
|
|
177
|
-
force: true,
|
|
178
|
-
}),
|
|
179
|
-
await fs.rm(path.join(params.directory, "docstore.json"), {
|
|
180
|
-
force: true,
|
|
181
|
-
}),
|
|
182
|
-
await fs.rm(path.join(params.directory, "args.json"), { force: true }),
|
|
183
|
-
]);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Method to save the vector store to a directory. It saves the HNSW
|
|
187
|
-
* index, the arguments, and the document store to the directory.
|
|
188
|
-
* @param directory The directory to which to save the vector store.
|
|
189
|
-
* @returns A Promise that resolves when the vector store has been saved.
|
|
190
|
-
*/
|
|
191
|
-
async save(directory) {
|
|
192
|
-
const fs = await import("node:fs/promises");
|
|
193
|
-
const path = await import("node:path");
|
|
194
|
-
await fs.mkdir(directory, { recursive: true });
|
|
195
|
-
await Promise.all([
|
|
196
|
-
this.index.writeIndex(path.join(directory, "hnswlib.index")),
|
|
197
|
-
await fs.writeFile(path.join(directory, "args.json"), JSON.stringify(this.args)),
|
|
198
|
-
await fs.writeFile(path.join(directory, "docstore.json"), JSON.stringify(Array.from(this.docstore._docs.entries()))),
|
|
199
|
-
]);
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Static method to load a vector store from a directory. It reads the
|
|
203
|
-
* HNSW index, the arguments, and the document store from the directory,
|
|
204
|
-
* then creates a new HNSWLib instance with these values.
|
|
205
|
-
* @param directory The directory from which to load the vector store.
|
|
206
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
207
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
208
|
-
*/
|
|
209
|
-
static async load(directory, embeddings) {
|
|
210
|
-
const fs = await import("node:fs/promises");
|
|
211
|
-
const path = await import("node:path");
|
|
212
|
-
const args = JSON.parse(await fs.readFile(path.join(directory, "args.json"), "utf8"));
|
|
213
|
-
const index = await HNSWLib.getHierarchicalNSW(args);
|
|
214
|
-
const [docstoreFiles] = await Promise.all([
|
|
215
|
-
fs
|
|
216
|
-
.readFile(path.join(directory, "docstore.json"), "utf8")
|
|
217
|
-
.then(JSON.parse),
|
|
218
|
-
index.readIndex(path.join(directory, "hnswlib.index")),
|
|
219
|
-
]);
|
|
220
|
-
args.docstore = new in_memory_js_1.SynchronousInMemoryDocstore(new Map(docstoreFiles));
|
|
221
|
-
args.index = index;
|
|
222
|
-
return new HNSWLib(embeddings, args);
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Static method to create a new HNSWLib instance from texts and metadata.
|
|
226
|
-
* It creates a new Document instance for each text and metadata, then
|
|
227
|
-
* calls the fromDocuments method to create the HNSWLib instance.
|
|
228
|
-
* @param texts The texts to be used to create the documents.
|
|
229
|
-
* @param metadatas The metadata to be used to create the documents.
|
|
230
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
231
|
-
* @param dbConfig An optional configuration object for the document store.
|
|
232
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
233
|
-
*/
|
|
234
|
-
static async fromTexts(texts, metadatas, embeddings, dbConfig) {
|
|
235
|
-
const docs = [];
|
|
236
|
-
for (let i = 0; i < texts.length; i += 1) {
|
|
237
|
-
const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;
|
|
238
|
-
const newDoc = new document_js_1.Document({
|
|
239
|
-
pageContent: texts[i],
|
|
240
|
-
metadata,
|
|
241
|
-
});
|
|
242
|
-
docs.push(newDoc);
|
|
243
|
-
}
|
|
244
|
-
return HNSWLib.fromDocuments(docs, embeddings, dbConfig);
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Static method to create a new HNSWLib instance from documents. It
|
|
248
|
-
* creates a new HNSWLib instance, adds the documents to it, then returns
|
|
249
|
-
* the instance.
|
|
250
|
-
* @param docs The documents to be added to the HNSWLib instance.
|
|
251
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
252
|
-
* @param dbConfig An optional configuration object for the document store.
|
|
253
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
254
|
-
*/
|
|
255
|
-
static async fromDocuments(docs, embeddings, dbConfig) {
|
|
256
|
-
const args = {
|
|
257
|
-
docstore: dbConfig?.docstore,
|
|
258
|
-
space: "cosine",
|
|
259
|
-
};
|
|
260
|
-
const instance = new this(embeddings, args);
|
|
261
|
-
await instance.addDocuments(docs);
|
|
262
|
-
return instance;
|
|
263
|
-
}
|
|
264
|
-
static async imports() {
|
|
265
|
-
try {
|
|
266
|
-
const { default: { HierarchicalNSW }, } = await import("hnswlib-node");
|
|
267
|
-
return { HierarchicalNSW };
|
|
268
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
269
|
-
}
|
|
270
|
-
catch (err) {
|
|
271
|
-
throw new Error(`Could not import hnswlib-node. Please install hnswlib-node as a dependency with, e.g. \`npm install -S hnswlib-node\`.\n\nError: ${err?.message}`);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
exports.HNSWLib = HNSWLib;
|
|
17
|
+
__exportStar(require("@langchain/community/vectorstores/hnswlib"), exports);
|
|
@@ -1,122 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { Embeddings } from "../embeddings/base.js";
|
|
3
|
-
import { SaveableVectorStore } from "./base.js";
|
|
4
|
-
import { Document } from "../document.js";
|
|
5
|
-
import { SynchronousInMemoryDocstore } from "../stores/doc/in_memory.js";
|
|
6
|
-
/**
|
|
7
|
-
* Interface for the base configuration of HNSWLib. It includes the space
|
|
8
|
-
* name and the number of dimensions.
|
|
9
|
-
*/
|
|
10
|
-
export interface HNSWLibBase {
|
|
11
|
-
space: SpaceName;
|
|
12
|
-
numDimensions?: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Interface for the arguments that can be passed to the HNSWLib
|
|
16
|
-
* constructor. It extends HNSWLibBase and includes properties for the
|
|
17
|
-
* document store and HNSW index.
|
|
18
|
-
*/
|
|
19
|
-
export interface HNSWLibArgs extends HNSWLibBase {
|
|
20
|
-
docstore?: SynchronousInMemoryDocstore;
|
|
21
|
-
index?: HierarchicalNSWT;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Class that implements a vector store using Hierarchical Navigable Small
|
|
25
|
-
* World (HNSW) graphs. It extends the SaveableVectorStore class and
|
|
26
|
-
* provides methods for adding documents and vectors, performing
|
|
27
|
-
* similarity searches, and saving and loading the vector store.
|
|
28
|
-
*/
|
|
29
|
-
export declare class HNSWLib extends SaveableVectorStore {
|
|
30
|
-
FilterType: (doc: Document) => boolean;
|
|
31
|
-
_index?: HierarchicalNSWT;
|
|
32
|
-
docstore: SynchronousInMemoryDocstore;
|
|
33
|
-
args: HNSWLibBase;
|
|
34
|
-
_vectorstoreType(): string;
|
|
35
|
-
constructor(embeddings: Embeddings, args: HNSWLibArgs);
|
|
36
|
-
/**
|
|
37
|
-
* Method to add documents to the vector store. It first converts the
|
|
38
|
-
* documents to vectors using the embeddings, then adds the vectors to the
|
|
39
|
-
* vector store.
|
|
40
|
-
* @param documents The documents to be added to the vector store.
|
|
41
|
-
* @returns A Promise that resolves when the documents have been added.
|
|
42
|
-
*/
|
|
43
|
-
addDocuments(documents: Document[]): Promise<void>;
|
|
44
|
-
private static getHierarchicalNSW;
|
|
45
|
-
private initIndex;
|
|
46
|
-
get index(): HierarchicalNSWT;
|
|
47
|
-
private set index(value);
|
|
48
|
-
/**
|
|
49
|
-
* Method to add vectors to the vector store. It first initializes the
|
|
50
|
-
* index if it hasn't been initialized yet, then adds the vectors to the
|
|
51
|
-
* index and the documents to the document store.
|
|
52
|
-
* @param vectors The vectors to be added to the vector store.
|
|
53
|
-
* @param documents The documents corresponding to the vectors.
|
|
54
|
-
* @returns A Promise that resolves when the vectors and documents have been added.
|
|
55
|
-
*/
|
|
56
|
-
addVectors(vectors: number[][], documents: Document[]): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Method to perform a similarity search in the vector store using a query
|
|
59
|
-
* vector. It returns the k most similar documents along with their
|
|
60
|
-
* similarity scores. An optional filter function can be provided to
|
|
61
|
-
* filter the documents.
|
|
62
|
-
* @param query The query vector.
|
|
63
|
-
* @param k The number of most similar documents to return.
|
|
64
|
-
* @param filter An optional filter function to filter the documents.
|
|
65
|
-
* @returns A Promise that resolves to an array of tuples, where each tuple contains a document and its similarity score.
|
|
66
|
-
*/
|
|
67
|
-
similaritySearchVectorWithScore(query: number[], k: number, filter?: this["FilterType"]): Promise<[Document<Record<string, any>>, number][]>;
|
|
68
|
-
/**
|
|
69
|
-
* Method to delete the vector store from a directory. It deletes the
|
|
70
|
-
* hnswlib.index file, the docstore.json file, and the args.json file from
|
|
71
|
-
* the directory.
|
|
72
|
-
* @param params An object with a directory property that specifies the directory from which to delete the vector store.
|
|
73
|
-
* @returns A Promise that resolves when the vector store has been deleted.
|
|
74
|
-
*/
|
|
75
|
-
delete(params: {
|
|
76
|
-
directory: string;
|
|
77
|
-
}): Promise<void>;
|
|
78
|
-
/**
|
|
79
|
-
* Method to save the vector store to a directory. It saves the HNSW
|
|
80
|
-
* index, the arguments, and the document store to the directory.
|
|
81
|
-
* @param directory The directory to which to save the vector store.
|
|
82
|
-
* @returns A Promise that resolves when the vector store has been saved.
|
|
83
|
-
*/
|
|
84
|
-
save(directory: string): Promise<void>;
|
|
85
|
-
/**
|
|
86
|
-
* Static method to load a vector store from a directory. It reads the
|
|
87
|
-
* HNSW index, the arguments, and the document store from the directory,
|
|
88
|
-
* then creates a new HNSWLib instance with these values.
|
|
89
|
-
* @param directory The directory from which to load the vector store.
|
|
90
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
91
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
92
|
-
*/
|
|
93
|
-
static load(directory: string, embeddings: Embeddings): Promise<HNSWLib>;
|
|
94
|
-
/**
|
|
95
|
-
* Static method to create a new HNSWLib instance from texts and metadata.
|
|
96
|
-
* It creates a new Document instance for each text and metadata, then
|
|
97
|
-
* calls the fromDocuments method to create the HNSWLib instance.
|
|
98
|
-
* @param texts The texts to be used to create the documents.
|
|
99
|
-
* @param metadatas The metadata to be used to create the documents.
|
|
100
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
101
|
-
* @param dbConfig An optional configuration object for the document store.
|
|
102
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
103
|
-
*/
|
|
104
|
-
static fromTexts(texts: string[], metadatas: object[] | object, embeddings: Embeddings, dbConfig?: {
|
|
105
|
-
docstore?: SynchronousInMemoryDocstore;
|
|
106
|
-
}): Promise<HNSWLib>;
|
|
107
|
-
/**
|
|
108
|
-
* Static method to create a new HNSWLib instance from documents. It
|
|
109
|
-
* creates a new HNSWLib instance, adds the documents to it, then returns
|
|
110
|
-
* the instance.
|
|
111
|
-
* @param docs The documents to be added to the HNSWLib instance.
|
|
112
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
113
|
-
* @param dbConfig An optional configuration object for the document store.
|
|
114
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
115
|
-
*/
|
|
116
|
-
static fromDocuments(docs: Document[], embeddings: Embeddings, dbConfig?: {
|
|
117
|
-
docstore?: SynchronousInMemoryDocstore;
|
|
118
|
-
}): Promise<HNSWLib>;
|
|
119
|
-
static imports(): Promise<{
|
|
120
|
-
HierarchicalNSW: typeof HierarchicalNSWT;
|
|
121
|
-
}>;
|
|
122
|
-
}
|
|
1
|
+
export * from "@langchain/community/vectorstores/hnswlib";
|
|
@@ -1,271 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { Document } from "../document.js";
|
|
3
|
-
import { SynchronousInMemoryDocstore } from "../stores/doc/in_memory.js";
|
|
4
|
-
/**
|
|
5
|
-
* Class that implements a vector store using Hierarchical Navigable Small
|
|
6
|
-
* World (HNSW) graphs. It extends the SaveableVectorStore class and
|
|
7
|
-
* provides methods for adding documents and vectors, performing
|
|
8
|
-
* similarity searches, and saving and loading the vector store.
|
|
9
|
-
*/
|
|
10
|
-
export class HNSWLib extends SaveableVectorStore {
|
|
11
|
-
_vectorstoreType() {
|
|
12
|
-
return "hnswlib";
|
|
13
|
-
}
|
|
14
|
-
constructor(embeddings, args) {
|
|
15
|
-
super(embeddings, args);
|
|
16
|
-
Object.defineProperty(this, "_index", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: void 0
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "docstore", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: void 0
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(this, "args", {
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true,
|
|
32
|
-
value: void 0
|
|
33
|
-
});
|
|
34
|
-
this._index = args.index;
|
|
35
|
-
this.args = args;
|
|
36
|
-
this.embeddings = embeddings;
|
|
37
|
-
this.docstore = args?.docstore ?? new SynchronousInMemoryDocstore();
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Method to add documents to the vector store. It first converts the
|
|
41
|
-
* documents to vectors using the embeddings, then adds the vectors to the
|
|
42
|
-
* vector store.
|
|
43
|
-
* @param documents The documents to be added to the vector store.
|
|
44
|
-
* @returns A Promise that resolves when the documents have been added.
|
|
45
|
-
*/
|
|
46
|
-
async addDocuments(documents) {
|
|
47
|
-
const texts = documents.map(({ pageContent }) => pageContent);
|
|
48
|
-
return this.addVectors(await this.embeddings.embedDocuments(texts), documents);
|
|
49
|
-
}
|
|
50
|
-
static async getHierarchicalNSW(args) {
|
|
51
|
-
const { HierarchicalNSW } = await HNSWLib.imports();
|
|
52
|
-
if (!args.space) {
|
|
53
|
-
throw new Error("hnswlib-node requires a space argument");
|
|
54
|
-
}
|
|
55
|
-
if (args.numDimensions === undefined) {
|
|
56
|
-
throw new Error("hnswlib-node requires a numDimensions argument");
|
|
57
|
-
}
|
|
58
|
-
return new HierarchicalNSW(args.space, args.numDimensions);
|
|
59
|
-
}
|
|
60
|
-
async initIndex(vectors) {
|
|
61
|
-
if (!this._index) {
|
|
62
|
-
if (this.args.numDimensions === undefined) {
|
|
63
|
-
this.args.numDimensions = vectors[0].length;
|
|
64
|
-
}
|
|
65
|
-
this.index = await HNSWLib.getHierarchicalNSW(this.args);
|
|
66
|
-
}
|
|
67
|
-
if (!this.index.getCurrentCount()) {
|
|
68
|
-
this.index.initIndex(vectors.length);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
get index() {
|
|
72
|
-
if (!this._index) {
|
|
73
|
-
throw new Error("Vector store not initialised yet. Try calling `addTexts` first.");
|
|
74
|
-
}
|
|
75
|
-
return this._index;
|
|
76
|
-
}
|
|
77
|
-
set index(index) {
|
|
78
|
-
this._index = index;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Method to add vectors to the vector store. It first initializes the
|
|
82
|
-
* index if it hasn't been initialized yet, then adds the vectors to the
|
|
83
|
-
* index and the documents to the document store.
|
|
84
|
-
* @param vectors The vectors to be added to the vector store.
|
|
85
|
-
* @param documents The documents corresponding to the vectors.
|
|
86
|
-
* @returns A Promise that resolves when the vectors and documents have been added.
|
|
87
|
-
*/
|
|
88
|
-
async addVectors(vectors, documents) {
|
|
89
|
-
if (vectors.length === 0) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
await this.initIndex(vectors);
|
|
93
|
-
// TODO here we could optionally normalise the vectors to unit length
|
|
94
|
-
// so that dot product is equivalent to cosine similarity, like this
|
|
95
|
-
// https://github.com/nmslib/hnswlib/issues/384#issuecomment-1155737730
|
|
96
|
-
// While we only support OpenAI embeddings this isn't necessary
|
|
97
|
-
if (vectors.length !== documents.length) {
|
|
98
|
-
throw new Error(`Vectors and metadatas must have the same length`);
|
|
99
|
-
}
|
|
100
|
-
if (vectors[0].length !== this.args.numDimensions) {
|
|
101
|
-
throw new Error(`Vectors must have the same length as the number of dimensions (${this.args.numDimensions})`);
|
|
102
|
-
}
|
|
103
|
-
const capacity = this.index.getMaxElements();
|
|
104
|
-
const needed = this.index.getCurrentCount() + vectors.length;
|
|
105
|
-
if (needed > capacity) {
|
|
106
|
-
this.index.resizeIndex(needed);
|
|
107
|
-
}
|
|
108
|
-
const docstoreSize = this.index.getCurrentCount();
|
|
109
|
-
const toSave = {};
|
|
110
|
-
for (let i = 0; i < vectors.length; i += 1) {
|
|
111
|
-
this.index.addPoint(vectors[i], docstoreSize + i);
|
|
112
|
-
toSave[docstoreSize + i] = documents[i];
|
|
113
|
-
}
|
|
114
|
-
this.docstore.add(toSave);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Method to perform a similarity search in the vector store using a query
|
|
118
|
-
* vector. It returns the k most similar documents along with their
|
|
119
|
-
* similarity scores. An optional filter function can be provided to
|
|
120
|
-
* filter the documents.
|
|
121
|
-
* @param query The query vector.
|
|
122
|
-
* @param k The number of most similar documents to return.
|
|
123
|
-
* @param filter An optional filter function to filter the documents.
|
|
124
|
-
* @returns A Promise that resolves to an array of tuples, where each tuple contains a document and its similarity score.
|
|
125
|
-
*/
|
|
126
|
-
async similaritySearchVectorWithScore(query, k, filter) {
|
|
127
|
-
if (this.args.numDimensions && !this._index) {
|
|
128
|
-
await this.initIndex([[]]);
|
|
129
|
-
}
|
|
130
|
-
if (query.length !== this.args.numDimensions) {
|
|
131
|
-
throw new Error(`Query vector must have the same length as the number of dimensions (${this.args.numDimensions})`);
|
|
132
|
-
}
|
|
133
|
-
if (k > this.index.getCurrentCount()) {
|
|
134
|
-
const total = this.index.getCurrentCount();
|
|
135
|
-
console.warn(`k (${k}) is greater than the number of elements in the index (${total}), setting k to ${total}`);
|
|
136
|
-
// eslint-disable-next-line no-param-reassign
|
|
137
|
-
k = total;
|
|
138
|
-
}
|
|
139
|
-
const filterFunction = (label) => {
|
|
140
|
-
if (!filter) {
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
143
|
-
const document = this.docstore.search(String(label));
|
|
144
|
-
// eslint-disable-next-line no-instanceof/no-instanceof
|
|
145
|
-
if (typeof document !== "string") {
|
|
146
|
-
return filter(document);
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
149
|
-
};
|
|
150
|
-
const result = this.index.searchKnn(query, k, filter ? filterFunction : undefined);
|
|
151
|
-
return result.neighbors.map((docIndex, resultIndex) => [
|
|
152
|
-
this.docstore.search(String(docIndex)),
|
|
153
|
-
result.distances[resultIndex],
|
|
154
|
-
]);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Method to delete the vector store from a directory. It deletes the
|
|
158
|
-
* hnswlib.index file, the docstore.json file, and the args.json file from
|
|
159
|
-
* the directory.
|
|
160
|
-
* @param params An object with a directory property that specifies the directory from which to delete the vector store.
|
|
161
|
-
* @returns A Promise that resolves when the vector store has been deleted.
|
|
162
|
-
*/
|
|
163
|
-
async delete(params) {
|
|
164
|
-
const fs = await import("node:fs/promises");
|
|
165
|
-
const path = await import("node:path");
|
|
166
|
-
try {
|
|
167
|
-
await fs.access(path.join(params.directory, "hnswlib.index"));
|
|
168
|
-
}
|
|
169
|
-
catch (err) {
|
|
170
|
-
throw new Error(`Directory ${params.directory} does not contain a hnswlib.index file.`);
|
|
171
|
-
}
|
|
172
|
-
await Promise.all([
|
|
173
|
-
await fs.rm(path.join(params.directory, "hnswlib.index"), {
|
|
174
|
-
force: true,
|
|
175
|
-
}),
|
|
176
|
-
await fs.rm(path.join(params.directory, "docstore.json"), {
|
|
177
|
-
force: true,
|
|
178
|
-
}),
|
|
179
|
-
await fs.rm(path.join(params.directory, "args.json"), { force: true }),
|
|
180
|
-
]);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Method to save the vector store to a directory. It saves the HNSW
|
|
184
|
-
* index, the arguments, and the document store to the directory.
|
|
185
|
-
* @param directory The directory to which to save the vector store.
|
|
186
|
-
* @returns A Promise that resolves when the vector store has been saved.
|
|
187
|
-
*/
|
|
188
|
-
async save(directory) {
|
|
189
|
-
const fs = await import("node:fs/promises");
|
|
190
|
-
const path = await import("node:path");
|
|
191
|
-
await fs.mkdir(directory, { recursive: true });
|
|
192
|
-
await Promise.all([
|
|
193
|
-
this.index.writeIndex(path.join(directory, "hnswlib.index")),
|
|
194
|
-
await fs.writeFile(path.join(directory, "args.json"), JSON.stringify(this.args)),
|
|
195
|
-
await fs.writeFile(path.join(directory, "docstore.json"), JSON.stringify(Array.from(this.docstore._docs.entries()))),
|
|
196
|
-
]);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Static method to load a vector store from a directory. It reads the
|
|
200
|
-
* HNSW index, the arguments, and the document store from the directory,
|
|
201
|
-
* then creates a new HNSWLib instance with these values.
|
|
202
|
-
* @param directory The directory from which to load the vector store.
|
|
203
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
204
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
205
|
-
*/
|
|
206
|
-
static async load(directory, embeddings) {
|
|
207
|
-
const fs = await import("node:fs/promises");
|
|
208
|
-
const path = await import("node:path");
|
|
209
|
-
const args = JSON.parse(await fs.readFile(path.join(directory, "args.json"), "utf8"));
|
|
210
|
-
const index = await HNSWLib.getHierarchicalNSW(args);
|
|
211
|
-
const [docstoreFiles] = await Promise.all([
|
|
212
|
-
fs
|
|
213
|
-
.readFile(path.join(directory, "docstore.json"), "utf8")
|
|
214
|
-
.then(JSON.parse),
|
|
215
|
-
index.readIndex(path.join(directory, "hnswlib.index")),
|
|
216
|
-
]);
|
|
217
|
-
args.docstore = new SynchronousInMemoryDocstore(new Map(docstoreFiles));
|
|
218
|
-
args.index = index;
|
|
219
|
-
return new HNSWLib(embeddings, args);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Static method to create a new HNSWLib instance from texts and metadata.
|
|
223
|
-
* It creates a new Document instance for each text and metadata, then
|
|
224
|
-
* calls the fromDocuments method to create the HNSWLib instance.
|
|
225
|
-
* @param texts The texts to be used to create the documents.
|
|
226
|
-
* @param metadatas The metadata to be used to create the documents.
|
|
227
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
228
|
-
* @param dbConfig An optional configuration object for the document store.
|
|
229
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
230
|
-
*/
|
|
231
|
-
static async fromTexts(texts, metadatas, embeddings, dbConfig) {
|
|
232
|
-
const docs = [];
|
|
233
|
-
for (let i = 0; i < texts.length; i += 1) {
|
|
234
|
-
const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;
|
|
235
|
-
const newDoc = new Document({
|
|
236
|
-
pageContent: texts[i],
|
|
237
|
-
metadata,
|
|
238
|
-
});
|
|
239
|
-
docs.push(newDoc);
|
|
240
|
-
}
|
|
241
|
-
return HNSWLib.fromDocuments(docs, embeddings, dbConfig);
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Static method to create a new HNSWLib instance from documents. It
|
|
245
|
-
* creates a new HNSWLib instance, adds the documents to it, then returns
|
|
246
|
-
* the instance.
|
|
247
|
-
* @param docs The documents to be added to the HNSWLib instance.
|
|
248
|
-
* @param embeddings The embeddings to be used by the HNSWLib instance.
|
|
249
|
-
* @param dbConfig An optional configuration object for the document store.
|
|
250
|
-
* @returns A Promise that resolves to a new HNSWLib instance.
|
|
251
|
-
*/
|
|
252
|
-
static async fromDocuments(docs, embeddings, dbConfig) {
|
|
253
|
-
const args = {
|
|
254
|
-
docstore: dbConfig?.docstore,
|
|
255
|
-
space: "cosine",
|
|
256
|
-
};
|
|
257
|
-
const instance = new this(embeddings, args);
|
|
258
|
-
await instance.addDocuments(docs);
|
|
259
|
-
return instance;
|
|
260
|
-
}
|
|
261
|
-
static async imports() {
|
|
262
|
-
try {
|
|
263
|
-
const { default: { HierarchicalNSW }, } = await import("hnswlib-node");
|
|
264
|
-
return { HierarchicalNSW };
|
|
265
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
266
|
-
}
|
|
267
|
-
catch (err) {
|
|
268
|
-
throw new Error(`Could not import hnswlib-node. Please install hnswlib-node as a dependency with, e.g. \`npm install -S hnswlib-node\`.\n\nError: ${err?.message}`);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
1
|
+
export * from "@langchain/community/vectorstores/hnswlib";
|