@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,305 @@
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/chroma/index.ts
9
+ /**
10
+ * @module @nhtio/adk/batteries/vector/chroma
11
+ */
12
+ var getChromaClient = async () => {
13
+ try {
14
+ return (await import("chromadb")).ChromaClient;
15
+ } catch {
16
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DRIVER_UNAVAILABLE(["chromadb"]);
17
+ }
18
+ };
19
+ var getSpace = (metric) => {
20
+ if (metric === "cosine") return "cosine";
21
+ if (metric === "euclidean") return "l2";
22
+ if (metric === "dot") return "ip";
23
+ return "cosine";
24
+ };
25
+ var translateChromaWhere = (filter) => {
26
+ if (!filter) return void 0;
27
+ if (require_batteries_vector_filters.isRawFilter(filter)) {
28
+ if (filter.$dialect === "chroma") return filter.$raw;
29
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", String(filter.$dialect)]);
30
+ }
31
+ if (require_batteries_vector_filters.isFilterCondition(filter)) {
32
+ const { field, op, value } = filter;
33
+ if (value === void 0) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", op]);
34
+ if (op === "eq") return { [field]: { $eq: value } };
35
+ if (op === "ne") return { [field]: { $ne: value } };
36
+ if (op === "gt") return { [field]: { $gt: value } };
37
+ if (op === "gte") return { [field]: { $gte: value } };
38
+ if (op === "lt") return { [field]: { $lt: value } };
39
+ if (op === "lte") return { [field]: { $lte: value } };
40
+ if (op === "in") return { [field]: { $in: value } };
41
+ if (op === "nin") return { [field]: { $nin: value } };
42
+ if (op === "exists" || op === "contains") throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", op]);
43
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", op]);
44
+ }
45
+ if (require_batteries_vector_filters.isFilterGroup(filter)) {
46
+ const { and, or, not } = filter;
47
+ if (and) {
48
+ const children = and.map((f) => translateChromaWhere(f)).filter((c) => c !== void 0);
49
+ if (children.length === 0) return void 0;
50
+ if (children.length === 1) return children[0];
51
+ return { $and: children };
52
+ }
53
+ if (or) {
54
+ const children = or.map((f) => translateChromaWhere(f)).filter((c) => c !== void 0);
55
+ if (children.length === 0) return void 0;
56
+ if (children.length === 1) return children[0];
57
+ return { $or: children };
58
+ }
59
+ if (not) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", "not"]);
60
+ return;
61
+ }
62
+ };
63
+ var ChromaVectorStore = class extends require_batteries_vector_contract.BaseVectorStore {
64
+ capabilities = {
65
+ transactions: false,
66
+ namedVectors: false,
67
+ rename: true,
68
+ rawSql: false,
69
+ builtInEncoding: false,
70
+ consistency: {
71
+ configurable: false,
72
+ default: "strong",
73
+ modes: ["strong"]
74
+ }
75
+ };
76
+ #client = null;
77
+ #collectionCache = /* @__PURE__ */ new Map();
78
+ get #opts() {
79
+ return this.options;
80
+ }
81
+ static isAvailable() {
82
+ return typeof process !== "undefined";
83
+ }
84
+ isAvailable() {
85
+ return typeof process !== "undefined";
86
+ }
87
+ async connect() {
88
+ if (this.#client) return;
89
+ const ChromaClient = await getChromaClient();
90
+ const c = this.#opts.connection || {};
91
+ let host;
92
+ let port;
93
+ let ssl = false;
94
+ if (c.url) {
95
+ const url = new URL(c.url);
96
+ host = url.hostname;
97
+ port = url.port ? Number.parseInt(url.port, 10) : url.protocol === "https:" ? 443 : 80;
98
+ ssl = url.protocol === "https:";
99
+ } else {
100
+ host = c.host;
101
+ port = c.port;
102
+ ssl = c.ssl || false;
103
+ }
104
+ const path = host && port !== void 0 ? `${ssl ? "https://" : "http://"}${host}${port === 80 || port === 443 ? "" : ":" + port}` : void 0;
105
+ try {
106
+ this.#client = new ChromaClient({ path });
107
+ } catch (err) {
108
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_CONNECTION_FAILED([String(err)]);
109
+ }
110
+ }
111
+ async close() {
112
+ this.#client = null;
113
+ this.#collectionCache.clear();
114
+ }
115
+ async getCollection(name) {
116
+ let collection = this.#collectionCache.get(name);
117
+ if (collection) return collection;
118
+ if (!this.#client) await this.connect();
119
+ const metric = this.#opts.metric ?? "cosine";
120
+ collection = await this.#client.getOrCreateCollection({
121
+ name,
122
+ metadata: { "hnsw:space": getSpace(metric) }
123
+ });
124
+ this.#collectionCache.set(name, collection);
125
+ return collection;
126
+ }
127
+ async createCollection(spec, ifNotExists) {
128
+ const name = spec.collection;
129
+ if (ifNotExists && await this.hasCollection(name)) return;
130
+ if (await this.hasCollection(name)) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["create", "exists"]);
131
+ try {
132
+ await this.connect();
133
+ const metric = spec.vector.metric ?? "cosine";
134
+ await this.#client.getOrCreateCollection({
135
+ name,
136
+ metadata: { "hnsw:space": getSpace(metric) }
137
+ });
138
+ this.#collectionCache.set(name, null);
139
+ } catch (err) {
140
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["createCollection", String(err)]);
141
+ }
142
+ }
143
+ async dropCollection(collection, ifExists) {
144
+ if (ifExists && !await this.hasCollection(collection)) return;
145
+ try {
146
+ await this.connect();
147
+ await this.#client.deleteCollection({ name: collection });
148
+ this.#collectionCache.delete(collection);
149
+ } catch (err) {
150
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["dropCollection", String(err)]);
151
+ }
152
+ }
153
+ async hasCollection(collection) {
154
+ if (!this.#client) await this.connect();
155
+ try {
156
+ const collections = await this.#client.listCollections();
157
+ for (const c of collections) if (typeof c === "object" ? c.name === collection : c === collection) return true;
158
+ return false;
159
+ } catch {
160
+ return false;
161
+ }
162
+ }
163
+ async renameCollection(from, to) {
164
+ try {
165
+ await (await this.getCollection(from)).modify({ name: to });
166
+ const cached = this.#collectionCache.get(from);
167
+ this.#collectionCache.delete(from);
168
+ if (cached) this.#collectionCache.set(to, cached);
169
+ } catch (err) {
170
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_COLLECTION_FAILED(["renameCollection", String(err)]);
171
+ }
172
+ }
173
+ async executeUpsert(plan) {
174
+ if (plan.records.length === 0) return;
175
+ require_batteries_vector_validation.validateRecords(plan.records);
176
+ const collection = await this.getCollection(plan.collection);
177
+ const expected = this.#opts.dimensions;
178
+ const ids = [];
179
+ const embeddings = [];
180
+ const documents = [];
181
+ const metadatas = [];
182
+ for (const r of plan.records) {
183
+ let vector = r.vector;
184
+ if (!vector && r.document) {
185
+ const [v] = await this.encode([r.document], "document");
186
+ vector = v;
187
+ }
188
+ if (!vector) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UPSERT_FAILED(["Record missing vector and document"]);
189
+ if (expected !== void 0 && vector.length !== expected) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DIMENSION_MISMATCH([expected, vector.length]);
190
+ ids.push(r.id);
191
+ embeddings.push(vector);
192
+ documents.push(r.document ?? "");
193
+ const md = {
194
+ ...r.metadata ?? {},
195
+ internalId: r.id
196
+ };
197
+ metadatas.push(md);
198
+ }
199
+ try {
200
+ await collection.upsert({
201
+ ids,
202
+ embeddings,
203
+ documents,
204
+ metadatas
205
+ });
206
+ } catch (err) {
207
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_UPSERT_FAILED([String(err)]);
208
+ }
209
+ }
210
+ async executeSearch(plan) {
211
+ const collection = await this.getCollection(plan.collection);
212
+ const metric = this.#opts.metric ?? "cosine";
213
+ let queryVector;
214
+ if (plan.near) {
215
+ if ("vector" in plan.near) queryVector = plan.near.vector;
216
+ else if ("serverText" in plan.near) {
217
+ const [v] = await this.encode([plan.near.serverText], "query");
218
+ queryVector = v;
219
+ } else if ("id" in plan.near) {
220
+ const res = await collection.get({
221
+ ids: [plan.near.id],
222
+ include: ["embeddings"]
223
+ });
224
+ if (!res.ids || res.ids.length === 0) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_SEARCH_FAILED(["Referenced id not found: " + plan.near.id]);
225
+ const embeddings = res.embeddings || [];
226
+ if (!embeddings || embeddings.length === 0 || !embeddings[0]) throw new require_batteries_vector_exceptions.E_VECTOR_STORE_SEARCH_FAILED(["Referenced id has no vector: " + plan.near.id]);
227
+ queryVector = embeddings[0];
228
+ }
229
+ }
230
+ const where = translateChromaWhere(plan.filter);
231
+ let results;
232
+ if (queryVector) try {
233
+ results = await collection.query({
234
+ queryEmbeddings: [queryVector],
235
+ nResults: plan.topK,
236
+ where,
237
+ include: [
238
+ "documents",
239
+ "metadatas",
240
+ "distances",
241
+ "embeddings"
242
+ ]
243
+ });
244
+ } catch (err) {
245
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_SEARCH_FAILED([String(err)]);
246
+ }
247
+ else try {
248
+ results = await collection.get({
249
+ where,
250
+ limit: plan.topK,
251
+ include: [
252
+ "documents",
253
+ "metadatas",
254
+ "embeddings"
255
+ ]
256
+ });
257
+ } catch (err) {
258
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_SEARCH_FAILED([String(err)]);
259
+ }
260
+ const proj = plan.projection;
261
+ const out = [];
262
+ const unwrap = (col) => {
263
+ if (!col) return [];
264
+ return queryVector ? col[0] ?? [] : col;
265
+ };
266
+ const ids = unwrap(results.ids);
267
+ const documents = unwrap(results.documents);
268
+ const metadatas = unwrap(results.metadatas);
269
+ const embeddings = unwrap(results.embeddings);
270
+ const distances = unwrap(results.distances);
271
+ const start = plan.offset || 0;
272
+ const limit = plan.topK;
273
+ for (let i = start; i < Math.min(ids.length, start + limit); i++) {
274
+ const match = {};
275
+ if (proj.id) match.id = ids[i];
276
+ if (proj.vector && embeddings[i]) match.vector = embeddings[i];
277
+ if (proj.document) match.document = documents[i] ?? void 0;
278
+ if (proj.metadata && metadatas[i]) {
279
+ const { internalId, ...rest } = metadatas[i];
280
+ match.metadata = rest;
281
+ }
282
+ if (queryVector && distances && distances[i] !== void 0) match.score = require_batteries_vector_helpers.normalizeScore(distances[i], metric, "distance");
283
+ out.push(match);
284
+ }
285
+ return out;
286
+ }
287
+ async executeDelete(plan) {
288
+ const collection = await this.getCollection(plan.collection);
289
+ try {
290
+ if (plan.ids) await collection.delete({ ids: plan.ids });
291
+ else if (plan.filter) {
292
+ const where = translateChromaWhere(plan.filter);
293
+ if (where) await collection.delete({ where });
294
+ else await collection.delete({ where: {} });
295
+ } else await collection.delete({ where: {} });
296
+ } catch (err) {
297
+ throw new require_batteries_vector_exceptions.E_VECTOR_STORE_DELETE_FAILED([String(err)]);
298
+ }
299
+ }
300
+ };
301
+ //#endregion
302
+ exports.ChromaVectorStore = ChromaVectorStore;
303
+ exports.translateChromaWhere = translateChromaWhere;
304
+
305
+ //# sourceMappingURL=chroma.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chroma.cjs","names":["#opts","#client","#collectionCache"],"sources":["../../../src/batteries/vector/chroma/index.ts"],"sourcesContent":["/**\n * @module @nhtio/adk/batteries/vector/chroma\n */\n\nimport { normalizeScore } from '../helpers'\nimport { BaseVectorStore } from '../contract'\nimport { validateRecords } from '../validation'\nimport { isFilterCondition, isRawFilter, isFilterGroup } from '../filters'\nimport {\n E_VECTOR_STORE_DRIVER_UNAVAILABLE,\n E_VECTOR_STORE_CONNECTION_FAILED,\n E_VECTOR_STORE_COLLECTION_FAILED,\n E_VECTOR_STORE_UPSERT_FAILED,\n E_VECTOR_STORE_SEARCH_FAILED,\n E_VECTOR_STORE_DELETE_FAILED,\n E_VECTOR_STORE_DIMENSION_MISMATCH,\n E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR,\n} from '../exceptions'\nimport type { VectorFilter } from '../filters'\nimport type { SearchPlan, UpsertPlan, DeletePlan, CollectionSpec } from '../plan'\nimport type {\n VectorMatch,\n VectorMetadata,\n BaseVectorStoreOptions,\n VectorStoreCapabilities,\n} from '../types'\n\nexport interface ChromaVectorStoreOptions extends BaseVectorStoreOptions {\n connection?: { url?: string; host?: string; port?: number; ssl?: boolean }\n}\n\nconst getChromaClient = async () => {\n try {\n const mod = await import('chromadb')\n return mod.ChromaClient\n } catch {\n throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(['chromadb'])\n }\n}\n\nconst getSpace = (metric: string): string => {\n if (metric === 'cosine') return 'cosine'\n if (metric === 'euclidean') return 'l2'\n if (metric === 'dot') return 'ip'\n return 'cosine'\n}\n\nexport const translateChromaWhere = (\n filter?: VectorFilter\n): Record<string, unknown> | undefined => {\n if (!filter) return undefined\n if (isRawFilter(filter)) {\n if (filter.$dialect === 'chroma') {\n return filter.$raw as Record<string, unknown>\n }\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['chroma', 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(['chroma', 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' || op === 'contains') {\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['chroma', op])\n }\n throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(['chroma', op])\n }\n if (isFilterGroup(filter)) {\n const { and, or, not } = filter\n if (and) {\n const children = and\n .map((f) => translateChromaWhere(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) => translateChromaWhere(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(['chroma', 'not'])\n }\n return undefined\n }\n return undefined\n}\n\nexport class ChromaVectorStore extends BaseVectorStore {\n readonly capabilities: VectorStoreCapabilities = {\n transactions: false,\n namedVectors: false,\n rename: true,\n rawSql: false,\n builtInEncoding: false,\n // Strongly consistent on resolve; the option is a no-op.\n consistency: { configurable: false, default: 'strong', modes: ['strong'] },\n }\n #client: any | null = null\n #collectionCache: Map<string, any> = new Map()\n get #opts() {\n return this.options as ChromaVectorStoreOptions\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.#client) return\n const ChromaClient = await getChromaClient()\n const c = this.#opts.connection || {}\n let host: string | undefined\n let port: number | undefined\n let ssl: boolean = false\n\n if (c.url) {\n const url = new URL(c.url)\n host = url.hostname\n port = url.port ? Number.parseInt(url.port, 10) : url.protocol === 'https:' ? 443 : 80\n ssl = url.protocol === 'https:'\n } else {\n host = c.host\n port = c.port\n ssl = c.ssl || false\n }\n\n const path =\n host && port !== undefined\n ? `${ssl ? 'https://' : 'http://'}${host}${port === 80 || port === 443 ? '' : ':' + port}`\n : undefined\n\n try {\n this.#client = new ChromaClient({ path })\n } catch (err) {\n throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)])\n }\n }\n\n async close(): Promise<void> {\n this.#client = null\n this.#collectionCache.clear()\n }\n\n async getCollection(name: string): Promise<any> {\n let collection = this.#collectionCache.get(name)\n if (collection) return collection\n if (!this.#client) await this.connect()\n const metric = this.#opts.metric ?? 'cosine'\n collection = await this.#client.getOrCreateCollection({\n name,\n metadata: { 'hnsw:space': getSpace(metric) },\n })\n this.#collectionCache.set(name, collection)\n return collection\n }\n\n async createCollection(spec: CollectionSpec, ifNotExists: boolean): Promise<void> {\n const name = spec.collection\n if (ifNotExists && (await this.hasCollection(name))) return\n if (await this.hasCollection(name)) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['create', 'exists'])\n }\n try {\n await this.connect()\n const metric = spec.vector.metric ?? 'cosine'\n await this.#client!.getOrCreateCollection({\n name,\n metadata: { 'hnsw:space': getSpace(metric) },\n })\n this.#collectionCache.set(name, null)\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 if (ifExists && !(await this.hasCollection(collection))) return\n try {\n await this.connect()\n await this.#client!.deleteCollection({ name: collection })\n this.#collectionCache.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 if (!this.#client) await this.connect()\n try {\n const collections = await this.#client!.listCollections()\n for (const c of collections) {\n if (typeof c === 'object' ? c.name === collection : c === collection) {\n return true\n }\n }\n return false\n } catch {\n return false\n }\n }\n\n async renameCollection(from: string, to: string): Promise<void> {\n try {\n const collection = await this.getCollection(from)\n await collection.modify({ name: to })\n const cached = this.#collectionCache.get(from)\n this.#collectionCache.delete(from)\n if (cached) {\n this.#collectionCache.set(to, cached)\n }\n } catch (err) {\n throw new E_VECTOR_STORE_COLLECTION_FAILED(['renameCollection', String(err)])\n }\n }\n\n async executeUpsert(plan: UpsertPlan): Promise<void> {\n if (plan.records.length === 0) return\n validateRecords(plan.records)\n const collection = await this.getCollection(plan.collection)\n const expected = this.#opts.dimensions\n const ids: string[] = []\n const embeddings: number[][] = []\n const documents: string[] = []\n const metadatas: VectorMetadata[] = []\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 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 ids.push(r.id)\n embeddings.push(vector)\n documents.push(r.document ?? '')\n const md = { ...(r.metadata ?? {}), internalId: r.id }\n metadatas.push(md)\n }\n\n try {\n await collection.upsert({ ids, embeddings, documents, metadatas })\n } catch (err) {\n throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)])\n }\n }\n\n async executeSearch(plan: SearchPlan): Promise<VectorMatch[]> {\n const collection = await this.getCollection(plan.collection)\n const metric = this.#opts.metric ?? 'cosine'\n let queryVector: number[] | undefined\n\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 collection.get({ ids: [plan.near.id], include: ['embeddings'] })\n if (!res.ids || res.ids.length === 0) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id not found: ' + plan.near.id])\n }\n const embeddings = res.embeddings || []\n if (!embeddings || embeddings.length === 0 || !embeddings[0]) {\n throw new E_VECTOR_STORE_SEARCH_FAILED(['Referenced id has no vector: ' + plan.near.id])\n }\n queryVector = embeddings[0]\n }\n }\n\n const where = translateChromaWhere(plan.filter)\n\n let results: any\n if (queryVector) {\n try {\n results = await collection.query({\n queryEmbeddings: [queryVector],\n nResults: plan.topK,\n where,\n include: ['documents', 'metadatas', 'distances', 'embeddings'],\n })\n } catch (err) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n } else {\n try {\n results = await collection.get({\n where,\n limit: plan.topK,\n include: ['documents', 'metadatas', 'embeddings'],\n })\n } catch (err) {\n throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)])\n }\n }\n\n const proj = plan.projection\n const out: VectorMatch[] = []\n // `query()` returns per-query nested arrays (`ids: [[...]]`); `get()` (the filter-scan path)\n // returns flat arrays (`ids: [...]`). Unwrap one level only for the query path.\n const unwrap = (col: any): any[] => {\n if (!col) return []\n return queryVector ? (col[0] ?? []) : col\n }\n const ids = unwrap(results.ids)\n const documents = unwrap(results.documents)\n const metadatas = unwrap(results.metadatas)\n const embeddings = unwrap(results.embeddings)\n const distances = unwrap(results.distances)\n\n const start = plan.offset || 0\n const limit = plan.topK\n\n for (let i = start; i < Math.min(ids.length, start + limit); i++) {\n const match: VectorMatch = {}\n if (proj.id) {\n match.id = ids[i]\n }\n if (proj.vector && embeddings[i]) {\n match.vector = embeddings[i]\n }\n if (proj.document) {\n match.document = documents[i] ?? undefined\n }\n if (proj.metadata && metadatas[i]) {\n const rawMeta = metadatas[i] as VectorMetadata\n const { internalId, ...rest } = rawMeta\n match.metadata = rest\n }\n if (queryVector && distances && distances[i] !== undefined) {\n match.score = normalizeScore(distances[i], metric, 'distance')\n }\n out.push(match)\n }\n\n return out\n }\n\n async executeDelete(plan: DeletePlan): Promise<void> {\n const collection = await this.getCollection(plan.collection)\n try {\n if (plan.ids) {\n await collection.delete({ ids: plan.ids })\n } else if (plan.filter) {\n const where = translateChromaWhere(plan.filter)\n if (where) {\n await collection.delete({ where })\n } else {\n await collection.delete({ where: {} })\n }\n } else {\n await collection.delete({ where: {} })\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,302 @@
1
+ import { isFilterCondition, isFilterGroup, isRawFilter } from "./filters.mjs";
2
+ import { normalizeScore } from "./helpers.mjs";
3
+ import { E_VECTOR_STORE_COLLECTION_FAILED, E_VECTOR_STORE_CONNECTION_FAILED, 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_UPSERT_FAILED } from "./exceptions.mjs";
4
+ import { BaseVectorStore } from "./contract.mjs";
5
+ import { validateRecords } from "./validation.mjs";
6
+ //#region src/batteries/vector/chroma/index.ts
7
+ /**
8
+ * @module @nhtio/adk/batteries/vector/chroma
9
+ */
10
+ var getChromaClient = async () => {
11
+ try {
12
+ return (await import("chromadb")).ChromaClient;
13
+ } catch {
14
+ throw new E_VECTOR_STORE_DRIVER_UNAVAILABLE(["chromadb"]);
15
+ }
16
+ };
17
+ var getSpace = (metric) => {
18
+ if (metric === "cosine") return "cosine";
19
+ if (metric === "euclidean") return "l2";
20
+ if (metric === "dot") return "ip";
21
+ return "cosine";
22
+ };
23
+ var translateChromaWhere = (filter) => {
24
+ if (!filter) return void 0;
25
+ if (isRawFilter(filter)) {
26
+ if (filter.$dialect === "chroma") return filter.$raw;
27
+ throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", String(filter.$dialect)]);
28
+ }
29
+ if (isFilterCondition(filter)) {
30
+ const { field, op, value } = filter;
31
+ if (value === void 0) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", op]);
32
+ if (op === "eq") return { [field]: { $eq: value } };
33
+ if (op === "ne") return { [field]: { $ne: value } };
34
+ if (op === "gt") return { [field]: { $gt: value } };
35
+ if (op === "gte") return { [field]: { $gte: value } };
36
+ if (op === "lt") return { [field]: { $lt: value } };
37
+ if (op === "lte") return { [field]: { $lte: value } };
38
+ if (op === "in") return { [field]: { $in: value } };
39
+ if (op === "nin") return { [field]: { $nin: value } };
40
+ if (op === "exists" || op === "contains") throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", op]);
41
+ throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", op]);
42
+ }
43
+ if (isFilterGroup(filter)) {
44
+ const { and, or, not } = filter;
45
+ if (and) {
46
+ const children = and.map((f) => translateChromaWhere(f)).filter((c) => c !== void 0);
47
+ if (children.length === 0) return void 0;
48
+ if (children.length === 1) return children[0];
49
+ return { $and: children };
50
+ }
51
+ if (or) {
52
+ const children = or.map((f) => translateChromaWhere(f)).filter((c) => c !== void 0);
53
+ if (children.length === 0) return void 0;
54
+ if (children.length === 1) return children[0];
55
+ return { $or: children };
56
+ }
57
+ if (not) throw new E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR(["chroma", "not"]);
58
+ return;
59
+ }
60
+ };
61
+ var ChromaVectorStore = class extends BaseVectorStore {
62
+ capabilities = {
63
+ transactions: false,
64
+ namedVectors: false,
65
+ rename: true,
66
+ rawSql: false,
67
+ builtInEncoding: false,
68
+ consistency: {
69
+ configurable: false,
70
+ default: "strong",
71
+ modes: ["strong"]
72
+ }
73
+ };
74
+ #client = null;
75
+ #collectionCache = /* @__PURE__ */ new Map();
76
+ get #opts() {
77
+ return this.options;
78
+ }
79
+ static isAvailable() {
80
+ return typeof process !== "undefined";
81
+ }
82
+ isAvailable() {
83
+ return typeof process !== "undefined";
84
+ }
85
+ async connect() {
86
+ if (this.#client) return;
87
+ const ChromaClient = await getChromaClient();
88
+ const c = this.#opts.connection || {};
89
+ let host;
90
+ let port;
91
+ let ssl = false;
92
+ if (c.url) {
93
+ const url = new URL(c.url);
94
+ host = url.hostname;
95
+ port = url.port ? Number.parseInt(url.port, 10) : url.protocol === "https:" ? 443 : 80;
96
+ ssl = url.protocol === "https:";
97
+ } else {
98
+ host = c.host;
99
+ port = c.port;
100
+ ssl = c.ssl || false;
101
+ }
102
+ const path = host && port !== void 0 ? `${ssl ? "https://" : "http://"}${host}${port === 80 || port === 443 ? "" : ":" + port}` : void 0;
103
+ try {
104
+ this.#client = new ChromaClient({ path });
105
+ } catch (err) {
106
+ throw new E_VECTOR_STORE_CONNECTION_FAILED([String(err)]);
107
+ }
108
+ }
109
+ async close() {
110
+ this.#client = null;
111
+ this.#collectionCache.clear();
112
+ }
113
+ async getCollection(name) {
114
+ let collection = this.#collectionCache.get(name);
115
+ if (collection) return collection;
116
+ if (!this.#client) await this.connect();
117
+ const metric = this.#opts.metric ?? "cosine";
118
+ collection = await this.#client.getOrCreateCollection({
119
+ name,
120
+ metadata: { "hnsw:space": getSpace(metric) }
121
+ });
122
+ this.#collectionCache.set(name, collection);
123
+ return collection;
124
+ }
125
+ async createCollection(spec, ifNotExists) {
126
+ const name = spec.collection;
127
+ if (ifNotExists && await this.hasCollection(name)) return;
128
+ if (await this.hasCollection(name)) throw new E_VECTOR_STORE_COLLECTION_FAILED(["create", "exists"]);
129
+ try {
130
+ await this.connect();
131
+ const metric = spec.vector.metric ?? "cosine";
132
+ await this.#client.getOrCreateCollection({
133
+ name,
134
+ metadata: { "hnsw:space": getSpace(metric) }
135
+ });
136
+ this.#collectionCache.set(name, null);
137
+ } catch (err) {
138
+ throw new E_VECTOR_STORE_COLLECTION_FAILED(["createCollection", String(err)]);
139
+ }
140
+ }
141
+ async dropCollection(collection, ifExists) {
142
+ if (ifExists && !await this.hasCollection(collection)) return;
143
+ try {
144
+ await this.connect();
145
+ await this.#client.deleteCollection({ name: collection });
146
+ this.#collectionCache.delete(collection);
147
+ } catch (err) {
148
+ throw new E_VECTOR_STORE_COLLECTION_FAILED(["dropCollection", String(err)]);
149
+ }
150
+ }
151
+ async hasCollection(collection) {
152
+ if (!this.#client) await this.connect();
153
+ try {
154
+ const collections = await this.#client.listCollections();
155
+ for (const c of collections) if (typeof c === "object" ? c.name === collection : c === collection) return true;
156
+ return false;
157
+ } catch {
158
+ return false;
159
+ }
160
+ }
161
+ async renameCollection(from, to) {
162
+ try {
163
+ await (await this.getCollection(from)).modify({ name: to });
164
+ const cached = this.#collectionCache.get(from);
165
+ this.#collectionCache.delete(from);
166
+ if (cached) this.#collectionCache.set(to, cached);
167
+ } catch (err) {
168
+ throw new E_VECTOR_STORE_COLLECTION_FAILED(["renameCollection", String(err)]);
169
+ }
170
+ }
171
+ async executeUpsert(plan) {
172
+ if (plan.records.length === 0) return;
173
+ validateRecords(plan.records);
174
+ const collection = await this.getCollection(plan.collection);
175
+ const expected = this.#opts.dimensions;
176
+ const ids = [];
177
+ const embeddings = [];
178
+ const documents = [];
179
+ const metadatas = [];
180
+ for (const r of plan.records) {
181
+ let vector = r.vector;
182
+ if (!vector && r.document) {
183
+ const [v] = await this.encode([r.document], "document");
184
+ vector = v;
185
+ }
186
+ if (!vector) throw new E_VECTOR_STORE_UPSERT_FAILED(["Record missing vector and document"]);
187
+ if (expected !== void 0 && vector.length !== expected) throw new E_VECTOR_STORE_DIMENSION_MISMATCH([expected, vector.length]);
188
+ ids.push(r.id);
189
+ embeddings.push(vector);
190
+ documents.push(r.document ?? "");
191
+ const md = {
192
+ ...r.metadata ?? {},
193
+ internalId: r.id
194
+ };
195
+ metadatas.push(md);
196
+ }
197
+ try {
198
+ await collection.upsert({
199
+ ids,
200
+ embeddings,
201
+ documents,
202
+ metadatas
203
+ });
204
+ } catch (err) {
205
+ throw new E_VECTOR_STORE_UPSERT_FAILED([String(err)]);
206
+ }
207
+ }
208
+ async executeSearch(plan) {
209
+ const collection = await this.getCollection(plan.collection);
210
+ const metric = this.#opts.metric ?? "cosine";
211
+ let queryVector;
212
+ if (plan.near) {
213
+ if ("vector" in plan.near) queryVector = plan.near.vector;
214
+ else if ("serverText" in plan.near) {
215
+ const [v] = await this.encode([plan.near.serverText], "query");
216
+ queryVector = v;
217
+ } else if ("id" in plan.near) {
218
+ const res = await collection.get({
219
+ ids: [plan.near.id],
220
+ include: ["embeddings"]
221
+ });
222
+ if (!res.ids || res.ids.length === 0) throw new E_VECTOR_STORE_SEARCH_FAILED(["Referenced id not found: " + plan.near.id]);
223
+ const embeddings = res.embeddings || [];
224
+ if (!embeddings || embeddings.length === 0 || !embeddings[0]) throw new E_VECTOR_STORE_SEARCH_FAILED(["Referenced id has no vector: " + plan.near.id]);
225
+ queryVector = embeddings[0];
226
+ }
227
+ }
228
+ const where = translateChromaWhere(plan.filter);
229
+ let results;
230
+ if (queryVector) try {
231
+ results = await collection.query({
232
+ queryEmbeddings: [queryVector],
233
+ nResults: plan.topK,
234
+ where,
235
+ include: [
236
+ "documents",
237
+ "metadatas",
238
+ "distances",
239
+ "embeddings"
240
+ ]
241
+ });
242
+ } catch (err) {
243
+ throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)]);
244
+ }
245
+ else try {
246
+ results = await collection.get({
247
+ where,
248
+ limit: plan.topK,
249
+ include: [
250
+ "documents",
251
+ "metadatas",
252
+ "embeddings"
253
+ ]
254
+ });
255
+ } catch (err) {
256
+ throw new E_VECTOR_STORE_SEARCH_FAILED([String(err)]);
257
+ }
258
+ const proj = plan.projection;
259
+ const out = [];
260
+ const unwrap = (col) => {
261
+ if (!col) return [];
262
+ return queryVector ? col[0] ?? [] : col;
263
+ };
264
+ const ids = unwrap(results.ids);
265
+ const documents = unwrap(results.documents);
266
+ const metadatas = unwrap(results.metadatas);
267
+ const embeddings = unwrap(results.embeddings);
268
+ const distances = unwrap(results.distances);
269
+ const start = plan.offset || 0;
270
+ const limit = plan.topK;
271
+ for (let i = start; i < Math.min(ids.length, start + limit); i++) {
272
+ const match = {};
273
+ if (proj.id) match.id = ids[i];
274
+ if (proj.vector && embeddings[i]) match.vector = embeddings[i];
275
+ if (proj.document) match.document = documents[i] ?? void 0;
276
+ if (proj.metadata && metadatas[i]) {
277
+ const { internalId, ...rest } = metadatas[i];
278
+ match.metadata = rest;
279
+ }
280
+ if (queryVector && distances && distances[i] !== void 0) match.score = normalizeScore(distances[i], metric, "distance");
281
+ out.push(match);
282
+ }
283
+ return out;
284
+ }
285
+ async executeDelete(plan) {
286
+ const collection = await this.getCollection(plan.collection);
287
+ try {
288
+ if (plan.ids) await collection.delete({ ids: plan.ids });
289
+ else if (plan.filter) {
290
+ const where = translateChromaWhere(plan.filter);
291
+ if (where) await collection.delete({ where });
292
+ else await collection.delete({ where: {} });
293
+ } else await collection.delete({ where: {} });
294
+ } catch (err) {
295
+ throw new E_VECTOR_STORE_DELETE_FAILED([String(err)]);
296
+ }
297
+ }
298
+ };
299
+ //#endregion
300
+ export { ChromaVectorStore, translateChromaWhere };
301
+
302
+ //# sourceMappingURL=chroma.mjs.map