@nhtio/adk 1.20260607.2 → 1.20260609.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/CHANGELOG.md +185 -0
- package/batteries/embeddings/openai/adapter.cjs +1 -1
- package/batteries/embeddings/openai/adapter.mjs +1 -1
- package/batteries/embeddings/openai/exceptions.cjs +1 -1
- package/batteries/embeddings/openai/exceptions.mjs +1 -1
- package/batteries/embeddings/openai/types.d.ts +7 -0
- package/batteries/embeddings/webllm/adapter.cjs +1 -1
- package/batteries/embeddings/webllm/adapter.mjs +1 -1
- package/batteries/embeddings/webllm/exceptions.cjs +1 -1
- package/batteries/embeddings/webllm/exceptions.mjs +1 -1
- package/batteries/llm/chat_common/helpers.d.ts +165 -0
- package/batteries/llm/chat_common/types.d.ts +309 -0
- package/batteries/llm/index.d.ts +5 -0
- package/batteries/llm/ollama/adapter.cjs +736 -0
- package/batteries/llm/ollama/adapter.cjs.map +1 -0
- package/batteries/llm/ollama/adapter.d.ts +64 -0
- package/batteries/llm/ollama/adapter.mjs +734 -0
- package/batteries/llm/ollama/adapter.mjs.map +1 -0
- package/batteries/llm/ollama/exceptions.cjs +105 -0
- package/batteries/llm/ollama/exceptions.cjs.map +1 -0
- package/batteries/llm/ollama/exceptions.d.ts +112 -0
- package/batteries/llm/ollama/exceptions.mjs +96 -0
- package/batteries/llm/ollama/exceptions.mjs.map +1 -0
- package/batteries/llm/ollama/helpers.cjs +487 -0
- package/batteries/llm/ollama/helpers.cjs.map +1 -0
- package/batteries/llm/ollama/helpers.d.ts +158 -0
- package/batteries/llm/ollama/helpers.mjs +450 -0
- package/batteries/llm/ollama/helpers.mjs.map +1 -0
- package/batteries/llm/ollama/index.d.ts +29 -0
- package/batteries/llm/ollama/types.cjs +2 -0
- package/batteries/llm/ollama/types.d.ts +334 -0
- package/batteries/llm/ollama/types.mjs +0 -0
- package/batteries/llm/ollama/validation.cjs +130 -0
- package/batteries/llm/ollama/validation.cjs.map +1 -0
- package/batteries/llm/ollama/validation.d.ts +31 -0
- package/batteries/llm/ollama/validation.mjs +127 -0
- package/batteries/llm/ollama/validation.mjs.map +1 -0
- package/batteries/llm/ollama.cjs +54 -0
- package/batteries/llm/ollama.mjs +6 -0
- package/batteries/llm/openai_chat_completions/adapter.cjs +36 -19
- package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/adapter.mjs +23 -6
- package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/exceptions.cjs +1 -1
- package/batteries/llm/openai_chat_completions/exceptions.mjs +1 -1
- package/batteries/llm/openai_chat_completions/helpers.cjs +80 -320
- package/batteries/llm/openai_chat_completions/helpers.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/helpers.d.ts +68 -144
- package/batteries/llm/openai_chat_completions/helpers.mjs +40 -280
- package/batteries/llm/openai_chat_completions/helpers.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/types.d.ts +273 -181
- package/batteries/llm/openai_chat_completions/validation.cjs +2 -2
- package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/validation.mjs +2 -2
- package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions.cjs +29 -28
- package/batteries/llm/openai_chat_completions.mjs +2 -1
- package/batteries/llm/webllm_chat_completions/adapter.cjs +38 -19
- package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.d.ts +18 -0
- package/batteries/llm/webllm_chat_completions/adapter.mjs +25 -6
- package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/exceptions.cjs +1 -1
- package/batteries/llm/webllm_chat_completions/exceptions.mjs +1 -1
- package/batteries/llm/webllm_chat_completions/helpers.cjs +29 -28
- package/batteries/llm/webllm_chat_completions/helpers.mjs +2 -1
- package/batteries/llm/webllm_chat_completions/types.d.ts +21 -0
- package/batteries/llm/webllm_chat_completions/validation.cjs +13 -1
- package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.d.ts +12 -0
- package/batteries/llm/webllm_chat_completions/validation.mjs +13 -1
- package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions.cjs +29 -28
- package/batteries/llm/webllm_chat_completions.mjs +2 -1
- package/batteries/llm.cjs +44 -28
- package/batteries/llm.mjs +9 -4
- package/batteries/storage/flydrive.cjs +1 -1
- package/batteries/storage/flydrive.mjs +1 -1
- package/batteries/storage/in_memory/index.d.ts +1 -1
- package/batteries/storage/in_memory.cjs +2 -2
- package/batteries/storage/in_memory.cjs.map +1 -1
- package/batteries/storage/in_memory.mjs +2 -2
- package/batteries/storage/in_memory.mjs.map +1 -1
- package/batteries/storage/opfs/index.d.ts +19 -0
- package/batteries/storage/opfs.cjs +1 -1
- package/batteries/storage/opfs.cjs.map +1 -1
- package/batteries/storage/opfs.mjs +1 -1
- package/batteries/storage/opfs.mjs.map +1 -1
- package/batteries/tools/color.cjs +3 -2
- package/batteries/tools/color.cjs.map +1 -1
- package/batteries/tools/color.mjs +3 -2
- package/batteries/tools/color.mjs.map +1 -1
- package/batteries/tools/comparison.cjs +4 -3
- package/batteries/tools/comparison.cjs.map +1 -1
- package/batteries/tools/comparison.mjs +4 -3
- package/batteries/tools/comparison.mjs.map +1 -1
- package/batteries/tools/data_structure.cjs +30 -10
- package/batteries/tools/data_structure.cjs.map +1 -1
- package/batteries/tools/data_structure.mjs +30 -10
- package/batteries/tools/data_structure.mjs.map +1 -1
- package/batteries/tools/datetime_extended.cjs +5 -10
- package/batteries/tools/datetime_extended.cjs.map +1 -1
- package/batteries/tools/datetime_extended.mjs +5 -10
- package/batteries/tools/datetime_extended.mjs.map +1 -1
- package/batteries/tools/datetime_math.cjs +2 -2
- package/batteries/tools/datetime_math.mjs +2 -2
- package/batteries/tools/encoding.cjs +13 -4
- package/batteries/tools/encoding.cjs.map +1 -1
- package/batteries/tools/encoding.mjs +13 -4
- package/batteries/tools/encoding.mjs.map +1 -1
- package/batteries/tools/formatting.cjs +4 -4
- package/batteries/tools/formatting.cjs.map +1 -1
- package/batteries/tools/formatting.mjs +4 -4
- package/batteries/tools/formatting.mjs.map +1 -1
- package/batteries/tools/geo_basics.cjs +2 -2
- package/batteries/tools/geo_basics.mjs +2 -2
- package/batteries/tools/index.d.ts +1 -0
- package/batteries/tools/math.cjs +10 -8
- package/batteries/tools/math.cjs.map +1 -1
- package/batteries/tools/math.mjs +10 -8
- package/batteries/tools/math.mjs.map +1 -1
- package/batteries/tools/memory.cjs +5 -5
- package/batteries/tools/memory.mjs +5 -5
- package/batteries/tools/parsing.cjs +9 -5
- package/batteries/tools/parsing.cjs.map +1 -1
- package/batteries/tools/parsing.mjs +9 -5
- package/batteries/tools/parsing.mjs.map +1 -1
- package/batteries/tools/retrievables.cjs +4 -4
- package/batteries/tools/retrievables.mjs +4 -4
- package/batteries/tools/searxng/exceptions.d.ts +21 -0
- package/batteries/tools/searxng/index.d.ts +150 -0
- package/batteries/tools/searxng.cjs +5 -0
- package/batteries/tools/searxng.mjs +2 -0
- package/batteries/tools/standing_instructions.cjs +4 -4
- package/batteries/tools/standing_instructions.mjs +4 -4
- package/batteries/tools/statistics.cjs +54 -43
- package/batteries/tools/statistics.cjs.map +1 -1
- package/batteries/tools/statistics.mjs +54 -43
- package/batteries/tools/statistics.mjs.map +1 -1
- package/batteries/tools/string_processing.cjs +5 -5
- package/batteries/tools/string_processing.cjs.map +1 -1
- package/batteries/tools/string_processing.mjs +5 -5
- package/batteries/tools/string_processing.mjs.map +1 -1
- package/batteries/tools/structured_data.cjs +8 -13
- package/batteries/tools/structured_data.cjs.map +1 -1
- package/batteries/tools/structured_data.mjs +8 -13
- package/batteries/tools/structured_data.mjs.map +1 -1
- package/batteries/tools/text_analysis.cjs +3 -3
- package/batteries/tools/text_analysis.mjs +3 -3
- package/batteries/tools/text_comparison.cjs +2 -2
- package/batteries/tools/text_comparison.mjs +2 -2
- package/batteries/tools/time.cjs +2 -2
- package/batteries/tools/time.mjs +2 -2
- package/batteries/tools/unit_conversion.cjs +10 -8
- package/batteries/tools/unit_conversion.cjs.map +1 -1
- package/batteries/tools/unit_conversion.mjs +10 -8
- package/batteries/tools/unit_conversion.mjs.map +1 -1
- package/batteries/tools.cjs +3 -0
- package/batteries/tools.mjs +2 -1
- package/batteries/vector/arangodb/index.d.ts +2 -0
- package/batteries/vector/arangodb.cjs +2 -1
- package/batteries/vector/arangodb.cjs.map +1 -1
- package/batteries/vector/arangodb.mjs +2 -1
- package/batteries/vector/arangodb.mjs.map +1 -1
- package/batteries/vector/builder.cjs +31 -0
- package/batteries/vector/builder.cjs.map +1 -1
- package/batteries/vector/builder.d.ts +58 -0
- package/batteries/vector/builder.mjs +31 -0
- package/batteries/vector/builder.mjs.map +1 -1
- package/batteries/vector/chroma/index.d.ts +4 -0
- package/batteries/vector/chroma.cjs +3 -0
- package/batteries/vector/chroma.cjs.map +1 -1
- package/batteries/vector/chroma.mjs +3 -0
- package/batteries/vector/chroma.mjs.map +1 -1
- package/batteries/vector/clickhouse/index.d.ts +2 -0
- package/batteries/vector/clickhouse.cjs +2 -1
- package/batteries/vector/clickhouse.cjs.map +1 -1
- package/batteries/vector/clickhouse.mjs +2 -1
- package/batteries/vector/clickhouse.mjs.map +1 -1
- package/batteries/vector/cloudflare/index.d.ts +2 -0
- package/batteries/vector/cloudflare.cjs +2 -1
- package/batteries/vector/cloudflare.cjs.map +1 -1
- package/batteries/vector/cloudflare.mjs +2 -1
- package/batteries/vector/cloudflare.mjs.map +1 -1
- package/batteries/vector/conformance/index.d.ts +22 -0
- package/batteries/vector/conformance.cjs +22 -0
- package/batteries/vector/conformance.cjs.map +1 -1
- package/batteries/vector/conformance.mjs +22 -0
- package/batteries/vector/conformance.mjs.map +1 -1
- package/batteries/vector/contract.cjs +22 -0
- package/batteries/vector/contract.cjs.map +1 -1
- package/batteries/vector/contract.d.ts +51 -0
- package/batteries/vector/contract.mjs +22 -0
- package/batteries/vector/contract.mjs.map +1 -1
- package/batteries/vector/couchbase/index.d.ts +2 -0
- package/batteries/vector/couchbase.cjs +2 -1
- package/batteries/vector/couchbase.cjs.map +1 -1
- package/batteries/vector/couchbase.mjs +2 -1
- package/batteries/vector/couchbase.mjs.map +1 -1
- package/batteries/vector/duckdb/index.d.ts +2 -0
- package/batteries/vector/duckdb.cjs +2 -1
- package/batteries/vector/duckdb.cjs.map +1 -1
- package/batteries/vector/duckdb.mjs +2 -1
- package/batteries/vector/duckdb.mjs.map +1 -1
- package/batteries/vector/elasticsearch/index.d.ts +2 -0
- package/batteries/vector/elasticsearch.cjs +2 -1
- package/batteries/vector/elasticsearch.cjs.map +1 -1
- package/batteries/vector/elasticsearch.mjs +2 -1
- package/batteries/vector/elasticsearch.mjs.map +1 -1
- package/batteries/vector/exceptions.cjs +1 -1
- package/batteries/vector/exceptions.mjs +1 -1
- package/batteries/vector/factory.cjs +6 -0
- package/batteries/vector/factory.cjs.map +1 -1
- package/batteries/vector/factory.d.ts +14 -0
- package/batteries/vector/factory.mjs +6 -0
- package/batteries/vector/factory.mjs.map +1 -1
- package/batteries/vector/filters.cjs +22 -1
- package/batteries/vector/filters.cjs.map +1 -1
- package/batteries/vector/filters.d.ts +38 -0
- package/batteries/vector/filters.mjs +22 -1
- package/batteries/vector/filters.mjs.map +1 -1
- package/batteries/vector/helpers.cjs +13 -0
- package/batteries/vector/helpers.cjs.map +1 -1
- package/batteries/vector/helpers.d.ts +14 -0
- package/batteries/vector/helpers.mjs +13 -0
- package/batteries/vector/helpers.mjs.map +1 -1
- package/batteries/vector/hnswlib/index.d.ts +2 -0
- package/batteries/vector/hnswlib.cjs +2 -1
- package/batteries/vector/hnswlib.cjs.map +1 -1
- package/batteries/vector/hnswlib.mjs +2 -1
- package/batteries/vector/hnswlib.mjs.map +1 -1
- package/batteries/vector/in_memory/index.d.ts +1 -0
- package/batteries/vector/in_memory.cjs +1 -0
- package/batteries/vector/in_memory.cjs.map +1 -1
- package/batteries/vector/in_memory.mjs +1 -0
- package/batteries/vector/in_memory.mjs.map +1 -1
- package/batteries/vector/lancedb/index.d.ts +2 -0
- package/batteries/vector/lancedb.cjs +2 -1
- package/batteries/vector/lancedb.cjs.map +1 -1
- package/batteries/vector/lancedb.mjs +2 -1
- package/batteries/vector/lancedb.mjs.map +1 -1
- package/batteries/vector/mariadb/index.d.ts +2 -0
- package/batteries/vector/mariadb.cjs +2 -1
- package/batteries/vector/mariadb.cjs.map +1 -1
- package/batteries/vector/mariadb.mjs +2 -1
- package/batteries/vector/mariadb.mjs.map +1 -1
- package/batteries/vector/meilisearch/index.d.ts +2 -0
- package/batteries/vector/meilisearch.cjs +2 -1
- package/batteries/vector/meilisearch.cjs.map +1 -1
- package/batteries/vector/meilisearch.mjs +2 -1
- package/batteries/vector/meilisearch.mjs.map +1 -1
- package/batteries/vector/migrate.cjs +18 -1
- package/batteries/vector/migrate.cjs.map +1 -1
- package/batteries/vector/migrate.d.ts +31 -0
- package/batteries/vector/migrate.mjs +18 -1
- package/batteries/vector/migrate.mjs.map +1 -1
- package/batteries/vector/milvus/index.d.ts +5 -0
- package/batteries/vector/milvus.cjs +4 -0
- package/batteries/vector/milvus.cjs.map +1 -1
- package/batteries/vector/milvus.mjs +4 -0
- package/batteries/vector/milvus.mjs.map +1 -1
- package/batteries/vector/mongodb/index.d.ts +2 -0
- package/batteries/vector/mongodb.cjs +2 -1
- package/batteries/vector/mongodb.cjs.map +1 -1
- package/batteries/vector/mongodb.mjs +2 -1
- package/batteries/vector/mongodb.mjs.map +1 -1
- package/batteries/vector/neo4j/index.d.ts +2 -0
- package/batteries/vector/neo4j.cjs +2 -1
- package/batteries/vector/neo4j.cjs.map +1 -1
- package/batteries/vector/neo4j.mjs +2 -1
- package/batteries/vector/neo4j.mjs.map +1 -1
- package/batteries/vector/opensearch/index.d.ts +2 -0
- package/batteries/vector/opensearch.cjs +2 -1
- package/batteries/vector/opensearch.cjs.map +1 -1
- package/batteries/vector/opensearch.mjs +2 -1
- package/batteries/vector/opensearch.mjs.map +1 -1
- package/batteries/vector/oracle23ai/index.d.ts +2 -0
- package/batteries/vector/oracle23ai.cjs +2 -1
- package/batteries/vector/oracle23ai.cjs.map +1 -1
- package/batteries/vector/oracle23ai.mjs +2 -1
- package/batteries/vector/oracle23ai.mjs.map +1 -1
- package/batteries/vector/orama/index.d.ts +1 -0
- package/batteries/vector/orama.cjs +1 -0
- package/batteries/vector/orama.cjs.map +1 -1
- package/batteries/vector/orama.mjs +1 -0
- package/batteries/vector/orama.mjs.map +1 -1
- package/batteries/vector/pgvector/index.d.ts +9 -2
- package/batteries/vector/pgvector.cjs +4 -0
- package/batteries/vector/pgvector.cjs.map +1 -1
- package/batteries/vector/pgvector.mjs +4 -0
- package/batteries/vector/pgvector.mjs.map +1 -1
- package/batteries/vector/pinecone/index.d.ts +5 -0
- package/batteries/vector/pinecone.cjs +3 -1
- package/batteries/vector/pinecone.cjs.map +1 -1
- package/batteries/vector/pinecone.mjs +3 -1
- package/batteries/vector/pinecone.mjs.map +1 -1
- package/batteries/vector/plan.d.ts +27 -0
- package/batteries/vector/qdrant/index.d.ts +5 -0
- package/batteries/vector/qdrant.cjs +4 -0
- package/batteries/vector/qdrant.cjs.map +1 -1
- package/batteries/vector/qdrant.mjs +4 -0
- package/batteries/vector/qdrant.mjs.map +1 -1
- package/batteries/vector/redis/index.d.ts +2 -0
- package/batteries/vector/redis.cjs +2 -1
- package/batteries/vector/redis.cjs.map +1 -1
- package/batteries/vector/redis.mjs +2 -1
- package/batteries/vector/redis.mjs.map +1 -1
- package/batteries/vector/retrievable.cjs +9 -1
- package/batteries/vector/retrievable.cjs.map +1 -1
- package/batteries/vector/retrievable.mjs +9 -1
- package/batteries/vector/retrievable.mjs.map +1 -1
- package/batteries/vector/retrievable_glue.d.ts +21 -0
- package/batteries/vector/s3vectors/index.d.ts +2 -0
- package/batteries/vector/s3vectors.cjs +2 -1
- package/batteries/vector/s3vectors.cjs.map +1 -1
- package/batteries/vector/s3vectors.mjs +2 -1
- package/batteries/vector/s3vectors.mjs.map +1 -1
- package/batteries/vector/schema.cjs +28 -0
- package/batteries/vector/schema.cjs.map +1 -1
- package/batteries/vector/schema.d.ts +39 -0
- package/batteries/vector/schema.mjs +28 -0
- package/batteries/vector/schema.mjs.map +1 -1
- package/batteries/vector/solr/index.d.ts +2 -0
- package/batteries/vector/solr.cjs +2 -1
- package/batteries/vector/solr.cjs.map +1 -1
- package/batteries/vector/solr.mjs +2 -1
- package/batteries/vector/solr.mjs.map +1 -1
- package/batteries/vector/sqlite_vec/index.d.ts +6 -3
- package/batteries/vector/sqlite_vec.cjs +2 -0
- package/batteries/vector/sqlite_vec.cjs.map +1 -1
- package/batteries/vector/sqlite_vec.mjs +2 -0
- package/batteries/vector/sqlite_vec.mjs.map +1 -1
- package/batteries/vector/surrealdb/index.d.ts +2 -0
- package/batteries/vector/surrealdb.cjs +2 -1
- package/batteries/vector/surrealdb.cjs.map +1 -1
- package/batteries/vector/surrealdb.mjs +2 -1
- package/batteries/vector/surrealdb.mjs.map +1 -1
- package/batteries/vector/types.d.ts +27 -0
- package/batteries/vector/typesense/index.d.ts +2 -0
- package/batteries/vector/typesense.cjs +2 -1
- package/batteries/vector/typesense.cjs.map +1 -1
- package/batteries/vector/typesense.mjs +2 -1
- package/batteries/vector/typesense.mjs.map +1 -1
- package/batteries/vector/validation.cjs +14 -0
- package/batteries/vector/validation.cjs.map +1 -1
- package/batteries/vector/validation.d.ts +14 -0
- package/batteries/vector/validation.mjs +14 -0
- package/batteries/vector/validation.mjs.map +1 -1
- package/batteries/vector/vector_store_constructor.cjs +1 -1
- package/batteries/vector/vector_store_constructor.cjs.map +1 -1
- package/batteries/vector/vector_store_constructor.d.ts +1 -1
- package/batteries/vector/vector_store_constructor.mjs +1 -1
- package/batteries/vector/vector_store_constructor.mjs.map +1 -1
- package/batteries/vector/vespa/index.d.ts +2 -0
- package/batteries/vector/vespa.cjs +2 -1
- package/batteries/vector/vespa.cjs.map +1 -1
- package/batteries/vector/vespa.mjs +2 -1
- package/batteries/vector/vespa.mjs.map +1 -1
- package/batteries/vector/weaviate/index.d.ts +2 -0
- package/batteries/vector/weaviate.cjs +2 -1
- package/batteries/vector/weaviate.cjs.map +1 -1
- package/batteries/vector/weaviate.mjs +2 -1
- package/batteries/vector/weaviate.mjs.map +1 -1
- package/batteries.cjs +46 -28
- package/batteries.mjs +10 -5
- package/{common-BT0nfCi9.mjs → common-DYDUi99O.mjs} +9 -9
- package/common-DYDUi99O.mjs.map +1 -0
- package/{common-Cj8TaQ9U.js → common-DZl3ADJs.js} +9 -9
- package/common-DZl3ADJs.js.map +1 -0
- package/common.cjs +7 -7
- package/common.d.ts +1 -1
- package/common.mjs +7 -7
- package/{dispatch_runner-DPcS7Y_M.mjs → dispatch_runner--ZhdDWRZ.mjs} +27 -5
- package/{dispatch_runner-DPcS7Y_M.mjs.map → dispatch_runner--ZhdDWRZ.mjs.map} +1 -1
- package/{dispatch_runner-BHBNupqp.js → dispatch_runner-nHDKkxye.js} +27 -5
- package/{dispatch_runner-BHBNupqp.js.map → dispatch_runner-nHDKkxye.js.map} +1 -1
- package/dispatch_runner.cjs +1 -1
- package/dispatch_runner.d.ts +1 -1
- package/dispatch_runner.mjs +1 -1
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.cjs +1 -0
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.cjs.map +1 -1
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.d.ts +1 -0
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.mjs +1 -0
- package/eslint/rules/artifact_tool_forbids_artifact_constructor.mjs.map +1 -1
- package/eslint/rules/no_model_in_tool_handler.cjs +1 -0
- package/eslint/rules/no_model_in_tool_handler.cjs.map +1 -1
- package/eslint/rules/no_model_in_tool_handler.d.ts +1 -0
- package/eslint/rules/no_model_in_tool_handler.mjs +1 -0
- package/eslint/rules/no_model_in_tool_handler.mjs.map +1 -1
- package/eslint/rules/require_validator_any_required.cjs +1 -0
- package/eslint/rules/require_validator_any_required.cjs.map +1 -1
- package/eslint/rules/require_validator_any_required.d.ts +1 -0
- package/eslint/rules/require_validator_any_required.mjs +1 -0
- package/eslint/rules/require_validator_any_required.mjs.map +1 -1
- package/eslint/rules/thought_payload_requires_replay_tag.cjs +1 -0
- package/eslint/rules/thought_payload_requires_replay_tag.cjs.map +1 -1
- package/eslint/rules/thought_payload_requires_replay_tag.d.ts +1 -0
- package/eslint/rules/thought_payload_requires_replay_tag.mjs +1 -0
- package/eslint/rules/thought_payload_requires_replay_tag.mjs.map +1 -1
- package/eslint/rules/token_encoding_requires_context_window.cjs +1 -0
- package/eslint/rules/token_encoding_requires_context_window.cjs.map +1 -1
- package/eslint/rules/token_encoding_requires_context_window.d.ts +1 -0
- package/eslint/rules/token_encoding_requires_context_window.mjs +1 -0
- package/eslint/rules/token_encoding_requires_context_window.mjs.map +1 -1
- package/eslint.cjs +1 -1
- package/eslint.mjs +1 -1
- package/{exceptions-BeWH2FwP.mjs → exceptions-BDhN0Xzr.mjs} +3 -2
- package/exceptions-BDhN0Xzr.mjs.map +1 -0
- package/{exceptions-CitH5wZI.js → exceptions-BRXrUKiW.js} +3 -2
- package/exceptions-BRXrUKiW.js.map +1 -0
- package/exceptions.cjs +2 -2
- package/exceptions.mjs +2 -2
- package/factories.cjs +1 -1
- package/factories.mjs +1 -1
- package/forge.cjs +4 -4
- package/forge.d.ts +1 -1
- package/forge.mjs +4 -4
- package/guards.cjs +9 -9
- package/guards.mjs +9 -9
- package/helpers-DSTFxTiC.js +497 -0
- package/helpers-DSTFxTiC.js.map +1 -0
- package/helpers-xhrQbMAG.mjs +306 -0
- package/helpers-xhrQbMAG.mjs.map +1 -0
- package/index.cjs +13 -13
- package/index.mjs +13 -13
- package/lib/classes/base_exception.d.ts +1 -0
- package/lib/classes/media.d.ts +10 -0
- package/lib/classes/retrievable.d.ts +1 -1
- package/lib/classes/spooled_json_artifact.d.ts +1 -1
- package/lib/classes/spooled_markdown_artifact.d.ts +1 -0
- package/lib/classes/tokenizable.d.ts +3 -0
- package/lib/classes/tool.d.ts +8 -0
- package/lib/classes/turn_gate.d.ts +6 -0
- package/lib/dispatch_runner.d.ts +4 -32
- package/lib/helpers/bignum.cjs +82 -0
- package/lib/helpers/bignum.cjs.map +1 -0
- package/lib/helpers/bignum.d.ts +52 -0
- package/lib/helpers/bignum.mjs +74 -0
- package/lib/helpers/bignum.mjs.map +1 -0
- package/lib/turn_runner.d.ts +1 -1
- package/lib/types/dispatch_runner.d.ts +83 -0
- package/lib/utils/exceptions.d.ts +1 -1
- package/lib/utils/retry.cjs.map +1 -1
- package/lib/utils/retry.d.ts +2 -0
- package/lib/utils/retry.mjs.map +1 -1
- package/mcp/adk-docs-corpus.json +1 -1
- package/package.json +264 -224
- package/{runtime-j92CNi5z.mjs → runtime-Bz5zA8wc.mjs} +2 -2
- package/{runtime-j92CNi5z.mjs.map → runtime-Bz5zA8wc.mjs.map} +1 -1
- package/{runtime-MFFcJrRv.js → runtime-DslE1aBw.js} +2 -2
- package/{runtime-MFFcJrRv.js.map → runtime-DslE1aBw.js.map} +1 -1
- package/searxng-Bkrwhwhw.js +269 -0
- package/searxng-Bkrwhwhw.js.map +1 -0
- package/searxng-CyA-nEu5.mjs +257 -0
- package/searxng-CyA-nEu5.mjs.map +1 -0
- package/skills/adk-assembly/SKILL.md +2 -2
- package/{spooled_artifact-CHoZgWwI.mjs → spooled_artifact-7eePq7JA.mjs} +5 -5
- package/{spooled_artifact-CHoZgWwI.mjs.map → spooled_artifact-7eePq7JA.mjs.map} +1 -1
- package/{spooled_artifact-BTq6Nzfy.js → spooled_artifact-DX8LLyUX.js} +5 -5
- package/{spooled_artifact-BTq6Nzfy.js.map → spooled_artifact-DX8LLyUX.js.map} +1 -1
- package/spooled_artifact.cjs +2 -2
- package/spooled_artifact.mjs +2 -2
- package/{spooled_markdown_artifact-CALSDxIx.js → spooled_markdown_artifact-ClX72lek.js} +4 -4
- package/spooled_markdown_artifact-ClX72lek.js.map +1 -0
- package/{spooled_markdown_artifact-Ci5UL7l4.mjs → spooled_markdown_artifact-wkrBF3oX.mjs} +4 -4
- package/spooled_markdown_artifact-wkrBF3oX.mjs.map +1 -0
- package/{thought-D34QQZZ9.mjs → thought-B_vxAiKU.mjs} +5 -5
- package/{thought-D34QQZZ9.mjs.map → thought-B_vxAiKU.mjs.map} +1 -1
- package/{thought-BbwhJ1wb.js → thought-DLwpF7MI.js} +5 -5
- package/{thought-BbwhJ1wb.js.map → thought-DLwpF7MI.js.map} +1 -1
- package/{tool-CVyZkFC7.js → tool-D5WGVIcI.js} +4 -4
- package/{tool-CVyZkFC7.js.map → tool-D5WGVIcI.js.map} +1 -1
- package/{tool-CMhaDRNd.mjs → tool-wMYMVl60.mjs} +4 -4
- package/{tool-CMhaDRNd.mjs.map → tool-wMYMVl60.mjs.map} +1 -1
- package/{tool_call-CV5qVNlb.mjs → tool_call-B4-_-vjG.mjs} +5 -5
- package/tool_call-B4-_-vjG.mjs.map +1 -0
- package/{tool_call-Db68hB7y.js → tool_call-DixVlW40.js} +5 -5
- package/tool_call-DixVlW40.js.map +1 -0
- package/{tool_registry-D1pSSlsd.mjs → tool_registry-791Vrjtf.mjs} +4 -3
- package/tool_registry-791Vrjtf.mjs.map +1 -0
- package/{tool_registry-DYUYqXvo.js → tool_registry-CKJPze3j.js} +4 -3
- package/tool_registry-CKJPze3j.js.map +1 -0
- package/{turn_runner-DqWHNP80.js → turn_runner-HXImLGIn.js} +7 -7
- package/turn_runner-HXImLGIn.js.map +1 -0
- package/{turn_runner-fg1Wc3dK.mjs → turn_runner-ZyYO-Kti.mjs} +7 -7
- package/turn_runner-ZyYO-Kti.mjs.map +1 -0
- package/turn_runner.cjs +1 -1
- package/turn_runner.mjs +1 -1
- package/types.d.ts +1 -1
- package/common-BT0nfCi9.mjs.map +0 -1
- package/common-Cj8TaQ9U.js.map +0 -1
- package/exceptions-BeWH2FwP.mjs.map +0 -1
- package/exceptions-CitH5wZI.js.map +0 -1
- package/spooled_markdown_artifact-CALSDxIx.js.map +0 -1
- package/spooled_markdown_artifact-Ci5UL7l4.mjs.map +0 -1
- package/tool_call-CV5qVNlb.mjs.map +0 -1
- package/tool_call-Db68hB7y.js.map +0 -1
- package/tool_registry-D1pSSlsd.mjs.map +0 -1
- package/tool_registry-DYUYqXvo.js.map +0 -1
- package/turn_runner-DqWHNP80.js.map +0 -1
- package/turn_runner-fg1Wc3dK.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vespa.mjs","names":["#opts","#connected","#endpoint","#untilDate","#collections","#deploy","#configUrl","#buildPackage","#sleep","#clearCollection","#vecValues","#parseMeta","#project"],"sources":["../../../src/batteries/vector/vespa/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/vespa\n *\n * Vespa vector-store adapter. A logical collection maps to a document-type in a deployed\n * application package; the adapter maintains the application-package STATE in memory (the set of\n * live collections + their dims/metric) and redeploys the whole package on each schema change\n * via the config server (dependency-free store-zip). Feed/get/delete/search are performed over\n * the document + search HTTP APIs; scores are recomputed locally (cosineSim/dotProd/euclideanDist)\n * to guarantee the [0,1] contract regardless of backend metric quirks. Metadata is a JSON string\n * field filtered with the neutral filter tree's JS reference evaluator for cross-adapter parity.\n *\n * Vespa has NO runtime \"create collection\". A collection = a document-type declared in a .sd schema\n * file inside a deployed application package. The adapter maintains the application-package STATE\n * in memory and redeploys the whole package on each schema change via the config server.\n */\n\nimport { evaluateFilter } from '../filters'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport {\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n} from '../exceptions'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n VectorMetadata,\n DistanceMetric,\n} from '../types'\n\n// ZIP writer (no compression)\nconst crc32Table: number[] = (() => {\n const t: number[] = []\n for (let n = 0; n < 256; n++) {\n let c = n\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n t[n] = c >>> 0\n }\n return t\n})()\n\nconst crc32 = (buf: Buffer): number => {\n let c = 0xffffffff\n for (let i = 0; i < buf.length; i++) c = crc32Table[(c ^ buf[i]) & 0xff] ^ (c >>> 8)\n return (c ^ 0xffffffff) >>> 0\n}\n\nconst storeZip = (files: Array<{ name: string; data: Buffer }>): Buffer => {\n const locals: Buffer[] = []\n const central: Buffer[] = []\n let offset = 0\n for (const f of files) {\n const name = Buffer.from(f.name, 'utf8')\n const data = f.data\n const crc = crc32(data)\n const lh = Buffer.alloc(30)\n lh.writeUInt32LE(0x04034b50, 0)\n lh.writeUInt16LE(20, 4)\n lh.writeUInt32LE(crc, 14)\n lh.writeUInt32LE(data.length, 18)\n lh.writeUInt32LE(data.length, 22)\n lh.writeUInt16LE(name.length, 26)\n const local = Buffer.concat([lh, name, data])\n locals.push(local)\n const ch = Buffer.alloc(46)\n ch.writeUInt32LE(0x02014b50, 0)\n ch.writeUInt16LE(20, 4)\n ch.writeUInt16LE(20, 6)\n ch.writeUInt32LE(crc, 16)\n ch.writeUInt32LE(data.length, 20)\n ch.writeUInt32LE(data.length, 24)\n ch.writeUInt16LE(name.length, 28)\n ch.writeUInt32LE(offset, 42)\n central.push(Buffer.concat([ch, name]))\n offset += local.length\n }\n const cd = Buffer.concat(central)\n const localAll = Buffer.concat(locals)\n const eocd = Buffer.alloc(22)\n eocd.writeUInt32LE(0x06054b50, 0)\n eocd.writeUInt16LE(files.length, 8)\n eocd.writeUInt16LE(files.length, 10)\n eocd.writeUInt32LE(cd.length, 12)\n eocd.writeUInt32LE(localAll.length, 16)\n return Buffer.concat([localAll, cd, eocd])\n}\n\nconst metricToVespa = (metric: DistanceMetric): string =>\n metric === 'cosine' ? 'angular' : metric === 'euclidean' ? 'euclidean' : 'dotproduct'\n\nconst cosineSim = (a: number[], b: number[]): number => {\n let dot = 0\n let normA = 0\n let normB = 0\n for (const [i, av] of a.entries()) {\n const bv = b[i]\n dot += av * bv\n normA += av * av\n normB += bv * bv\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB)\n return denom === 0 ? 0 : dot / denom\n}\n\nconst dotProd = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n s += av * b[i]\n }\n return s\n}\n\nconst euclideanDist = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n const d = av - b[i]\n s += d * d\n }\n return Math.sqrt(s)\n}\n\nconst computeScore = (vec: number[], query: number[], metric: DistanceMetric): number => {\n if (metric === 'cosine') {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n } else if (metric === 'dot') {\n const raw = dotProd(vec, query)\n return normalizeScore(raw, 'dot', 'similarity')\n } else if (metric === 'euclidean') {\n const raw = euclideanDist(vec, query)\n return normalizeScore(raw, 'euclidean', 'distance')\n } else {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n }\n}\n\nexport interface VespaVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: {\n endpoint?: string\n configUrl?: string\n }\n}\n\nexport class VespaVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #collections: Map<string, { dims: number; metric: DistanceMetric }> = new Map()\n #connected: boolean = false\n\n get #opts(): VespaVectorStoreOptions {\n return this.options as VespaVectorStoreOptions\n }\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n async connect(): Promise<void> {\n if (this.#connected) return\n const endpoint = this.#endpoint()\n try {\n const res = await fetch(endpoint + '/ApplicationStatus')\n if (!res.ok) {\n const body = (await res.json()) as any\n throw new E_VECTOR_STORE_CONNECTION_FAILED([\n `Vespa config server unreachable: ${body?.message ?? res.statusText}`,\n ])\n }\n } catch (err) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)])\n }\n this.#connected = true\n }\n\n async close(): Promise<void> {\n this.#connected = false\n }\n\n #endpoint(): string {\n return this.#opts.connection?.endpoint ?? 'http://localhost:8080'\n }\n\n #configUrl(): string {\n return this.#opts.connection?.configUrl ?? 'http://localhost:19071'\n }\n\n #untilDate(): string {\n return new Date(Date.now() + 25 * 86400 * 1000).toISOString().slice(0, 10)\n }\n\n #buildPackage(): Buffer {\n const files: Array<{ name: string; data: Buffer }> = []\n\n // hosts.xml (constant)\n files.push({\n name: 'hosts.xml',\n data: Buffer.from(\n '<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<hosts><host name=\"localhost\"><alias>node1</alias></host></hosts>\\n',\n 'utf8'\n ),\n })\n\n // validation-overrides.xml\n const until = this.#untilDate()\n files.push({\n name: 'validation-overrides.xml',\n data: Buffer.from(\n `<validation-overrides>\\n <allow until=\"${until}\">schema-removal</allow>\\n <allow until=\"${until}\">field-type-change</allow>\\n <allow until=\"${until}\">indexing-change</allow>\\n</validation-overrides>\\n`,\n 'utf8'\n ),\n })\n\n // services.xml (one <document> line per live collection)\n let docLines = ''\n for (const [coll] of this.#collections) {\n docLines += ` <document type=\"${coll}\" mode=\"index\"/>\\n`\n }\n if (docLines === '') docLines = ' <document type=\"empty\" mode=\"index\"/>\\n'\n files.push({\n name: 'services.xml',\n data: Buffer.from(\n `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<services version=\"1.0\">\\n <container id=\"default\" version=\"1.0\"><document-api/><search/></container>\\n <content id=\"docs\" version=\"1.0\">\\n <redundancy>1</redundancy>\\n <documents>\\n${docLines} </documents>\\n <nodes><node distribution-key=\"0\" hostalias=\"node1\"/></nodes>\\n <tuning><resource-limits><disk>0.97</disk><memory>0.95</memory></resource-limits></tuning>\\n </content>\\n</services>\\n`,\n 'utf8'\n ),\n })\n\n // schemas/<coll>.sd\n for (const [coll, spec] of this.#collections) {\n const metric = metricToVespa(spec.metric)\n const sd = `schema ${coll} {\\n document ${coll} {\\n field id type string {\\n indexing: summary | attribute\\n attribute: fast-search\\n }\\n field vec type tensor<float>(x[${spec.dims}]) {\\n indexing: summary | attribute | index\\n attribute { distance-metric: ${metric} }\\n index { hnsw { max-links-per-node: 16 neighbors-to-explore-at-insert: 100 } }\\n }\\n field document type string { indexing: summary }\\n field metadata type string { indexing: summary }\\n }\\n rank-profile vector_nearest {\\n inputs { query(q) tensor<float>(x[${spec.dims}]) }\\n first-phase { expression: closeness(field, vec) }\\n }\\n}\\n`\n files.push({\n name: `schemas/${coll}.sd`,\n data: Buffer.from(sd, 'utf8'),\n })\n }\n\n return storeZip(files)\n }\n\n async #deploy(): Promise<void> {\n const url = this.#configUrl() + '/application/v2/tenant/default/prepareandactivate'\n const pkg = this.#buildPackage()\n // fetch's BodyInit doesn't accept a Node Buffer directly under the DOM lib types; a Uint8Array\n // view over the same bytes is an accepted BodyInit and avoids a copy.\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/zip' },\n // The installed DOM lib's BodyInit doesn't list Uint8Array, but the runtime (undici/Node)\n // accepts a typed-array body fine — cast through the accepted union.\n body: new Uint8Array(pkg.buffer, pkg.byteOffset, pkg.byteLength) as unknown as BodyInit,\n })\n if (!res.ok) {\n const data = (await res.json()) as any\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['deploy', data?.message ?? `HTTP ${res.status}`])\n }\n // Poll ApplicationStatus until 200\n const endpoint = this.#endpoint()\n for (let i = 0; i < 60; i++) {\n try {\n const sres = await fetch(endpoint + '/ApplicationStatus')\n if (sres.ok) return\n } catch {\n // continue polling\n }\n await this.#sleep(1000)\n }\n }\n\n async #sleep(ms: number): Promise<void> {\n await new Promise((r) => setTimeout(r, ms))\n }\n\n #vecValues(field: any): number[] {\n if (field?.values && Array.isArray(field.values)) return field.values\n if (field?.cells && Array.isArray(field.cells)) {\n return field.cells.map((c: any) => c.value)\n }\n return []\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n const coll = spec.collection\n if (this.#collections.has(coll)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'createCollection',\n `collection already exists: ${coll}`,\n ])\n }\n this.#collections.set(coll, { dims: spec.vector.dimensions, metric: spec.vector.metric })\n try {\n await this.#deploy()\n // Wait for schema to be query-ready\n const endpoint = this.#endpoint()\n for (let i = 0; i < 30; i++) {\n try {\n const q = encodeURIComponent(`select id from ${coll} where true`)\n const res = await fetch(`${endpoint}/search/?yql=${q}&hits=1`)\n if (res.ok) break\n } catch {\n // continue polling\n }\n await this.#sleep(500)\n }\n // Clear any residual documents (redeploy preserves data)\n await this.#clearCollection(coll)\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['createCollection', String(err)])\n }\n }\n\n async #clearCollection(coll: string): Promise<void> {\n try {\n const endpoint = this.#endpoint()\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`,\n {\n method: 'DELETE',\n }\n )\n if (!res.ok) {\n const body = (await res.json()) as any\n // Ignore 404 for non-existing collection\n if (body?.message?.includes('No document type') || res.status === 404) {\n return\n }\n }\n } catch {\n // Ignore errors during clear\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n if (!this.#collections.has(collection)) {\n if (ifExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'dropCollection',\n `collection not found: ${collection}`,\n ])\n }\n try {\n await this.#clearCollection(collection)\n this.#collections.delete(collection)\n if (this.#collections.size === 0) {\n // Do not redeploy an empty content cluster; just forget it locally\n return\n }\n await this.#deploy()\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['dropCollection', String(err)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n return this.#collections.has(collection)\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'vespa'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const dims = this.#opts.dimensions ?? this.#collections.get(coll)?.dims\n try {\n const ids = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) {\n throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n }\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n const body = {\n fields: {\n id: r.id,\n vec: { values: vector },\n document: r.document ?? '',\n metadata: r.metadata ? JSON.stringify(r.metadata) : '{}',\n },\n }\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(r.id)}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }\n )\n if (!res.ok) {\n const errData = (await res.json()) as any\n throw new Error(errData?.message ?? `HTTP ${res.status}`)\n }\n ids.push(r.id)\n }\n // Brief settle for HNSW index\n await this.#sleep(500)\n } catch (err) {\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH) ||\n isInstanceOf(err, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)\n ) {\n throw err\n }\n throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const metric = this.#collections.get(coll)?.metric ?? this.#opts.metric ?? 'cosine'\n let queryVector: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) {\n queryVector = plan.near.vector\n } else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n queryVector = v\n } else if ('id' in plan.near) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(plan.near.id)}`\n )\n if (!res.ok) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n const data = (await res.json()) as any\n const vec = this.#vecValues(data.fields?.vec)\n if (!vec || vec.length === 0) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n queryVector = vec\n }\n }\n\n const offset = plan.offset ?? 0\n const topK = plan.topK ?? 10\n const k = plan.filter ? 400 : topK + offset\n const yql = queryVector\n ? `select id, document, metadata, vec from ${coll} where {targetHits:${k}}nearestNeighbor(vec, q)`\n : `select id, document, metadata, vec from ${coll} where true`\n\n try {\n const body: any = {\n yql,\n hits: k,\n }\n if (queryVector) {\n body['input.query(q)'] = queryVector\n body['ranking.profile'] = 'vector_nearest'\n }\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const root = data.root as any\n const children = root.children ?? []\n\n if (queryVector) {\n const filtered = children\n .filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n .map((c: any) => {\n const vec = this.#vecValues(c.fields?.vec)\n const score = computeScore(vec, queryVector, metric)\n return { ...c.fields, score }\n })\n filtered.sort((a: any, b: any) => b.score - a.score)\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, true))\n } else {\n const filtered = children.filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, false))\n }\n } catch (err) {\n if ((err as any)?.message?.includes('Referenced id not found')) {\n throw err\n }\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`,\n { method: 'DELETE' }\n )\n if (!res.ok && res.status !== 404) {\n const body = (await res.json()) as any\n throw new Error(body?.message ?? `HTTP ${res.status}`)\n }\n }\n } else if (plan.filter) {\n const yql = `select id, metadata, vec from ${coll} where true`\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ yql, hits: 400 }),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const children = data.root.children ?? []\n const targets = children\n .filter((c: any) => evaluateFilter(plan.filter!, this.#parseMeta(c.fields?.metadata)))\n .map((c: any) => c.fields?.id)\n for (const id of targets) {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n })\n }\n } else {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`, {\n method: 'DELETE',\n })\n }\n } catch (err) {\n throw new E_VECTOR_STORE_DELETE_FAILED([String(err)])\n }\n }\n\n #parseMeta(val: unknown): VectorMetadata {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as VectorMetadata\n } catch {\n return {}\n }\n }\n if (val && typeof val === 'object') return val as VectorMetadata\n return {}\n }\n\n #project(doc: any, plan: SearchPlan, hasScore: boolean): VectorMatch {\n const proj = plan.projection\n const out: VectorMatch = {}\n if (proj.id) out.id = doc.id as string\n if (proj.vector) {\n const vec = this.#vecValues(doc.vec)\n if (vec && vec.length > 0) out.vector = vec.map(Number)\n }\n if (proj.document) out.document = (doc.document ?? undefined) as string | undefined\n if (proj.metadata) out.metadata = this.#parseMeta(doc.metadata)\n if (hasScore && typeof doc.score === 'number') {\n out.score = doc.score\n }\n return out\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vespa.mjs","names":["#opts","#connected","#endpoint","#untilDate","#collections","#deploy","#configUrl","#buildPackage","#sleep","#clearCollection","#vecValues","#parseMeta","#project"],"sources":["../../../src/batteries/vector/vespa/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/vespa\n *\n * Vespa vector-store adapter. A logical collection maps to a document-type in a deployed\n * application package; the adapter maintains the application-package STATE in memory (the set of\n * live collections + their dims/metric) and redeploys the whole package on each schema change\n * via the config server (dependency-free store-zip). Feed/get/delete/search are performed over\n * the document + search HTTP APIs; scores are recomputed locally (cosineSim/dotProd/euclideanDist)\n * to guarantee the [0,1] contract regardless of backend metric quirks. Metadata is a JSON string\n * field filtered with the neutral filter tree's JS reference evaluator for cross-adapter parity.\n *\n * Vespa has NO runtime \"create collection\". A collection = a document-type declared in a .sd schema\n * file inside a deployed application package. The adapter maintains the application-package STATE\n * in memory and redeploys the whole package on each schema change via the config server.\n */\n\nimport { evaluateFilter } from '../filters'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport {\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n} from '../exceptions'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n VectorMetadata,\n DistanceMetric,\n} from '../types'\n\n// ZIP writer (no compression)\nconst crc32Table: number[] = (() => {\n const t: number[] = []\n for (let n = 0; n < 256; n++) {\n let c = n\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n t[n] = c >>> 0\n }\n return t\n})()\n\nconst crc32 = (buf: Buffer): number => {\n let c = 0xffffffff\n for (let i = 0; i < buf.length; i++) c = crc32Table[(c ^ buf[i]) & 0xff] ^ (c >>> 8)\n return (c ^ 0xffffffff) >>> 0\n}\n\nconst storeZip = (files: Array<{ name: string; data: Buffer }>): Buffer => {\n const locals: Buffer[] = []\n const central: Buffer[] = []\n let offset = 0\n for (const f of files) {\n const name = Buffer.from(f.name, 'utf8')\n const data = f.data\n const crc = crc32(data)\n const lh = Buffer.alloc(30)\n lh.writeUInt32LE(0x04034b50, 0)\n lh.writeUInt16LE(20, 4)\n lh.writeUInt32LE(crc, 14)\n lh.writeUInt32LE(data.length, 18)\n lh.writeUInt32LE(data.length, 22)\n lh.writeUInt16LE(name.length, 26)\n const local = Buffer.concat([lh, name, data])\n locals.push(local)\n const ch = Buffer.alloc(46)\n ch.writeUInt32LE(0x02014b50, 0)\n ch.writeUInt16LE(20, 4)\n ch.writeUInt16LE(20, 6)\n ch.writeUInt32LE(crc, 16)\n ch.writeUInt32LE(data.length, 20)\n ch.writeUInt32LE(data.length, 24)\n ch.writeUInt16LE(name.length, 28)\n ch.writeUInt32LE(offset, 42)\n central.push(Buffer.concat([ch, name]))\n offset += local.length\n }\n const cd = Buffer.concat(central)\n const localAll = Buffer.concat(locals)\n const eocd = Buffer.alloc(22)\n eocd.writeUInt32LE(0x06054b50, 0)\n eocd.writeUInt16LE(files.length, 8)\n eocd.writeUInt16LE(files.length, 10)\n eocd.writeUInt32LE(cd.length, 12)\n eocd.writeUInt32LE(localAll.length, 16)\n return Buffer.concat([localAll, cd, eocd])\n}\n\nconst metricToVespa = (metric: DistanceMetric): string =>\n metric === 'cosine' ? 'angular' : metric === 'euclidean' ? 'euclidean' : 'dotproduct'\n\nconst cosineSim = (a: number[], b: number[]): number => {\n let dot = 0\n let normA = 0\n let normB = 0\n for (const [i, av] of a.entries()) {\n const bv = b[i]\n dot += av * bv\n normA += av * av\n normB += bv * bv\n }\n const denom = Math.sqrt(normA) * Math.sqrt(normB)\n return denom === 0 ? 0 : dot / denom\n}\n\nconst dotProd = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n s += av * b[i]\n }\n return s\n}\n\nconst euclideanDist = (a: number[], b: number[]): number => {\n let s = 0\n for (const [i, av] of a.entries()) {\n const d = av - b[i]\n s += d * d\n }\n return Math.sqrt(s)\n}\n\nconst computeScore = (vec: number[], query: number[], metric: DistanceMetric): number => {\n if (metric === 'cosine') {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n } else if (metric === 'dot') {\n const raw = dotProd(vec, query)\n return normalizeScore(raw, 'dot', 'similarity')\n } else if (metric === 'euclidean') {\n const raw = euclideanDist(vec, query)\n return normalizeScore(raw, 'euclidean', 'distance')\n } else {\n const raw = cosineSim(vec, query)\n return normalizeScore(raw, 'cosine', 'similarity')\n }\n}\n\nexport interface VespaVectorStoreOptions extends BaseVectorStoreOptions {\n /** Connection and authentication parameters for the backend. */\n connection?: {\n endpoint?: string\n configUrl?: string\n }\n}\n\nexport class VespaVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #collections: Map<string, { dims: number; metric: DistanceMetric }> = new Map()\n #connected: boolean = false\n\n get #opts(): VespaVectorStoreOptions {\n return this.options as VespaVectorStoreOptions\n }\n\n /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n static isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n async connect(): Promise<void> {\n if (this.#connected) return\n const endpoint = this.#endpoint()\n try {\n const res = await fetch(endpoint + '/ApplicationStatus')\n if (!res.ok) {\n const body = (await res.json()) as any\n throw new E_VECTOR_STORE_CONNECTION_FAILED([\n `Vespa config server unreachable: ${body?.message ?? res.statusText}`,\n ])\n }\n } catch (err) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)])\n }\n this.#connected = true\n }\n\n async close(): Promise<void> {\n this.#connected = false\n }\n\n #endpoint(): string {\n return this.#opts.connection?.endpoint ?? 'http://localhost:8080'\n }\n\n #configUrl(): string {\n return this.#opts.connection?.configUrl ?? 'http://localhost:19071'\n }\n\n #untilDate(): string {\n return new Date(Date.now() + 25 * 86400 * 1000).toISOString().slice(0, 10)\n }\n\n #buildPackage(): Buffer {\n const files: Array<{ name: string; data: Buffer }> = []\n\n // hosts.xml (constant)\n files.push({\n name: 'hosts.xml',\n data: Buffer.from(\n '<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<hosts><host name=\"localhost\"><alias>node1</alias></host></hosts>\\n',\n 'utf8'\n ),\n })\n\n // validation-overrides.xml\n const until = this.#untilDate()\n files.push({\n name: 'validation-overrides.xml',\n data: Buffer.from(\n `<validation-overrides>\\n <allow until=\"${until}\">schema-removal</allow>\\n <allow until=\"${until}\">field-type-change</allow>\\n <allow until=\"${until}\">indexing-change</allow>\\n</validation-overrides>\\n`,\n 'utf8'\n ),\n })\n\n // services.xml (one <document> line per live collection)\n let docLines = ''\n for (const [coll] of this.#collections) {\n docLines += ` <document type=\"${coll}\" mode=\"index\"/>\\n`\n }\n if (docLines === '') docLines = ' <document type=\"empty\" mode=\"index\"/>\\n'\n files.push({\n name: 'services.xml',\n data: Buffer.from(\n `<?xml version=\"1.0\" encoding=\"utf-8\" ?>\\n<services version=\"1.0\">\\n <container id=\"default\" version=\"1.0\"><document-api/><search/></container>\\n <content id=\"docs\" version=\"1.0\">\\n <redundancy>1</redundancy>\\n <documents>\\n${docLines} </documents>\\n <nodes><node distribution-key=\"0\" hostalias=\"node1\"/></nodes>\\n <tuning><resource-limits><disk>0.97</disk><memory>0.95</memory></resource-limits></tuning>\\n </content>\\n</services>\\n`,\n 'utf8'\n ),\n })\n\n // schemas/<coll>.sd\n for (const [coll, spec] of this.#collections) {\n const metric = metricToVespa(spec.metric)\n const sd = `schema ${coll} {\\n document ${coll} {\\n field id type string {\\n indexing: summary | attribute\\n attribute: fast-search\\n }\\n field vec type tensor<float>(x[${spec.dims}]) {\\n indexing: summary | attribute | index\\n attribute { distance-metric: ${metric} }\\n index { hnsw { max-links-per-node: 16 neighbors-to-explore-at-insert: 100 } }\\n }\\n field document type string { indexing: summary }\\n field metadata type string { indexing: summary }\\n }\\n rank-profile vector_nearest {\\n inputs { query(q) tensor<float>(x[${spec.dims}]) }\\n first-phase { expression: closeness(field, vec) }\\n }\\n}\\n`\n files.push({\n name: `schemas/${coll}.sd`,\n data: Buffer.from(sd, 'utf8'),\n })\n }\n\n return storeZip(files)\n }\n\n async #deploy(): Promise<void> {\n const url = this.#configUrl() + '/application/v2/tenant/default/prepareandactivate'\n const pkg = this.#buildPackage()\n // fetch's BodyInit doesn't accept a Node Buffer directly under the DOM lib types; a Uint8Array\n // view over the same bytes is an accepted BodyInit and avoids a copy.\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/zip' },\n // The installed DOM lib's BodyInit doesn't list Uint8Array, but the runtime (undici/Node)\n // accepts a typed-array body fine — cast through the accepted union.\n body: new Uint8Array(pkg.buffer, pkg.byteOffset, pkg.byteLength) as unknown as BodyInit,\n })\n if (!res.ok) {\n const data = (await res.json()) as any\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['deploy', data?.message ?? `HTTP ${res.status}`])\n }\n // Poll ApplicationStatus until 200\n const endpoint = this.#endpoint()\n for (let i = 0; i < 60; i++) {\n try {\n const sres = await fetch(endpoint + '/ApplicationStatus')\n if (sres.ok) return\n } catch {\n // continue polling\n }\n await this.#sleep(1000)\n }\n }\n\n async #sleep(ms: number): Promise<void> {\n await new Promise((r) => setTimeout(r, ms))\n }\n\n #vecValues(field: any): number[] {\n if (field?.values && Array.isArray(field.values)) return field.values\n if (field?.cells && Array.isArray(field.cells)) {\n return field.cells.map((c: any) => c.value)\n }\n return []\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n const coll = spec.collection\n if (this.#collections.has(coll)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'createCollection',\n `collection already exists: ${coll}`,\n ])\n }\n this.#collections.set(coll, { dims: spec.vector.dimensions, metric: spec.vector.metric })\n try {\n await this.#deploy()\n // Wait for schema to be query-ready\n const endpoint = this.#endpoint()\n for (let i = 0; i < 30; i++) {\n try {\n const q = encodeURIComponent(`select id from ${coll} where true`)\n const res = await fetch(`${endpoint}/search/?yql=${q}&hits=1`)\n if (res.ok) break\n } catch {\n // continue polling\n }\n await this.#sleep(500)\n }\n // Clear any residual documents (redeploy preserves data)\n await this.#clearCollection(coll)\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['createCollection', String(err)])\n }\n }\n\n async #clearCollection(coll: string): Promise<void> {\n try {\n const endpoint = this.#endpoint()\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`,\n {\n method: 'DELETE',\n }\n )\n if (!res.ok) {\n const body = (await res.json()) as any\n // Ignore 404 for non-existing collection\n if (body?.message?.includes('No document type') || res.status === 404) {\n return\n }\n }\n } catch {\n // Ignore errors during clear\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n if (!this.#collections.has(collection)) {\n if (ifExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'dropCollection',\n `collection not found: ${collection}`,\n ])\n }\n try {\n await this.#clearCollection(collection)\n this.#collections.delete(collection)\n if (this.#collections.size === 0) {\n // Do not redeploy an empty content cluster; just forget it locally\n return\n }\n await this.#deploy()\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['dropCollection', String(err)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n return this.#collections.has(collection)\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'vespa'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const dims = this.#opts.dimensions ?? this.#collections.get(coll)?.dims\n try {\n const ids = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) {\n throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n }\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n const body = {\n fields: {\n id: r.id,\n vec: { values: vector },\n document: r.document ?? '',\n metadata: r.metadata ? JSON.stringify(r.metadata) : '{}',\n },\n }\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(r.id)}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }\n )\n if (!res.ok) {\n const errData = (await res.json()) as any\n throw new Error(errData?.message ?? `HTTP ${res.status}`)\n }\n ids.push(r.id)\n }\n // Brief settle for HNSW index\n await this.#sleep(500)\n } catch (err) {\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH) ||\n isInstanceOf(err, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)\n ) {\n throw err\n }\n throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n const metric = this.#collections.get(coll)?.metric ?? this.#opts.metric ?? 'cosine'\n let queryVector: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) {\n queryVector = plan.near.vector\n } else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n queryVector = v\n } else if ('id' in plan.near) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(plan.near.id)}`\n )\n if (!res.ok) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n const data = (await res.json()) as any\n const vec = this.#vecValues(data.fields?.vec)\n if (!vec || vec.length === 0) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n queryVector = vec\n }\n }\n\n const offset = plan.offset ?? 0\n const topK = plan.topK ?? 10\n const k = plan.filter ? 400 : topK + offset\n const yql = queryVector\n ? `select id, document, metadata, vec from ${coll} where {targetHits:${k}}nearestNeighbor(vec, q)`\n : `select id, document, metadata, vec from ${coll} where true`\n\n try {\n const body: any = {\n yql,\n hits: k,\n }\n if (queryVector) {\n body['input.query(q)'] = queryVector\n body['ranking.profile'] = 'vector_nearest'\n }\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const root = data.root as any\n const children = root.children ?? []\n\n if (queryVector) {\n const filtered = children\n .filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n .map((c: any) => {\n const vec = this.#vecValues(c.fields?.vec)\n const score = computeScore(vec, queryVector, metric)\n return { ...c.fields, score }\n })\n filtered.sort((a: any, b: any) => b.score - a.score)\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, true))\n } else {\n const filtered = children.filter((c: any) =>\n evaluateFilter(plan.filter ?? {}, this.#parseMeta(c.fields?.metadata))\n )\n return filtered.slice(offset, offset + topK).map((d: any) => this.#project(d, plan, false))\n }\n } catch (err) {\n if ((err as any)?.message?.includes('Referenced id not found')) {\n throw err\n }\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n const coll = plan.collection\n const endpoint = this.#endpoint()\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) {\n const res = await fetch(\n `${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`,\n { method: 'DELETE' }\n )\n if (!res.ok && res.status !== 404) {\n const body = (await res.json()) as any\n throw new Error(body?.message ?? `HTTP ${res.status}`)\n }\n }\n } else if (plan.filter) {\n const yql = `select id, metadata, vec from ${coll} where true`\n const res = await fetch(`${endpoint}/search/`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ yql, hits: 400 }),\n })\n if (!res.ok) {\n throw new Error(`HTTP ${res.status}`)\n }\n const data = (await res.json()) as any\n const children = data.root.children ?? []\n const targets = children\n .filter((c: any) => evaluateFilter(plan.filter!, this.#parseMeta(c.fields?.metadata)))\n .map((c: any) => c.fields?.id)\n for (const id of targets) {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n })\n }\n } else {\n await fetch(`${endpoint}/document/v1/default/${coll}/docid?selection=true&cluster=docs`, {\n method: 'DELETE',\n })\n }\n } catch (err) {\n throw new E_VECTOR_STORE_DELETE_FAILED([String(err)])\n }\n }\n\n #parseMeta(val: unknown): VectorMetadata {\n if (typeof val === 'string') {\n try {\n return JSON.parse(val) as VectorMetadata\n } catch {\n return {}\n }\n }\n if (val && typeof val === 'object') return val as VectorMetadata\n return {}\n }\n\n #project(doc: any, plan: SearchPlan, hasScore: boolean): VectorMatch {\n const proj = plan.projection\n const out: VectorMatch = {}\n if (proj.id) out.id = doc.id as string\n if (proj.vector) {\n const vec = this.#vecValues(doc.vec)\n if (vec && vec.length > 0) out.vector = vec.map(Number)\n }\n if (proj.document) out.document = (doc.document ?? undefined) as string | undefined\n if (proj.metadata) out.metadata = this.#parseMeta(doc.metadata)\n if (hasScore && typeof doc.score === 'number') {\n out.score = doc.score\n }\n return out\n }\n}\n"],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import type { VectorMatch, VectorStoreCapabilities, BaseVectorStoreOptions } fro
|
|
|
13
13
|
* Connection options for {@link WeaviateVectorStore}.
|
|
14
14
|
*/
|
|
15
15
|
export interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {
|
|
16
|
+
/** Connection and authentication parameters for the backend. */
|
|
16
17
|
connection?: {
|
|
17
18
|
url?: string;
|
|
18
19
|
host?: string;
|
|
@@ -43,6 +44,7 @@ export declare const translateWeaviateFilter: (col: any, weaviate: any, filter?:
|
|
|
43
44
|
export declare class WeaviateVectorStore extends BaseVectorStore {
|
|
44
45
|
#private;
|
|
45
46
|
readonly capabilities: VectorStoreCapabilities;
|
|
47
|
+
/** Static availability probe: whether this adapter's runtime driver can load in the current environment. */
|
|
46
48
|
static isAvailable(): boolean;
|
|
47
49
|
isAvailable(): boolean;
|
|
48
50
|
connect(): Promise<void>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../chunk-Ble4zEEl.js");
|
|
3
|
-
const require_tool_registry = require("../../tool_registry-
|
|
3
|
+
const require_tool_registry = require("../../tool_registry-CKJPze3j.js");
|
|
4
4
|
require("../../guards.cjs");
|
|
5
5
|
const require_batteries_vector_filters = require("./filters.cjs");
|
|
6
6
|
const require_batteries_vector_helpers = require("./helpers.cjs");
|
|
@@ -87,6 +87,7 @@ var WeaviateVectorStore = class extends require_batteries_vector_contract.BaseVe
|
|
|
87
87
|
#client = null;
|
|
88
88
|
#weaviate = null;
|
|
89
89
|
#dims = /* @__PURE__ */ new Map();
|
|
90
|
+
/** Static availability probe: whether this adapter's runtime driver can load in the current environment. */
|
|
90
91
|
static isAvailable() {
|
|
91
92
|
return typeof process !== "undefined";
|
|
92
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weaviate.cjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"weaviate.cjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n /** Connection and authentication parameters for the backend. */\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { s as isInstanceOf } from "../../tool_registry-
|
|
1
|
+
import { s as isInstanceOf } from "../../tool_registry-791Vrjtf.mjs";
|
|
2
2
|
import "../../guards.mjs";
|
|
3
3
|
import { evaluateFilter, isFilterCondition, isFilterGroup, isRawFilter } from "./filters.mjs";
|
|
4
4
|
import { normalizeScore } from "./helpers.mjs";
|
|
@@ -85,6 +85,7 @@ var WeaviateVectorStore = class extends BaseVectorStore {
|
|
|
85
85
|
#client = null;
|
|
86
86
|
#weaviate = null;
|
|
87
87
|
#dims = /* @__PURE__ */ new Map();
|
|
88
|
+
/** Static availability probe: whether this adapter's runtime driver can load in the current environment. */
|
|
88
89
|
static isAvailable() {
|
|
89
90
|
return typeof process !== "undefined";
|
|
90
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weaviate.mjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"weaviate.mjs","names":["#client","#weaviate","#cls","#dims","#uuidFromId","#extractVector","#parseMetadata","#project"],"sources":["../../../src/batteries/vector/weaviate/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/weaviate\n *\n * @remarks\n * Weaviate-backed vector store adapter using the Weaviate v3 client with lazy driver\n * loading, deterministic object UUIDs, explicit vectors, and in-JS metadata filtering.\n */\n\nimport { sha256 } from 'js-sha256'\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { evaluateFilter, isRawFilter, isFilterCondition, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n} from '../types'\n\n/**\n * Connection options for {@link WeaviateVectorStore}.\n */\nexport interface WeaviateVectorStoreOptions extends BaseVectorStoreOptions {\n /** Connection and authentication parameters for the backend. */\n connection?: {\n url?: string\n host?: string\n port?: number\n grpcHost?: string\n grpcPort?: number\n apiKey?: string\n secure?: boolean\n grpcSecure?: boolean\n }\n}\n\n/**\n * Compiles a neutral {@link VectorFilter} into a Weaviate v3 filter built from a collection's\n * `col.filter` builder (and `weaviate.Filters.and/or` for groups). Pure and dependency-injected\n * (takes the `col` handle and the `weaviate` module), so it is unit-testable with stubs.\n *\n * @throws {@link @nhtio/adk/batteries/vector/exceptions!E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR}\n * for operators Weaviate cannot express (`nin`, group `not`) or a non-`weaviate` raw dialect.\n */\nexport const translateWeaviateFilter = (col: any, weaviate: any, filter?: VectorFilter): any => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'weaviate') return filter.$raw\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined && op !== 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n const f = col.filter.byProperty(field)\n if (op === 'eq') return f.equal(value)\n if (op === 'ne') return f.notEqual(value)\n if (op === 'gt') return f.greaterThan(value)\n if (op === 'gte') return f.greaterOrEqual(value)\n if (op === 'lt') return f.lessThan(value)\n if (op === 'lte') return f.lessOrEqual(value)\n if (op === 'in') return f.containsAny(value)\n if (op === 'nin') throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'nin'])\n if (op === 'exists') return f.isNull(value === false)\n if (op === 'contains') return f.containsAny(Array.isArray(value) ? value : [value])\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.and(...children)\n }\n if (or) {\n const children = or\n .map((c: VectorFilter) => translateWeaviateFilter(col, weaviate, c))\n .filter((x: any) => x !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return weaviate.Filters.or(...children)\n }\n if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['weaviate', 'not'])\n return undefined\n }\n return undefined\n}\n\n/**\n * Weaviate-backed {@link @nhtio/adk/batteries/vector/contract!VectorStore}. Node-only.\n *\n * @remarks\n * Stores ids/documents/metadata as explicit object properties and all metadata filtering is\n * evaluated in JavaScript for portable behavior across Weaviate schema/index settings.\n */\nexport class WeaviateVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: true,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Single-node Weaviate is strongly consistent on resolve; the option is a no-op here.\n // (A future multi-node adapter variant would set configurable:true.)\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #client: any = null\n #weaviate: any = null\n #dims = new Map<string, number>()\n\n /** Static availability probe: whether this adapter's runtime driver can load in the current environment. */\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#client) return\n let weaviate: any\n try {\n const weaviateMod = await import('weaviate-client')\n weaviate = weaviateMod.default\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['weaviate-client'])\n }\n const c = (this.options as WeaviateVectorStoreOptions).connection ?? {}\n let httpHost = c.host ?? 'localhost'\n let httpPort = c.port ?? 8080\n let secure = c.secure\n if (c.url) {\n const u = new URL(c.url)\n httpHost = u.hostname\n httpPort = u.port ? Number(u.port) : u.protocol === 'https:' ? 443 : 80\n secure = u.protocol === 'https:'\n }\n try {\n this.#client = await weaviate.connectToCustom({\n httpHost,\n httpPort,\n httpSecure: !!secure,\n grpcHost: c.grpcHost ?? httpHost,\n grpcPort: c.grpcPort ?? 50051,\n grpcSecure: !!c.grpcSecure,\n headers: c.apiKey ? { Authorization: 'Bearer ' + c.apiKey } : undefined,\n })\n this.#weaviate = weaviate\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n }\n\n async close(): Promise<void> {\n await this.#client?.close?.()\n this.#client = null\n this.#weaviate = null\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(spec.collection)\n try {\n if (await this.#client.collections.exists(c)) {\n if (ifNotExists) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n await this.#client.collections.create({\n name: c,\n vectorizers: this.#weaviate.configure.vectorizer.none(),\n properties: [\n { name: '__id', dataType: 'text' },\n { name: '__document', dataType: 'text' },\n { name: '__metadata', dataType: 'text' },\n ],\n })\n this.#dims.set(spec.collection, spec.vector.dimensions)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', e?.message ?? String(e)])\n }\n }\n\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n await this.connect()\n const c = this.#cls(collection)\n try {\n const exists = await this.#client.collections.exists(c)\n if (!exists) {\n if (!ifExists)\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n return\n }\n await this.#client.collections.delete(c)\n this.#dims.delete(collection)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_COLLECTION_FAILED', E_VECTOR_STORE_COLLECTION_FAILED))\n throw e\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', e?.message ?? String(e)])\n }\n }\n\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n return await this.#client.collections.exists(this.#cls(collection))\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'weaviate'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n const dims = this.#dims.get(plan.collection) ?? this.options.dimensions\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n const objects = []\n for (const r of plan.records) {\n let vector = r.vector\n if (!vector && r.document) {\n const [v] = await this.encode([r.document], 'document')\n vector = v\n }\n if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(['Record missing vector and document'])\n if (dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n objects.push({\n id: this.#uuidFromId(r.id),\n properties: {\n __id: r.id,\n __document: r.document ?? '',\n __metadata: JSON.stringify(r.metadata ?? {}),\n },\n vectors: vector,\n })\n }\n if (objects.length > 0) await col.data.insertMany(objects)\n } catch (e: any) {\n if (isInstanceOf(e, 'E_VECTOR_STORE_DIMENSION_MISMATCH', E_VECTOR_STORE_DIMENSION_MISMATCH))\n throw e\n if (isInstanceOf(e, 'E_VECTOR_STORE_UPSERT_FAILED', E_VECTOR_STORE_UPSERT_FAILED)) throw e\n throw new E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n const metric = this.options.metric ?? 'cosine'\n try {\n let qvec: number[] | undefined\n if (plan.near) {\n if ('vector' in plan.near) qvec = plan.near.vector\n else if ('serverText' in plan.near) {\n const [v] = await this.encode([plan.near.serverText], 'query')\n qvec = v\n } else if ('id' in plan.near) {\n const ref = await col.query.fetchObjectById(this.#uuidFromId(plan.near.id), {\n includeVector: true,\n })\n qvec = this.#extractVector(ref?.vectors)\n }\n }\n let res: any\n if (qvec) {\n res = await col.query.nearVector(qvec, {\n limit: (plan.topK + (plan.offset ?? 0)) * 4,\n returnMetadata: ['distance'],\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n } else {\n res = await col.query.fetchObjects({\n limit: 10000,\n includeVector: !!plan.projection.vector,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n }\n const filtered = (res.objects ?? []).filter((obj: any) => {\n const metadata = this.#parseMetadata(obj)\n return !plan.filter || evaluateFilter(plan.filter, metadata)\n })\n const start = plan.offset ?? 0\n return filtered\n .slice(start, start + plan.topK)\n .map((obj: any) => this.#project(obj, plan, !!qvec, metric))\n } catch (e: any) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)])\n }\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const col = this.#client.collections.get(this.#cls(plan.collection))\n try {\n if (plan.ids && plan.ids.length > 0) {\n for (const id of plan.ids) await col.data.deleteById(this.#uuidFromId(id))\n return\n }\n const res = await col.query.fetchObjects({\n limit: 10000,\n returnProperties: ['__id', '__document', '__metadata'],\n })\n for (const obj of res.objects ?? []) {\n const id = obj.properties?.__id\n if (!id) continue\n if (!plan.filter || evaluateFilter(plan.filter, this.#parseMetadata(obj))) {\n await col.data.deleteById(this.#uuidFromId(id))\n }\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n #cls(name: string): string {\n return name.charAt(0).toUpperCase() + name.slice(1)\n }\n\n #uuidFromId(id: string): string {\n const h = sha256(id)\n return (\n h.slice(0, 8) +\n '-' +\n h.slice(8, 12) +\n '-4' +\n h.slice(13, 16) +\n '-8' +\n h.slice(17, 20) +\n '-' +\n h.slice(20, 32)\n )\n }\n\n #parseMetadata(obj: any): VectorMetadata {\n try {\n return JSON.parse(obj.properties?.__metadata || '{}') as VectorMetadata\n } catch {\n return {}\n }\n }\n\n #extractVector(vectors: any): number[] | undefined {\n if (Array.isArray(vectors)) return vectors as number[]\n if (vectors?.default) return vectors.default as number[]\n if (vectors && typeof vectors === 'object')\n return Object.values(vectors)[0] as number[] | undefined\n return undefined\n }\n\n #project(obj: any, plan: SearchPlan, scored: boolean, metric: string): VectorMatch {\n const out: VectorMatch = {}\n const props = obj.properties ?? {}\n if (plan.projection.id) out.id = props.__id\n if (plan.projection.document) out.document = props.__document\n if (plan.projection.metadata) out.metadata = this.#parseMetadata(obj)\n if (plan.projection.vector) out.vector = this.#extractVector(obj.vectors)\n if (scored)\n out.score = normalizeScore(Number(obj.metadata?.distance ?? 0), metric as any, 'distance')\n return out\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2DA,IAAa,2BAA2B,KAAU,UAAe,WAA+B;CAC9F,IAAI,CAAC,QAAQ,OAAO,KAAA;CACpB,IAAI,YAAY,MAAM,GAAG;EACvB,IAAI,OAAO,aAAa,YAAY,OAAO,OAAO;EAClD,MAAM,IAAI,2CAA2C,CAAC,YAAY,OAAO,OAAO,QAAQ,CAAC,CAAC;CAC5F;CACA,IAAI,kBAAkB,MAAM,GAAG;EAC7B,MAAM,EAAE,OAAO,IAAI,UAAU;EAC7B,IAAI,UAAU,KAAA,KAAa,OAAO,UAChC,MAAM,IAAI,2CAA2C,CAAC,YAAY,EAAE,CAAC;EAEvE,MAAM,IAAI,IAAI,OAAO,WAAW,KAAK;EACrC,IAAI,OAAO,MAAM,OAAO,EAAE,MAAM,KAAK;EACrC,IAAI,OAAO,MAAM,OAAO,EAAE,SAAS,KAAK;EACxC,IAAI,OAAO,MAAM,OAAO,EAAE,YAAY,KAAK;EAC3C,IAAI,OAAO,OAAO,OAAO,EAAE,eAAe,KAAK;EAC/C,IAAI,OAAO,MAAM,OAAO,EAAE,SAAS,KAAK;EACxC,IAAI,OAAO,OAAO,OAAO,EAAE,YAAY,KAAK;EAC5C,IAAI,OAAO,MAAM,OAAO,EAAE,YAAY,KAAK;EAC3C,IAAI,OAAO,OAAO,MAAM,IAAI,2CAA2C,CAAC,YAAY,KAAK,CAAC;EAC1F,IAAI,OAAO,UAAU,OAAO,EAAE,OAAO,UAAU,KAAK;EACpD,IAAI,OAAO,YAAY,OAAO,EAAE,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;EAClF,MAAM,IAAI,2CAA2C,CAAC,YAAY,EAAE,CAAC;CACvE;CACA,IAAI,cAAc,MAAM,GAAG;EACzB,MAAM,EAAE,KAAK,IAAI,QAAQ;EACzB,IAAI,KAAK;GACP,MAAM,WAAW,IACd,KAAK,MAAoB,wBAAwB,KAAK,UAAU,CAAC,CAAC,EAClE,QAAQ,MAAW,MAAM,KAAA,CAAS;GACrC,IAAI,SAAS,WAAW,GAAG,OAAO,KAAA;GAClC,IAAI,SAAS,WAAW,GAAG,OAAO,SAAS;GAC3C,OAAO,SAAS,QAAQ,IAAI,GAAG,QAAQ;EACzC;EACA,IAAI,IAAI;GACN,MAAM,WAAW,GACd,KAAK,MAAoB,wBAAwB,KAAK,UAAU,CAAC,CAAC,EAClE,QAAQ,MAAW,MAAM,KAAA,CAAS;GACrC,IAAI,SAAS,WAAW,GAAG,OAAO,KAAA;GAClC,IAAI,SAAS,WAAW,GAAG,OAAO,SAAS;GAC3C,OAAO,SAAS,QAAQ,GAAG,GAAG,QAAQ;EACxC;EACA,IAAI,KAAK,MAAM,IAAI,2CAA2C,CAAC,YAAY,KAAK,CAAC;EACjF;CACF;AAEF;;;;;;;;AASA,IAAa,sBAAb,cAAyC,gBAAgB;CACvD,eAAiD;EAC/C,cAAc;EACd,cAAc;EACd,QAAQ;EACR,QAAQ;EACR,iBAAiB;EAGjB,aAAa;GAAE,cAAc;GAAO,SAAS;GAAU,OAAO,CAAC,QAAQ;EAAE;CAC3E;CAEA,UAAe;CACf,YAAiB;CACjB,wBAAQ,IAAI,IAAoB;;CAGhC,OAAO,cAAuB;EAC5B,OAAO,OAAO,YAAY;CAC5B;CAEA,cAAuB;EACrB,OAAO,OAAO,YAAY;CAC5B;CAEA,MAAM,UAAyB;EAC7B,IAAI,KAAKA,SAAS;EAClB,IAAI;EACJ,IAAI;GAEF,YAAW,MADe,OAAO,oBACV;EACzB,QAAQ;GACN,MAAM,IAAI,kCAAkC,CAAC,iBAAiB,CAAC;EACjE;EACA,MAAM,IAAK,KAAK,QAAuC,cAAc,CAAC;EACtE,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,SAAS,EAAE;EACf,IAAI,EAAE,KAAK;GACT,MAAM,IAAI,IAAI,IAAI,EAAE,GAAG;GACvB,WAAW,EAAE;GACb,WAAW,EAAE,OAAO,OAAO,EAAE,IAAI,IAAI,EAAE,aAAa,WAAW,MAAM;GACrE,SAAS,EAAE,aAAa;EAC1B;EACA,IAAI;GACF,KAAKA,UAAU,MAAM,SAAS,gBAAgB;IAC5C;IACA;IACA,YAAY,CAAC,CAAC;IACd,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,YAAY,CAAC,CAAC,EAAE;IAChB,SAAS,EAAE,SAAS,EAAE,eAAe,YAAY,EAAE,OAAO,IAAI,KAAA;GAChE,CAAC;GACD,KAAKC,YAAY;EACnB,SAAS,GAAQ;GACf,MAAM,IAAI,iCAAiC,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC;EACtE;CACF;CAEA,MAAM,QAAuB;EAC3B,MAAM,KAAKD,SAAS,QAAQ;EAC5B,KAAKA,UAAU;EACf,KAAKC,YAAY;CACnB;CAEA,MAAM,iBAAiB,MAAsB,aAAqC;EAChF,MAAM,KAAK,QAAQ;EACnB,MAAM,IAAI,KAAKC,KAAK,KAAK,UAAU;EACnC,IAAI;GACF,IAAI,MAAM,KAAKF,QAAQ,YAAY,OAAO,CAAC,GAAG;IAC5C,IAAI,aAAa;IACjB,MAAM,IAAI,iCAAiC,CAAC,UAAU,mBAAmB,CAAC;GAC5E;GACA,MAAM,KAAKA,QAAQ,YAAY,OAAO;IACpC,MAAM;IACN,aAAa,KAAKC,UAAU,UAAU,WAAW,KAAK;IACtD,YAAY;KACV;MAAE,MAAM;MAAQ,UAAU;KAAO;KACjC;MAAE,MAAM;MAAc,UAAU;KAAO;KACvC;MAAE,MAAM;MAAc,UAAU;KAAO;IACzC;GACF,CAAC;GACD,KAAKE,MAAM,IAAI,KAAK,YAAY,KAAK,OAAO,UAAU;EACxD,SAAS,GAAQ;GACf,IAAI,aAAa,GAAG,oCAAoC,gCAAgC,GACtF,MAAM;GACR,MAAM,IAAI,iCAAiC,CAAC,UAAU,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC;EAChF;CACF;CAEA,MAAM,eAAe,YAAoB,UAAkC;EACzE,MAAM,KAAK,QAAQ;EACnB,MAAM,IAAI,KAAKD,KAAK,UAAU;EAC9B,IAAI;GAEF,IAAI,CAAC,MADgB,KAAKF,QAAQ,YAAY,OAAO,CAAC,GACzC;IACX,IAAI,CAAC,UACH,MAAM,IAAI,iCAAiC,CAAC,QAAQ,2BAA2B,CAAC;IAClF;GACF;GACA,MAAM,KAAKA,QAAQ,YAAY,OAAO,CAAC;GACvC,KAAKG,MAAM,OAAO,UAAU;EAC9B,SAAS,GAAQ;GACf,IAAI,aAAa,GAAG,oCAAoC,gCAAgC,GACtF,MAAM;GACR,MAAM,IAAI,iCAAiC,CAAC,QAAQ,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC;EAC9E;CACF;CAEA,MAAM,cAAc,YAAsC;EACxD,MAAM,KAAK,QAAQ;EACnB,OAAO,MAAM,KAAKH,QAAQ,YAAY,OAAO,KAAKE,KAAK,UAAU,CAAC;CACpE;CAEA,MAAM,iBAAiB,OAAe,KAA4B;EAChE,MAAM,IAAI,qCAAqC,CAAC,oBAAoB,UAAU,CAAC;CACjF;CAEA,MAAM,cAAc,MAAiC;EACnD,MAAM,KAAK,QAAQ;EACnB,gBAAgB,KAAK,OAAO;EAC5B,MAAM,OAAO,KAAKC,MAAM,IAAI,KAAK,UAAU,KAAK,KAAK,QAAQ;EAC7D,MAAM,MAAM,KAAKH,QAAQ,YAAY,IAAI,KAAKE,KAAK,KAAK,UAAU,CAAC;EACnE,IAAI;GACF,MAAM,UAAU,CAAC;GACjB,KAAK,MAAM,KAAK,KAAK,SAAS;IAC5B,IAAI,SAAS,EAAE;IACf,IAAI,CAAC,UAAU,EAAE,UAAU;KACzB,MAAM,CAAC,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU;KACtD,SAAS;IACX;IACA,IAAI,CAAC,QAAQ,MAAM,IAAI,6BAA6B,CAAC,oCAAoC,CAAC;IAC1F,IAAI,SAAS,KAAA,KAAa,OAAO,WAAW,MAC1C,MAAM,IAAI,kCAAkC,CAAC,MAAM,OAAO,MAAM,CAAC;IAEnE,QAAQ,KAAK;KACX,IAAI,KAAKE,YAAY,EAAE,EAAE;KACzB,YAAY;MACV,MAAM,EAAE;MACR,YAAY,EAAE,YAAY;MAC1B,YAAY,KAAK,UAAU,EAAE,YAAY,CAAC,CAAC;KAC7C;KACA,SAAS;IACX,CAAC;GACH;GACA,IAAI,QAAQ,SAAS,GAAG,MAAM,IAAI,KAAK,WAAW,OAAO;EAC3D,SAAS,GAAQ;GACf,IAAI,aAAa,GAAG,qCAAqC,iCAAiC,GACxF,MAAM;GACR,IAAI,aAAa,GAAG,gCAAgC,4BAA4B,GAAG,MAAM;GACzF,MAAM,IAAI,6BAA6B,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC;EAClE;CACF;CAEA,MAAM,cAAc,MAA0C;EAC5D,MAAM,KAAK,QAAQ;EACnB,MAAM,MAAM,KAAKJ,QAAQ,YAAY,IAAI,KAAKE,KAAK,KAAK,UAAU,CAAC;EACnE,MAAM,SAAS,KAAK,QAAQ,UAAU;EACtC,IAAI;GACF,IAAI;GACJ,IAAI,KAAK;QACH,YAAY,KAAK,MAAM,OAAO,KAAK,KAAK;SACvC,IAAI,gBAAgB,KAAK,MAAM;KAClC,MAAM,CAAC,KAAK,MAAM,KAAK,OAAO,CAAC,KAAK,KAAK,UAAU,GAAG,OAAO;KAC7D,OAAO;IACT,OAAO,IAAI,QAAQ,KAAK,MAAM;KAC5B,MAAM,MAAM,MAAM,IAAI,MAAM,gBAAgB,KAAKE,YAAY,KAAK,KAAK,EAAE,GAAG,EAC1E,eAAe,KACjB,CAAC;KACD,OAAO,KAAKC,eAAe,KAAK,OAAO;IACzC;;GAEF,IAAI;GACJ,IAAI,MACF,MAAM,MAAM,IAAI,MAAM,WAAW,MAAM;IACrC,QAAQ,KAAK,QAAQ,KAAK,UAAU,MAAM;IAC1C,gBAAgB,CAAC,UAAU;IAC3B,eAAe,CAAC,CAAC,KAAK,WAAW;IACjC,kBAAkB;KAAC;KAAQ;KAAc;IAAY;GACvD,CAAC;QAED,MAAM,MAAM,IAAI,MAAM,aAAa;IACjC,OAAO;IACP,eAAe,CAAC,CAAC,KAAK,WAAW;IACjC,kBAAkB;KAAC;KAAQ;KAAc;IAAY;GACvD,CAAC;GAEH,MAAM,YAAY,IAAI,WAAW,CAAC,GAAG,QAAQ,QAAa;IACxD,MAAM,WAAW,KAAKC,eAAe,GAAG;IACxC,OAAO,CAAC,KAAK,UAAU,eAAe,KAAK,QAAQ,QAAQ;GAC7D,CAAC;GACD,MAAM,QAAQ,KAAK,UAAU;GAC7B,OAAO,SACJ,MAAM,OAAO,QAAQ,KAAK,IAAI,EAC9B,KAAK,QAAa,KAAKC,SAAS,KAAK,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC;EAC/D,SAAS,GAAQ;GACf,MAAM,IAAI,6BAA6B,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC;EAClE;CACF;CAEA,MAAM,cAAc,MAAiC;EACnD,MAAM,KAAK,QAAQ;EACnB,MAAM,MAAM,KAAKP,QAAQ,YAAY,IAAI,KAAKE,KAAK,KAAK,UAAU,CAAC;EACnE,IAAI;GACF,IAAI,KAAK,OAAO,KAAK,IAAI,SAAS,GAAG;IACnC,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,IAAI,KAAK,WAAW,KAAKE,YAAY,EAAE,CAAC;IACzE;GACF;GACA,MAAM,MAAM,MAAM,IAAI,MAAM,aAAa;IACvC,OAAO;IACP,kBAAkB;KAAC;KAAQ;KAAc;IAAY;GACvD,CAAC;GACD,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,GAAG;IACnC,MAAM,KAAK,IAAI,YAAY;IAC3B,IAAI,CAAC,IAAI;IACT,IAAI,CAAC,KAAK,UAAU,eAAe,KAAK,QAAQ,KAAKE,eAAe,GAAG,CAAC,GACtE,MAAM,IAAI,KAAK,WAAW,KAAKF,YAAY,EAAE,CAAC;GAElD;EACF,SAAS,GAAQ;GACf,MAAM,IAAI,6BAA6B,CAAC,GAAG,WAAW,OAAO,CAAC,CAAC,CAAC;EAClE;CACF;CAEA,KAAK,MAAsB;EACzB,OAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;CACpD;CAEA,YAAY,IAAoB;EAC9B,MAAM,IAAI,OAAO,EAAE;EACnB,OACE,EAAE,MAAM,GAAG,CAAC,IACZ,MACA,EAAE,MAAM,GAAG,EAAE,IACb,OACA,EAAE,MAAM,IAAI,EAAE,IACd,OACA,EAAE,MAAM,IAAI,EAAE,IACd,MACA,EAAE,MAAM,IAAI,EAAE;CAElB;CAEA,eAAe,KAA0B;EACvC,IAAI;GACF,OAAO,KAAK,MAAM,IAAI,YAAY,cAAc,IAAI;EACtD,QAAQ;GACN,OAAO,CAAC;EACV;CACF;CAEA,eAAe,SAAoC;EACjD,IAAI,MAAM,QAAQ,OAAO,GAAG,OAAO;EACnC,IAAI,SAAS,SAAS,OAAO,QAAQ;EACrC,IAAI,WAAW,OAAO,YAAY,UAChC,OAAO,OAAO,OAAO,OAAO,EAAE;CAElC;CAEA,SAAS,KAAU,MAAkB,QAAiB,QAA6B;EACjF,MAAM,MAAmB,CAAC;EAC1B,MAAM,QAAQ,IAAI,cAAc,CAAC;EACjC,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM;EACvC,IAAI,KAAK,WAAW,UAAU,IAAI,WAAW,MAAM;EACnD,IAAI,KAAK,WAAW,UAAU,IAAI,WAAW,KAAKE,eAAe,GAAG;EACpE,IAAI,KAAK,WAAW,QAAQ,IAAI,SAAS,KAAKD,eAAe,IAAI,OAAO;EACxE,IAAI,QACF,IAAI,QAAQ,eAAe,OAAO,IAAI,UAAU,YAAY,CAAC,GAAG,QAAe,UAAU;EAC3F,OAAO;CACT;AACF"}
|
package/batteries.cjs
CHANGED
|
@@ -2,11 +2,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
require("./chunk-Ble4zEEl.js");
|
|
3
3
|
const require_batteries_llm_openai_chat_completions_exceptions = require("./batteries/llm/openai_chat_completions/exceptions.cjs");
|
|
4
4
|
const require_batteries_llm_openai_chat_completions_validation = require("./batteries/llm/openai_chat_completions/validation.cjs");
|
|
5
|
+
const require_helpers = require("./helpers-DSTFxTiC.js");
|
|
5
6
|
const require_batteries_llm_openai_chat_completions_helpers = require("./batteries/llm/openai_chat_completions/helpers.cjs");
|
|
6
7
|
const require_batteries_llm_openai_chat_completions_adapter = require("./batteries/llm/openai_chat_completions/adapter.cjs");
|
|
7
8
|
const require_batteries_llm_webllm_chat_completions_exceptions = require("./batteries/llm/webllm_chat_completions/exceptions.cjs");
|
|
8
9
|
const require_batteries_llm_webllm_chat_completions_validation = require("./batteries/llm/webllm_chat_completions/validation.cjs");
|
|
9
10
|
const require_batteries_llm_webllm_chat_completions_adapter = require("./batteries/llm/webllm_chat_completions/adapter.cjs");
|
|
11
|
+
const require_batteries_llm_ollama_exceptions = require("./batteries/llm/ollama/exceptions.cjs");
|
|
12
|
+
const require_batteries_llm_ollama_validation = require("./batteries/llm/ollama/validation.cjs");
|
|
13
|
+
const require_batteries_llm_ollama_adapter = require("./batteries/llm/ollama/adapter.cjs");
|
|
10
14
|
require("./batteries/llm.cjs");
|
|
11
15
|
const require_batteries_tools_color = require("./batteries/tools/color.cjs");
|
|
12
16
|
const require_batteries_tools_comparison = require("./batteries/tools/comparison.cjs");
|
|
@@ -20,6 +24,7 @@ const require_batteries_tools_math = require("./batteries/tools/math.cjs");
|
|
|
20
24
|
const require_batteries_tools_memory = require("./batteries/tools/memory.cjs");
|
|
21
25
|
const require_batteries_tools_parsing = require("./batteries/tools/parsing.cjs");
|
|
22
26
|
const require_batteries_tools_retrievables = require("./batteries/tools/retrievables.cjs");
|
|
27
|
+
const require_searxng = require("./searxng-Bkrwhwhw.js");
|
|
23
28
|
const require_batteries_tools_standing_instructions = require("./batteries/tools/standing_instructions.cjs");
|
|
24
29
|
const require_batteries_tools_statistics = require("./batteries/tools/statistics.cjs");
|
|
25
30
|
const require_batteries_tools_string_processing = require("./batteries/tools/string_processing.cjs");
|
|
@@ -50,11 +55,20 @@ const require_batteries_vector_orama = require("./batteries/vector/orama.cjs");
|
|
|
50
55
|
require("./batteries/vector.cjs");
|
|
51
56
|
exports.BaseVectorStore = require_batteries_vector_contract.BaseVectorStore;
|
|
52
57
|
exports.CollectionBuilder = require_batteries_vector_schema.CollectionBuilder;
|
|
58
|
+
exports.E_INVALID_OLLAMA_OPTIONS = require_batteries_llm_ollama_exceptions.E_INVALID_OLLAMA_OPTIONS;
|
|
53
59
|
exports.E_INVALID_OPENAI_CHAT_COMPLETIONS_OPTIONS = require_batteries_llm_openai_chat_completions_exceptions.E_INVALID_OPENAI_CHAT_COMPLETIONS_OPTIONS;
|
|
54
60
|
exports.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS = require_batteries_embeddings_openai_exceptions.E_INVALID_OPENAI_EMBEDDINGS_OPTIONS;
|
|
61
|
+
exports.E_INVALID_SEARXNG_CONFIG = require_searxng.E_INVALID_SEARXNG_CONFIG;
|
|
55
62
|
exports.E_INVALID_VECTOR_RECORD = require_batteries_vector_exceptions.E_INVALID_VECTOR_RECORD;
|
|
56
63
|
exports.E_INVALID_VECTOR_STORE_CONFIG = require_batteries_vector_exceptions.E_INVALID_VECTOR_STORE_CONFIG;
|
|
57
64
|
exports.E_INVALID_WEBLLM_CHAT_COMPLETIONS_OPTIONS = require_batteries_llm_webllm_chat_completions_exceptions.E_INVALID_WEBLLM_CHAT_COMPLETIONS_OPTIONS;
|
|
65
|
+
exports.E_OLLAMA_CONTEXT_OVERFLOW = require_batteries_llm_ollama_exceptions.E_OLLAMA_CONTEXT_OVERFLOW;
|
|
66
|
+
exports.E_OLLAMA_HTTP_ERROR = require_batteries_llm_ollama_exceptions.E_OLLAMA_HTTP_ERROR;
|
|
67
|
+
exports.E_OLLAMA_INVALID_TOOL_CALL_ARGS = require_batteries_llm_ollama_exceptions.E_OLLAMA_INVALID_TOOL_CALL_ARGS;
|
|
68
|
+
exports.E_OLLAMA_REQUEST_TIMEOUT = require_batteries_llm_ollama_exceptions.E_OLLAMA_REQUEST_TIMEOUT;
|
|
69
|
+
exports.E_OLLAMA_STREAM_ERROR = require_batteries_llm_ollama_exceptions.E_OLLAMA_STREAM_ERROR;
|
|
70
|
+
exports.E_OLLAMA_STREAM_STALLED = require_batteries_llm_ollama_exceptions.E_OLLAMA_STREAM_STALLED;
|
|
71
|
+
exports.E_OLLAMA_UNSUPPORTED_MEDIA_MODALITY = require_batteries_llm_ollama_exceptions.E_OLLAMA_UNSUPPORTED_MEDIA_MODALITY;
|
|
58
72
|
exports.E_OPENAI_CHAT_COMPLETIONS_CONTEXT_OVERFLOW = require_batteries_llm_openai_chat_completions_exceptions.E_OPENAI_CHAT_COMPLETIONS_CONTEXT_OVERFLOW;
|
|
59
73
|
exports.E_OPENAI_CHAT_COMPLETIONS_HTTP_ERROR = require_batteries_llm_openai_chat_completions_exceptions.E_OPENAI_CHAT_COMPLETIONS_HTTP_ERROR;
|
|
60
74
|
exports.E_OPENAI_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS = require_batteries_llm_openai_chat_completions_exceptions.E_OPENAI_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS;
|
|
@@ -85,6 +99,7 @@ exports.E_WEBLLM_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS = require_batteries_llm
|
|
|
85
99
|
exports.E_WEBLLM_CHAT_COMPLETIONS_STREAM_ERROR = require_batteries_llm_webllm_chat_completions_exceptions.E_WEBLLM_CHAT_COMPLETIONS_STREAM_ERROR;
|
|
86
100
|
exports.FilterBuilder = require_batteries_vector_builder.FilterBuilder;
|
|
87
101
|
exports.InMemoryVectorStore = require_batteries_vector_in_memory.InMemoryVectorStore;
|
|
102
|
+
exports.OllamaAdapter = require_batteries_llm_ollama_adapter.OllamaAdapter;
|
|
88
103
|
exports.OpenAIChatCompletionsAdapter = require_batteries_llm_openai_chat_completions_adapter.OpenAIChatCompletionsAdapter;
|
|
89
104
|
exports.OpenAIEmbeddingsAdapter = require_batteries_embeddings_openai_adapter.OpenAIEmbeddingsAdapter;
|
|
90
105
|
exports.OramaVectorStore = require_batteries_vector_orama.OramaVectorStore;
|
|
@@ -106,6 +121,7 @@ exports.compareValuesTool = require_batteries_tools_comparison.compareValuesTool
|
|
|
106
121
|
exports.convertTimeTool = require_batteries_tools_time.convertTimeTool;
|
|
107
122
|
exports.convertUnitTool = require_batteries_tools_unit_conversion.convertUnitTool;
|
|
108
123
|
exports.createChatCompletionsToolCallDeltaAccumulator = require_batteries_llm_openai_chat_completions_helpers.createChatCompletionsToolCallDeltaAccumulator;
|
|
124
|
+
exports.createSearxngSearchTool = require_searxng.createSearxngSearchTool;
|
|
109
125
|
exports.createVectorRetrievableCallbacks = require_batteries_vector_retrievable.createVectorRetrievableCallbacks;
|
|
110
126
|
exports.createVectorStore = require_batteries_vector_factory.createVectorStore;
|
|
111
127
|
exports.dateAddTool = require_batteries_tools_datetime_math.dateAddTool;
|
|
@@ -117,25 +133,25 @@ exports.dateParseTool = require_batteries_tools_datetime_extended.dateParseTool;
|
|
|
117
133
|
exports.datePeriodTool = require_batteries_tools_datetime_extended.datePeriodTool;
|
|
118
134
|
exports.defaultBuildChatCompletionsHistory = require_batteries_llm_openai_chat_completions_helpers.defaultBuildChatCompletionsHistory;
|
|
119
135
|
exports.defaultCreateChatCompletionsToolCallDeltaAccumulator = require_batteries_llm_openai_chat_completions_helpers.defaultCreateChatCompletionsToolCallDeltaAccumulator;
|
|
120
|
-
exports.defaultDescriptionToChatCompletionsJsonSchema =
|
|
121
|
-
exports.defaultFilterThoughts =
|
|
122
|
-
exports.defaultRenderChatCompletionsSystemPrompt =
|
|
136
|
+
exports.defaultDescriptionToChatCompletionsJsonSchema = require_helpers.defaultDescriptionToChatCompletionsJsonSchema;
|
|
137
|
+
exports.defaultFilterThoughts = require_helpers.defaultFilterThoughts;
|
|
138
|
+
exports.defaultRenderChatCompletionsSystemPrompt = require_helpers.defaultRenderChatCompletionsSystemPrompt;
|
|
123
139
|
exports.defaultRenderChatCompletionsToolCallResult = require_batteries_llm_openai_chat_completions_helpers.defaultRenderChatCompletionsToolCallResult;
|
|
124
|
-
exports.defaultRenderFirstPartyRetrievables =
|
|
125
|
-
exports.defaultRenderMemories =
|
|
126
|
-
exports.defaultRenderRetrievableSafetyDirective =
|
|
127
|
-
exports.defaultRenderRetrievables =
|
|
128
|
-
exports.defaultRenderStandingInstructions =
|
|
129
|
-
exports.defaultRenderThirdPartyPrivateRetrievables =
|
|
130
|
-
exports.defaultRenderThirdPartyPublicRetrievables =
|
|
131
|
-
exports.defaultRenderThought =
|
|
140
|
+
exports.defaultRenderFirstPartyRetrievables = require_helpers.defaultRenderFirstPartyRetrievables;
|
|
141
|
+
exports.defaultRenderMemories = require_helpers.defaultRenderMemories;
|
|
142
|
+
exports.defaultRenderRetrievableSafetyDirective = require_helpers.defaultRenderRetrievableSafetyDirective;
|
|
143
|
+
exports.defaultRenderRetrievables = require_helpers.defaultRenderRetrievables;
|
|
144
|
+
exports.defaultRenderStandingInstructions = require_helpers.defaultRenderStandingInstructions;
|
|
145
|
+
exports.defaultRenderThirdPartyPrivateRetrievables = require_helpers.defaultRenderThirdPartyPrivateRetrievables;
|
|
146
|
+
exports.defaultRenderThirdPartyPublicRetrievables = require_helpers.defaultRenderThirdPartyPublicRetrievables;
|
|
147
|
+
exports.defaultRenderThought = require_helpers.defaultRenderThought;
|
|
132
148
|
exports.defaultRenderTimelineMessage = require_batteries_llm_openai_chat_completions_helpers.defaultRenderTimelineMessage;
|
|
133
|
-
exports.defaultRenderTrustedContent =
|
|
134
|
-
exports.defaultRenderUntrustedContent =
|
|
135
|
-
exports.defaultToolsToChatCompletionsTools =
|
|
149
|
+
exports.defaultRenderTrustedContent = require_helpers.defaultRenderTrustedContent;
|
|
150
|
+
exports.defaultRenderUntrustedContent = require_helpers.defaultRenderUntrustedContent;
|
|
151
|
+
exports.defaultToolsToChatCompletionsTools = require_helpers.defaultToolsToChatCompletionsTools;
|
|
136
152
|
exports.deleteMemoryTool = require_batteries_tools_memory.deleteMemoryTool;
|
|
137
153
|
exports.deleteRetrievableTool = require_batteries_tools_retrievables.deleteRetrievableTool;
|
|
138
|
-
exports.descriptionToChatCompletionsJsonSchema =
|
|
154
|
+
exports.descriptionToChatCompletionsJsonSchema = require_helpers.descriptionToChatCompletionsJsonSchema;
|
|
139
155
|
exports.detectDelimiterTool = require_batteries_tools_parsing.detectDelimiterTool;
|
|
140
156
|
exports.dimensionsMatch = require_batteries_vector_helpers.dimensionsMatch;
|
|
141
157
|
exports.durationFormatTool = require_batteries_tools_datetime_math.durationFormatTool;
|
|
@@ -144,7 +160,7 @@ exports.encoderFromEmbeddings = require_batteries_vector_factory.encoderFromEmbe
|
|
|
144
160
|
exports.evaluateFilter = require_batteries_vector_filters.evaluateFilter;
|
|
145
161
|
exports.evaluateKatexTool = require_batteries_tools_math.evaluateKatexTool;
|
|
146
162
|
exports.extractReasoningFields = require_batteries_llm_openai_chat_completions_helpers.extractReasoningFields;
|
|
147
|
-
exports.filterThoughts =
|
|
163
|
+
exports.filterThoughts = require_helpers.filterThoughts;
|
|
148
164
|
exports.formatListTool = require_batteries_tools_formatting.formatListTool;
|
|
149
165
|
exports.formatNumberTool = require_batteries_tools_formatting.formatNumberTool;
|
|
150
166
|
exports.formatTableTool = require_batteries_tools_structured_data.formatTableTool;
|
|
@@ -166,6 +182,7 @@ exports.listStandingInstructionsTool = require_batteries_tools_standing_instruct
|
|
|
166
182
|
exports.mapMetric = require_batteries_vector_helpers.mapMetric;
|
|
167
183
|
exports.memoryTools = require_batteries_tools_memory.memoryTools;
|
|
168
184
|
exports.normalizeScore = require_batteries_vector_helpers.normalizeScore;
|
|
185
|
+
exports.ollamaOptionsSchema = require_batteries_llm_ollama_validation.ollamaOptionsSchema;
|
|
169
186
|
exports.openAIChatCompletionsOptionsSchema = require_batteries_llm_openai_chat_completions_validation.openAIChatCompletionsOptionsSchema;
|
|
170
187
|
exports.openAIEmbeddingsOptionsSchema = require_batteries_embeddings_openai_validation.openAIEmbeddingsOptionsSchema;
|
|
171
188
|
exports.parseCsvTool = require_batteries_tools_parsing.parseCsvTool;
|
|
@@ -173,19 +190,19 @@ exports.parseKvTool = require_batteries_tools_parsing.parseKvTool;
|
|
|
173
190
|
exports.parseYamlTool = require_batteries_tools_parsing.parseYamlTool;
|
|
174
191
|
exports.raw = require_batteries_vector_filters.raw;
|
|
175
192
|
exports.removeStandingInstructionTool = require_batteries_tools_standing_instructions.removeStandingInstructionTool;
|
|
176
|
-
exports.renderChatCompletionsSystemPrompt =
|
|
193
|
+
exports.renderChatCompletionsSystemPrompt = require_helpers.renderChatCompletionsSystemPrompt;
|
|
177
194
|
exports.renderChatCompletionsToolCallResult = require_batteries_llm_openai_chat_completions_helpers.renderChatCompletionsToolCallResult;
|
|
178
|
-
exports.renderFirstPartyRetrievables =
|
|
179
|
-
exports.renderMemories =
|
|
180
|
-
exports.renderRetrievableSafetyDirective =
|
|
181
|
-
exports.renderRetrievables =
|
|
182
|
-
exports.renderStandingInstructions =
|
|
183
|
-
exports.renderThirdPartyPrivateRetrievables =
|
|
184
|
-
exports.renderThirdPartyPublicRetrievables =
|
|
185
|
-
exports.renderThought =
|
|
195
|
+
exports.renderFirstPartyRetrievables = require_helpers.renderFirstPartyRetrievables;
|
|
196
|
+
exports.renderMemories = require_helpers.renderMemories;
|
|
197
|
+
exports.renderRetrievableSafetyDirective = require_helpers.renderRetrievableSafetyDirective;
|
|
198
|
+
exports.renderRetrievables = require_helpers.renderRetrievables;
|
|
199
|
+
exports.renderStandingInstructions = require_helpers.renderStandingInstructions;
|
|
200
|
+
exports.renderThirdPartyPrivateRetrievables = require_helpers.renderThirdPartyPrivateRetrievables;
|
|
201
|
+
exports.renderThirdPartyPublicRetrievables = require_helpers.renderThirdPartyPublicRetrievables;
|
|
202
|
+
exports.renderThought = require_helpers.renderThought;
|
|
186
203
|
exports.renderTimelineMessage = require_batteries_llm_openai_chat_completions_helpers.renderTimelineMessage;
|
|
187
|
-
exports.renderTrustedContent =
|
|
188
|
-
exports.renderUntrustedContent =
|
|
204
|
+
exports.renderTrustedContent = require_helpers.renderTrustedContent;
|
|
205
|
+
exports.renderUntrustedContent = require_helpers.renderUntrustedContent;
|
|
189
206
|
exports.resolveClientCtor = require_batteries_vector_validation.resolveClientCtor;
|
|
190
207
|
exports.retrievableTools = require_batteries_tools_retrievables.retrievableTools;
|
|
191
208
|
exports.setOperationsTool = require_batteries_tools_data_structure.setOperationsTool;
|
|
@@ -203,12 +220,13 @@ exports.textAnalyzeTool = require_batteries_tools_text_analysis.textAnalyzeTool;
|
|
|
203
220
|
exports.textDiffTool = require_batteries_tools_text_comparison.textDiffTool;
|
|
204
221
|
exports.textEscapeTool = require_batteries_tools_encoding.textEscapeTool;
|
|
205
222
|
exports.textLinesTool = require_batteries_tools_text_analysis.textLinesTool;
|
|
206
|
-
exports.toolsToChatCompletionsTools =
|
|
223
|
+
exports.toolsToChatCompletionsTools = require_helpers.toolsToChatCompletionsTools;
|
|
207
224
|
exports.unicodeNormalizeTool = require_batteries_tools_encoding.unicodeNormalizeTool;
|
|
208
225
|
exports.updateMemoryTool = require_batteries_tools_memory.updateMemoryTool;
|
|
209
226
|
exports.updateRetrievableTool = require_batteries_tools_retrievables.updateRetrievableTool;
|
|
210
227
|
exports.validateCreateConfig = require_batteries_vector_validation.validateCreateConfig;
|
|
211
228
|
exports.validateFormatTool = require_batteries_tools_structured_data.validateFormatTool;
|
|
229
|
+
exports.validateOllamaOptions = require_batteries_llm_ollama_validation.validateOptions;
|
|
212
230
|
exports.validateOpenAIEmbeddingsOptions = require_batteries_embeddings_openai_validation.validateOptions;
|
|
213
231
|
exports.validateOptions = require_batteries_llm_openai_chat_completions_validation.validateOptions;
|
|
214
232
|
exports.validateRecords = require_batteries_vector_validation.validateRecords;
|