@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.
Files changed (358) hide show
  1. package/CHANGELOG.md +261 -0
  2. package/adk-mcp.mjs +1 -1
  3. package/batteries/embeddings/openai/adapter.cjs +1 -1
  4. package/batteries/embeddings/openai/adapter.mjs +1 -1
  5. package/batteries/embeddings/webllm/adapter.cjs +1 -1
  6. package/batteries/embeddings/webllm/adapter.mjs +1 -1
  7. package/batteries/index.d.ts +1 -0
  8. package/batteries/llm/openai_chat_completions/adapter.cjs +6 -6
  9. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
  10. package/batteries/llm/openai_chat_completions/adapter.mjs +6 -6
  11. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
  12. package/batteries/llm/openai_chat_completions/helpers.cjs +2 -2
  13. package/batteries/llm/openai_chat_completions/helpers.mjs +2 -2
  14. package/batteries/llm/openai_chat_completions/validation.cjs +2 -2
  15. package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
  16. package/batteries/llm/openai_chat_completions/validation.mjs +2 -2
  17. package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
  18. package/batteries/llm/webllm_chat_completions/adapter.cjs +6 -6
  19. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
  20. package/batteries/llm/webllm_chat_completions/adapter.mjs +6 -6
  21. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
  22. package/batteries/llm/webllm_chat_completions/validation.cjs +2 -2
  23. package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
  24. package/batteries/llm/webllm_chat_completions/validation.mjs +2 -2
  25. package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
  26. package/batteries/storage/flydrive.cjs +1 -1
  27. package/batteries/storage/flydrive.mjs +2 -2
  28. package/batteries/storage/in_memory.cjs +1 -1
  29. package/batteries/storage/in_memory.mjs +1 -1
  30. package/batteries/storage/opfs.cjs +1 -1
  31. package/batteries/storage/opfs.mjs +1 -1
  32. package/batteries/tools/color.cjs +2 -2
  33. package/batteries/tools/color.mjs +2 -2
  34. package/batteries/tools/comparison.cjs +3 -3
  35. package/batteries/tools/comparison.mjs +3 -3
  36. package/batteries/tools/data_structure.cjs +3 -3
  37. package/batteries/tools/data_structure.mjs +3 -3
  38. package/batteries/tools/datetime_extended.cjs +2 -2
  39. package/batteries/tools/datetime_extended.mjs +2 -2
  40. package/batteries/tools/datetime_math.cjs +2 -2
  41. package/batteries/tools/datetime_math.mjs +2 -2
  42. package/batteries/tools/encoding.cjs +3 -3
  43. package/batteries/tools/encoding.mjs +3 -3
  44. package/batteries/tools/formatting.cjs +3 -3
  45. package/batteries/tools/formatting.mjs +3 -3
  46. package/batteries/tools/geo_basics.cjs +2 -2
  47. package/batteries/tools/geo_basics.mjs +2 -2
  48. package/batteries/tools/math/index.d.ts +16 -5
  49. package/batteries/tools/math.cjs +340 -22
  50. package/batteries/tools/math.cjs.map +1 -1
  51. package/batteries/tools/math.mjs +338 -21
  52. package/batteries/tools/math.mjs.map +1 -1
  53. package/batteries/tools/memory.cjs +5 -5
  54. package/batteries/tools/memory.mjs +5 -5
  55. package/batteries/tools/parsing.cjs +4 -4
  56. package/batteries/tools/parsing.mjs +4 -4
  57. package/batteries/tools/retrievables.cjs +4 -4
  58. package/batteries/tools/retrievables.mjs +4 -4
  59. package/batteries/tools/standing_instructions.cjs +4 -4
  60. package/batteries/tools/standing_instructions.mjs +4 -4
  61. package/batteries/tools/statistics.cjs +4 -4
  62. package/batteries/tools/statistics.mjs +4 -4
  63. package/batteries/tools/string_processing.cjs +3 -3
  64. package/batteries/tools/string_processing.mjs +3 -3
  65. package/batteries/tools/structured_data.cjs +3 -3
  66. package/batteries/tools/structured_data.mjs +3 -3
  67. package/batteries/tools/text_analysis.cjs +3 -3
  68. package/batteries/tools/text_analysis.mjs +3 -3
  69. package/batteries/tools/text_comparison.cjs +2 -2
  70. package/batteries/tools/text_comparison.mjs +2 -2
  71. package/batteries/tools/time.cjs +2 -2
  72. package/batteries/tools/time.mjs +2 -2
  73. package/batteries/tools/unit_conversion.cjs +2 -2
  74. package/batteries/tools/unit_conversion.mjs +2 -2
  75. package/batteries/vector/arangodb/index.d.ts +38 -0
  76. package/batteries/vector/arangodb.cjs +257 -0
  77. package/batteries/vector/arangodb.cjs.map +1 -0
  78. package/batteries/vector/arangodb.mjs +255 -0
  79. package/batteries/vector/arangodb.mjs.map +1 -0
  80. package/batteries/vector/builder.cjs +297 -0
  81. package/batteries/vector/builder.cjs.map +1 -0
  82. package/batteries/vector/builder.d.ts +87 -0
  83. package/batteries/vector/builder.mjs +294 -0
  84. package/batteries/vector/builder.mjs.map +1 -0
  85. package/batteries/vector/chroma/index.d.ts +32 -0
  86. package/batteries/vector/chroma.cjs +305 -0
  87. package/batteries/vector/chroma.cjs.map +1 -0
  88. package/batteries/vector/chroma.mjs +302 -0
  89. package/batteries/vector/chroma.mjs.map +1 -0
  90. package/batteries/vector/clickhouse/index.d.ts +39 -0
  91. package/batteries/vector/clickhouse.cjs +246 -0
  92. package/batteries/vector/clickhouse.cjs.map +1 -0
  93. package/batteries/vector/clickhouse.mjs +244 -0
  94. package/batteries/vector/clickhouse.mjs.map +1 -0
  95. package/batteries/vector/cloudflare/index.d.ts +43 -0
  96. package/batteries/vector/cloudflare.cjs +397 -0
  97. package/batteries/vector/cloudflare.cjs.map +1 -0
  98. package/batteries/vector/cloudflare.mjs +395 -0
  99. package/batteries/vector/cloudflare.mjs.map +1 -0
  100. package/batteries/vector/conformance/index.d.ts +15 -0
  101. package/batteries/vector/conformance.cjs +209 -0
  102. package/batteries/vector/conformance.cjs.map +1 -0
  103. package/batteries/vector/conformance.mjs +205 -0
  104. package/batteries/vector/conformance.mjs.map +1 -0
  105. package/batteries/vector/contract.cjs +42 -0
  106. package/batteries/vector/contract.cjs.map +1 -0
  107. package/batteries/vector/contract.d.ts +39 -0
  108. package/batteries/vector/contract.mjs +40 -0
  109. package/batteries/vector/contract.mjs.map +1 -0
  110. package/batteries/vector/couchbase/index.d.ts +49 -0
  111. package/batteries/vector/couchbase.cjs +401 -0
  112. package/batteries/vector/couchbase.cjs.map +1 -0
  113. package/batteries/vector/couchbase.mjs +399 -0
  114. package/batteries/vector/couchbase.mjs.map +1 -0
  115. package/batteries/vector/duckdb/index.d.ts +33 -0
  116. package/batteries/vector/duckdb.cjs +218 -0
  117. package/batteries/vector/duckdb.cjs.map +1 -0
  118. package/batteries/vector/duckdb.mjs +216 -0
  119. package/batteries/vector/duckdb.mjs.map +1 -0
  120. package/batteries/vector/elasticsearch/index.d.ts +43 -0
  121. package/batteries/vector/elasticsearch.cjs +306 -0
  122. package/batteries/vector/elasticsearch.cjs.map +1 -0
  123. package/batteries/vector/elasticsearch.mjs +303 -0
  124. package/batteries/vector/elasticsearch.mjs.map +1 -0
  125. package/batteries/vector/exceptions.cjs +126 -0
  126. package/batteries/vector/exceptions.cjs.map +1 -0
  127. package/batteries/vector/exceptions.d.ts +142 -0
  128. package/batteries/vector/exceptions.mjs +107 -0
  129. package/batteries/vector/exceptions.mjs.map +1 -0
  130. package/batteries/vector/factory.cjs +28 -0
  131. package/batteries/vector/factory.cjs.map +1 -0
  132. package/batteries/vector/factory.d.ts +38 -0
  133. package/batteries/vector/factory.mjs +25 -0
  134. package/batteries/vector/factory.mjs.map +1 -0
  135. package/batteries/vector/filters.cjs +107 -0
  136. package/batteries/vector/filters.cjs.map +1 -0
  137. package/batteries/vector/filters.d.ts +34 -0
  138. package/batteries/vector/filters.mjs +99 -0
  139. package/batteries/vector/filters.mjs.map +1 -0
  140. package/batteries/vector/helpers.cjs +23 -0
  141. package/batteries/vector/helpers.cjs.map +1 -0
  142. package/batteries/vector/helpers.d.ts +12 -0
  143. package/batteries/vector/helpers.mjs +17 -0
  144. package/batteries/vector/helpers.mjs.map +1 -0
  145. package/batteries/vector/hnswlib/index.d.ts +35 -0
  146. package/batteries/vector/hnswlib.cjs +237 -0
  147. package/batteries/vector/hnswlib.cjs.map +1 -0
  148. package/batteries/vector/hnswlib.mjs +235 -0
  149. package/batteries/vector/hnswlib.mjs.map +1 -0
  150. package/batteries/vector/in_memory/index.d.ts +23 -0
  151. package/batteries/vector/in_memory.cjs +178 -0
  152. package/batteries/vector/in_memory.cjs.map +1 -0
  153. package/batteries/vector/in_memory.mjs +176 -0
  154. package/batteries/vector/in_memory.mjs.map +1 -0
  155. package/batteries/vector/index.d.ts +18 -0
  156. package/batteries/vector/lancedb/index.d.ts +34 -0
  157. package/batteries/vector/lancedb.cjs +224 -0
  158. package/batteries/vector/lancedb.cjs.map +1 -0
  159. package/batteries/vector/lancedb.mjs +222 -0
  160. package/batteries/vector/lancedb.mjs.map +1 -0
  161. package/batteries/vector/mariadb/index.d.ts +39 -0
  162. package/batteries/vector/mariadb.cjs +228 -0
  163. package/batteries/vector/mariadb.cjs.map +1 -0
  164. package/batteries/vector/mariadb.mjs +226 -0
  165. package/batteries/vector/mariadb.mjs.map +1 -0
  166. package/batteries/vector/meilisearch/index.d.ts +36 -0
  167. package/batteries/vector/meilisearch.cjs +242 -0
  168. package/batteries/vector/meilisearch.cjs.map +1 -0
  169. package/batteries/vector/meilisearch.mjs +240 -0
  170. package/batteries/vector/meilisearch.mjs.map +1 -0
  171. package/batteries/vector/migrate.cjs +54 -0
  172. package/batteries/vector/migrate.cjs.map +1 -0
  173. package/batteries/vector/migrate.d.ts +30 -0
  174. package/batteries/vector/migrate.mjs +52 -0
  175. package/batteries/vector/migrate.mjs.map +1 -0
  176. package/batteries/vector/milvus/index.d.ts +35 -0
  177. package/batteries/vector/milvus.cjs +357 -0
  178. package/batteries/vector/milvus.cjs.map +1 -0
  179. package/batteries/vector/milvus.mjs +354 -0
  180. package/batteries/vector/milvus.mjs.map +1 -0
  181. package/batteries/vector/mongodb/index.d.ts +46 -0
  182. package/batteries/vector/mongodb.cjs +270 -0
  183. package/batteries/vector/mongodb.cjs.map +1 -0
  184. package/batteries/vector/mongodb.mjs +268 -0
  185. package/batteries/vector/mongodb.mjs.map +1 -0
  186. package/batteries/vector/neo4j/index.d.ts +38 -0
  187. package/batteries/vector/neo4j.cjs +231 -0
  188. package/batteries/vector/neo4j.cjs.map +1 -0
  189. package/batteries/vector/neo4j.mjs +229 -0
  190. package/batteries/vector/neo4j.mjs.map +1 -0
  191. package/batteries/vector/opensearch/index.d.ts +46 -0
  192. package/batteries/vector/opensearch.cjs +316 -0
  193. package/batteries/vector/opensearch.cjs.map +1 -0
  194. package/batteries/vector/opensearch.mjs +313 -0
  195. package/batteries/vector/opensearch.mjs.map +1 -0
  196. package/batteries/vector/oracle23ai/index.d.ts +45 -0
  197. package/batteries/vector/oracle23ai.cjs +340 -0
  198. package/batteries/vector/oracle23ai.cjs.map +1 -0
  199. package/batteries/vector/oracle23ai.mjs +338 -0
  200. package/batteries/vector/oracle23ai.mjs.map +1 -0
  201. package/batteries/vector/orama/index.d.ts +23 -0
  202. package/batteries/vector/orama.cjs +272 -0
  203. package/batteries/vector/orama.cjs.map +1 -0
  204. package/batteries/vector/orama.mjs +270 -0
  205. package/batteries/vector/orama.mjs.map +1 -0
  206. package/batteries/vector/pgvector/index.d.ts +43 -0
  207. package/batteries/vector/pgvector.cjs +411 -0
  208. package/batteries/vector/pgvector.cjs.map +1 -0
  209. package/batteries/vector/pgvector.mjs +408 -0
  210. package/batteries/vector/pgvector.mjs.map +1 -0
  211. package/batteries/vector/pinecone/index.d.ts +38 -0
  212. package/batteries/vector/pinecone.cjs +415 -0
  213. package/batteries/vector/pinecone.cjs.map +1 -0
  214. package/batteries/vector/pinecone.mjs +412 -0
  215. package/batteries/vector/pinecone.mjs.map +1 -0
  216. package/batteries/vector/plan.cjs +2 -0
  217. package/batteries/vector/plan.d.ts +65 -0
  218. package/batteries/vector/plan.mjs +0 -0
  219. package/batteries/vector/qdrant/index.d.ts +34 -0
  220. package/batteries/vector/qdrant.cjs +286 -0
  221. package/batteries/vector/qdrant.cjs.map +1 -0
  222. package/batteries/vector/qdrant.mjs +284 -0
  223. package/batteries/vector/qdrant.mjs.map +1 -0
  224. package/batteries/vector/redis/index.d.ts +44 -0
  225. package/batteries/vector/redis.cjs +391 -0
  226. package/batteries/vector/redis.cjs.map +1 -0
  227. package/batteries/vector/redis.mjs +388 -0
  228. package/batteries/vector/redis.mjs.map +1 -0
  229. package/batteries/vector/retrievable.cjs +69 -0
  230. package/batteries/vector/retrievable.cjs.map +1 -0
  231. package/batteries/vector/retrievable.mjs +67 -0
  232. package/batteries/vector/retrievable.mjs.map +1 -0
  233. package/batteries/vector/retrievable_glue.d.ts +24 -0
  234. package/batteries/vector/s3vectors/index.d.ts +52 -0
  235. package/batteries/vector/s3vectors.cjs +438 -0
  236. package/batteries/vector/s3vectors.cjs.map +1 -0
  237. package/batteries/vector/s3vectors.mjs +436 -0
  238. package/batteries/vector/s3vectors.mjs.map +1 -0
  239. package/batteries/vector/schema.cjs +96 -0
  240. package/batteries/vector/schema.cjs.map +1 -0
  241. package/batteries/vector/schema.d.ts +40 -0
  242. package/batteries/vector/schema.mjs +93 -0
  243. package/batteries/vector/schema.mjs.map +1 -0
  244. package/batteries/vector/solr/index.d.ts +36 -0
  245. package/batteries/vector/solr.cjs +230 -0
  246. package/batteries/vector/solr.cjs.map +1 -0
  247. package/batteries/vector/solr.mjs +228 -0
  248. package/batteries/vector/solr.mjs.map +1 -0
  249. package/batteries/vector/sqlite_vec/index.d.ts +30 -0
  250. package/batteries/vector/sqlite_vec.cjs +318 -0
  251. package/batteries/vector/sqlite_vec.cjs.map +1 -0
  252. package/batteries/vector/sqlite_vec.mjs +316 -0
  253. package/batteries/vector/sqlite_vec.mjs.map +1 -0
  254. package/batteries/vector/surrealdb/index.d.ts +37 -0
  255. package/batteries/vector/surrealdb.cjs +230 -0
  256. package/batteries/vector/surrealdb.cjs.map +1 -0
  257. package/batteries/vector/surrealdb.mjs +228 -0
  258. package/batteries/vector/surrealdb.mjs.map +1 -0
  259. package/batteries/vector/types.cjs +2 -0
  260. package/batteries/vector/types.d.ts +100 -0
  261. package/batteries/vector/types.mjs +0 -0
  262. package/batteries/vector/typesense/index.d.ts +38 -0
  263. package/batteries/vector/typesense.cjs +272 -0
  264. package/batteries/vector/typesense.cjs.map +1 -0
  265. package/batteries/vector/typesense.mjs +270 -0
  266. package/batteries/vector/typesense.mjs.map +1 -0
  267. package/batteries/vector/validation.cjs +90 -0
  268. package/batteries/vector/validation.cjs.map +1 -0
  269. package/batteries/vector/validation.d.ts +18 -0
  270. package/batteries/vector/validation.mjs +83 -0
  271. package/batteries/vector/validation.mjs.map +1 -0
  272. package/batteries/vector/vector_store_constructor.cjs +56 -0
  273. package/batteries/vector/vector_store_constructor.cjs.map +1 -0
  274. package/batteries/vector/vector_store_constructor.d.ts +30 -0
  275. package/batteries/vector/vector_store_constructor.mjs +53 -0
  276. package/batteries/vector/vector_store_constructor.mjs.map +1 -0
  277. package/batteries/vector/vespa/index.d.ts +39 -0
  278. package/batteries/vector/vespa.cjs +423 -0
  279. package/batteries/vector/vespa.cjs.map +1 -0
  280. package/batteries/vector/vespa.mjs +421 -0
  281. package/batteries/vector/vespa.mjs.map +1 -0
  282. package/batteries/vector/weaviate/index.d.ts +57 -0
  283. package/batteries/vector/weaviate.cjs +325 -0
  284. package/batteries/vector/weaviate.cjs.map +1 -0
  285. package/batteries/vector/weaviate.mjs +322 -0
  286. package/batteries/vector/weaviate.mjs.map +1 -0
  287. package/batteries/vector.cjs +63 -0
  288. package/batteries/vector.mjs +14 -0
  289. package/batteries.cjs +62 -0
  290. package/batteries.mjs +15 -1
  291. package/{chunk-kRvK8_k2.mjs → chunk-Bpcn9VDT.mjs} +5 -1
  292. package/{common-lMrnzoyn.mjs → common-BT0nfCi9.mjs} +8 -8
  293. package/{common-lMrnzoyn.mjs.map → common-BT0nfCi9.mjs.map} +1 -1
  294. package/{common-D_e5zYsG.js → common-Cj8TaQ9U.js} +8 -8
  295. package/{common-D_e5zYsG.js.map → common-Cj8TaQ9U.js.map} +1 -1
  296. package/common.cjs +7 -7
  297. package/common.mjs +7 -7
  298. package/{dispatch_runner-CpuyATj1.js → dispatch_runner-BHBNupqp.js} +2 -2
  299. package/dispatch_runner-BHBNupqp.js.map +1 -0
  300. package/{dispatch_runner-CDF3X0nv.mjs → dispatch_runner-DPcS7Y_M.mjs} +2 -2
  301. package/dispatch_runner-DPcS7Y_M.mjs.map +1 -0
  302. package/dispatch_runner.cjs +1 -1
  303. package/dispatch_runner.mjs +1 -1
  304. package/forge.cjs +4 -4
  305. package/forge.mjs +4 -4
  306. package/guards.cjs +8 -8
  307. package/guards.mjs +8 -8
  308. package/index.cjs +12 -12
  309. package/index.mjs +12 -12
  310. package/lib/classes/tool_registry.d.ts +70 -4
  311. package/mcp/adk-docs-corpus.json +1 -1
  312. package/package.json +424 -88
  313. package/skills/adk-assembly/SKILL.md +2 -2
  314. package/{spooled_artifact-B8gIIn9h.js → spooled_artifact-BTq6Nzfy.js} +4 -4
  315. package/spooled_artifact-BTq6Nzfy.js.map +1 -0
  316. package/{spooled_artifact-CWoKUDEm.mjs → spooled_artifact-CHoZgWwI.mjs} +4 -4
  317. package/spooled_artifact-CHoZgWwI.mjs.map +1 -0
  318. package/spooled_artifact.cjs +2 -2
  319. package/spooled_artifact.mjs +2 -2
  320. package/{spooled_markdown_artifact-DQX0RCdI.js → spooled_markdown_artifact-CALSDxIx.js} +3 -3
  321. package/{spooled_markdown_artifact-DQX0RCdI.js.map → spooled_markdown_artifact-CALSDxIx.js.map} +1 -1
  322. package/{spooled_markdown_artifact-CNle4jXN.mjs → spooled_markdown_artifact-Ci5UL7l4.mjs} +3 -3
  323. package/{spooled_markdown_artifact-CNle4jXN.mjs.map → spooled_markdown_artifact-Ci5UL7l4.mjs.map} +1 -1
  324. package/src/types/evaluatex.d.ts +31 -0
  325. package/{thought-BD6AkkOr.js → thought-BbwhJ1wb.js} +4 -4
  326. package/thought-BbwhJ1wb.js.map +1 -0
  327. package/{thought-B_P8LiB6.mjs → thought-D34QQZZ9.mjs} +4 -4
  328. package/thought-D34QQZZ9.mjs.map +1 -0
  329. package/{tool-CRZSUcdP.mjs → tool-CMhaDRNd.mjs} +3 -3
  330. package/tool-CMhaDRNd.mjs.map +1 -0
  331. package/{tool-CX9vNHAw.js → tool-CVyZkFC7.js} +3 -3
  332. package/tool-CVyZkFC7.js.map +1 -0
  333. package/{tool_call-BUeMuCc6.mjs → tool_call-CV5qVNlb.mjs} +3 -3
  334. package/{tool_call-BUeMuCc6.mjs.map → tool_call-CV5qVNlb.mjs.map} +1 -1
  335. package/{tool_call--7ti-frB.js → tool_call-Db68hB7y.js} +3 -3
  336. package/{tool_call--7ti-frB.js.map → tool_call-Db68hB7y.js.map} +1 -1
  337. package/{tool_registry-BGHg6KTq.mjs → tool_registry-D1pSSlsd.mjs} +109 -22
  338. package/tool_registry-D1pSSlsd.mjs.map +1 -0
  339. package/{tool_registry-CtCQ4Xoz.js → tool_registry-DYUYqXvo.js} +109 -22
  340. package/tool_registry-DYUYqXvo.js.map +1 -0
  341. package/{turn_runner-BJTtAORU.js → turn_runner-DqWHNP80.js} +5 -5
  342. package/turn_runner-DqWHNP80.js.map +1 -0
  343. package/{turn_runner-C02LZHjt.mjs → turn_runner-fg1Wc3dK.mjs} +5 -5
  344. package/turn_runner-fg1Wc3dK.mjs.map +1 -0
  345. package/turn_runner.cjs +1 -1
  346. package/turn_runner.mjs +1 -1
  347. package/dispatch_runner-CDF3X0nv.mjs.map +0 -1
  348. package/dispatch_runner-CpuyATj1.js.map +0 -1
  349. package/spooled_artifact-B8gIIn9h.js.map +0 -1
  350. package/spooled_artifact-CWoKUDEm.mjs.map +0 -1
  351. package/thought-BD6AkkOr.js.map +0 -1
  352. package/thought-B_P8LiB6.mjs.map +0 -1
  353. package/tool-CRZSUcdP.mjs.map +0 -1
  354. package/tool-CX9vNHAw.js.map +0 -1
  355. package/tool_registry-BGHg6KTq.mjs.map +0 -1
  356. package/tool_registry-CtCQ4Xoz.js.map +0 -1
  357. package/turn_runner-BJTtAORU.js.map +0 -1
  358. package/turn_runner-C02LZHjt.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solr.mjs","names":["#opts","#base","#core","#post","#get","#dims","#escape","#parseMeta","#project"],"sources":["../../../src/batteries/vector/solr/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/solr\n *\n * Apache Solr adapter (dense vector / kNN query parser, Solr 9+). A logical collection maps to a\n * Solr core; the adapter ensures a `DenseVectorField` (`vec`) plus `document`/`metadata` string\n * fields exist in the core schema, then uses the `{!knn f=vec topK=N}[...]` parser for search.\n * Score is Solr's cosine similarity ([0,1]). Metadata is a JSON string field filtered with the\n * neutral filter tree's JS reference evaluator for cross-adapter parity.\n *\n * No typed driver — Solr is plain HTTP/JSON, so this uses `fetch` (zero extra dependency). The\n * target core must already exist (e.g. `solr-precreate <core>` / the Core Admin API); the adapter\n * does not create cores at runtime, only their schema fields. `collection` is the core name.\n */\n\nimport { evaluateFilter } from '../filters'\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\nexport interface SolrVectorStoreOptions extends BaseVectorStoreOptions {\n connection: { url: string }\n}\n\nconst simFn = (metric: DistanceMetric): string =>\n metric === 'euclidean' ? 'euclidean' : metric === 'dot' ? 'dot_product' : 'cosine'\n\nexport class SolrVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: false,\n rawSql: false,\n builtInEncoding: false,\n // Writes are committed (commit=true) before resolving, so they're visible to the next query.\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #base: string | null = null\n #dims: Map<string, number> = new Map()\n\n get #opts(): SolrVectorStoreOptions {\n return this.options as SolrVectorStoreOptions\n }\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n isAvailable(): boolean {\n return typeof process !== 'undefined' && typeof fetch === 'function'\n }\n\n async connect(): Promise<void> {\n if (this.#base) return\n const url = this.#opts.connection?.url\n if (!url) throw new E_VECTOR_STORE_CONNECTION_FAILED(['Solr requires connection.url'])\n this.#base = url.replace(/\\/$/, '')\n }\n\n async close(): Promise<void> {\n this.#base = null\n }\n\n async #core(collection: string): Promise<string> {\n if (!this.#base) await this.connect()\n return `${this.#base}/solr/${encodeURIComponent(collection)}`\n }\n\n async #post(coreUrl: string, path: string, body: unknown): Promise<any> {\n const res = await fetch(coreUrl + path, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n const json = await res.json().catch(() => ({}))\n if (!res.ok || json.error) {\n throw new Error(json.error?.msg ?? `HTTP ${res.status}`)\n }\n return json\n }\n\n async #get(coreUrl: string, path: string): Promise<any> {\n const res = await fetch(coreUrl + path)\n const json = await res.json().catch(() => ({}))\n if (!res.ok || json.error) {\n throw new Error(json.error?.msg ?? `HTTP ${res.status}`)\n }\n return json\n }\n\n async createCollection(spec: CollectionSpec, _ifNotExists: boolean): Promise<void> {\n const core = await this.#core(spec.collection)\n this.#dims.set(spec.collection, spec.vector.dimensions)\n const ftName = `knn_${spec.vector.dimensions}_${simFn(spec.vector.metric)}`\n try {\n // Ensure the dense-vector field type (idempotent: ignore \"already exists\").\n await this.#post(core, '/schema', {\n 'add-field-type': {\n name: ftName,\n class: 'solr.DenseVectorField',\n vectorDimension: spec.vector.dimensions,\n similarityFunction: simFn(spec.vector.metric),\n },\n }).catch((e: unknown) => {\n if (!String(e).includes('already')) throw e\n })\n // Ensure the fields (idempotent per field).\n for (const f of [\n { name: 'vec', type: ftName, indexed: true, stored: true },\n { name: 'document', type: 'string', stored: true },\n { name: 'metadata', type: 'string', stored: true },\n ]) {\n await this.#post(core, '/schema', { 'add-field': f }).catch((e: unknown) => {\n if (!String(e).includes('already')) throw e\n })\n }\n // Start from an empty core for this logical collection.\n await this.#post(core, '/update?commit=true', { delete: { query: '*:*' } })\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['createCollection', String(err)])\n }\n }\n\n async dropCollection(collection: string, _ifExists: boolean): Promise<void> {\n // Cores aren't created/destroyed at runtime here; \"drop\" clears the core's documents.\n try {\n const core = await this.#core(collection)\n await this.#post(core, '/update?commit=true', { delete: { query: '*:*' } })\n this.#dims.delete(collection)\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 try {\n const core = await this.#core(collection)\n await this.#get(core, '/admin/ping')\n return true\n } catch {\n return false\n }\n }\n\n async renameCollection(_from: string, _to: string): Promise<void> {\n throw new E_VECTOR_STORE_UNSUPPORTED_OPERATION(['renameCollection', 'solr'])\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n const core = await this.#core(plan.collection)\n const expected = this.#opts.dimensions ?? this.#dims.get(plan.collection)\n try {\n const docs: 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 (expected !== undefined && vector.length !== expected) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([expected, vector.length])\n }\n docs.push({\n id: r.id,\n vec: vector,\n document: r.document ?? '',\n metadata: r.metadata ? JSON.stringify(r.metadata) : '{}',\n })\n }\n // Solr upserts by id; commit so the write is visible to the next query.\n await this.#post(core, '/update?commit=true', docs)\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 core = await this.#core(plan.collection)\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 r = await this.#get(\n core,\n `/select?q=${encodeURIComponent('id:' + this.#escape(plan.near.id))}&fl=vec&rows=1`\n )\n const doc = r.response?.docs?.[0]\n if (!doc) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n queryVector = doc.vec as number[]\n }\n }\n\n const offset = plan.offset ?? 0\n const fl = 'id,vec,document,metadata,score'\n try {\n let docs: any[]\n if (queryVector) {\n const k = (plan.filter ? 1000 : plan.topK + offset) || 10\n const q = `{!knn f=vec topK=${k}}[${queryVector.join(',')}]`\n const r = await this.#get(core, `/select?q=${encodeURIComponent(q)}&fl=${fl}&rows=${k}`)\n docs = r.response?.docs ?? []\n } else {\n const r = await this.#get(core, `/select?q=*:*&fl=${fl}&rows=100000`)\n docs = r.response?.docs ?? []\n }\n const filtered = plan.filter\n ? docs.filter((d) => evaluateFilter(plan.filter!, this.#parseMeta(d.metadata)))\n : docs\n return filtered\n .slice(offset, offset + plan.topK)\n .map((d) => this.#project(d, plan, !!queryVector))\n } catch (err) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n }\n\n #escape(value: string): string {\n // Escape Solr query special chars for an id: term match.\n return value.replace(/([+\\-!(){}[\\]^\"~*?:\\\\/ ])/g, '\\\\$1')\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, isKnn: 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 && Array.isArray(doc.vec)) out.vector = (doc.vec as number[]).map(Number)\n if (proj.document) out.document = (doc.document ?? undefined) as string | undefined\n if (proj.metadata) out.metadata = this.#parseMeta(doc.metadata)\n if (isKnn && typeof doc.score === 'number') {\n // Solr's DenseVectorField cosine score is already in [0,1], higher = closer.\n out.score = doc.score\n }\n return out\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n const core = await this.#core(plan.collection)\n try {\n if (plan.ids && plan.ids.length > 0) {\n await this.#post(core, '/update?commit=true', { delete: plan.ids })\n } else if (plan.filter) {\n const r = await this.#get(core, `/select?q=*:*&fl=id,metadata&rows=100000`)\n const docs = r.response?.docs ?? []\n const targets = docs\n .filter((d: any) => evaluateFilter(plan.filter!, this.#parseMeta(d.metadata)))\n .map((d: any) => d.id as string)\n if (targets.length > 0) {\n await this.#post(core, '/update?commit=true', { delete: targets })\n }\n } else {\n await this.#post(core, '/update?commit=true', { delete: { query: '*:*' } })\n }\n } catch (err) {\n throw new E_VECTOR_STORE_DELETE_FAILED([String(err)])\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @module @nhtio/adk/batteries/vector/sqlite_vec
3
+ */
4
+ import { BaseVectorStore, CallableVectorStore } from "../contract";
5
+ import type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from "../plan";
6
+ import type { VectorMatch, VectorStoreCapabilities, BaseVectorStoreOptions } from "../types";
7
+ interface SqliteVecOptions extends BaseVectorStoreOptions {
8
+ connection: {
9
+ path: string;
10
+ };
11
+ }
12
+ export declare class SqliteVecVectorStore extends BaseVectorStore {
13
+ #private;
14
+ readonly capabilities: VectorStoreCapabilities;
15
+ constructor(options: SqliteVecOptions);
16
+ static isAvailable(): boolean;
17
+ isAvailable(): boolean;
18
+ connect(): Promise<void>;
19
+ close(): Promise<void>;
20
+ get db(): any;
21
+ createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void>;
22
+ dropCollection(collection: string, ifExists: boolean): Promise<void>;
23
+ hasCollection(collection: string): Promise<boolean>;
24
+ renameCollection(from: string, to: string): Promise<void>;
25
+ executeUpsert(plan: UpsertPlan): Promise<void>;
26
+ executeSearch(plan: SearchPlan): Promise<VectorMatch[]>;
27
+ executeDelete(plan: DeletePlan): Promise<void>;
28
+ transaction(fn: (tx: CallableVectorStore) => Promise<void>): Promise<void>;
29
+ }
30
+ export {};
@@ -0,0 +1,318 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ require("../../chunk-Ble4zEEl.js");
3
+ const require_batteries_vector_filters = require("./filters.cjs");
4
+ const require_batteries_vector_helpers = require("./helpers.cjs");
5
+ const require_batteries_vector_exceptions = require("./exceptions.cjs");
6
+ const require_batteries_vector_contract = require("./contract.cjs");
7
+ const require_batteries_vector_validation = require("./validation.cjs");
8
+ //#region src/batteries/vector/sqlite_vec/index.ts
9
+ /**
10
+ * @module @nhtio/adk/batteries/vector/sqlite_vec
11
+ */
12
+ var SqliteVecVectorStore = class extends require_batteries_vector_contract.BaseVectorStore {
13
+ capabilities = {
14
+ transactions: true,
15
+ namedVectors: false,
16
+ rename: true,
17
+ rawSql: true,
18
+ builtInEncoding: false,
19
+ consistency: {
20
+ configurable: false,
21
+ default: "strong",
22
+ modes: ["strong"]
23
+ }
24
+ };
25
+ #_cache = null;
26
+ #_dims = /* @__PURE__ */ new Map();
27
+ constructor(options) {
28
+ super(options);
29
+ }
30
+ get #opts() {
31
+ return this.options;
32
+ }
33
+ static isAvailable() {
34
+ return typeof process !== "undefined";
35
+ }
36
+ isAvailable() {
37
+ return typeof process !== "undefined";
38
+ }
39
+ async connect() {
40
+ if (this.#_cache) return;
41
+ let Database;
42
+ let sqliteVec;
43
+ try {
44
+ Database = (await import("better-sqlite3")).default;
45
+ } catch (e) {
46
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DRIVER_UNAVAILABLE(["better-sqlite3 / sqlite-vec"]);
47
+ }
48
+ try {
49
+ sqliteVec = await import("sqlite-vec");
50
+ } catch (e) {
51
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DRIVER_UNAVAILABLE(["better-sqlite3 / sqlite-vec"]);
52
+ }
53
+ const path = this.#opts.connection?.path ?? ":memory:";
54
+ let db;
55
+ try {
56
+ db = new Database(path);
57
+ } catch (e) {
58
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)]);
59
+ }
60
+ sqliteVec.load(db);
61
+ this.#_cache = {
62
+ db,
63
+ drivers: {
64
+ Database,
65
+ sqliteVec
66
+ }
67
+ };
68
+ }
69
+ async close() {
70
+ if (this.#_cache?.db) {
71
+ this.#_cache.db.close();
72
+ this.#_cache = null;
73
+ }
74
+ }
75
+ get db() {
76
+ if (!this.#_cache?.db) throw new Error("Not connected");
77
+ return this.#_cache.db;
78
+ }
79
+ async createCollection(spec, ifNotExists) {
80
+ await this.connect();
81
+ const { collection, vector } = spec;
82
+ const dims = vector.dimensions;
83
+ const tbl = `"${collection}"`;
84
+ const metaTbl = `"${collection}__meta"`;
85
+ const { db } = this;
86
+ const exists = await this.hasCollection(collection);
87
+ if (!ifNotExists && exists) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["create", "collection exists"]);
88
+ try {
89
+ db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS ${tbl} USING vec0(embedding float[${dims}])`);
90
+ db.exec(`CREATE TABLE IF NOT EXISTS ${metaTbl} (rowid INTEGER PRIMARY KEY, id TEXT UNIQUE, document TEXT, metadata TEXT)`);
91
+ this.#_dims.set(collection, dims);
92
+ } catch (e) {
93
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["create", e?.message ?? String(e)]);
94
+ }
95
+ }
96
+ async dropCollection(collection, ifExists) {
97
+ await this.connect();
98
+ const tbl = `"${collection}"`;
99
+ const metaTbl = `"${collection}__meta"`;
100
+ if (!await this.hasCollection(collection)) {
101
+ if (!ifExists) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["drop", "collection does not exist"]);
102
+ return;
103
+ }
104
+ const { db } = this;
105
+ try {
106
+ db.exec(`DROP TABLE IF EXISTS ${tbl}`);
107
+ db.exec(`DROP TABLE IF EXISTS ${metaTbl}`);
108
+ this.#_dims.delete(collection);
109
+ } catch (e) {
110
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["drop", e?.message ?? String(e)]);
111
+ }
112
+ }
113
+ async hasCollection(collection) {
114
+ await this.connect();
115
+ const { db } = this;
116
+ try {
117
+ return !!db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`).get(collection)?.name;
118
+ } catch {
119
+ return false;
120
+ }
121
+ }
122
+ async renameCollection(from, to) {
123
+ await this.connect();
124
+ if (!await this.hasCollection(from)) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["rename", "source collection does not exist"]);
125
+ if (await this.hasCollection(to)) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["rename", "target collection already exists"]);
126
+ const { db } = this;
127
+ try {
128
+ db.exec(`ALTER TABLE "${from}" RENAME TO "${to}"`);
129
+ db.exec(`ALTER TABLE "${from}__meta" RENAME TO "${to}__meta"`);
130
+ const dims = this.#_dims.get(from);
131
+ if (dims !== void 0) {
132
+ this.#_dims.set(to, dims);
133
+ this.#_dims.delete(from);
134
+ }
135
+ } catch (e) {
136
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["rename", e?.message ?? String(e)]);
137
+ }
138
+ }
139
+ async executeUpsert(plan) {
140
+ await this.connect();
141
+ require_batteries_vector_validation.validateRecords(plan.records);
142
+ const collection = plan.collection;
143
+ const dims = this.#_dims.get(collection);
144
+ const { db } = this;
145
+ const resolvedRows = [];
146
+ for (const r of plan.records) {
147
+ let vector = r.vector;
148
+ if (!vector && r.document) {
149
+ const [v] = await this.encode([r.document], "document");
150
+ vector = v;
151
+ }
152
+ if (vector && dims !== void 0 && vector.length !== dims) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length]);
153
+ resolvedRows.push({
154
+ id: r.id,
155
+ vector: vector ?? [],
156
+ document: r.document,
157
+ metadata: r.metadata
158
+ });
159
+ }
160
+ const stmtMetaInsert = db.prepare(`INSERT INTO "${collection}__meta" (id, document, metadata) VALUES (?, ?, ?)`);
161
+ const stmtMetaUpdate = db.prepare(`UPDATE "${collection}__meta" SET document = ?, metadata = ? WHERE id = ?`);
162
+ const stmtRowid = db.prepare(`SELECT rowid FROM "${collection}__meta" WHERE id = ?`);
163
+ const stmtVecDelete = db.prepare(`DELETE FROM "${collection}" WHERE rowid = ?`);
164
+ const stmtVecInsert = db.prepare(`INSERT INTO "${collection}" (rowid, embedding) VALUES (?, ?)`);
165
+ const txn = db.transaction(() => {
166
+ for (const r of resolvedRows) {
167
+ const buf = new Float32Array(r.vector);
168
+ let rowid;
169
+ const rowidRes = stmtRowid.get(r.id);
170
+ if (rowidRes?.rowid) {
171
+ rowid = BigInt(rowidRes.rowid);
172
+ stmtMetaUpdate.run(r.document ?? null, JSON.stringify(r.metadata ?? {}), r.id);
173
+ stmtVecDelete.run(rowid);
174
+ stmtVecInsert.run(rowid, buf);
175
+ } else {
176
+ const insertMeta = stmtMetaInsert.run(r.id, r.document ?? null, JSON.stringify(r.metadata ?? {}));
177
+ rowid = BigInt(insertMeta.lastInsertRowid);
178
+ stmtVecInsert.run(rowid, buf);
179
+ }
180
+ }
181
+ });
182
+ try {
183
+ txn();
184
+ } catch (e) {
185
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UPSERT_FAILED([e?.message ?? String(e)]);
186
+ }
187
+ }
188
+ async executeSearch(plan) {
189
+ await this.connect();
190
+ const { db } = this;
191
+ const collection = plan.collection;
192
+ const tbl = `"${collection}"`;
193
+ const metaTbl = `"${collection}__meta"`;
194
+ const near = plan.near;
195
+ const limit = (plan.offset ?? 0) + plan.topK;
196
+ try {
197
+ if (near) {
198
+ let qvec;
199
+ if ("vector" in near) qvec = near.vector;
200
+ else if ("serverText" in near) {
201
+ const [v] = await this.encode([near.serverText], "query");
202
+ qvec = v;
203
+ } else if ("id" in near) {
204
+ const refRow = db.prepare(`SELECT rowid FROM ${metaTbl} WHERE id = ?`).get(near.id);
205
+ if (refRow?.rowid) {
206
+ const refVecRes = db.prepare(`SELECT embedding FROM ${tbl} WHERE rowid = ?`).get(BigInt(refRow.rowid));
207
+ if (refVecRes?.embedding) qvec = Array.from(new Float32Array(refVecRes.embedding.buffer || refVecRes.embedding));
208
+ }
209
+ }
210
+ if (!qvec) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_SEARCH_FAILED(["no query vector provided"]);
211
+ const matchClause = `embedding MATCH ? ORDER BY distance LIMIT ${limit}`;
212
+ const matchBuf = new Float32Array(qvec);
213
+ const matches = [];
214
+ const stmtMatch = db.prepare(`SELECT rowid, distance FROM ${tbl} WHERE ${matchClause}`);
215
+ for (const row of stmtMatch.iterate(matchBuf)) matches.push({
216
+ rowid: BigInt(row.rowid),
217
+ distance: row.distance
218
+ });
219
+ let results = [];
220
+ for (const m of matches) {
221
+ const meta = db.prepare(`SELECT rowid, id, document, metadata FROM ${metaTbl} WHERE rowid = ?`).get(m.rowid);
222
+ if (!meta) continue;
223
+ const parsedMeta = typeof meta.metadata === "string" ? JSON.parse(meta.metadata) : meta.metadata;
224
+ if (plan.filter && !require_batteries_vector_filters.evaluateFilter(plan.filter, parsedMeta)) continue;
225
+ let score = require_batteries_vector_helpers.normalizeScore(Number(m.distance), this.options.metric ?? "euclidean", "distance");
226
+ const proj = {};
227
+ if (plan.projection.id) proj.id = meta.id;
228
+ if (plan.projection.vector) {
229
+ const vecRes = db.prepare(`SELECT embedding FROM ${tbl} WHERE rowid = ?`).get(m.rowid);
230
+ if (vecRes?.embedding) proj.vector = Array.from(new Float32Array(vecRes.embedding.buffer || vecRes.embedding));
231
+ }
232
+ if (plan.projection.document && meta.document !== void 0) proj.document = meta.document;
233
+ if (plan.projection.metadata && parsedMeta !== void 0) proj.metadata = parsedMeta;
234
+ if (score !== void 0) proj.score = score;
235
+ results.push(proj);
236
+ }
237
+ const offset = plan.offset ?? 0;
238
+ return results.slice(offset, offset + plan.topK);
239
+ } else {
240
+ const rows = db.prepare(`SELECT rowid, id, document, metadata FROM ${metaTbl}`).all();
241
+ let scored = [];
242
+ for (const row of rows) {
243
+ const parsedMeta = typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata;
244
+ if (plan.filter && !require_batteries_vector_filters.evaluateFilter(plan.filter, parsedMeta)) continue;
245
+ scored.push({
246
+ row,
247
+ score: void 0
248
+ });
249
+ }
250
+ const offset = plan.offset ?? 0;
251
+ return scored.slice(offset, offset + plan.topK).map(({ row }) => {
252
+ const parsedMeta = typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata;
253
+ const out = {};
254
+ if (plan.projection.id) out.id = row.id;
255
+ if (plan.projection.vector) {
256
+ const vecRes = db.prepare(`SELECT embedding FROM ${tbl} WHERE rowid = ?`).get(BigInt(row.rowid));
257
+ if (vecRes?.embedding) out.vector = Array.from(new Float32Array(vecRes.embedding.buffer || vecRes.embedding));
258
+ }
259
+ if (plan.projection.document && row.document !== void 0) out.document = row.document;
260
+ if (plan.projection.metadata && parsedMeta !== void 0) out.metadata = parsedMeta;
261
+ return out;
262
+ });
263
+ }
264
+ } catch (e) {
265
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_SEARCH_FAILED([e?.message ?? String(e)]);
266
+ }
267
+ }
268
+ async executeDelete(plan) {
269
+ await this.connect();
270
+ const collection = plan.collection;
271
+ const metaTbl = `"${collection}__meta"`;
272
+ const tbl = `"${collection}"`;
273
+ const { db } = this;
274
+ try {
275
+ if (plan.ids && plan.ids.length > 0) {
276
+ const rowids = db.prepare(`SELECT rowid, metadata FROM ${metaTbl} WHERE id IN (${plan.ids.map(() => "?").join(", ")})`).all(...plan.ids).map((r) => BigInt(r.rowid));
277
+ if (rowids.length > 0) {
278
+ const rowidPlaceholders = rowids.map(() => "?").join(", ");
279
+ db.prepare(`DELETE FROM ${metaTbl} WHERE rowid IN (${rowidPlaceholders})`).run(...rowids);
280
+ db.prepare(`DELETE FROM ${tbl} WHERE rowid IN (${rowidPlaceholders})`).run(...rowids);
281
+ }
282
+ } else if (plan.filter) {
283
+ const rows = db.prepare(`SELECT rowid, metadata FROM ${metaTbl}`).all();
284
+ const toDeleteRowids = [];
285
+ for (const row of rows) {
286
+ const parsedMeta = typeof row.metadata === "string" ? JSON.parse(row.metadata) : row.metadata;
287
+ if (require_batteries_vector_filters.evaluateFilter(plan.filter, parsedMeta)) toDeleteRowids.push(BigInt(row.rowid));
288
+ }
289
+ if (toDeleteRowids.length > 0) {
290
+ const rowidPlaceholders = toDeleteRowids.map(() => "?").join(", ");
291
+ db.prepare(`DELETE FROM ${metaTbl} WHERE rowid IN (${rowidPlaceholders})`).run(...toDeleteRowids);
292
+ db.prepare(`DELETE FROM ${tbl} WHERE rowid IN (${rowidPlaceholders})`).run(...toDeleteRowids);
293
+ }
294
+ } else {
295
+ db.exec(`DELETE FROM ${metaTbl}`);
296
+ db.exec(`DELETE FROM ${tbl}`);
297
+ }
298
+ } catch (e) {
299
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)]);
300
+ }
301
+ }
302
+ async transaction(fn) {
303
+ await this.connect();
304
+ const { db } = this;
305
+ db.exec("BEGIN");
306
+ try {
307
+ await fn(this.asCallable());
308
+ db.exec("COMMIT");
309
+ } catch (e) {
310
+ db.exec("ROLLBACK");
311
+ throw e;
312
+ }
313
+ }
314
+ };
315
+ //#endregion
316
+ exports.SqliteVecVectorStore = SqliteVecVectorStore;
317
+
318
+ //# sourceMappingURL=sqlite_vec.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite_vec.cjs","names":["#opts","#_cache","#_dims"],"sources":["../../../src/batteries/vector/sqlite_vec/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/sqlite_vec\n */\n\nimport { evaluateFilter } from '../filters'\nimport { normalizeScore } from '../helpers'\nimport { validateRecords } from '../validation'\nimport { BaseVectorStore, CallableVectorStore } from '../contract'\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} from '../exceptions'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type { VectorMatch, VectorStoreCapabilities, BaseVectorStoreOptions } from '../types'\n\ninterface SqliteVecOptions extends BaseVectorStoreOptions {\n connection: {\n path: string\n }\n}\n\ninterface VecRow {\n rowid: bigint\n distance: number\n}\n\ninterface CachedStore {\n db: any\n drivers?: { Database: any; sqliteVec: any }\n}\n\nexport class SqliteVecVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: true,\n namedVectors: false,\n rename: true,\n rawSql: true,\n builtInEncoding: false,\n // Strongly consistent (local file/in-memory): visible on resolve, so the option is a no-op.\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n\n #_cache: CachedStore | null = null\n #_dims: Map<string, number> = new Map()\n\n constructor(options: SqliteVecOptions) {\n super(options)\n }\n\n get #opts(): SqliteVecOptions {\n return this.options as SqliteVecOptions\n }\n\n static isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n isAvailable(): boolean {\n return typeof process !== 'undefined'\n }\n\n async connect(): Promise<void> {\n if (this.#_cache) {\n return\n }\n\n let Database: any\n let sqliteVec: any\n\n try {\n const mod1 = await import('better-sqlite3')\n Database = mod1.default\n } catch (e) {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['better-sqlite3 / sqlite-vec'])\n }\n\n try {\n sqliteVec = await import('sqlite-vec')\n } catch (e) {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['better-sqlite3 / sqlite-vec'])\n }\n\n const path = this.#opts.connection?.path ?? ':memory:'\n let db: any\n\n try {\n db = new Database(path)\n } catch (e: any) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([e?.message ?? String(e)])\n }\n\n sqliteVec.load(db)\n\n this.#_cache = { db, drivers: { Database, sqliteVec } }\n }\n\n async close(): Promise<void> {\n if (this.#_cache?.db) {\n this.#_cache.db.close()\n this.#_cache = null\n }\n }\n\n get db(): any {\n if (!this.#_cache?.db) {\n throw new Error('Not connected')\n }\n return this.#_cache.db\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n await this.connect()\n const { collection, vector } = spec\n const dims = vector.dimensions\n const tbl = `\"${collection}\"`\n const metaTbl = `\"${collection}__meta\"`\n\n const { db } = this\n\n const exists = await this.hasCollection(collection)\n if (!ifNotExists && exists) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'collection exists'])\n }\n\n try {\n db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS ${tbl} USING vec0(embedding float[${dims}])`)\n db.exec(\n `CREATE TABLE IF NOT EXISTS ${metaTbl} (rowid INTEGER PRIMARY KEY, id TEXT UNIQUE, document TEXT, metadata TEXT)`\n )\n this.#_dims.set(collection, dims)\n } catch (e: any) {\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 tbl = `\"${collection}\"`\n const metaTbl = `\"${collection}__meta\"`\n\n const has = await this.hasCollection(collection)\n if (!has) {\n if (!ifExists) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['drop', 'collection does not exist'])\n }\n return\n }\n\n const { db } = this\n try {\n db.exec(`DROP TABLE IF EXISTS ${tbl}`)\n db.exec(`DROP TABLE IF EXISTS ${metaTbl}`)\n this.#_dims.delete(collection)\n } catch (e: any) {\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 const { db } = this\n try {\n const res: any = db\n .prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`)\n .get(collection)\n return !!res?.name\n } catch {\n return false\n }\n }\n\n async renameCollection(from: string, to: string): Promise<void> {\n await this.connect()\n const hasFrom = await this.hasCollection(from)\n if (!hasFrom) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['rename', 'source collection does not exist'])\n }\n\n const hasTo = await this.hasCollection(to)\n if (hasTo) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['rename', 'target collection already exists'])\n }\n\n const { db } = this\n try {\n db.exec(`ALTER TABLE \"${from}\" RENAME TO \"${to}\"`)\n db.exec(`ALTER TABLE \"${from}__meta\" RENAME TO \"${to}__meta\"`)\n const dims = this.#_dims.get(from)\n if (dims !== undefined) {\n this.#_dims.set(to, dims)\n this.#_dims.delete(from)\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['rename', e?.message ?? String(e)])\n }\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n await this.connect()\n validateRecords(plan.records)\n\n const collection = plan.collection\n const dims = this.#_dims.get(collection)\n const { db } = this\n\n const resolvedRows: {\n id: string\n vector: number[]\n document?: string\n metadata?: Record<string, unknown>\n }[] = []\n\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\n if (vector && dims !== undefined && vector.length !== dims) {\n throw new E_VECTOR_STORE_DIMENSION_MISMATCH([dims, vector.length])\n }\n\n resolvedRows.push({\n id: r.id,\n vector: vector ?? [],\n document: r.document,\n metadata: r.metadata as Record<string, unknown> | undefined,\n })\n }\n\n const stmtMetaInsert = db.prepare(\n `INSERT INTO \"${collection}__meta\" (id, document, metadata) VALUES (?, ?, ?)`\n )\n const stmtMetaUpdate = db.prepare(\n `UPDATE \"${collection}__meta\" SET document = ?, metadata = ? WHERE id = ?`\n )\n const stmtRowid = db.prepare(`SELECT rowid FROM \"${collection}__meta\" WHERE id = ?`)\n const stmtVecDelete = db.prepare(`DELETE FROM \"${collection}\" WHERE rowid = ?`)\n const stmtVecInsert = db.prepare(`INSERT INTO \"${collection}\" (rowid, embedding) VALUES (?, ?)`)\n\n const txn = db.transaction(() => {\n for (const r of resolvedRows) {\n const buf = new Float32Array(r.vector)\n let rowid: bigint | undefined\n\n const rowidRes: any = stmtRowid.get(r.id)\n if (rowidRes?.rowid) {\n rowid = BigInt(rowidRes.rowid)\n stmtMetaUpdate.run(r.document ?? null, JSON.stringify(r.metadata ?? {}), r.id)\n stmtVecDelete.run(rowid)\n stmtVecInsert.run(rowid, buf)\n } else {\n const insertMeta = stmtMetaInsert.run(\n r.id,\n r.document ?? null,\n JSON.stringify(r.metadata ?? {})\n )\n rowid = BigInt(insertMeta.lastInsertRowid)\n stmtVecInsert.run(rowid, buf)\n }\n }\n })\n\n try {\n txn()\n } catch (e: any) {\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 { db } = this\n const collection = plan.collection\n const tbl = `\"${collection}\"`\n const metaTbl = `\"${collection}__meta\"`\n\n const near = plan.near\n const limit = (plan.offset ?? 0) + plan.topK\n\n try {\n if (near) {\n let qvec: number[] | undefined\n\n if ('vector' in near) {\n qvec = near.vector\n } else if ('serverText' in near) {\n const [v] = await this.encode([near.serverText], 'query')\n qvec = v\n } else if ('id' in near) {\n const refRow: any = db.prepare(`SELECT rowid FROM ${metaTbl} WHERE id = ?`).get(near.id)\n if (refRow?.rowid) {\n const refVecRes: any = db\n .prepare(`SELECT embedding FROM ${tbl} WHERE rowid = ?`)\n .get(BigInt(refRow.rowid))\n if (refVecRes?.embedding) {\n qvec = Array.from(new Float32Array(refVecRes.embedding.buffer || refVecRes.embedding))\n }\n }\n }\n\n if (!qvec) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['no query vector provided'])\n }\n\n const matchClause = `embedding MATCH ? ORDER BY distance LIMIT ${limit}`\n const matchBuf = new Float32Array(qvec)\n\n const matches: VecRow[] = []\n const stmtMatch = db.prepare(`SELECT rowid, distance FROM ${tbl} WHERE ${matchClause}`)\n for (const row of stmtMatch.iterate(matchBuf)) {\n matches.push({ rowid: BigInt(row.rowid), distance: row.distance })\n }\n\n let results: VectorMatch[] = []\n for (const m of matches) {\n const meta: any = db\n .prepare(`SELECT rowid, id, document, metadata FROM ${metaTbl} WHERE rowid = ?`)\n .get(m.rowid)\n if (!meta) {\n continue\n }\n\n const parsedMeta =\n typeof meta.metadata === 'string' ? JSON.parse(meta.metadata) : meta.metadata\n\n if (plan.filter && !evaluateFilter(plan.filter, parsedMeta as any)) {\n continue\n }\n\n let score = normalizeScore(\n Number(m.distance),\n this.options.metric ?? 'euclidean',\n 'distance'\n )\n\n const proj: VectorMatch = {}\n if (plan.projection.id) proj.id = meta.id\n if (plan.projection.vector) {\n const vecRes: any = db\n .prepare(`SELECT embedding FROM ${tbl} WHERE rowid = ?`)\n .get(m.rowid)\n if (vecRes?.embedding) {\n proj.vector = Array.from(\n new Float32Array(vecRes.embedding.buffer || vecRes.embedding)\n )\n }\n }\n if (plan.projection.document && meta.document !== undefined) proj.document = meta.document\n if (plan.projection.metadata && parsedMeta !== undefined)\n proj.metadata = parsedMeta as any\n if (score !== undefined) proj.score = score\n results.push(proj)\n }\n\n const offset = plan.offset ?? 0\n return results.slice(offset, offset + plan.topK)\n } else {\n const rows: any[] = db.prepare(`SELECT rowid, id, document, metadata FROM ${metaTbl}`).all()\n let scored: { row: any; score?: number }[] = []\n\n for (const row of rows) {\n const parsedMeta =\n typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata\n\n if (plan.filter && !evaluateFilter(plan.filter, parsedMeta as any)) {\n continue\n }\n\n scored.push({ row, score: undefined })\n }\n\n const offset = plan.offset ?? 0\n const limited = scored.slice(offset, offset + plan.topK)\n\n return limited.map(({ row }) => {\n const parsedMeta =\n typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata\n const out: VectorMatch = {}\n\n if (plan.projection.id) out.id = row.id\n\n if (plan.projection.vector) {\n const vecRes: any = db\n .prepare(`SELECT embedding FROM ${tbl} WHERE rowid = ?`)\n .get(BigInt(row.rowid))\n if (vecRes?.embedding) {\n out.vector = Array.from(new Float32Array(vecRes.embedding.buffer || vecRes.embedding))\n }\n }\n\n if (plan.projection.document && row.document !== undefined) out.document = row.document\n if (plan.projection.metadata && parsedMeta !== undefined) out.metadata = parsedMeta as any\n\n return out\n })\n }\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 collection = plan.collection\n const metaTbl = `\"${collection}__meta\"`\n const tbl = `\"${collection}\"`\n\n const { db } = this\n\n try {\n if (plan.ids && plan.ids.length > 0) {\n const stmtIds = db.prepare(\n `SELECT rowid, metadata FROM ${metaTbl} WHERE id IN (${plan.ids.map(() => '?').join(', ')})`\n )\n const rowids: bigint[] = stmtIds.all(...plan.ids).map((r: any) => BigInt(r.rowid))\n if (rowids.length > 0) {\n const rowidPlaceholders = rowids.map(() => '?').join(', ')\n db.prepare(`DELETE FROM ${metaTbl} WHERE rowid IN (${rowidPlaceholders})`).run(...rowids)\n db.prepare(`DELETE FROM ${tbl} WHERE rowid IN (${rowidPlaceholders})`).run(...rowids)\n }\n } else if (plan.filter) {\n const rows: any[] = db.prepare(`SELECT rowid, metadata FROM ${metaTbl}`).all()\n const toDeleteRowids: bigint[] = []\n\n for (const row of rows) {\n const parsedMeta =\n typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata\n if (evaluateFilter(plan.filter, parsedMeta as any)) {\n toDeleteRowids.push(BigInt(row.rowid))\n }\n }\n\n if (toDeleteRowids.length > 0) {\n const rowidPlaceholders = toDeleteRowids.map(() => '?').join(', ')\n db.prepare(`DELETE FROM ${metaTbl} WHERE rowid IN (${rowidPlaceholders})`).run(\n ...toDeleteRowids\n )\n db.prepare(`DELETE FROM ${tbl} WHERE rowid IN (${rowidPlaceholders})`).run(\n ...toDeleteRowids\n )\n }\n } else {\n db.exec(`DELETE FROM ${metaTbl}`)\n db.exec(`DELETE FROM ${tbl}`)\n }\n } catch (e: any) {\n throw new E_VECTOR_STORE_DELETE_FAILED([e?.message ?? String(e)])\n }\n }\n\n async transaction(fn: (tx: CallableVectorStore) => Promise<void>): Promise<void> {\n await this.connect()\n const { db } = this\n\n db.exec('BEGIN')\n try {\n await fn(this.asCallable())\n db.exec('COMMIT')\n } catch (e) {\n db.exec('ROLLBACK')\n throw e\n }\n }\n}\n"],"mappings":"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"}