@nhtio/adk 1.20260604.0 → 1.20260607.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 +261 -0
- package/adk-mcp.mjs +1 -1
- package/batteries/embeddings/openai/adapter.cjs +1 -1
- package/batteries/embeddings/openai/adapter.mjs +1 -1
- package/batteries/embeddings/webllm/adapter.cjs +1 -1
- package/batteries/embeddings/webllm/adapter.mjs +1 -1
- package/batteries/index.d.ts +1 -0
- package/batteries/llm/openai_chat_completions/adapter.cjs +6 -6
- package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/openai_chat_completions/adapter.mjs +6 -6
- package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/openai_chat_completions/helpers.cjs +2 -2
- package/batteries/llm/openai_chat_completions/helpers.mjs +2 -2
- 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/webllm_chat_completions/adapter.cjs +6 -6
- package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/adapter.mjs +6 -6
- package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.cjs +2 -2
- package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
- package/batteries/llm/webllm_chat_completions/validation.mjs +2 -2
- package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
- package/batteries/storage/flydrive.cjs +1 -1
- package/batteries/storage/flydrive.mjs +2 -2
- package/batteries/storage/in_memory.cjs +1 -1
- package/batteries/storage/in_memory.mjs +1 -1
- package/batteries/storage/opfs.cjs +1 -1
- package/batteries/storage/opfs.mjs +1 -1
- package/batteries/tools/color.cjs +2 -2
- package/batteries/tools/color.mjs +2 -2
- package/batteries/tools/comparison.cjs +3 -3
- package/batteries/tools/comparison.mjs +3 -3
- package/batteries/tools/data_structure.cjs +3 -3
- package/batteries/tools/data_structure.mjs +3 -3
- package/batteries/tools/datetime_extended.cjs +2 -2
- package/batteries/tools/datetime_extended.mjs +2 -2
- package/batteries/tools/datetime_math.cjs +2 -2
- package/batteries/tools/datetime_math.mjs +2 -2
- package/batteries/tools/encoding.cjs +3 -3
- package/batteries/tools/encoding.mjs +3 -3
- package/batteries/tools/formatting.cjs +3 -3
- package/batteries/tools/formatting.mjs +3 -3
- package/batteries/tools/geo_basics.cjs +2 -2
- package/batteries/tools/geo_basics.mjs +2 -2
- package/batteries/tools/math/index.d.ts +16 -5
- package/batteries/tools/math.cjs +340 -22
- package/batteries/tools/math.cjs.map +1 -1
- package/batteries/tools/math.mjs +338 -21
- 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 +4 -4
- package/batteries/tools/parsing.mjs +4 -4
- package/batteries/tools/retrievables.cjs +4 -4
- package/batteries/tools/retrievables.mjs +4 -4
- package/batteries/tools/standing_instructions.cjs +4 -4
- package/batteries/tools/standing_instructions.mjs +4 -4
- package/batteries/tools/statistics.cjs +4 -4
- package/batteries/tools/statistics.mjs +4 -4
- package/batteries/tools/string_processing.cjs +3 -3
- package/batteries/tools/string_processing.mjs +3 -3
- package/batteries/tools/structured_data.cjs +3 -3
- package/batteries/tools/structured_data.mjs +3 -3
- 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 +2 -2
- package/batteries/tools/unit_conversion.mjs +2 -2
- package/batteries/vector/arangodb/index.d.ts +38 -0
- package/batteries/vector/arangodb.cjs +257 -0
- package/batteries/vector/arangodb.cjs.map +1 -0
- package/batteries/vector/arangodb.mjs +255 -0
- package/batteries/vector/arangodb.mjs.map +1 -0
- package/batteries/vector/builder.cjs +297 -0
- package/batteries/vector/builder.cjs.map +1 -0
- package/batteries/vector/builder.d.ts +87 -0
- package/batteries/vector/builder.mjs +294 -0
- package/batteries/vector/builder.mjs.map +1 -0
- package/batteries/vector/chroma/index.d.ts +32 -0
- package/batteries/vector/chroma.cjs +305 -0
- package/batteries/vector/chroma.cjs.map +1 -0
- package/batteries/vector/chroma.mjs +302 -0
- package/batteries/vector/chroma.mjs.map +1 -0
- package/batteries/vector/clickhouse/index.d.ts +39 -0
- package/batteries/vector/clickhouse.cjs +246 -0
- package/batteries/vector/clickhouse.cjs.map +1 -0
- package/batteries/vector/clickhouse.mjs +244 -0
- package/batteries/vector/clickhouse.mjs.map +1 -0
- package/batteries/vector/cloudflare/index.d.ts +43 -0
- package/batteries/vector/cloudflare.cjs +397 -0
- package/batteries/vector/cloudflare.cjs.map +1 -0
- package/batteries/vector/cloudflare.mjs +395 -0
- package/batteries/vector/cloudflare.mjs.map +1 -0
- package/batteries/vector/conformance/index.d.ts +15 -0
- package/batteries/vector/conformance.cjs +209 -0
- package/batteries/vector/conformance.cjs.map +1 -0
- package/batteries/vector/conformance.mjs +205 -0
- package/batteries/vector/conformance.mjs.map +1 -0
- package/batteries/vector/contract.cjs +42 -0
- package/batteries/vector/contract.cjs.map +1 -0
- package/batteries/vector/contract.d.ts +39 -0
- package/batteries/vector/contract.mjs +40 -0
- package/batteries/vector/contract.mjs.map +1 -0
- package/batteries/vector/couchbase/index.d.ts +49 -0
- package/batteries/vector/couchbase.cjs +401 -0
- package/batteries/vector/couchbase.cjs.map +1 -0
- package/batteries/vector/couchbase.mjs +399 -0
- package/batteries/vector/couchbase.mjs.map +1 -0
- package/batteries/vector/duckdb/index.d.ts +33 -0
- package/batteries/vector/duckdb.cjs +218 -0
- package/batteries/vector/duckdb.cjs.map +1 -0
- package/batteries/vector/duckdb.mjs +216 -0
- package/batteries/vector/duckdb.mjs.map +1 -0
- package/batteries/vector/elasticsearch/index.d.ts +43 -0
- package/batteries/vector/elasticsearch.cjs +306 -0
- package/batteries/vector/elasticsearch.cjs.map +1 -0
- package/batteries/vector/elasticsearch.mjs +303 -0
- package/batteries/vector/elasticsearch.mjs.map +1 -0
- package/batteries/vector/exceptions.cjs +126 -0
- package/batteries/vector/exceptions.cjs.map +1 -0
- package/batteries/vector/exceptions.d.ts +142 -0
- package/batteries/vector/exceptions.mjs +107 -0
- package/batteries/vector/exceptions.mjs.map +1 -0
- package/batteries/vector/factory.cjs +28 -0
- package/batteries/vector/factory.cjs.map +1 -0
- package/batteries/vector/factory.d.ts +38 -0
- package/batteries/vector/factory.mjs +25 -0
- package/batteries/vector/factory.mjs.map +1 -0
- package/batteries/vector/filters.cjs +107 -0
- package/batteries/vector/filters.cjs.map +1 -0
- package/batteries/vector/filters.d.ts +34 -0
- package/batteries/vector/filters.mjs +99 -0
- package/batteries/vector/filters.mjs.map +1 -0
- package/batteries/vector/helpers.cjs +23 -0
- package/batteries/vector/helpers.cjs.map +1 -0
- package/batteries/vector/helpers.d.ts +12 -0
- package/batteries/vector/helpers.mjs +17 -0
- package/batteries/vector/helpers.mjs.map +1 -0
- package/batteries/vector/hnswlib/index.d.ts +35 -0
- package/batteries/vector/hnswlib.cjs +237 -0
- package/batteries/vector/hnswlib.cjs.map +1 -0
- package/batteries/vector/hnswlib.mjs +235 -0
- package/batteries/vector/hnswlib.mjs.map +1 -0
- package/batteries/vector/in_memory/index.d.ts +23 -0
- package/batteries/vector/in_memory.cjs +178 -0
- package/batteries/vector/in_memory.cjs.map +1 -0
- package/batteries/vector/in_memory.mjs +176 -0
- package/batteries/vector/in_memory.mjs.map +1 -0
- package/batteries/vector/index.d.ts +18 -0
- package/batteries/vector/lancedb/index.d.ts +34 -0
- package/batteries/vector/lancedb.cjs +224 -0
- package/batteries/vector/lancedb.cjs.map +1 -0
- package/batteries/vector/lancedb.mjs +222 -0
- package/batteries/vector/lancedb.mjs.map +1 -0
- package/batteries/vector/mariadb/index.d.ts +39 -0
- package/batteries/vector/mariadb.cjs +228 -0
- package/batteries/vector/mariadb.cjs.map +1 -0
- package/batteries/vector/mariadb.mjs +226 -0
- package/batteries/vector/mariadb.mjs.map +1 -0
- package/batteries/vector/meilisearch/index.d.ts +36 -0
- package/batteries/vector/meilisearch.cjs +242 -0
- package/batteries/vector/meilisearch.cjs.map +1 -0
- package/batteries/vector/meilisearch.mjs +240 -0
- package/batteries/vector/meilisearch.mjs.map +1 -0
- package/batteries/vector/migrate.cjs +54 -0
- package/batteries/vector/migrate.cjs.map +1 -0
- package/batteries/vector/migrate.d.ts +30 -0
- package/batteries/vector/migrate.mjs +52 -0
- package/batteries/vector/migrate.mjs.map +1 -0
- package/batteries/vector/milvus/index.d.ts +35 -0
- package/batteries/vector/milvus.cjs +357 -0
- package/batteries/vector/milvus.cjs.map +1 -0
- package/batteries/vector/milvus.mjs +354 -0
- package/batteries/vector/milvus.mjs.map +1 -0
- package/batteries/vector/mongodb/index.d.ts +46 -0
- package/batteries/vector/mongodb.cjs +270 -0
- package/batteries/vector/mongodb.cjs.map +1 -0
- package/batteries/vector/mongodb.mjs +268 -0
- package/batteries/vector/mongodb.mjs.map +1 -0
- package/batteries/vector/neo4j/index.d.ts +38 -0
- package/batteries/vector/neo4j.cjs +231 -0
- package/batteries/vector/neo4j.cjs.map +1 -0
- package/batteries/vector/neo4j.mjs +229 -0
- package/batteries/vector/neo4j.mjs.map +1 -0
- package/batteries/vector/opensearch/index.d.ts +46 -0
- package/batteries/vector/opensearch.cjs +316 -0
- package/batteries/vector/opensearch.cjs.map +1 -0
- package/batteries/vector/opensearch.mjs +313 -0
- package/batteries/vector/opensearch.mjs.map +1 -0
- package/batteries/vector/oracle23ai/index.d.ts +45 -0
- package/batteries/vector/oracle23ai.cjs +340 -0
- package/batteries/vector/oracle23ai.cjs.map +1 -0
- package/batteries/vector/oracle23ai.mjs +338 -0
- package/batteries/vector/oracle23ai.mjs.map +1 -0
- package/batteries/vector/orama/index.d.ts +23 -0
- package/batteries/vector/orama.cjs +272 -0
- package/batteries/vector/orama.cjs.map +1 -0
- package/batteries/vector/orama.mjs +270 -0
- package/batteries/vector/orama.mjs.map +1 -0
- package/batteries/vector/pgvector/index.d.ts +43 -0
- package/batteries/vector/pgvector.cjs +411 -0
- package/batteries/vector/pgvector.cjs.map +1 -0
- package/batteries/vector/pgvector.mjs +408 -0
- package/batteries/vector/pgvector.mjs.map +1 -0
- package/batteries/vector/pinecone/index.d.ts +38 -0
- package/batteries/vector/pinecone.cjs +415 -0
- package/batteries/vector/pinecone.cjs.map +1 -0
- package/batteries/vector/pinecone.mjs +412 -0
- package/batteries/vector/pinecone.mjs.map +1 -0
- package/batteries/vector/plan.cjs +2 -0
- package/batteries/vector/plan.d.ts +65 -0
- package/batteries/vector/plan.mjs +0 -0
- package/batteries/vector/qdrant/index.d.ts +34 -0
- package/batteries/vector/qdrant.cjs +286 -0
- package/batteries/vector/qdrant.cjs.map +1 -0
- package/batteries/vector/qdrant.mjs +284 -0
- package/batteries/vector/qdrant.mjs.map +1 -0
- package/batteries/vector/redis/index.d.ts +44 -0
- package/batteries/vector/redis.cjs +391 -0
- package/batteries/vector/redis.cjs.map +1 -0
- package/batteries/vector/redis.mjs +388 -0
- package/batteries/vector/redis.mjs.map +1 -0
- package/batteries/vector/retrievable.cjs +69 -0
- package/batteries/vector/retrievable.cjs.map +1 -0
- package/batteries/vector/retrievable.mjs +67 -0
- package/batteries/vector/retrievable.mjs.map +1 -0
- package/batteries/vector/retrievable_glue.d.ts +24 -0
- package/batteries/vector/s3vectors/index.d.ts +52 -0
- package/batteries/vector/s3vectors.cjs +438 -0
- package/batteries/vector/s3vectors.cjs.map +1 -0
- package/batteries/vector/s3vectors.mjs +436 -0
- package/batteries/vector/s3vectors.mjs.map +1 -0
- package/batteries/vector/schema.cjs +96 -0
- package/batteries/vector/schema.cjs.map +1 -0
- package/batteries/vector/schema.d.ts +40 -0
- package/batteries/vector/schema.mjs +93 -0
- package/batteries/vector/schema.mjs.map +1 -0
- package/batteries/vector/solr/index.d.ts +36 -0
- package/batteries/vector/solr.cjs +230 -0
- package/batteries/vector/solr.cjs.map +1 -0
- package/batteries/vector/solr.mjs +228 -0
- package/batteries/vector/solr.mjs.map +1 -0
- package/batteries/vector/sqlite_vec/index.d.ts +30 -0
- package/batteries/vector/sqlite_vec.cjs +318 -0
- package/batteries/vector/sqlite_vec.cjs.map +1 -0
- package/batteries/vector/sqlite_vec.mjs +316 -0
- package/batteries/vector/sqlite_vec.mjs.map +1 -0
- package/batteries/vector/surrealdb/index.d.ts +37 -0
- package/batteries/vector/surrealdb.cjs +230 -0
- package/batteries/vector/surrealdb.cjs.map +1 -0
- package/batteries/vector/surrealdb.mjs +228 -0
- package/batteries/vector/surrealdb.mjs.map +1 -0
- package/batteries/vector/types.cjs +2 -0
- package/batteries/vector/types.d.ts +100 -0
- package/batteries/vector/types.mjs +0 -0
- package/batteries/vector/typesense/index.d.ts +38 -0
- package/batteries/vector/typesense.cjs +272 -0
- package/batteries/vector/typesense.cjs.map +1 -0
- package/batteries/vector/typesense.mjs +270 -0
- package/batteries/vector/typesense.mjs.map +1 -0
- package/batteries/vector/validation.cjs +90 -0
- package/batteries/vector/validation.cjs.map +1 -0
- package/batteries/vector/validation.d.ts +18 -0
- package/batteries/vector/validation.mjs +83 -0
- package/batteries/vector/validation.mjs.map +1 -0
- package/batteries/vector/vector_store_constructor.cjs +56 -0
- package/batteries/vector/vector_store_constructor.cjs.map +1 -0
- package/batteries/vector/vector_store_constructor.d.ts +30 -0
- package/batteries/vector/vector_store_constructor.mjs +53 -0
- package/batteries/vector/vector_store_constructor.mjs.map +1 -0
- package/batteries/vector/vespa/index.d.ts +39 -0
- package/batteries/vector/vespa.cjs +423 -0
- package/batteries/vector/vespa.cjs.map +1 -0
- package/batteries/vector/vespa.mjs +421 -0
- package/batteries/vector/vespa.mjs.map +1 -0
- package/batteries/vector/weaviate/index.d.ts +57 -0
- package/batteries/vector/weaviate.cjs +325 -0
- package/batteries/vector/weaviate.cjs.map +1 -0
- package/batteries/vector/weaviate.mjs +322 -0
- package/batteries/vector/weaviate.mjs.map +1 -0
- package/batteries/vector.cjs +63 -0
- package/batteries/vector.mjs +14 -0
- package/batteries.cjs +62 -0
- package/batteries.mjs +15 -1
- package/{chunk-kRvK8_k2.mjs → chunk-Bpcn9VDT.mjs} +5 -1
- package/{common-lMrnzoyn.mjs → common-BT0nfCi9.mjs} +8 -8
- package/{common-lMrnzoyn.mjs.map → common-BT0nfCi9.mjs.map} +1 -1
- package/{common-D_e5zYsG.js → common-Cj8TaQ9U.js} +8 -8
- package/{common-D_e5zYsG.js.map → common-Cj8TaQ9U.js.map} +1 -1
- package/common.cjs +7 -7
- package/common.mjs +7 -7
- package/{dispatch_runner-CpuyATj1.js → dispatch_runner-BHBNupqp.js} +2 -2
- package/dispatch_runner-BHBNupqp.js.map +1 -0
- package/{dispatch_runner-CDF3X0nv.mjs → dispatch_runner-DPcS7Y_M.mjs} +2 -2
- package/dispatch_runner-DPcS7Y_M.mjs.map +1 -0
- package/dispatch_runner.cjs +1 -1
- package/dispatch_runner.mjs +1 -1
- package/forge.cjs +4 -4
- package/forge.mjs +4 -4
- package/guards.cjs +8 -8
- package/guards.mjs +8 -8
- package/index.cjs +12 -12
- package/index.mjs +12 -12
- package/lib/classes/tool_registry.d.ts +70 -4
- package/mcp/adk-docs-corpus.json +1 -1
- package/package.json +424 -88
- package/skills/adk-assembly/SKILL.md +2 -2
- package/{spooled_artifact-B8gIIn9h.js → spooled_artifact-BTq6Nzfy.js} +4 -4
- package/spooled_artifact-BTq6Nzfy.js.map +1 -0
- package/{spooled_artifact-CWoKUDEm.mjs → spooled_artifact-CHoZgWwI.mjs} +4 -4
- package/spooled_artifact-CHoZgWwI.mjs.map +1 -0
- package/spooled_artifact.cjs +2 -2
- package/spooled_artifact.mjs +2 -2
- package/{spooled_markdown_artifact-DQX0RCdI.js → spooled_markdown_artifact-CALSDxIx.js} +3 -3
- package/{spooled_markdown_artifact-DQX0RCdI.js.map → spooled_markdown_artifact-CALSDxIx.js.map} +1 -1
- package/{spooled_markdown_artifact-CNle4jXN.mjs → spooled_markdown_artifact-Ci5UL7l4.mjs} +3 -3
- package/{spooled_markdown_artifact-CNle4jXN.mjs.map → spooled_markdown_artifact-Ci5UL7l4.mjs.map} +1 -1
- package/src/types/evaluatex.d.ts +31 -0
- package/{thought-BD6AkkOr.js → thought-BbwhJ1wb.js} +4 -4
- package/thought-BbwhJ1wb.js.map +1 -0
- package/{thought-B_P8LiB6.mjs → thought-D34QQZZ9.mjs} +4 -4
- package/thought-D34QQZZ9.mjs.map +1 -0
- package/{tool-CRZSUcdP.mjs → tool-CMhaDRNd.mjs} +3 -3
- package/tool-CMhaDRNd.mjs.map +1 -0
- package/{tool-CX9vNHAw.js → tool-CVyZkFC7.js} +3 -3
- package/tool-CVyZkFC7.js.map +1 -0
- package/{tool_call-BUeMuCc6.mjs → tool_call-CV5qVNlb.mjs} +3 -3
- package/{tool_call-BUeMuCc6.mjs.map → tool_call-CV5qVNlb.mjs.map} +1 -1
- package/{tool_call--7ti-frB.js → tool_call-Db68hB7y.js} +3 -3
- package/{tool_call--7ti-frB.js.map → tool_call-Db68hB7y.js.map} +1 -1
- package/{tool_registry-BGHg6KTq.mjs → tool_registry-D1pSSlsd.mjs} +109 -22
- package/tool_registry-D1pSSlsd.mjs.map +1 -0
- package/{tool_registry-CtCQ4Xoz.js → tool_registry-DYUYqXvo.js} +109 -22
- package/tool_registry-DYUYqXvo.js.map +1 -0
- package/{turn_runner-BJTtAORU.js → turn_runner-DqWHNP80.js} +5 -5
- package/turn_runner-DqWHNP80.js.map +1 -0
- package/{turn_runner-C02LZHjt.mjs → turn_runner-fg1Wc3dK.mjs} +5 -5
- package/turn_runner-fg1Wc3dK.mjs.map +1 -0
- package/turn_runner.cjs +1 -1
- package/turn_runner.mjs +1 -1
- package/dispatch_runner-CDF3X0nv.mjs.map +0 -1
- package/dispatch_runner-CpuyATj1.js.map +0 -1
- package/spooled_artifact-B8gIIn9h.js.map +0 -1
- package/spooled_artifact-CWoKUDEm.mjs.map +0 -1
- package/thought-BD6AkkOr.js.map +0 -1
- package/thought-B_P8LiB6.mjs.map +0 -1
- package/tool-CRZSUcdP.mjs.map +0 -1
- package/tool-CX9vNHAw.js.map +0 -1
- package/tool_registry-BGHg6KTq.mjs.map +0 -1
- package/tool_registry-CtCQ4Xoz.js.map +0 -1
- package/turn_runner-BJTtAORU.js.map +0 -1
- package/turn_runner-C02LZHjt.mjs.map +0 -1
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { s as isInstanceOf } from "../../tool_registry-D1pSSlsd.mjs";
|
|
2
|
+
import "../../guards.mjs";
|
|
3
|
+
import { evaluateFilter, isFilterCondition, isFilterGroup, isRawFilter } from "./filters.mjs";
|
|
4
|
+
import { normalizeScore } from "./helpers.mjs";
|
|
5
|
+
import { E_VECTOR_STORE_COLLECTION_FAILED, E_VECTOR_STORE_CONNECTION_FAILED, E_VECTOR_STORE_CONSISTENCY_TIMEOUT, E_VECTOR_STORE_DELETE_FAILED, E_VECTOR_STORE_DIMENSION_MISMATCH, E_VECTOR_STORE_DRIVER_UNAVAILABLE, E_VECTOR_STORE_SEARCH_FAILED, E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR, E_VECTOR_STORE_UNSUPPORTED_OPERATION, E_VECTOR_STORE_UPSERT_FAILED } from "./exceptions.mjs";
|
|
6
|
+
import { BaseVectorStore } from "./contract.mjs";
|
|
7
|
+
import { validateRecords } from "./validation.mjs";
|
|
8
|
+
//#region src/batteries/vector/pinecone/index.ts
|
|
9
|
+
/**
|
|
10
|
+
* @module @nhtio/adk/batteries/vector/pinecone
|
|
11
|
+
*/
|
|
12
|
+
var getPineconeClient = async () => {
|
|
13
|
+
try {
|
|
14
|
+
return (await import("@pinecone-database/pinecone")).Pinecone;
|
|
15
|
+
} catch {
|
|
16
|
+
throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(["@pinecone-database/pinecone"]);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var PineconeVectorStore = class extends BaseVectorStore {
|
|
20
|
+
capabilities = {
|
|
21
|
+
transactions: false,
|
|
22
|
+
namedVectors: false,
|
|
23
|
+
rename: false,
|
|
24
|
+
rawSql: false,
|
|
25
|
+
builtInEncoding: false,
|
|
26
|
+
consistency: {
|
|
27
|
+
configurable: true,
|
|
28
|
+
default: "strong",
|
|
29
|
+
modes: [
|
|
30
|
+
"strong",
|
|
31
|
+
"best-effort",
|
|
32
|
+
"eventual"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
#pc = null;
|
|
37
|
+
#index = null;
|
|
38
|
+
#dims = /* @__PURE__ */ new Map();
|
|
39
|
+
#consistencyMode(perOp) {
|
|
40
|
+
return perOp ?? this.options.consistency ?? this.capabilities.consistency.default;
|
|
41
|
+
}
|
|
42
|
+
#ns(collection) {
|
|
43
|
+
const prefix = this.options.namespacePrefix;
|
|
44
|
+
return prefix ? `${prefix}__${collection}` : collection;
|
|
45
|
+
}
|
|
46
|
+
async #waitVisible(ns, collection, opts) {
|
|
47
|
+
const present = opts.present ?? [];
|
|
48
|
+
const absent = opts.absent ?? [];
|
|
49
|
+
if (present.length === 0 && absent.length === 0) return true;
|
|
50
|
+
const physicalNs = this.#ns(collection);
|
|
51
|
+
const dims = this.#dims.get(collection) ?? 3;
|
|
52
|
+
const queryVec = opts.probeVector ?? new Array(dims).fill(0).map((_, i) => i === 0 ? 1 : 0);
|
|
53
|
+
const deadline = Date.now() + 1e4;
|
|
54
|
+
const topK = Math.max(present.length + absent.length + 5, 10);
|
|
55
|
+
while (true) {
|
|
56
|
+
let presentOk = true;
|
|
57
|
+
let absentOk = true;
|
|
58
|
+
if (present.length > 0) {
|
|
59
|
+
let listed = /* @__PURE__ */ new Set();
|
|
60
|
+
try {
|
|
61
|
+
const lr = await this.#index.listPaginated({
|
|
62
|
+
namespace: physicalNs,
|
|
63
|
+
limit: 100
|
|
64
|
+
});
|
|
65
|
+
listed = new Set((lr.vectors ?? []).map((v) => v.id));
|
|
66
|
+
} catch {
|
|
67
|
+
listed = /* @__PURE__ */ new Set();
|
|
68
|
+
}
|
|
69
|
+
let queried = /* @__PURE__ */ new Set();
|
|
70
|
+
try {
|
|
71
|
+
const qr = await ns.query({
|
|
72
|
+
vector: queryVec,
|
|
73
|
+
topK,
|
|
74
|
+
includeValues: false
|
|
75
|
+
});
|
|
76
|
+
queried = new Set((qr.matches ?? []).map((m) => m.id));
|
|
77
|
+
} catch {
|
|
78
|
+
queried = /* @__PURE__ */ new Set();
|
|
79
|
+
}
|
|
80
|
+
presentOk = present.every((id) => listed.has(id) && queried.has(id));
|
|
81
|
+
}
|
|
82
|
+
if (absent.length > 0) {
|
|
83
|
+
let listed = /* @__PURE__ */ new Set();
|
|
84
|
+
try {
|
|
85
|
+
const lr = await this.#index.listPaginated({
|
|
86
|
+
namespace: physicalNs,
|
|
87
|
+
limit: 1e3
|
|
88
|
+
});
|
|
89
|
+
listed = new Set((lr.vectors ?? []).map((v) => v.id));
|
|
90
|
+
} catch {
|
|
91
|
+
listed = /* @__PURE__ */ new Set();
|
|
92
|
+
}
|
|
93
|
+
let fetched = {};
|
|
94
|
+
try {
|
|
95
|
+
fetched = (await ns.fetch({ ids: absent })).records ?? {};
|
|
96
|
+
} catch {
|
|
97
|
+
fetched = {};
|
|
98
|
+
}
|
|
99
|
+
absentOk = absent.every((id) => !listed.has(id) && fetched[id] === void 0);
|
|
100
|
+
}
|
|
101
|
+
if (presentOk && absentOk) return true;
|
|
102
|
+
if (Date.now() >= deadline) return false;
|
|
103
|
+
await new Promise((r) => setTimeout(r, 300));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async #settle(ns, collection, opts, what, mode) {
|
|
107
|
+
if (mode === "eventual") return;
|
|
108
|
+
if (!await this.#waitVisible(ns, collection, opts) && mode === "strong") throw new E_VECTOR_STORE_CONSISTENCY_TIMEOUT([what]);
|
|
109
|
+
}
|
|
110
|
+
static isAvailable() {
|
|
111
|
+
return typeof process !== "undefined";
|
|
112
|
+
}
|
|
113
|
+
isAvailable() {
|
|
114
|
+
return typeof process !== "undefined";
|
|
115
|
+
}
|
|
116
|
+
async connect() {
|
|
117
|
+
if (this.#pc) return;
|
|
118
|
+
const Pinecone = await getPineconeClient();
|
|
119
|
+
const opts = this.options;
|
|
120
|
+
try {
|
|
121
|
+
this.#pc = new Pinecone({
|
|
122
|
+
apiKey: opts.apiKey,
|
|
123
|
+
...opts.connection
|
|
124
|
+
});
|
|
125
|
+
this.#index = this.#pc.index(opts.index);
|
|
126
|
+
} catch (err) {
|
|
127
|
+
throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async close() {
|
|
131
|
+
this.#pc = null;
|
|
132
|
+
this.#index = null;
|
|
133
|
+
}
|
|
134
|
+
async createCollection(spec, ifNotExists) {
|
|
135
|
+
const collection = spec.collection;
|
|
136
|
+
if (ifNotExists) {
|
|
137
|
+
if (await this.hasCollection(collection)) return;
|
|
138
|
+
}
|
|
139
|
+
if (this.#dims.has(collection)) {
|
|
140
|
+
const existingDim = this.#dims.get(collection);
|
|
141
|
+
if (existingDim !== spec.vector.dimensions) throw new E_VECTOR_STORE_COLLECTION_FAILED(["createCollection", `Collection ${collection} already exists with dimension ${existingDim}`]);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.#dims.set(collection, spec.vector.dimensions);
|
|
145
|
+
}
|
|
146
|
+
async dropCollection(collection, ifExists) {
|
|
147
|
+
if (ifExists) {
|
|
148
|
+
if (!await this.hasCollection(collection)) return;
|
|
149
|
+
} else if (!await this.hasCollection(collection)) return;
|
|
150
|
+
await this.connect();
|
|
151
|
+
const physicalNs = this.#ns(collection);
|
|
152
|
+
const ns = this.#index.namespace(physicalNs);
|
|
153
|
+
try {
|
|
154
|
+
let page = { next: null };
|
|
155
|
+
const ids = [];
|
|
156
|
+
do {
|
|
157
|
+
const lr = await this.#index.listPaginated({
|
|
158
|
+
namespace: physicalNs,
|
|
159
|
+
limit: 1e3,
|
|
160
|
+
startingToken: page.next
|
|
161
|
+
});
|
|
162
|
+
if (lr.vectors) ids.push(...lr.vectors.map((v) => v.id));
|
|
163
|
+
page.next = lr.pagination?.next;
|
|
164
|
+
} while (page.next);
|
|
165
|
+
if (ids.length > 0) await ns.deleteMany({ ids });
|
|
166
|
+
await this.#settle(ns, collection, { absent: ids }, "dropCollection " + collection, this.#consistencyMode());
|
|
167
|
+
} catch (err) {
|
|
168
|
+
if (isInstanceOf(err, "E_VECTOR_STORE_CONSISTENCY_TIMEOUT", E_VECTOR_STORE_CONSISTENCY_TIMEOUT)) throw err;
|
|
169
|
+
const msg = String(err);
|
|
170
|
+
if (ifExists && msg.includes("not found")) return;
|
|
171
|
+
throw new E_VECTOR_STORE_COLLECTION_FAILED(["dropCollection", msg]);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async hasCollection(collection) {
|
|
175
|
+
await this.connect();
|
|
176
|
+
return !!(await this.#index.describeIndexStats()).namespaces?.[this.#ns(collection)];
|
|
177
|
+
}
|
|
178
|
+
async renameCollection(_from, _to) {
|
|
179
|
+
throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(["renameCollection", "pinecone"]);
|
|
180
|
+
}
|
|
181
|
+
async executeUpsert(plan) {
|
|
182
|
+
if (plan.records.length === 0) return;
|
|
183
|
+
validateRecords(plan.records);
|
|
184
|
+
await this.connect();
|
|
185
|
+
const collection = plan.collection;
|
|
186
|
+
const ns = this.#index.namespace(this.#ns(collection));
|
|
187
|
+
const dims = this.#dims.get(collection);
|
|
188
|
+
const vectors = [];
|
|
189
|
+
for (const r of plan.records) {
|
|
190
|
+
let vector = r.vector;
|
|
191
|
+
if (!vector && r.document) {
|
|
192
|
+
const [v] = await this.encode([r.document], "document");
|
|
193
|
+
vector = v;
|
|
194
|
+
}
|
|
195
|
+
if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(["Record missing vector and document"]);
|
|
196
|
+
if (dims !== void 0 && vector.length !== dims) throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length]);
|
|
197
|
+
vectors.push({
|
|
198
|
+
id: r.id,
|
|
199
|
+
values: vector,
|
|
200
|
+
metadata: {
|
|
201
|
+
...r.metadata,
|
|
202
|
+
__document: r.document ?? ""
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
await ns.upsert({ records: vectors });
|
|
208
|
+
await this.#settle(ns, collection, { present: vectors.map((v) => v.id) }, "upsert " + vectors.length + " record(s)", this.#consistencyMode(plan.consistency));
|
|
209
|
+
} catch (err) {
|
|
210
|
+
if (isInstanceOf(err, "E_VECTOR_STORE_CONSISTENCY_TIMEOUT", E_VECTOR_STORE_CONSISTENCY_TIMEOUT)) throw err;
|
|
211
|
+
throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)]);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async executeSearch(plan) {
|
|
215
|
+
await this.connect();
|
|
216
|
+
const collection = plan.collection;
|
|
217
|
+
const physicalNs = this.#ns(collection);
|
|
218
|
+
const ns = this.#index.namespace(physicalNs);
|
|
219
|
+
const metric = this.options.metric ?? "cosine";
|
|
220
|
+
let queryVector;
|
|
221
|
+
if (plan.near) {
|
|
222
|
+
if ("vector" in plan.near) queryVector = plan.near.vector;
|
|
223
|
+
else if ("serverText" in plan.near) {
|
|
224
|
+
const [v] = await this.encode([plan.near.serverText], "query");
|
|
225
|
+
queryVector = v;
|
|
226
|
+
} else if ("id" in plan.near) {
|
|
227
|
+
const record = (await ns.fetch({ ids: [plan.near.id] })).records[plan.near.id];
|
|
228
|
+
if (!record) throw new E_VECTOR_STORE_SEARCH_FAILED(["Referenced id not found: " + plan.near.id]);
|
|
229
|
+
queryVector = record.values;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const offset = plan.offset ?? 0;
|
|
233
|
+
const k = plan.topK + offset;
|
|
234
|
+
if (queryVector) {
|
|
235
|
+
const filter = translatePineconeFilter(plan.filter);
|
|
236
|
+
const sliceMatches = ((await ns.query({
|
|
237
|
+
vector: queryVector,
|
|
238
|
+
topK: k,
|
|
239
|
+
filter,
|
|
240
|
+
includeMetadata: true,
|
|
241
|
+
includeValues: !!plan.projection.vector
|
|
242
|
+
})).matches ?? []).slice(offset);
|
|
243
|
+
const matches = [];
|
|
244
|
+
for (const match of sliceMatches) {
|
|
245
|
+
const proj = {};
|
|
246
|
+
if (plan.projection.id) proj.id = match.id;
|
|
247
|
+
if (plan.projection.vector && match.values) proj.vector = match.values;
|
|
248
|
+
if (plan.projection.document && match.metadata) proj.document = match.metadata.__document;
|
|
249
|
+
if (plan.projection.metadata && match.metadata) {
|
|
250
|
+
const meta = {};
|
|
251
|
+
for (const key in match.metadata) if (key !== "__document") meta[key] = match.metadata[key];
|
|
252
|
+
proj.metadata = meta;
|
|
253
|
+
}
|
|
254
|
+
if (plan.near) proj.score = normalizeScore(match.score, metric, "similarity");
|
|
255
|
+
matches.push(proj);
|
|
256
|
+
}
|
|
257
|
+
return matches;
|
|
258
|
+
} else {
|
|
259
|
+
let page = { next: null };
|
|
260
|
+
const ids = [];
|
|
261
|
+
do {
|
|
262
|
+
const listRes = await this.#index.listPaginated({
|
|
263
|
+
limit: 100,
|
|
264
|
+
startingToken: page.next,
|
|
265
|
+
namespace: physicalNs
|
|
266
|
+
});
|
|
267
|
+
if (listRes.vectors) ids.push(...listRes.vectors.map((v) => v.id));
|
|
268
|
+
page.next = listRes.pagination?.next;
|
|
269
|
+
} while (page.next);
|
|
270
|
+
if (ids.length === 0) return [];
|
|
271
|
+
const allRecords = {};
|
|
272
|
+
for (let i = 0; i < ids.length; i += 100) {
|
|
273
|
+
const batch = ids.slice(i, i + 100);
|
|
274
|
+
const fetchRes = await ns.fetch({ ids: batch });
|
|
275
|
+
if (fetchRes && fetchRes.records) for (const id in fetchRes.records) allRecords[id] = fetchRes.records[id];
|
|
276
|
+
}
|
|
277
|
+
const matches = [];
|
|
278
|
+
for (const id in allRecords) {
|
|
279
|
+
const record = allRecords[id];
|
|
280
|
+
if (record.metadata) {
|
|
281
|
+
const evalMeta = {};
|
|
282
|
+
for (const key in record.metadata) if (key !== "__document") evalMeta[key] = record.metadata[key];
|
|
283
|
+
if (!plan.filter || evaluateFilter(plan.filter, evalMeta)) {
|
|
284
|
+
const proj = {};
|
|
285
|
+
if (plan.projection.id) proj.id = id;
|
|
286
|
+
if (plan.projection.vector && record.values) proj.vector = record.values;
|
|
287
|
+
if (plan.projection.document && record.metadata) proj.document = record.metadata.__document;
|
|
288
|
+
if (plan.projection.metadata && record.metadata) {
|
|
289
|
+
const meta = {};
|
|
290
|
+
for (const key in record.metadata) if (key !== "__document") meta[key] = record.metadata[key];
|
|
291
|
+
proj.metadata = meta;
|
|
292
|
+
}
|
|
293
|
+
matches.push(proj);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return matches.slice(offset, offset + plan.topK);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
async executeDelete(plan) {
|
|
301
|
+
await this.connect();
|
|
302
|
+
const collection = plan.collection;
|
|
303
|
+
const physicalNs = this.#ns(collection);
|
|
304
|
+
const ns = this.#index.namespace(physicalNs);
|
|
305
|
+
const mode = this.#consistencyMode(plan.consistency);
|
|
306
|
+
try {
|
|
307
|
+
if (plan.ids && plan.ids.length > 0) {
|
|
308
|
+
await ns.deleteMany({ ids: plan.ids });
|
|
309
|
+
await this.#settle(ns, collection, { absent: plan.ids }, "delete by id", mode);
|
|
310
|
+
} else if (plan.filter) {
|
|
311
|
+
let page = { next: null };
|
|
312
|
+
const ids = [];
|
|
313
|
+
do {
|
|
314
|
+
const listRes = await this.#index.listPaginated({
|
|
315
|
+
limit: 1e3,
|
|
316
|
+
startingToken: page.next,
|
|
317
|
+
namespace: physicalNs
|
|
318
|
+
});
|
|
319
|
+
if (listRes.vectors) ids.push(...listRes.vectors.map((v) => v.id));
|
|
320
|
+
page.next = listRes.pagination?.next;
|
|
321
|
+
} while (page.next);
|
|
322
|
+
const deleteIds = [];
|
|
323
|
+
if (plan.filter ? isFilterOnId(plan.filter) : false) {
|
|
324
|
+
for (const id of ids) if (evaluateFilter(plan.filter, { id })) deleteIds.push(id);
|
|
325
|
+
} else for (const id of ids) {
|
|
326
|
+
const record = (await ns.fetch({ ids: [id] })).records[id];
|
|
327
|
+
if (record && record.metadata) {
|
|
328
|
+
const evalMeta = {};
|
|
329
|
+
for (const key in record.metadata) if (key !== "__document") evalMeta[key] = record.metadata[key];
|
|
330
|
+
if (evaluateFilter(plan.filter, evalMeta)) deleteIds.push(id);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (deleteIds.length > 0) {
|
|
334
|
+
await ns.deleteMany({ ids: deleteIds });
|
|
335
|
+
await this.#settle(ns, collection, { absent: deleteIds }, "delete by filter", mode);
|
|
336
|
+
}
|
|
337
|
+
} else {
|
|
338
|
+
let page = { next: null };
|
|
339
|
+
const allIds = [];
|
|
340
|
+
do {
|
|
341
|
+
const lr = await this.#index.listPaginated({
|
|
342
|
+
namespace: physicalNs,
|
|
343
|
+
limit: 1e3,
|
|
344
|
+
startingToken: page.next
|
|
345
|
+
});
|
|
346
|
+
if (lr.vectors) allIds.push(...lr.vectors.map((v) => v.id));
|
|
347
|
+
page.next = lr.pagination?.next;
|
|
348
|
+
} while (page.next);
|
|
349
|
+
if (allIds.length > 0) await ns.deleteMany({ ids: allIds });
|
|
350
|
+
await this.#settle(ns, collection, { absent: allIds }, "delete all", mode);
|
|
351
|
+
}
|
|
352
|
+
} catch (err) {
|
|
353
|
+
if (isInstanceOf(err, "E_VECTOR_STORE_CONSISTENCY_TIMEOUT", E_VECTOR_STORE_CONSISTENCY_TIMEOUT)) throw err;
|
|
354
|
+
throw new E_VECTOR_STORE_DELETE_FAILED([String(err)]);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
var isFilterOnId = (filter) => {
|
|
359
|
+
if (!filter) return false;
|
|
360
|
+
if (isRawFilter(filter)) return false;
|
|
361
|
+
if (isFilterCondition(filter)) return filter.field === "id";
|
|
362
|
+
if (isFilterGroup(filter)) {
|
|
363
|
+
const { and, or, not } = filter;
|
|
364
|
+
if (and && and.length > 0) return and.some((f) => isFilterOnId(f));
|
|
365
|
+
if (or && or.length > 0) return or.some((f) => isFilterOnId(f));
|
|
366
|
+
if (not) return isFilterOnId(not);
|
|
367
|
+
}
|
|
368
|
+
return false;
|
|
369
|
+
};
|
|
370
|
+
var translatePineconeFilter = (filter) => {
|
|
371
|
+
if (!filter) return void 0;
|
|
372
|
+
if (isRawFilter(filter)) {
|
|
373
|
+
if (filter.$dialect === "pinecone") return filter.$raw;
|
|
374
|
+
throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["pinecone", String(filter.$dialect)]);
|
|
375
|
+
}
|
|
376
|
+
if (isFilterCondition(filter)) {
|
|
377
|
+
const { field, op, value } = filter;
|
|
378
|
+
if (value === void 0) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["pinecone", op]);
|
|
379
|
+
if (op === "eq") return { [field]: { $eq: value } };
|
|
380
|
+
if (op === "ne") return { [field]: { $ne: value } };
|
|
381
|
+
if (op === "gt") return { [field]: { $gt: value } };
|
|
382
|
+
if (op === "gte") return { [field]: { $gte: value } };
|
|
383
|
+
if (op === "lt") return { [field]: { $lt: value } };
|
|
384
|
+
if (op === "lte") return { [field]: { $lte: value } };
|
|
385
|
+
if (op === "in") return { [field]: { $in: value } };
|
|
386
|
+
if (op === "nin") return { [field]: { $nin: value } };
|
|
387
|
+
if (op === "exists") throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["pinecone", op]);
|
|
388
|
+
if (op === "contains") throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["pinecone", op]);
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
if (isFilterGroup(filter)) {
|
|
392
|
+
const { and, or, not } = filter;
|
|
393
|
+
if (and) {
|
|
394
|
+
const children = and.map((f) => translatePineconeFilter(f)).filter((c) => c !== void 0);
|
|
395
|
+
if (children.length === 0) return void 0;
|
|
396
|
+
if (children.length === 1) return children[0];
|
|
397
|
+
return { $and: children };
|
|
398
|
+
}
|
|
399
|
+
if (or) {
|
|
400
|
+
const children = or.map((f) => translatePineconeFilter(f)).filter((c) => c !== void 0);
|
|
401
|
+
if (children.length === 0) return void 0;
|
|
402
|
+
if (children.length === 1) return children[0];
|
|
403
|
+
return { $or: children };
|
|
404
|
+
}
|
|
405
|
+
if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["pinecone", "not"]);
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
//#endregion
|
|
410
|
+
export { PineconeVectorStore, translatePineconeFilter };
|
|
411
|
+
|
|
412
|
+
//# sourceMappingURL=pinecone.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinecone.mjs","names":["#waitVisible","#ns","#dims","#index","#settle","#pc","#consistencyMode"],"sources":["../../../src/batteries/vector/pinecone/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/pinecone\n */\n\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isInstanceOf } from '@nhtio/adk/guards'\nimport { isFilterCondition, isRawFilter, isFilterGroup, evaluateFilter } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\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_FILTER_OPERATOR,\n E_VECTOR_STORE_UNSUPPORTED_OPERATION,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_CONSISTENCY_TIMEOUT,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorStoreCapabilities,\n BaseVectorStoreOptions,\n VectorMetadata,\n VectorConsistency,\n} from '../types'\n\nexport interface PineconeVectorStoreOptions extends BaseVectorStoreOptions {\n apiKey: string\n index: string\n /**\n * When set, the physical Pinecone namespace becomes `${namespacePrefix}__${collection}`.\n * The logical collection name the builder/base see is unchanged — only the physical\n * namespace string is prefixed. Lets callers (and the test suite) isolate otherwise\n * identically-named collections into distinct, uncontended namespaces. Pinecone\n * namespaces are implicit (born on first upsert), so a fresh prefix costs nothing.\n */\n namespacePrefix?: string\n connection?: { controllerHostUrl?: string }\n}\n\nconst getPineconeClient = async () => {\n try {\n const mod = await import('@pinecone-database/pinecone')\n return mod.Pinecone\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['@pinecone-database/pinecone'])\n }\n}\n\nexport class PineconeVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Pinecone serverless is eventually consistent: the option is honored, and the default\n // is 'strong' so out-of-the-box behavior matches the strongly-consistent adapters.\n consistency: {\n configurable: true,\n default: 'strong',\n modes: ['strong', 'best-effort', 'eventual'],\n },\n }\n #pc: any | null = null\n #index: any | null = null\n #dims: Map<string, number> = new Map()\n\n // Resolve the effective consistency mode for one write, honoring precedence:\n // per-operation override (plan.consistency) > store option > adapter-declared default.\n #consistencyMode(perOp?: VectorConsistency): VectorConsistency {\n return (\n perOp ??\n (this.options as PineconeVectorStoreOptions).consistency ??\n this.capabilities.consistency.default\n )\n }\n\n // Map a logical collection name to its physical Pinecone namespace. Only the physical\n // namespace string is prefixed; #dims and everything the base/builder see stay keyed on\n // the logical name.\n #ns(collection: string): string {\n const prefix = (this.options as PineconeVectorStoreOptions).namespacePrefix\n return prefix ? `${prefix}__${collection}` : collection\n }\n\n // Returns true if visibility was confirmed within the bound, false on timeout.\n // Polls the SAME read paths the adapter reads through downstream:\n // present ids → must appear in BOTH query() matches AND listPaginated()\n // absent ids → must be gone from BOTH listPaginated() AND fetch()\n async #waitVisible(\n ns: any,\n collection: string,\n opts: { present?: string[]; absent?: string[]; probeVector?: number[] }\n ): Promise<boolean> {\n const present = opts.present ?? []\n const absent = opts.absent ?? []\n if (present.length === 0 && absent.length === 0) return true\n const physicalNs = this.#ns(collection)\n const dims = this.#dims.get(collection) ?? 3\n const queryVec = opts.probeVector ?? new Array(dims).fill(0).map((_, i) => (i === 0 ? 1 : 0))\n const deadline = Date.now() + 10_000 // 10s ceiling; freshness is ~seconds\n const topK = Math.max(present.length + absent.length + 5, 10)\n while (true) {\n let presentOk = true\n let absentOk = true\n if (present.length > 0) {\n let listed = new Set<string>()\n try {\n const lr = await this.#index!.listPaginated({ namespace: physicalNs, limit: 100 })\n listed = new Set((lr.vectors ?? []).map((v: any) => v.id))\n } catch {\n listed = new Set()\n }\n let queried = new Set<string>()\n try {\n const qr = await ns.query({ vector: queryVec, topK, includeValues: false })\n queried = new Set((qr.matches ?? []).map((m: any) => m.id))\n } catch {\n queried = new Set()\n }\n presentOk = present.every((id) => listed.has(id) && queried.has(id))\n }\n if (absent.length > 0) {\n let listed = new Set<string>()\n try {\n const lr = await this.#index!.listPaginated({ namespace: physicalNs, limit: 1000 })\n listed = new Set((lr.vectors ?? []).map((v: any) => v.id))\n } catch {\n listed = new Set()\n }\n let fetched: Record<string, unknown> = {}\n try {\n const fr = await ns.fetch({ ids: absent })\n fetched = fr.records ?? {}\n } catch {\n fetched = {}\n }\n absentOk = absent.every((id) => !listed.has(id) && fetched[id] === undefined)\n }\n if (presentOk && absentOk) return true\n if (Date.now() >= deadline) return false\n await new Promise((r) => setTimeout(r, 300))\n }\n }\n\n // Apply the resolved consistency-mode semantics for one write:\n // strong → wait, and THROW E_VECTOR_STORE_CONSISTENCY_TIMEOUT if not confirmed.\n // best-effort → wait up to the bound, then resolve whether or not confirmed (no throw).\n // eventual → no wait at all.\n // `mode` is the effective mode for THIS operation (already resolved from the precedence\n // chain by the caller via #consistencyMode(plan.consistency)).\n async #settle(\n ns: any,\n collection: string,\n opts: { present?: string[]; absent?: string[] },\n what: string,\n mode: VectorConsistency\n ): Promise<void> {\n if (mode === 'eventual') return\n const confirmed = await this.#waitVisible(ns, collection, opts)\n if (!confirmed && mode === 'strong') {\n throw new E_VECTOR_STORE_CONSISTENCY_TIMEOUT([what])\n }\n // best-effort: resolve regardless\n }\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n async connect(): Promise<void> {\n if (this.#pc) return\n const Pinecone = await getPineconeClient()\n const opts = this.options as PineconeVectorStoreOptions\n try {\n this.#pc = new Pinecone({ apiKey: opts.apiKey, ...opts.connection })\n this.#index = this.#pc.index(opts.index)\n } catch (err) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)])\n }\n }\n async close(): Promise<void> {\n this.#pc = null\n this.#index = null\n }\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n const collection = spec.collection\n if (ifNotExists) {\n if (await this.hasCollection(collection)) return\n }\n if (this.#dims.has(collection)) {\n const existingDim = this.#dims.get(collection)!\n if (existingDim !== spec.vector.dimensions) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED([\n 'createCollection',\n `Collection ${collection} already exists with dimension ${existingDim}`,\n ])\n }\n return\n }\n this.#dims.set(collection, spec.vector.dimensions)\n }\n async dropCollection(collection: string, ifExists: boolean): Promise<void> {\n if (ifExists) {\n if (!(await this.hasCollection(collection))) return\n } else if (!(await this.hasCollection(collection))) {\n return\n }\n await this.connect()\n const physicalNs = this.#ns(collection)\n const ns = this.#index!.namespace(physicalNs)\n try {\n // Get all IDs via pagination\n let page: any = { next: null }\n const ids: string[] = []\n do {\n const lr = await this.#index!.listPaginated({\n namespace: physicalNs,\n limit: 1000,\n startingToken: page.next,\n })\n if (lr.vectors) ids.push(...lr.vectors.map((v: any) => v.id))\n page.next = lr.pagination?.next\n } while (page.next)\n\n // Delete all found IDs\n if (ids.length > 0) {\n await ns.deleteMany({ ids })\n }\n\n // Settle on absence\n await this.#settle(\n ns,\n collection,\n { absent: ids },\n 'dropCollection ' + collection,\n this.#consistencyMode()\n )\n } catch (err: any) {\n // Re-throw consistency timeout directly (don't swallow)\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_CONSISTENCY_TIMEOUT', E_VECTOR_STORE_CONSISTENCY_TIMEOUT)\n )\n throw err\n const msg = String(err)\n if (ifExists && msg.includes('not found')) return\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['dropCollection', msg])\n }\n }\n async hasCollection(collection: string): Promise<boolean> {\n await this.connect()\n const stats = await this.#index!.describeIndexStats()\n return !!stats.namespaces?.[this.#ns(collection)]\n }\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'pinecone'])\n }\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n await this.connect()\n const collection = plan.collection\n const ns = this.#index!.namespace(this.#ns(collection))\n const dims = this.#dims.get(collection)\n const vectors: any[] = []\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 vectors.push({\n id: r.id,\n values: vector,\n metadata: { ...r.metadata, __document: r.document ?? '' },\n })\n }\n try {\n await ns.upsert({ records: vectors })\n // Call settle after upsert to wait for visibility (per-op override > store > default)\n await this.#settle(\n ns,\n collection,\n { present: vectors.map((v) => v.id) },\n 'upsert ' + vectors.length + ' record(s)',\n this.#consistencyMode(plan.consistency)\n )\n } catch (err) {\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_CONSISTENCY_TIMEOUT', E_VECTOR_STORE_CONSISTENCY_TIMEOUT)\n )\n throw err\n throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)])\n }\n }\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n await this.connect()\n const collection = plan.collection\n const physicalNs = this.#ns(collection)\n const ns = this.#index!.namespace(physicalNs)\n const metric = this.options.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 ns.fetch({ ids: [plan.near.id] })\n const record = res.records[plan.near.id]\n if (!record) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n queryVector = record.values\n }\n }\n const offset = plan.offset ?? 0\n const k = plan.topK + offset\n if (queryVector) {\n const filter = translatePineconeFilter(plan.filter)\n const res = await ns.query({\n vector: queryVector,\n topK: k,\n filter,\n includeMetadata: true,\n includeValues: !!plan.projection.vector,\n })\n const rawMatches = res.matches ?? []\n const sliceMatches = rawMatches.slice(offset)\n const matches: VectorMatch[] = []\n for (const match of sliceMatches) {\n const proj: VectorMatch = {}\n if (plan.projection.id) {\n proj.id = match.id\n }\n if (plan.projection.vector && match.values) {\n proj.vector = match.values\n }\n if (plan.projection.document && match.metadata) {\n proj.document = match.metadata.__document\n }\n if (plan.projection.metadata && match.metadata) {\n const meta: VectorMetadata = {}\n for (const key in match.metadata) {\n if (key !== '__document') {\n meta[key] = match.metadata[key]\n }\n }\n proj.metadata = meta\n }\n if (plan.near) {\n proj.score = normalizeScore(match.score!, metric, 'similarity')\n }\n matches.push(proj)\n }\n return matches\n } else {\n // Filter-scan: Pinecone v7 listPaginated filter is broken, so we get all records\n // and filter client-side. First, get all IDs without filter, then fetch.\n let page: any = { next: null }\n const ids: string[] = []\n do {\n // Get all IDs without filter - Pinecone v7 listPaginated without filter works\n const listRes = await this.#index!.listPaginated({\n limit: 100,\n startingToken: page.next,\n namespace: physicalNs,\n })\n if (listRes.vectors) {\n ids.push(...listRes.vectors.map((v: any) => v.id))\n }\n page.next = listRes.pagination?.next\n } while (page.next)\n if (ids.length === 0) return []\n\n // Fetch all records and filter client-side\n const allRecords: any = {}\n for (let i = 0; i < ids.length; i += 100) {\n const batch = ids.slice(i, i + 100)\n const fetchRes = await ns.fetch({ ids: batch })\n if (fetchRes && fetchRes.records) {\n for (const id in fetchRes.records) {\n allRecords[id] = fetchRes.records[id]\n }\n }\n }\n const matches: VectorMatch[] = []\n for (const id in allRecords) {\n const record = allRecords[id]\n if (record.metadata) {\n const evalMeta: VectorMetadata = {}\n for (const key in record.metadata) {\n if (key !== '__document') {\n evalMeta[key] = record.metadata[key]\n }\n }\n // If no filter, include all records; otherwise evaluate the filter\n if (!plan.filter || evaluateFilter(plan.filter, evalMeta)) {\n const proj: VectorMatch = {}\n if (plan.projection.id) {\n proj.id = id\n }\n if (plan.projection.vector && record.values) {\n proj.vector = record.values\n }\n if (plan.projection.document && record.metadata) {\n proj.document = record.metadata.__document\n }\n if (plan.projection.metadata && record.metadata) {\n const meta: VectorMetadata = {}\n for (const key in record.metadata) {\n if (key !== '__document') {\n meta[key] = record.metadata[key]\n }\n }\n proj.metadata = meta as VectorMetadata\n }\n matches.push(proj)\n }\n }\n }\n return matches.slice(offset, offset + plan.topK)\n }\n }\n async executeDelete(plan: DeletePlan): Promise<void> {\n await this.connect()\n const collection = plan.collection\n const physicalNs = this.#ns(collection)\n const ns = this.#index!.namespace(physicalNs)\n const mode = this.#consistencyMode(plan.consistency)\n try {\n if (plan.ids && plan.ids.length > 0) {\n await ns.deleteMany({ ids: plan.ids })\n // Call settle after delete-by-ids to wait for absence\n await this.#settle(ns, collection, { absent: plan.ids }, 'delete by id', mode)\n } else if (plan.filter) {\n // Pinecone v7 listPaginated filter is broken, and Pinecone doesn't support\n // filtering by record ID. Get all IDs and filter client-side.\n let page: any = { next: null }\n const ids: string[] = []\n do {\n const listRes = await this.#index!.listPaginated({\n limit: 1000,\n startingToken: page.next,\n namespace: physicalNs,\n })\n if (listRes.vectors) {\n ids.push(...listRes.vectors.map((v: any) => v.id))\n }\n page.next = listRes.pagination?.next\n } while (page.next)\n\n // For Pinecone, we can only filter by metadata fields.\n // If the filter is on 'id', filter client-side without metadata.\n // Otherwise, fetch records and filter by metadata.\n const deleteIds: string[] = []\n\n // Check if filter targets 'id' field (Pinecone record ID)\n const filterTargetsId = plan.filter ? isFilterOnId(plan.filter) : false\n\n if (filterTargetsId) {\n // Filter by record ID directly\n for (const id of ids) {\n if (evaluateFilter(plan.filter, { id })) {\n deleteIds.push(id)\n }\n }\n } else {\n // Filter by metadata\n for (const id of ids) {\n const res = await ns.fetch({ ids: [id] })\n const record = res.records[id]\n if (record && record.metadata) {\n const evalMeta: VectorMetadata = {}\n for (const key in record.metadata) {\n if (key !== '__document') {\n evalMeta[key] = record.metadata[key]\n }\n }\n if (evaluateFilter(plan.filter, evalMeta)) {\n deleteIds.push(id)\n }\n }\n }\n }\n\n if (deleteIds.length > 0) {\n await ns.deleteMany({ ids: deleteIds })\n // Call settle after delete-by-filter to wait for absence\n await this.#settle(ns, collection, { absent: deleteIds }, 'delete by filter', mode)\n }\n } else {\n // Delete all via list+deleteMany pattern (no more deleteAll + settleEmpty)\n let page: any = { next: null }\n const allIds: string[] = []\n do {\n const lr = await this.#index!.listPaginated({\n namespace: physicalNs,\n limit: 1000,\n startingToken: page.next,\n })\n if (lr.vectors) allIds.push(...lr.vectors.map((v: any) => v.id))\n page.next = lr.pagination?.next\n } while (page.next)\n\n if (allIds.length > 0) {\n await ns.deleteMany({ ids: allIds })\n }\n // Settle on absence\n await this.#settle(ns, collection, { absent: allIds }, 'delete all', mode)\n }\n } catch (err) {\n // Re-throw consistency timeout directly (don't swallow)\n if (\n isInstanceOf(err, 'E_VECTOR_STORE_CONSISTENCY_TIMEOUT', E_VECTOR_STORE_CONSISTENCY_TIMEOUT)\n )\n throw err\n throw new E_VECTOR_STORE_DELETE_FAILED([String(err)])\n }\n }\n}\n\n// Check if a filter targets the 'id' field (Pinecone record ID)\nconst isFilterOnId = (filter?: VectorFilter): boolean => {\n if (!filter) return false\n if (isRawFilter(filter)) {\n return false\n }\n if (isFilterCondition(filter)) {\n return filter.field === 'id'\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and && and.length > 0) {\n return and.some((f) => isFilterOnId(f))\n }\n if (or && or.length > 0) {\n return or.some((f) => isFilterOnId(f))\n }\n if (not) {\n return isFilterOnId(not)\n }\n }\n return false\n}\n\nexport const translatePineconeFilter = (\n filter?: VectorFilter\n): Record<string, unknown> | undefined => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'pinecone') {\n return filter.$raw as Record<string, unknown>\n }\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['pinecone', String(filter.$dialect)])\n }\n if (isFilterCondition(filter)) {\n const { field, op, value } = filter\n if (value === undefined) {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['pinecone', op])\n }\n if (op === 'eq') {\n return { [field]: { $eq: value } }\n }\n if (op === 'ne') {\n return { [field]: { $ne: value } }\n }\n if (op === 'gt') {\n return { [field]: { $gt: value } }\n }\n if (op === 'gte') {\n return { [field]: { $gte: value } }\n }\n if (op === 'lt') {\n return { [field]: { $lt: value } }\n }\n if (op === 'lte') {\n return { [field]: { $lte: value } }\n }\n if (op === 'in') {\n return { [field]: { $in: value } }\n }\n if (op === 'nin') {\n return { [field]: { $nin: value } }\n }\n if (op === 'exists') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['pinecone', op])\n }\n if (op === 'contains') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['pinecone', op])\n }\n return undefined\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((f) => translatePineconeFilter(f) as Record<string, unknown>)\n .filter((c) => c !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return { $and: children }\n }\n if (or) {\n const children = or\n .map((f) => translatePineconeFilter(f) as Record<string, unknown>)\n .filter((c) => c !== undefined)\n if (children.length === 0) return undefined\n if (children.length === 1) return children[0]\n return { $or: children }\n }\n if (not) {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['pinecone', 'not'])\n }\n return undefined\n }\n return undefined\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiled query plans for the vector storage battery.
|
|
3
|
+
*
|
|
4
|
+
* @module @nhtio/adk/batteries/vector/plan
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* This module defines the neutral, pure-type plans that the query builder compiles to.
|
|
8
|
+
* Adapters consume these plans to perform vector operations without runtime logic here.
|
|
9
|
+
*/
|
|
10
|
+
import type { VectorFilter } from "./filters";
|
|
11
|
+
import type { VectorRecord, DistanceMetric, VectorConsistency } from "./types";
|
|
12
|
+
/** Normalized projection from .select(); REQUIRED on reads — every column opt-in, id included. */
|
|
13
|
+
export interface Projection {
|
|
14
|
+
id: boolean;
|
|
15
|
+
vector: false | {
|
|
16
|
+
name?: string;
|
|
17
|
+
};
|
|
18
|
+
document: false | {
|
|
19
|
+
field?: string;
|
|
20
|
+
};
|
|
21
|
+
metadata: false | {
|
|
22
|
+
fields?: string[];
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface SearchPlan {
|
|
26
|
+
collection: string;
|
|
27
|
+
near?: {
|
|
28
|
+
vector: number[];
|
|
29
|
+
} | {
|
|
30
|
+
serverText: string;
|
|
31
|
+
} | {
|
|
32
|
+
id: string;
|
|
33
|
+
};
|
|
34
|
+
filter?: VectorFilter;
|
|
35
|
+
topK: number;
|
|
36
|
+
offset?: number;
|
|
37
|
+
projection: Projection;
|
|
38
|
+
}
|
|
39
|
+
export interface UpsertPlan {
|
|
40
|
+
collection: string;
|
|
41
|
+
records: VectorRecord[];
|
|
42
|
+
/** Per-operation read-after-write override from `.consistency()`; absent = use store/adapter default. */
|
|
43
|
+
consistency?: VectorConsistency;
|
|
44
|
+
}
|
|
45
|
+
export interface DeletePlan {
|
|
46
|
+
collection: string;
|
|
47
|
+
ids?: string[];
|
|
48
|
+
filter?: VectorFilter;
|
|
49
|
+
/** Per-operation read-after-write override from `.consistency()`; absent = use store/adapter default. */
|
|
50
|
+
consistency?: VectorConsistency;
|
|
51
|
+
}
|
|
52
|
+
export interface CollectionFieldSpec {
|
|
53
|
+
name: string;
|
|
54
|
+
type: 'string' | 'integer' | 'number' | 'boolean' | 'json';
|
|
55
|
+
index?: boolean;
|
|
56
|
+
nullable?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface CollectionSpec {
|
|
59
|
+
collection: string;
|
|
60
|
+
vector: {
|
|
61
|
+
dimensions: number;
|
|
62
|
+
metric: DistanceMetric;
|
|
63
|
+
};
|
|
64
|
+
fields: CollectionFieldSpec[];
|
|
65
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @nhtio/adk/batteries/vector/qdrant
|
|
3
|
+
*/
|
|
4
|
+
import { BaseVectorStore } from "../contract";
|
|
5
|
+
import type { VectorFilter } from "../filters";
|
|
6
|
+
import type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from "../plan";
|
|
7
|
+
import type { VectorMatch, VectorStoreCapabilities, BaseVectorStoreOptions } from "../types";
|
|
8
|
+
export declare const translateQdrantFilter: (filter?: VectorFilter) => Record<string, unknown> | undefined;
|
|
9
|
+
export interface QdrantVectorStoreOptions extends BaseVectorStoreOptions {
|
|
10
|
+
connection?: {
|
|
11
|
+
url?: string;
|
|
12
|
+
host?: string;
|
|
13
|
+
port?: number;
|
|
14
|
+
apiKey?: string;
|
|
15
|
+
https?: boolean;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare class QdrantVectorStore extends BaseVectorStore {
|
|
19
|
+
#private;
|
|
20
|
+
readonly capabilities: VectorStoreCapabilities;
|
|
21
|
+
static isAvailable(): boolean;
|
|
22
|
+
isAvailable(): boolean;
|
|
23
|
+
connect(): Promise<void>;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void>;
|
|
26
|
+
dropCollection(collection: string, ifExists: boolean): Promise<void>;
|
|
27
|
+
hasCollection(collection: string): Promise<boolean>;
|
|
28
|
+
renameCollection(_from: string, _to: string): Promise<void>;
|
|
29
|
+
executeUpsert(plan: UpsertPlan): Promise<void>;
|
|
30
|
+
executeSearch(plan: SearchPlan): Promise<VectorMatch[]>;
|
|
31
|
+
executeDelete(plan: DeletePlan): Promise<void>;
|
|
32
|
+
projectHit(hit: any, projection: any, metric: string): VectorMatch;
|
|
33
|
+
translateQdrantFilter(filter?: VectorFilter): Record<string, unknown> | undefined;
|
|
34
|
+
}
|